Presented at JUG Genova meeting @ NIS - 28/05/2013
Sviluppare applicazioni AndroidCopyright© 2013 Paolo Montalto http://www.xabaras.it
View Slide
Argomenti trattati• Cos’è Android• SDK (eclipse + tools)• Struttura di un progetto android• Componenti base (Activity, View, Intent …)• Fragment (cenni)• Frammentazione e Support library (cenni)Copyright© 2013 Paolo Montalto http://www.xabaras.it
Che cos’è android?Copyright© 2013 Paolo Montalto http://www.xabaras.it• Sistema operativo per dispositivi mobili• Sviluppato dalla Open Handset Alliance(84 aziende tra cui Google, Samsung, LG,Nvidia…)• Open Source e gratuito• Basato su Kernel Linux• Linguaggio di programmazione Java
Android != LinuxCopyright© 2013 Paolo Montalto http://www.xabaras.it• Basato inizialmente su Kernel 2.6• Supporto ARM (e successivamente x86)• Sviluppato separatamente• Aggiunte patch non presenti in main branch linux(ashmem, alarms, power management, low memory kliller,logger…)• Parziale integrazione in versione 3.3La release 3.3 del kernel vi perme1erà di avviare un userspace Android senza alcuna modifica, sebbene la gesNella versione 3.4 del kernel si spera di poter correggere questo problema e arrivare ad una piena integrazione con Android. Greg Kroah-‐Hartman (Linux kernel –stable branch maintainer)
Java ma non JVMCopyright© 2013 Paolo Montalto http://www.xabaras.it• Dalvik Virtual Machine• No Java SE v Java ME• Subset Apache Harmony• No executable jars: apk.java .class .dex
ArchitetturaCopyright© 2013 Paolo Montalto http://www.xabaras.itDalvik Virtual MachineE’ qui che agiamo!
SDKCopyright© 2013 Paolo Montalto http://www.xabaras.it• Android developer tools• tools a linea di comando (adb, zipalign)• SDK Manager• AVD Manager (android virtual device manager)• Emulatore• Eclipse ADT pluginL’android SDK è costituito da:
Android SDK ManagerCopyright© 2013 Paolo Montalto http://www.xabaras.it
AVD ManagerCopyright© 2013 Paolo Montalto http://www.xabaras.it
EmulatoreCopyright© 2013 Paolo Montalto http://www.xabaras.it• Rom nativa android• Google API• Mock Locations• Simulazione Rete GSM• Pulsanti hardware• Hardware keyboard• D-Pad• Pulsanti volume• Pulsante “Power”
Graphical layout editorCopyright© 2013 Paolo Montalto http://www.xabaras.it
Dalvik Debug Monitor ServerCopyright© 2013 Paolo Montalto http://www.xabaras.it• system information• screen capture• thread/heap info• logcat• processi• controllo emulatore• traffico di rete• stato della rete• posizioni GPS (mock)
Struttura di un ProgettoCopyright© 2013 Paolo Montalto http://www.xabaras.itCodice JavaCodice generatodal compilatoreLibrerie e dipendenze disistemaDefinizione dell’applicazioneRisorse:• layout (xml)• Immagini• Stili• File linguaLibrerie .jar, .soAltri file dell’applicaizone(es. .pdf, .html, .db …)
La directory “res”Copyright© 2013 Paolo Montalto http://www.xabaras.itRisorse graficheRisorse che rappresentano valori (colori,dimensioni, stringhe di testo, stili della GUI)I valori dopo il “-” nei nomi delle directorysono i selettori delle risorse, servono adidentificare l’utilizzo che l’applicazione faràdi quelle risorse:• hdpi: dispositivi con densità di schermo alta• sw600dp: device la cui risoluzione orizzontalesia almeno di 600dp• v11: utilizzare solo se la versione di androidsul dispositivo è 11• it: se la lingua del device è Italiano
ActivityCopyright© 2013 Paolo Montalto http://www.xabaras.itActivity è il “contesto” base di esecuzione inun’applicazione android.• Entry point dell’applicazione android• Solo una in foreground• Solo una attiva• Stack: nuove activity sempre on top
Activity: ciclo di vitaCopyright© 2013 Paolo Montalto http://www.xabaras.it
ViewCopyright© 2013 Paolo Montalto http://www.xabaras.it• Componenti base della UI di android• Definite e utilizzate nei file xml di Layout• Una view sa come disegnare se stessa• Risponde agli eventi (es: onClick, onLongClick)• Organizzate in gerarchie (ViewGroup)Il framework android si occupa di misurare, disegnaree disporre le View e i ViewGroup
LayoutCopyright© 2013 Paolo Montalto http://www.xabaras.it• RelativeLayout: Layout eredita da ViewGroup• TextView è una View (come EditText, WebView, ListView, ScrollView…)• Riferimenti a risorse esterne al Layout (@string, @drawable, @dimen)File xml
Layout e ActivityCopyright© 2013 Paolo Montalto http://www.xabaras.itCaricamento layout nell’activity Accesso alle ViewAccesso a risorse
IntentCopyright© 2013 Paolo Montalto http://www.xabaras.itE’ una descrizione astratta di un’operazione da eseguire.Generalmente usato per lanciare un’ActivityParametri principali:• action: l’azione che è necessario compiere, ad esempio ACTION_VIEW,ACTION_EDIT, ACTION_MAIN, etc.• data: i dati sui quali effettuare l’operazione, ad esempio una persona neldatabase di contatti, un url di un sito web, etc.Esempi (action – data):• ACTION_VIEW - content://contacts/people/1mostra informazioni sulla persona il cui ID è 1• ACTION_DIAL - content://contacts/people/1mostra la scheramata di chiamata per la persona il cui ID è 11/3
IntentCopyright© 2013 Paolo Montalto http://www.xabaras.it2/3Attributi secondari:• category: informazioni aggiuntive sull’azione da eseguire (es.CATEGORY_LAUNCHER)• type: specifica il MIME type dei dati passati all’Intent• component: specifica esplicitamente il nome della classe da usare• extras: può essere usato per passare informazioni aggiuntive all’activitylanciataEsempi:• ACTION_MAIN con category CATEGORY_HOMElancia la schermata Home• ACTION_GET_CONTENT con MIME type vnd.android.cursor.item/phoneMostra una lista di numeri di telefono, consentendo all’utente diselezionarne uno e ritornare il valore selezionato all’activity di partenza
IntentCopyright© 2013 Paolo Montalto http://www.xabaras.it3/3Lanciare un’activity:Recuperare il risultato di un’activity:
AndroidManifest.xmlCopyright© 2013 Paolo Montalto http://www.xabaras.itOgni applicazione android deve avere un file AndroidManifest.xml nella suadirectory principale.Il manifest fornisce al sistema android informazioni essenzialisull’applicazione.• Principali caratteristiche di AndroidManifest.xml• definisce il package name dell’applicazione• descrive i componenti dell’applicazione (activity, servizi, provider dicontenuti)• definisce quali permessi l’applicazione avrà per l’accesso a specifichefunzionalità / caratteristiche hardware• dichiara il livello minimo di API supportato• dichiara eventuali librerie utlizzate esterne all’applicazione (presenti in unpackage differente)1/2
AndroidManifest.xmlCopyright© 2013 Paolo Montalto http://www.xabaras.itPackage nameIconaapplicazioneNome visualizzatoPermessiVersione AppVersione Android SDKIntentActivityprincipale2/2
Fragment (cenni)Copyright© 2013 Paolo Montalto http://www.xabaras.it• Introdotti in android 3.0 Honeycomb• Fondamentali per il supporto alle applicazioniTablet• Porzioni indipendenti dell’interfaccia utente• Hanno un loro ciclo di vita (legato a quellodell’activity)• Possono essere combinati in layout muti-pane• Possono essere riutilizzati1/3
Fragment (cenni)Copyright© 2013 Paolo Montalto http://www.xabaras.itTipico utilizzo dei Fragment2/3
Fragment (cenni)Copyright© 2013 Paolo Montalto http://www.xabaras.it3/3• Possono essereinseriti nelladefinizione xml dellayout• Possono esseredichiarati via codice
Altri componenti del frameworkCopyright© 2013 Paolo Montalto http://www.xabaras.it• Dialogvisualizzano finestre di dialogo (es: i classici alert)• Serviceeseguono codice in background, possono essere in esecuzione anche quandol’app non lo è• Broadcast Receiverricevono e gestiscono eventi in modo asincrono• Content Providerconsentono di accedere ai dati attraverso un’interfaccia standard (possibiledefinire custom)• Notificationmostrano informazioni nella barra delle notifiche
FrammentazioneCopyright© 2013 Paolo Montalto http://www.xabaras.it• Ecosistema frammentato• Frammentazione delle versioni diandroid• Frammentazione delle dimensionidi schermo• Frammentazione delle densità dischermo• Personalizzazioni dei produttori
Support LibraryCopyright© 2013 Paolo Montalto http://www.xabaras.it• Introdotta per porre un rimedio alla frammentazione relativaa differenti versioni del sistema operativo• Consente l’accesso a tutta una serie di funzionalitàintrodotte da android HoneyComb(android 3.0 api v11) inpoi su dispositivi con api precedente• Supporta dispositivi android da api v4 in poi• E’ anche detta support-v4• E’ distribuita sotto forma di .jar da includere nel progetto
Grazie per l’attenzione!