Whymca Dive into Android [ITA]

2,796 views

Published on

An introduction to Android Development [ITA]
Sample code available at http://www.webalice.it/emanuele.disaverio/Dive_Into_Android_sample_code.zip

Published in: Technology, Education
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
2,796
On SlideShare
0
From Embeds
0
Number of Embeds
55
Actions
Shares
0
Downloads
3
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide











  • build tramite ant (file properties)
    icona differente per differnti densità
  • Dan Bromstein



















  • javac
    normalissima compilazione
    dx
    converte in formato .dex, Dalvik EXecutable
    aapt, aidl
    file generati (R, aidl)
    package delle risorse
    jar
    un .apk è 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





  • Whymca Dive into Android [ITA]

    1. 1. Dive Into Android
    2. 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. 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. 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. 5. Once upon a Time • Aprile 2002, Danger Inc. -> Andy Rubin mostra a Sergei Brin e Larry Page Dive into Android
    6. 6. Once upon a Time • Ottobre 2008, HTC G1 (Android Developer Phone) Dive into Android
    7. 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. 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
    9. 9. Dive Inside
    10. 10. Dive into Android
    11. 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. 12. Anatomia di una applicazione $android create project -n Dive -t 4 -p Dive -k org.whymca.dive -a DiveActivity $ Dive into Android
    13. 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
    14. 14. Android Manifest Dive into Android
    15. 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. 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. 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. 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. 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. 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. 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. 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
    23. 23. Android UI Dive into Android
    24. 24. Widget estendono android.view.View • TextView • Button • ImageView • EditText • CheckBox • ProgressBar • VideoView • View Flipper • [...] • AnalogClock! Dive into Android
    25. 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. 26. Liste estendono android.view.AdapterView • ListView • ExpandableListView • GridView • Spinner <RelativeLayout> </RelativeLayout> Dive into Android
    27. 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. 28. Dialog • Alert Dialog • Progress Dialog • Custom Dialog – qualunque View uno vuole inflatare, mostrata in maniera modale Dive into Android
    29. 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
    30. 30. Handler Dive into Android
    31. 31. Resource • Stringhe Localizzate • Valori Numerici [pixels, costanti, colori] • Stili e Temi • Layouts • Animazioni • Drawables – Immagini – Nine-Patches – Drawable Nativi – Selectors – Layered CONFIGURATION (and locale)- WISE Dive into Android
    32. 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. 33. Tool chain javac dx aidl aapt emu adb jarsign jar ddms Dive into Android
    34. 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. 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. 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. 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. 38. GRAZIE! Emanuele Di Saverio emanuele.disaverio@gmail.com twitter: @hazam linkedIn: http://it.linkedin.com/in/emanueledisaverio Dive into Android

    ×