2. Chi sono
• Emanuele Di Saverio
– Agile Coach @ beeweeb Technologies S.p.A.
– Senior Mobile Developer @ lo stesso
– Committer @ android-bluetooth
• http://code.google.com/p/android-bluetooth
– Committer @ QuadraSpace Project
• http://www.quadraspace.org
– Ing. Informatico
– Certified Scrum Master
– Sun Certified Mobile App Developer
– Sun Certified Java Programmer
Dive into Android
3. Topics
• Introduzione ad Android
– Cenni Storici
– SDK Overview
– Componenti
– Widget UI
– Networking & Persistenza
• Open Source
• Riding the Android Wave
• ...and now?
Dive into Android
4. Android in short
• Android è
– (sistema operativo + middleware + applicazioni)
per dispositivi mobili
• Android è quasi completamente Open Source
• Android si basa su un Kernel Linux 2.6 (non E’ linux - tuned libc)
• Applicazioni si possono sviluppare in due modi
– con Software Dev Kit in linugaggio Java 5
– con Native Dev Kit in C/C++
e testate su un Emulatore (basato su QEMU)
• Android Market
• Sponsorizzato dall’Open Handset Alliance (Google + 34)
Dive into Android
5. Once upon a Time
• Aprile 2002, Danger Inc. ->
Andy Rubin mostra a Sergei Brin e Larry Page
Dive into Android
6. Once upon a Time
• Ottobre 2008, HTC G1 (Android Developer Phone)
Dive into Android
7. Once upon a time
• Luglio 2005, Google acquista Android Inc., fondata da Andy
Rubin
• Novembre 2007 -> fondazione OHA, Android ufficializzato, SDK
early look 0.9
• Android Developer Challenge
• Maggio 2008 - Primo prototipo
• Agosto 2008 - Android Market
• Ottobre 2008 - SDK 1.0 HTC G1 sul mercato
• Aprile 2009 - SDK 1.5, HTC Magic sul mercato, NDK 1.5
• Sett 2009 - SDK 1.6, Nov 2009 - SDK 2.0 (???)
• HTC Droid - Nexus One...etc. etc.
Dive into Android
8. Android now
• 22 handset confermati (source androphones.com)
• non solo HTC e Motorola: Dell, Lenovo, Acer, Samsung, Huawei, LG
• stime per il 2010
– 50+ handset
– 34 milioni di esemplari (~5%, con l’IPhone stimato 36 milioni)
• recentemente SDK 2.2, OpenGL ES 2.0 (NDK), Contacts API, Sync
API, Bluetooth :, Paypal integration, Live Wallpapers
• not-so-good:
– Android Market
– Fragmentation
– Tablets - Archos 5 Internet Tablet :(
sources: ccsinsight.com, appleinsider.com
Dive into Android
11. Anatomia di una applicazione
• java source + external resources + manifest = APK!
• “All applications are created equal”
• risorse: stringhe, immagini, layouts, file binari, drawables....
• AndroidManifest.xml dichiara
– i componenti dell’applicazione
• Activities
• Services
• Broadcast Receivers
• Content Providers
– nome, base package, versione
– target SDK version, min SDK version
– compatibilità rispetto agli schermi (1.6 and up)
Dive into Android
12. Anatomia di una applicazione
$android create project
-n Dive
-t 4
-p Dive
-k org.whymca.dive
-a DiveActivity
$
Dive into Android
13. Anatomia di una applicazione
• Ogni applicazione corrisponde ad un User ID diverso (UNIX)
• Ogni applicazione viene eseguita nel suo Processo (UNIX)
– approccio simile a Chrome
• Ogni processo ha clonata nel suo spazio degli indirizzi una istanza
separata della Virtual Machine Java
• Dalvik Virtual Machine -> ottimizzata per
l’uso nei dispositivi mobili
Dive into Android
15. Activity
• gestisce la User Interface per una
specifica interazione che l’utente può
effettuare
• Responsabilità:
– creazione Widgets UI
– gestione eventi UI: bottoni premuti,
click su elementi, testo inserito etc..
– gest. orientamento schermo
– salvataggio stato (“all app running all
time”)
Dive into Android
16. Activity Lifecycle
Principio di Hollywood: “Don’t call me, I’ll call you”
Estendere la base class (Activity)
Override dei metodi (super.x()!)
Approccio comune nel mobile, permette
alla piattaforma di mantenere il controllo
“forzando” la gestione dei diversi stati
di una applicazione mobile
“Be a good citizen of Android!”
Una Activity è sempre aperta in risposta
ad un Intent lanciato dalla piattaforma
Dive into Android
17. Intents
• l’Intent in Android è un oggetto che rappresenta
– una richiesta di lanciare una Activity (utente o programmatica)
– una notifica di un evento nel sistema
L’Intent può essere propagato e intercettato dai vari componenti
del sistema
E’ composto da:
- Action name : cosa rappresenta l’intent
- Data URI e MIMEType: rappresenta il target dell’azione
- Categorie di appartenenza dell’Intent
- Extras
- [...]
Dive into Android
18. Intents
• Altri esempi di eventi:
– Livello batteria basso
– SD Card estratta
– Bluetooth acceso/spento
• Gli Intent vanno lanciati partendo da un Context
• Gli Intent implementano l’interfaccia Parcelable
Dive into Android
19. BroadcastReceiver
• Intercettare eventi e notifiche di sistema
– Accensione dell’handset
– Livello batteria basso
– SD Card estratta
– Bluetooth acceso/spento
– Incoming Call
– Allarmi
• Background processing in response to events
• “Brief Amount of Time” (10 seconds) or KILL
Dive into Android
20. Service
• “come una Activity senza UI”
• background o foreground service
• proprio lifecyle, i componenti fanno il bind ad un service
• necessaria la definizione traimte AIDL
• I/O della AIDL sono sempre Parcelable, per supportare la
comunicazione interprocesso (tramite Binder)
• es. MP3 Player, Twitter sync, GPS Navigation
Dive into Android
21. Content Provider
• Esporre una fonte di dati per l’utilizzo da applicazioni di terze
parti
• es. Rubrica Contatti -> Identificata da una URI
content://contacts/people/1
• ESPORRE un CR:
– Implementazione di una interfaccia CRUD
– Dichiarazione nel manifest - dichiarazione authority (URI)
•
Dive into Android
22. Persistenza
• SharedPreferences -> manciate di valori, preferenze dell’app
• File + Streams -> accesso alla SDCARD
• SQLLite
Networking
• Apache HTTPClient
• Android è ~ alla piattaforma Java 5.0
– java.util.concurrent !
• Bluetooth --> NEXT TALK :o)
Dive into Android
25. Layout
estendono android.view.ViewGroup
• LinearLayout
– sequenza, verticale o orizzontale
• RelativeLayout
– disposizioni “sotto a...a sinistra di...” etc. -> molto efficiente
• TableLayout
– questa è facile
• FrameLayout
– overlay, permette di sfruttare le trasparenze
Dive into Android
26. Liste
estendono android.view.AdapterView
• ListView • ExpandableListView
• GridView • Spinner
<RelativeLayout>
</RelativeLayout>
Dive into Android
27. Liste
• Un Adapter è un wrapper che fa da “ponte” tra le entità e la
rappresentazione grafica in UI Android
• incentrato intorno al metodo getView()
• riuso delle view, “inflate” esplicito delle view via System Service
• BaseAdapter è generico abbastanza per esigenze custom
• Supporto dall’SDK se l’Adapter è basato su una
– lista di oggetti: ArrayAdapter<T>
– query da un database: CursorAdapter
Dive into Android
28. Dialog
• Alert Dialog
• Progress Dialog
• Custom Dialog
– qualunque View uno vuole inflatare, mostrata in maniera modale
Dive into Android
29. Handler
• come Swing, Android gestisce la UI single-thread
• un Thread principale su cui vengono serializzate tutte le callback
di UI e quelle relative al lifecycle
• interagire con elementi di UI in un OnClickListener o in un
OnCreate è OK
• task di rete che ritorna e deve aggiornare la UI NON PUO’
CHIAMARE DIRETTAMENTE I METODI UI
– es. Thread di rete per recuperare il contenuto di un tweet, quando
finisce fa .setText() su un TextField ERRORE
• android.os.Handler assicura il processamento sincronizzato
con il Thread creatore! ( Looper.prepare() )
Dive into Android
32. Drawable
• package android.graphics.drawable
• definibili tramite XML
• immagini e colori interpretati e incpsulati da BitmapDrawable
e ColorDrawable
• nine-patch
• definizione nativa
Dive into Android
33. Tool chain
javac dx aidl aapt
emu adb jarsign jar
ddms
Dive into Android
34. Eclipse ADT
• Wizards per progetto Android, Manifest, file di risorse, esempi
• Debugger, Profiler, Controllo del device
• Controllo Emulatore, Virtual Devices
• Integrazione Logcat
• Editor dei file di layout e preview
• Test Automatici
Dive into Android
35. Open Source
• Android è Open-Source! quindi posso copiare-incollare-mischiare-
customizzare tutto!
...no.
• Riferimento a risorse non pubbliche (es. 9patch)!
• Feature presenti a runtime ma RIMOSSE DALL’SDK
• Permission in root space
• Contributi sono ufficialmente accettati, ma all’atto pratico, la
maggioranza dei contributi da non-googlers viene rifiutata
ignorata o insabbiata :(
Dive into Android
36. Riding the Android wave
• la frammentazione è dietro l’angolo
– Sciphone
– MOTOBlur
• l’Android Market è brutto
• anche l’adozione di massa è dietro l’angolo
– Ford: Sync AppLink e General Motors: Chevy Volt
– Sony Dragonpoint TV
– Tablets: http://miopad.com/
• dispositivi Real Time industriali
• Android sembra essere un “buon cavallo” su cui puntare in
termini di piattaforma e skills personali
Dive into Android
37. ...and now?
• http://developer.android.com
– Tutorials
– la documentazione latita, occhio ai Samples
– Blog!
• http://source.android.com/
– get source!
• twitters: @AndroidDev, @retomeier @romainguy, @gerdavax
• ML: android-developers e android-beginners
• tenete prenotato il posto! Bluetooth (Stefano Sanna) e Test
Driven Development (Carlo Codega) a seguire ;)
Dive into Android
38. GRAZIE!
Emanuele Di Saverio
emanuele.disaverio@gmail.com
twitter: @hazam
linkedIn: http://it.linkedin.com/in/emanueledisaverio
Dive into Android
Notas del editor
build tramite ant (file properties)
icona differente per differnti densit&#xE0;
Dan Bromstein
javac
normalissima compilazione
dx
converte in formato .dex, Dalvik EXecutable
aapt, aidl
file generati (R, aidl)
package delle risorse
jar
un .apk &#xE8; un jar!
jarsigner
ogni app Android deve essere firmata!
draw9patch
ddms
debugger, inspector, profiler
logcat
supporto per livelli e filtri
adb
esecuzione comandi, pull/push file, accesso shell, installazione apps e instrumentation
emulator
Android Virtual Devices