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

100 %
0 %
Information about Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio...
Technology

Published on March 14, 2014

Author: alessiomercurio526

Source: slideshare.net

Description

tuProlog è un interprete Prolog scritto in Java, attualmente giunto alla versione 2.7.2. La versione Android offre le stesse funzionalità della versione Java, ma con una eccezione: il supporto al class loading, che tuProlog sfrutta per il caricamento dinamico di librerie e teorie, non opera allo stesso modo e con la stessa flessibilità di quello Java a causa delle differenze fra le due piattaforme, in particolare per quanto riguarda il caricamento di jar e class "on the fly". Scopo di questa tesi è quindi studiare le differenze di funzionamento, valutare le opzioni possibili e verificando a livello sperimentale, su un opportuno prototipo, la fattibilità e la validità dell'approccio identificato.

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

Add a comment

Related presentations

Related pages

Tesi: " Class loading in Android: applicazione a tuProlog ...

Tesi: " Class loading in Android: applicazione a tuProlog " ... Alessio Mercurio ...
Read more

Alessio Mercurio - HubSlide

Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio tuProlog è un interprete Prolog scritto in Java, attualment...
Read more

Alessio Mercurio | LinkedIn

View Alessio Mercurio’s professional profile on LinkedIn. ... Tesi: "Class loading in Android, applicazione a tuProlog".
Read more