SlideShare 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 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 contenente
tutte le classi
DexClassLoader
 Classloader di tipo “dex-based” utilizzato in Android
per poter eseguire codice che non è stato installato
come parte dell’applicazione
 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 all’interno
del metodo loadLibrary() del LibraryManager
Caricamento e utilizzo di una
libreria Java all’interno
dell’applicazione 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
 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 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

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 SitoDavide 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
 
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 dummiesfirenze-gtug
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
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
 

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

Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
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
 
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)
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD 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é
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
2-Intro-Java.pdf
2-Intro-Java.pdf2-Intro-Java.pdf
2-Intro-Java.pdf
 
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
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
 
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
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 

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 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
  • 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 dell’applicazione  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 all’interno del metodo loadLibrary() del LibraryManager Caricamento e utilizzo di una libreria Java all’interno dell’applicazione 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  l’aggiunta 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