3. Agenda (1)
Cenni storici
L’architettura
L’ambiente di sviluppo
Introduzione allo sviluppo di applicazioni
La struttura dei progetti
I componenti grafici
Debug delle applicazioni
3
5. Un SO per chi preferisce i dolci alla mela
I primi rumours sul sistema operativo mobile di Google
risalgono al 2005.
Nel 2007 viene rilasciata la prima versione per gli
sviluppatori con alcune delle feature che lo
differenziano dai concorrenti: Desktop
multipli,integrazione con i servizi di google più famosi
quali Gmail and Calendar
Nel 2008 esce il primo modello di telefonino dotato di
S.O. Android, il T-Mobile G1, senza alcun successo.
Nel 2009 esce la versione 1.5 di
Android, Cupcake, insieme con il primo telefonino
davvero competitivo sul mercato: l’HTC Magic, dotato
di tastiera touch, videocamera,bluetooth e una UI
comparabile con l’iPhone.
Sempre nel 2009 viene rilasciata la versione 1.6
Donut, che a dispetto del piccolo cambio di release
number offre significativi miglioramenti quali l’aumento
della risoluzione e delle performance generali
5
6. Un dolce robottino da passeggio
Il supporto ad HTML5 viene introdotto nella nuova
major release, la 2.0 Eclair. Altri miglioramenti
includono il supporto a Exchange, ai flash LED e a
Bluetooth 2.1
Nel 2010 arriva anche il primo sistema operativo usato
su un dispositivo tablet: la 2.2 Froyo. Viene introdotto
un compilatore JIT (Just in time) per aumentare le
performance, ed il supporto ad Adobe Flash e al
tethering
La versione 2.3 Gingerbread introduce una
risoluzione più alta (WXGA) e alcune feature utili al
supporto dei videogiochi
Con la release 3.0 Honeycomb si ha la prima
versione dedicata esplicitamente ai tablet. In seguito
sono state rilasciate anche le minor release 3.1 e 3.2
6
7. Gelato di fine estate
Nell’ultimo quarto del 2011 è stata rilasciata la
versione 4.0 Ice Cream Sandwich, seguita a breve
distanza dalla minor release 4.0.3
In questa release, le due branch per smartphone e
tablet vengono unificate, introducendo un framework
di sviluppo della UI unificato
Vengono introdotte nuove API quali:
Social API
Calendar API
Visual voicemail API
Android Beam
Vi è il supporto per la connessione diretta tramite WI-
FI ad altri dispositivi senza bisogno di passare per un
hot-spot
7
10. L’architettura multilivello di android
I livelli in cui è divisa l’architettura di android sono:
Applicazioni: Scritte in java ed eseguite nella virtual
machine Dalvik
Servizi e librerie del framework applicativo: scritte
principalmente in java
Librerie native, demoni e servizi scritti in C/C++
eseguiti direttamente nel core Linux
Il kernel linux che include i driver per l’accesso alle
periferiche hardware
Al centro di tutta l’architettura runtime c’è una versione
modificata di una java virtual machine, chiamata
Dalvik. Per ognuna delle applicazioni che gireranno nel
SO verrà istanziata una JVM apposita.
10
11. La vertenza con Oracle
Dalvik è un software Open Source di proprietà di
Google, implementare una virtual machine java senza
utilizzare software proprietario di SUN, creatrice del
linguaggio di programmazione.
A seguito dell’acquisizione di SUN, nel 2010 Oracle ha
intentato una causa a Google per la violazione di tre
brevetti
Questa vertenza, oltre a quelli legali, ha causato anche
problemi relativi all’effettiva “redditività” di Android.
Queste problematiche, sebbene non hanno per il
momento modificato le politiche commerciali e gli
sviluppi della piattaforma android, rischiano in futuro di
costringere Google a cambiare le policy
In ogni caso, bisogna riconoscere che la versione 4.0 è
stata la prima versione di Android in cui il codice
sorgente è stato rilasciato contemporaneamente ai
binari.
11
13. Installazione dell’ambiente di sviluppo
Installare il development kit di android sui propri pc è estremamente semplice. Al
termine della procedura si disporrà di:
Un’IDE basato su Eclipse
Un runtime enviroment da cui sarà possibile testare e debuggare il software
scritto
Una serie di tool da riga di comando per gestire le applicazioni.
Per installare l’SDK effettuare le seguenti operazioni:
Scompattare lo starter package installer_r18-linux.tgz
Installare Eclipse, preferibilmente in versione “Java” così da ridurre il numero
di plugin e aumentare le performance
Installare il plugin ADT per eclipse
Aggiungere i runtime delle piattaforme che verranno supportate dalla
applicazione da sviluppare
13
17. La virtual machine Dalvik
Lo sviluppo su Android avviene in linguaggio Java. L’ambiente di runtime si
chiama Dalvik, ed è una versione open-source della JVM, in cui invece del
bytecode viene eseguito un bytecode modificato chiamato DEX (Dalvik
Executable)
Le principali mancanze rispetto alla JVM standard sono nei package Swing e
AWT
Il package android.* contiene tutte le classi e le interfacce specifiche di
android.
Un’altra mancanza della JVM Dalvik è l’impossibilità di generare bytecode a
runtime. Questo di fatto impedisce l’applicazione dei moderni framework
aspect oriented.
17
18. I componenti di una applicazione Android: Le attività
Le applicazioni android hanno una architettura a componenti, ognuno
delegato ad un ben specifico compito. Di seguito verranno elencati le
principali:
Attività (Activity): L'attività è una componente applicativa che
fornisce una schermata con cui gli utenti possono interagire per compiere
delle azione, come comporre un numero di telefono, scattare una
foto, inviare una e-mail o visualizzare una mappa. Ad ogni attività è
associata una finestra in cui disegnare l'interfaccia utente. La finestra di
solito riempie lo schermo, ma può essere più piccola dello schermo e
“galleggiare” sopra le altre finestre come nei Dialog e nelle Progress Bar.
18
19. I componenti di una applicazione Android: I Servizi
Servizio (Service): Un servizio è un componente dell'applicazione che
consente di eseguire operazioni di lunga durata in background e non
fornisce un'interfaccia utente. Un altro componente dell’applicazione
può avviare un servizio che continuerà a funzionare in background anche
se l'utente passa a un'altra applicazione. Inoltre, un componente
può legarsi ad un servizio per interagire con esso ed effettuare una
comunicazione interprocesso (IPC). Ad esempio, un servizio può gestire le
transazioni di rete, riprodurre musica, effettuare file di I / O, o interagire
con un fornitore di contenuti, il tutto in background senza bloccare
l’interfaccia utente.
19
20. I componenti di una applicazione Android: I Receiver
I Receiver possono essere di diversi tipi. I principali sono:
ResultReceiver: Un ResultReceiver è un componente dell’applicazione
in grado di ricevere un risultato da un altro componente applicativo.
Viene usato per permettere alle Attività di ricevere i risultati
dell’elaborazione di un Servizio
BroadcastReceiver: Un Broadcast Receiver viene utilizzato quando si
intende intercettare un particolare evento di sistema. Ad esempio lo si
può utilizzare se si desidera compiere un’azione quando si scatta una foto
o quando parte la segnalazione di batteria scarica.
20
21. I componenti di una applicazione Android: I Content Provider
Content Provider: I Content Provider sono utilizzati per esporre dati e
informazioni. Costituiscono un canale di comunicazione tra le differenti
applicazioni installate nel sistema.
21
22. Distribuire una applicazione Android: i pacchetti APK
Le applicazioni Android sono distribute sotto forma di pacchetti APK, che
contengono gli eseguibili in formato DEX, le risorse dell’applicazione e i
descrittori.
Il descrittore principale è il file manifesto, chiamato
AndroidManifest.xml, che elenca tutte le componenti dell’applicazione.
In Eclipse è presente un editor visuale che permette di gestire il file
manifesto senza commettere errori.
22
27. La struttura dei progetti android
Al momento della creazione di un nuovo progetto, viene
creata una struttura che distingue nettamente:
Il codice sorgente nella directory src
Le risorse esterne nella directory res, suddivise in:
drawable-hdpi,drawable-mdpi, drawable-ldpi per le
risorse grafiche
layout: per i file che definiscono i layout delle
schermate
values: per i file che definiscono i valori da utilizzare
nell’applicazione
Le classi “autogenerate” nella directory gen. In
particolare questa cartella contiene la classe R, che
conterrà tutti i riferimenti alle risorse contenute nella
cartella res
27
29. Definizione di Attività (Activity)
Attività (Activity): L'attività è una componente applicativa che
fornisce una schermata con cui gli utenti possono interagire per compiere
delle azione, come comporre un numero di telefono, scattare una
foto, inviare una e-mail o visualizzare una mappa. Ad ogni attività è
associata una finestra in cui disegnare l'interfaccia utente. La finestra di
solito riempie lo schermo, ma può essere più piccola dello schermo e
“galleggiare” sopra le altre finestre come nei Dialog e nelle Progress Bar.
Per implementare una attività si estende la classe base android.app.Activity
Le applicazioni sono tipicamente composte da più attività, che sono legate
tra loro in maniera lasca.
Il ciclo di vita delle attività è gestito dal sistema operativo, che si occupa di
avviarle, metterle in background, stopparle, riavviarle o eliminarle
29
30. Descrivere una attività nel file manifesto
Affinchè una attività possa essere gestita da android è
necessario che essa venga descritta nel file
AndroidManifest.xml
All’interno del tag activity possiamo vedere il tag intent-
filter. Gli intent sono dei messaggi che è possibile
mandare al sistema operativo affinchè svolga un’azione
Il primo intent comunica al SO che l’attività deve
essere lanciata allo start della applicazione
Il secondo che è possibile per un utente avviare
l’attività dall’application launcher
Gli intent verranno descritti con maggiore dettaglio più
avanti nel corso
30
32. Gli stati di una attività
Una attività può assumere uno dei seguenti tre stati:
Attivo (Resumed): L’attività è in primo piano
(foreground) e l’utente può interagire con essa
In Pausa: L’attività è in vita, ma ce n’è un’altra che la
copre in maniera parziale, ad esempio con una
trasparenza. In questo stato l’attività conserva i suoi
dati e quelli dei suoi membri, ma può essere killata dal
SO se ci fosse estrema necessità di liberare memoria.
Interrotta (Stopped): L’attività è in background, mentre
ce n’è un’altra in foreground. Anche in questo caso
l’attività può essere considerata ancora in vita, ma può
essere uccisa se il sistema ha bisogno di liberare risorse
per altre applicazioni
32
33. Implementare i metodi di callback
La superclasse Activity mette a disposizione una serie di metodi di callback che il
programmatore può implementare per gestire il ciclo di vita
NB: richiamare sempre il metodo della superclasse prima di implementare la logica
33
34. Avviare una attività
In android non è possibile avviare direttamente una
attività, ma si deve utilizzare il meccanismo degli
Intent.
E’ possibile avviare una attività con due metodi:
startActivity(Intent)
startActivityOnResult(Intent,int requestCode)
34
35. Interfacce modulari con i Fragment
I Fragment rappresentano porzioni di user interface
all’interno di una attività.
I fragment permettono la modularizzazione
dell’interfaccia, che può adattarsi in questa maniera ai
diversi orientamenti di un tablet (portrait/landscape)
35
37. Lanciare un’applicazione Android in Debug
In Eclipse è possible lanciare un’applicazione Android in debug
mode. Lanciare l’applicazione in questa modalità porta all’apertura
delle seguenti view:
Debug
Variables
Breakpoints
LogCat: Visualizza il log di sistema di Android
37
38. Utilizzare il Log di sistema
La classe da utilizzare per effettuare log e android.util.Log, fornita
dei seguenti metodi:
v(String, String) (verbose)
d(String, String) (debug)
i(String, String) (information)
w(String, String) (warning)
e(String, String) (error)
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
38
39. La prospettiva DDMS (Dalvik Debug Monitor Server)
Aprendo la prospettiva DDMS sarà possibile visualizzare una serie di
controlli ulteriori sul dispositivo o sull’emulatore:
Devices – Mostra la lista di dispositivi ed emulatori connessi al
debugger
Emulator Control – Permette di simulare delle funzionalità del
dispositivo (come ad esempio ricevere una telefonata)
LogCat - Visualizza il log di sistema di Android
Threads – Mostra I thread attualmente presenti sulla VM
Heap – Mostra la quantità di memoria usata nell’heap
Allocation Tracker – Traccia l’allocazione di memoria
File Explorer – Permette di esplorare il filesystem del dispositivo
39
41. Riferimenti
Android Dev Center: http://developer.android.com/index.html
Gaetano Raimondo
Technical Leader | Software Engineering
Links Management and Technology S.p.A.
Via R. Scotellaro, 55 - 73100 Lecce
Tel: +39 0832.443911 - Fax: +39 0832.443926
e-Mail: gaetano.raimondo@linksmt.it
41
42. LECCE MILANO ROMA
Via R. Scotellaro, 55 Via Gonzaga, 5 Via XX Settembre, 4
Tel. +39 0832 443911 | Fax +39 0832 443926 | info@linksmt.it | www.linksmt.it