Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

18
A.A. 2012/2013 - Sessione III ALMA MATER STUDIORUM - UNIVERSITÀ DI BOLOGNA SCUOLA DI INGEGNERIA E ARCHITETTURA CORSO DI LAUREA IN INGEGNERIA INFORMATICA Dipartimento di Informatica - Scienza e Ingegneria DISI Class Loading in Android: applicazione a tuProlog CANDIDATO: Alessio Mercurio RELATORE: Chiar.mo Prof. Enrico Denti CORRELATORE: Ing. Alessandro Montanari

Transcript of Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Page 1: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

A.A. 2012/2013 - Sessione III

ALMA MATER STUDIORUM - UNIVERSITÀ DI BOLOGNA

SCUOLA DI INGEGNERIA E ARCHITETTURA

CORSO DI LAUREA IN INGEGNERIA INFORMATICA

Dipartimento di Informatica - Scienza e Ingegneria DISI

Class Loading in Android:

applicazione a tuProlog

CANDIDATO:Alessio Mercurio

RELATORE:Chiar.mo Prof. Enrico Denti

CORRELATORE:Ing. Alessandro Montanari

Page 2: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Contesto: tuProlog (1/3)

Interprete Prolog scritto in Java

interoperabile con Java e .NET

disponibile per diverse piattaforme

JavaSE

Android

Microsoft .NET

Eclipse plugin

Page 3: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Contesto: tuProlog (2/3)

Il supporto al Class Loading di tuProlog prevede:

Caricamento dinamico di librerie Java LibraryManager

Caricamento dinamico di oggetti Java JavaLibrary

Page 4: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Contesto: tuProlog (3/3)

tuProlog per Android:

Stessi core, librerie e funzionalità

MA

Mancanza del supporto al Class Loading per ilcaricamento dinamico di librerie e teorie

Page 5: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Obiettivi

Analizzare le differenze tra le piattaforme Java e Androidriguardo al meccanismo di Class Loading

Rivedere la struttura e l'ingegnerizzazione di tuProlog in Javae Android per garantire anche in Android

il caricamento e l’utilizzo di librerie Java, tramite LibraryManager

il caricamento dinamico di oggetti Java, tramite JavaLibrary

Verificare a livello sperimentale su un opportuno prototipo

la fattibilità dell’approccio identificato

l'invarianza delle scelte sul funzionamento nelle altre piattaforme

Page 6: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Da Java ad Android

Nuova macchina virtuale: Dalvik Virtual Machine

Nuovo bytecode: Dalvik Executable ( .dex )

Page 7: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Il formato .dex - Dalvik Executable

Non più jar contenenti un file .class per classe

ma jar con un solo file classes.dex contenentetutte le classi

Page 8: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

DexClassLoader

Classloader di tipo “dex-based” utilizzato in Androidper poter eseguire codice che non è stato installatocome parte dell’applicazione

Appartiene al package dalvik.system

Carica classi da file .jar contenenti un singolo fileclasses.dex

Page 9: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Problemi e sfide

Problema 1

l'attuale LibraryManager non può operare in Android

Sfida: estendere il LibraryManager per garantire ilcaricamento delle librerie nel nuovo formato, senzaimpatto sulle altre piattaforme

Problema 2

l'attuale JavaLibrary non può operare in Android

Sfida: estendere la JavaLibrary per consentire ilcaricamento di oggetti Java anche in Android, senzaimpatto sulle altre piattaforme

Page 10: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Refactoring del LibraryManager

COSA: estensione del LibraryManager per consentire ilcaricamento di librerie anche nel caso Android

COME: aggiunta del supporto al DexClassLoader all’internodel metodo loadLibrary() del LibraryManager

Caricamento e utilizzo di unalibreria Java all’internodell’applicazione tramite ilpredicato load_library/2 .

Page 11: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Aggiornamento della GUI Android

Obiettivo: permettere agli utenti Android di gestiregraficamente le proprie librerie

Soluzione: progetto e realizzazione di una nuovaLibraryManagerActivity che permetta

l’aggiunta di librerie al motore Prolog a runtime

la rimozione di librerie dal motore Prolog a runtime

Page 12: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

LibraryManagerActivity (1/2)

1. Nome completo della libreria dacaricare

2. Selezione del file jar sorgente

3. Aggiunta della nuova libreria

4. Rimozione di una libreria già caricata

5. Lista di librerie caricate

6. Messaggi di stato

1 2

3 4

5

6

Page 13: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

LibraryManagerActivity (2/2)

Selezione del file .jar dacui caricare la libreria

Caricamento della libreria

Page 14: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Refactoring di JavaLibrary (1/2)

Obiettivo: estenderne le funzionalità mantenendoincapsulate le dipendenze dalla piattaforma

Soluzione: nuova gerarchia di classloader

ex ClassLoader(reso astratto)

Concretizzazioni platform-dependent

Page 15: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Soluzioni: modifica della JavaLibrary (2/2)

Utilizzo dei predicati set_classpathe get_classpath

Utilizzo del predicatojava_object

Page 16: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Collaudo

Terminali virtuali utilizzati:

Dispositivo Virtuale - Android 2.3.3 ( Gingerbread )

Dispositivo Virtuale - Android 4.3 ( Jelly Bean )

Dispositivi reali utilizzati:

Samsung Galaxy W - Android 2.3.6 ( Gingerbread )

Samsung Galaxy S3 Mini - Android 4.1.2 ( Jelly Bean )

iOcean X7 - Android 4.2.1 ( Jelly Bean )

Page 17: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

Conclusioni

Obbiettivi completamente raggiunti

Eliminate le dipendenze dalla versione Java

Evitati stravolgimenti alla struttura del software

Prestazioni invariate sulla piattaforme non coinvolte

Novità della versione Android

GUI Android arricchita

Funzionamento Android più coerente e uniforme con lealtre piattaforme

Page 18: Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio

GRAZIE PER L’ ATTENZIONE