tesi: " class loading in android: applicazione a tuprolog " - alessio mercurio
TRANSCRIPT
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
Contesto: tuProlog (1/3)
Interprete Prolog scritto in Java
interoperabile con Java e .NET
disponibile per diverse piattaforme
JavaSE
Android
Microsoft .NET
Eclipse plugin
Contesto: tuProlog (2/3)
Il supporto al Class Loading di tuProlog prevede:
Caricamento dinamico di librerie Java LibraryManager
Caricamento dinamico di oggetti Java JavaLibrary
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
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
Da Java ad Android
Nuova macchina virtuale: Dalvik Virtual Machine
Nuovo bytecode: Dalvik Executable ( .dex )
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
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
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
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 .
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
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
LibraryManagerActivity (2/2)
Selezione del file .jar dacui caricare la libreria
Caricamento della libreria
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
Soluzioni: modifica della JavaLibrary (2/2)
Utilizzo dei predicati set_classpathe get_classpath
Utilizzo del predicatojava_object
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 )
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
GRAZIE PER L’ ATTENZIONE