際際滷

際際滷Share a Scribd company logo
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 il
caricamento dinamico di librerie e teorie
Obiettivi
 Analizzare le differenze tra le piattaforme Java e Android
riguardo al meccanismo di Class Loading
 Rivedere la struttura e l'ingegnerizzazione di tuProlog in Java
e Android per garantire anche in Android
 il caricamento e lutilizzo di librerie Java, tramite LibraryManager
 il caricamento dinamico di oggetti Java, tramite JavaLibrary
 Verificare a livello sperimentale su un opportuno prototipo
 la fattibilit dellapproccio 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 contenente
tutte le classi
DexClassLoader
 Classloader di tipo dex-based utilizzato in Android
per poter eseguire codice che non 竪 stato installato
come parte dellapplicazione
 Appartiene al package dalvik.system
 Carica classi da file .jar contenenti un singolo file
classes.dex
Problemi e sfide
Problema 1
 l'attuale LibraryManager non pu嘆 operare in Android
 Sfida: estendere il LibraryManager per garantire il
caricamento delle librerie nel nuovo formato, senza
impatto sulle altre piattaforme
Problema 2
 l'attuale JavaLibrary non pu嘆 operare in Android
 Sfida: estendere la JavaLibrary per consentire il
caricamento di oggetti Java anche in Android, senza
impatto sulle altre piattaforme
Refactoring del LibraryManager
 COSA: estensione del LibraryManager per consentire il
caricamento di librerie anche nel caso Android
 COME: aggiunta del supporto al DexClassLoader allinterno
del metodo loadLibrary() del LibraryManager
Caricamento e utilizzo di una
libreria Java allinterno
dellapplicazione tramite il
predicato load_library/2 .
Aggiornamento della GUI Android
 Obiettivo: permettere agli utenti Android di gestire
graficamente le proprie librerie
 Soluzione: progetto e realizzazione di una nuova
LibraryManagerActivity che permetta
 laggiunta di librerie al motore Prolog a runtime
 la rimozione di librerie dal motore Prolog a runtime
LibraryManagerActivity (1/2)
1. Nome completo della libreria da
caricare
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 da
cui caricare la libreria
Caricamento della libreria
Refactoring di JavaLibrary (1/2)
 Obiettivo: estenderne le funzionalit mantenendo
incapsulate 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_classpath
e get_classpath
Utilizzo del predicato
java_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 le
altre piattaforme
GRAZIE PER
L ATTENZIONE

More Related Content

Similar to Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio (20)

Java introduzione
Java introduzioneJava introduzione
Java introduzione
Sergio Ronchi
Struttin' on, novit in casa Struts
Struttin' on, novit in casa StrutsStruttin' on, novit in casa Struts
Struttin' on, novit in casa Struts
Marcello Teodori
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
Dominopoint - Italian Lotus User Group
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
Scala: come recuperare la programmazione funzionale e perch辿
Scala: come recuperare la programmazione funzionale e perch辿Scala: come recuperare la programmazione funzionale e perch辿
Scala: come recuperare la programmazione funzionale e perch辿
Edmondo Porcu
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
bobpuley
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
Valerio Radice
2-Intro-Java.pdf
2-Intro-Java.pdf2-Intro-Java.pdf
2-Intro-Java.pdf
AntonioGeniola
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
fulviodimarco
S354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.xS354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.x
LEN Learning Education Network
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
Marco Gasparetto
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
Sergio Ronchi
Oracle 1
Oracle 1Oracle 1
Oracle 1
Sergio Ronchi
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
firenze-gtug
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
Dominopoint - Italian Lotus User Group
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
Marcello Teodori
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
Marcello Teodori
Java introduzione
Java introduzioneJava introduzione
Java introduzione
Sergio Ronchi
Struttin' on, novit in casa Struts
Struttin' on, novit in casa StrutsStruttin' on, novit in casa Struts
Struttin' on, novit in casa Struts
Marcello Teodori
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
Scala: come recuperare la programmazione funzionale e perch辿
Scala: come recuperare la programmazione funzionale e perch辿Scala: come recuperare la programmazione funzionale e perch辿
Scala: come recuperare la programmazione funzionale e perch辿
Edmondo Porcu
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
bobpuley
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
fulviodimarco
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
Marco Gasparetto
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
firenze-gtug
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
Marcello Teodori

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

  • 1. 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
  • 2. Contesto: tuProlog (1/3) Interprete Prolog scritto in Java interoperabile con Java e .NET disponibile per diverse piattaforme JavaSE Android Microsoft .NET Eclipse plugin
  • 3. Contesto: tuProlog (2/3) Il supporto al Class Loading di tuProlog prevede: Caricamento dinamico di librerie Java LibraryManager Caricamento dinamico di oggetti Java JavaLibrary
  • 4. Contesto: tuProlog (3/3) tuProlog per Android: Stessi core, librerie e funzionalit MA Mancanza del supporto al Class Loading per il caricamento dinamico di librerie e teorie
  • 5. Obiettivi Analizzare le differenze tra le piattaforme Java e Android riguardo al meccanismo di Class Loading Rivedere la struttura e l'ingegnerizzazione di tuProlog in Java e Android per garantire anche in Android il caricamento e lutilizzo di librerie Java, tramite LibraryManager il caricamento dinamico di oggetti Java, tramite JavaLibrary Verificare a livello sperimentale su un opportuno prototipo la fattibilit dellapproccio identificato l'invarianza delle scelte sul funzionamento nelle altre piattaforme
  • 6. Da Java ad Android Nuova macchina virtuale: Dalvik Virtual Machine Nuovo bytecode: Dalvik Executable ( .dex )
  • 7. Il formato .dex - Dalvik Executable Non pi湛 jar contenenti un file .class per classe ma jar con un solo file classes.dex contenente tutte le classi
  • 8. DexClassLoader Classloader di tipo dex-based utilizzato in Android per poter eseguire codice che non 竪 stato installato come parte dellapplicazione Appartiene al package dalvik.system Carica classi da file .jar contenenti un singolo file classes.dex
  • 9. Problemi e sfide Problema 1 l'attuale LibraryManager non pu嘆 operare in Android Sfida: estendere il LibraryManager per garantire il caricamento delle librerie nel nuovo formato, senza impatto sulle altre piattaforme Problema 2 l'attuale JavaLibrary non pu嘆 operare in Android Sfida: estendere la JavaLibrary per consentire il caricamento di oggetti Java anche in Android, senza impatto sulle altre piattaforme
  • 10. Refactoring del LibraryManager COSA: estensione del LibraryManager per consentire il caricamento di librerie anche nel caso Android COME: aggiunta del supporto al DexClassLoader allinterno del metodo loadLibrary() del LibraryManager Caricamento e utilizzo di una libreria Java allinterno dellapplicazione tramite il predicato load_library/2 .
  • 11. Aggiornamento della GUI Android Obiettivo: permettere agli utenti Android di gestire graficamente le proprie librerie Soluzione: progetto e realizzazione di una nuova LibraryManagerActivity che permetta laggiunta di librerie al motore Prolog a runtime la rimozione di librerie dal motore Prolog a runtime
  • 12. LibraryManagerActivity (1/2) 1. Nome completo della libreria da caricare 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
  • 13. LibraryManagerActivity (2/2) Selezione del file .jar da cui caricare la libreria Caricamento della libreria
  • 14. Refactoring di JavaLibrary (1/2) Obiettivo: estenderne le funzionalit mantenendo incapsulate le dipendenze dalla piattaforma Soluzione: nuova gerarchia di classloader ex ClassLoader (reso astratto) Concretizzazioni platform-dependent
  • 15. Soluzioni: modifica della JavaLibrary (2/2) Utilizzo dei predicati set_classpath e get_classpath Utilizzo del predicato java_object
  • 16. 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 )
  • 17. 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 le altre piattaforme