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

Post on 13-Jul-2015

88 views 0 download

Transcript of 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

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