Presentazione architettura ed ambiente di sviluppo per dispositivi mobile dotati di SO Android. Verrà mostrata la struttura di un'applicazione creata con l'IDE Eclipse.
2. Cos’è Android?
Android è un insieme di software per dispositivi
mobile che comprende sistema operativo,
middleware ed applicazioni.
Per lo sviluppatore…
Dalvik virtual machine: JVM ottimizzata per
dispositivi mobile
Application framework: semplifica riutilizzo e
sostituzione di componenti
3.
4. Dalvik Virtual Machine
JVM Open Source sviluppata ex-novo per Android
• Register-based
– Ottimizzazione cicli CPU
• Class Library diversa rispetto a Java SE o Java ME
Write once, run everywhere?
• Sicurezza
– Consentita la condivisione del codice tra
processi ma non la modifica del codice
condiviso
5. Dalvik Virtual Machine
• Eseguibili in formato proprietario
– File class riorganizzati in uno o più eseguibili Dalvik
(.dex)
– Riutilizzo del codice riduce le dimensioni del 50%
6. • Fornisce agli sviluppatori l’accesso alle API.
• L’architettura è progettata per favorire il riutilizzo
delle componenti: un applicazione può rendere
disponibili le proprie funzionalità ed altre
applicazioni possono farne uso.
• Ogni componente può essere sostituita dall’utente.
Application Framework
7. Un applicazione Android è basata su alcune
componenti fondamentali fornite dal Framework
• Un insieme di View quali liste, campi testuali e bottoni
utilizzabili per comporre l’interfaccia di un’applicazione;
• Content Providers che consentono all’applicazione di
recuperare dati da altre applicazioni;
• Un manager delle Risorse che permette di accedere a risorse
non codificabili quali immagini e file di layout;
• Un manager delle Notifiche contenente metodi per
visualizzare notifiche personalizzate nella barra di stato del
dispositivo;
• Un Activity Manager che gestisce il ciclo di vita
dell’applicazione.
Application Framework
8. L’applicazione Android
• Scritta in Java, compilata in formato proprietario.
• Codice compilato, dati ed altre risorse (immagini etc.)
vengono accorpati in un Android Package (.apk):
– Ogni file .apk è da considerarsi un applicazione a sé stante
• Ogni applicazione viene eseguita separatamente
dalle altre:
– Ad ogni applicazione è associato un processo univoco in
Linux;
– Ogni processo è eseguito in un’istanza separata della
Virtual Machine;
– Ad ogni applicazione è associato un User ID unico: i dati
sono visibili soltanto all’utente e all’applicazione stessa.
9. Un applicazione Android non include le funzioni
importate da altre applicazioni. Il sistema deve
quindi essere in grado di avviare un
applicazione in qualunque momento ed
istanziare gli oggetti Java necessari.
A questo scopo un applicazione non dispone di
un singolo punto d’accesso (niente main() ) ma
è composta da componenti che possono
essere istanziati ed avviati qualora se ne
presenti la necessità.
Elementi di un applicazione
10. • Activity:
– Fornisce un interfaccia visuale all’utente
– Contiene oggetti View
– In esecuzione finché mantiene il focus
– Es. interfaccia lettore multimediale
• Service:
– Non fornisce interfaccia visuale
– In esecuzione in background per tempo indefinito
– Accetta richieste da altre applicazioni
– Es. player MP3
Elementi di un applicazione
11. Metodi della classe Activity
gestiscono il passaggio tra stati:
Tempo totale:
Operazioni tra la creazione
(onCreate() ) e la distruzione
(onDestroy() ) di un applicazione.
Inizializzazione di variabili e
connessione a servizi.
Tempo in visibilità:
Tra onStart() e onStop().
L’applicazione è visibile ma non
interagisce con l’utente.
Tempo in evidenza:
Tra onResume() e onPause().
L’applicazione è visibile ed
interagisce con l’utente.
Lifecycle di un componente: Activity
12. Due modi di utilizzare un servizio:
• Esecuzione in background fino
all’invocazione di un metodo di
terminazione da parte di un
applicazione o dal processo
stesso.
– Creazione con
Context.startService();
– Terminazione con
Context.stopService() o
Service.stopSelf().
Lifecycle di un componente: Service
13. • Esecuzione in attesa di
connessioni da altre
applicazioni
– Connessione al servizio con
Context.bindService();
opzionale il lancio di un
servizio non ancora avviato.
– Disconnessione con
Context.unbindService().
Lifecycle di un componente: Service
14. Le due modalità non sono del tutto separate:
• Possibile la connessione ad un servizio già in
esecuzione in background;
• Necessario un singolo stopService()
indipendentemente dal numero di chiamate a
startService().
Lifecycle di un componente: Service
15. Ogni applicazione è dotata di un file
AndroidManifest.xml salvato nella root
dell’applicazione. Esso fornisce informazioni
fondamentali sull’applicazione tra cui:
• Il Package Java dell’applicazione;
• Descrizione dei componenti, classi che li
implementano, condizioni di esecuzione, processi;
• Permessi di esecuzione per sezioni protette delle API;
• La versione minima necessaria delle API;
• Librerie da importare per assicurare il funzionamento
dell’applicazione.
Android Manifest
20. Gestione degli eventi
View contengono metodi per impostare Listener.
Vengono specificate classi che estendono il
Listener appropriato al tipo di evento da
gestire.
21. Android Market
Requisiti per lo sviluppatore:
• Account Google;
• Chiave privata (anche autocertificata) con cui firmare
le applicazioni. Valida almeno fino al 22/10/2033;
• 25$, che le applicazioni siano gratuite o a pagamento
22. Android Market
Requisiti per l’applicazione:
Si sconsiglia di caricare applicazioni…
• Con contenuto illegale;
• Che violano la privacy;
• Che interferiscono con app/servizi di terzi;
• Che promuovono odio e/o violenza;
• Che violano la proprietà intellettuale;
• Con contenuto VM18.
Applicazioni che violano le linee guida possono
essere rimosse dal market.