Android
Introduzione all’ecosistema Android
Chi sono
Francesco D’Amico
francesco.damico@eng.it
spawn150@gmail.com
@spawn150
� Android Software stack
� Ambiente di sviluppo Android Studio
� Struttura di un progetto Android
� Componenti base di Android
Agenda
Prima un po’ di storia...
1990 2007 2010 2014 2015
1991 1995 2008 2010 2014 2015
Evoluzione
Apple pie 1.0
(alpha)
Battenberg 1.1
(beta)
Cupcake 1.5 Donut 1.6 Eclair 2.0/2.1 Froyo 2.2 Gingerbread 2.3
Honeycomb 3.0
Ice Cream
Sandwich 4.0
(API Level 15)
Jelly Bean 4.1 / 4.2 / 4.3
(API Level 16 - 17 - 18)
KitKat 4.4
(API Level 19)
Lollipop 5.0 / 5.1
(API Level 21 - 22)
Marshmallow 6.0
(API Level 23)
Nougat 7.0 / 7.1
(API Level 24 - 25)
Storia di Android
Qualche numero su Android
Fonte: https://developer.android.com/about/dashboards/index.html
Distribuzione delle versioni
Frammentazione: iOS vs Android
Fonte: https://developer.android.com/about/dashboards/index.htmlFonte: https://developer.apple.com/support/app-store/
Android Software Stack
I layers di Android
Linux Kernel
Native
Libraries
Android
Runtime
Android Framework
Applications
Linux Kernel
I servizi core sono gestiti da un kernel Linux 2.6 che fornisce un livello di
astrazione tra l’hardware e gli elementi di livello superiore dello stack
Native Libraries
Librerie C/C++ per l’integrazione di mediaplayer, web browser, database,
librerie grafiche come OpenGL, etc.
Android Runtime
Insieme alle librerie native costituisce la base per il framework Android.
Fino alla versione 4.4 di Android la VM era la Dalvik Virtual Machine
dopodiché è stato creato ART (Android Runtime)
Android Framework
Framework di astrazione per la creazione delle applicazioni
Applications
Le applicazioni che usiamo tutti i giorni! :-)
Dalvik vs. ART
Dalvik ART
Versione Android fino alla 4.4 A partire dalla 5.0 (in beta dalla 4.4)
Tipo di compilazione JIT (Just in Time) AOT (Ahead of Time)
Tempo d’installazione Migliore Peggiore
Tempo di esecuzione Peggiore Migliore
Occupazione su disco Migliore Peggiore
Consumo della batteria Peggiore Migliore
Ambiente di sviluppo
App Workflow
● Scriviamo il codice in Java (...e non
solo!)
● Il compilatore produce bytecode
Java
● Il DX converte il bytecode in un file
classes.dex
● APK Packager impacchetta e firma
la nostra apk
Tools di sviluppo
● ADT (Android Developer Tools) Bundle
○ Versioni degli SDK
○ Librerie Firebase, Play Services e Support
○ Immagini dei sistemi operativi per creare i simulatori
○ Documentazione
○ Esempi di codice
● Android Studio (non più Eclipse con il plugin ADT!)
● Emulatori Android
○ Android Virtual Device Manager
○ Genymotion
Android Studio - Interfaccia
Interfaccia di Android Studio - Run & Debug
Barra dei comandi per:
● Run / InstantRun
● Debug
● Run applicazione con Coverage
● Attaccare il Debug a un processo attivo sul device /
emulatore
● Rilanciare la propria applicazione
● Fermare l’applicazione in running
● Selezionare device per emulazione
Interfaccia di Android Studio - Debug
Interfaccia di Android Studio - Analisi Log con Logcat
Interfaccia di Android Studio - Monitoring
� Tool a linea di comando
� Incluso in Android SDK Platform-Tools (android_sdk/platform-tools)
� Permette la comunicazione con i device (fisici o emulatori)
� Programma client-server così composto:
� Client -> installato sulla macchina di sviluppo e permette l’invio di
comandi
� Daemon (adbd) -> demone presente su ogni singolo device per
eseguire i comandi ricevuti dal server
� Server -> processo avviato sulla macchina di sviluppo che mette in
comunicazione Client e Daemon. La porta TCP di default è la 5037
Android Debug Bridge - Cos’è?
Elenco dei devices disponibili
adb devices
Connessione/Disconnessione a un device via rete
adb connect/disconnect <indirizzo_ip:porta>
Avvio Logcat del device
adb logcat
Installazione Applicazione su device
adb install -r <nome_file>
Riavviare il device
adb reboot
Start di una shell sul device
adb shell
Disinstallazione Applicazione dal device
adb shell am start -a android.intent.action.DELETE -d package:<nome_package>
Comandi base di ADB
Struttura di un progetto
Android
Struttura del progetto - Parte 1
Risorsa Descrizione Obbligatoria
AndroidManifest.xml Descrittore dell’applicazione nel quale sono definiti tutti i componenti e i permessi. Si
src Contiene le classi sorgenti dell’applicazione e il file AndroidManifest.xml. Si
res Contiene le risorse dell’applicazione. Si
assets Contiene i file che devono essere portati nell’apk così come sono. No
drawable Contiene le risorse grafiche dell’applicazione. No
anim Contiene i descrittori XML delle animazioni usate nell’applicazione. No
layout Contiene i descrittori XML del layout delle varie viste dell’applicazione. No
Struttura del progetto - Parte 2
Risorsa Descrizione Obbligatoria
menu Contiene i descrittori XML che rappresentano i menù all’interno dell’applicazione. No
values Contiene le risorse per la definizione degli stili, i testi, le dimensioni, etc. No
xml Contiene I descrittori XML che non rientrano nelle cartelle precedenti. Ad esempio il descrittore per i settings. No
raw Contiene i file nel suo formato dati “grezzo”. No
libs Contiene tutte le librerie esterne utili al progetto. No
jni Contiene il codice nativo che può essere invocato tramite Java Native Interface (JNI). No
gen Contiene i file Java generati da Android Studio, come ad esempio R.java per le risorse. Generata
� Ogni applicazione ha il suo AndroidManifest.xml
� E’ obbligatorio
� Contiene:
� La definizione dei componenti Android presenti
nell’applicazione
� Il versionName e il versionCode dell’applicazione
� Il package name dell’applicazione
� I permessi richiesti dall’applicazione
Introduzione al file AndroidManifest.xml
Esempio di AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="it.englab.androidcourse.helloworldapplication"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="25" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sample" >
<activity
android:name="it.englab.androidcourse.helloworldapplication.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Activities, Services, Content Providers e Broadcast Receivers
Componenti base di Android
� Activity
� Service
� Broadcast Receiver
� Content Provider
Componenti base di Android
� Rappresenta la vista con la quale l’utente interagisce
� Si crea estendendo android.app.Activity
� Contiene un layout che ne rappresenta la UI
� Dev’essere definita nel AndroidManifest.xml con il tag
<activity>
� Ha un ciclo di vita
Activity
� Si crea estendendo la classe android.app.Service
� Non ha un layout
� Il codice è eseguito nel MainThread ma…
� Usato per operazioni che non richiedono UI
� Dev’essere definito nel AndroidManifest.xml con il tag
<service>
� Ha un ciclo di vita...più semplice dell’Activity e gestito da altri
componenti
Service
� Sono in ascolto di eventi di tipo broadcast
� Si crea estendendo la classe
android.content.BroadcastReceiver
� Può essere dichiarato nel AndroidManifest.xml con il tag
<receiver> o tramite codice
� Sono in ascolto di eventi anche con l’applicazione chiusa
� Si deve implementare solo il metodo
onReceive(Context context, Intent intent)
� Il codice è eseguito nel MainThread
Broadcast Receiver
� Rappresenta l’accesso ai dati
� E’ accessibile attraverso i ContentResolver
� Si crea estendendo la classe android.content.ContentProvider
� Dev’essere definito nel AndroidManifest.xml con il tag
<provider>
� Permettono di condividere l’accesso ai dati ad altre applicazioni
Content Provider
Grazie!
Domande?
francesco.damico@eng.it
spawn150@gmail.com
@spawn150

01 Android - Introduction

  • 1.
  • 2.
  • 3.
    � Android Softwarestack � Ambiente di sviluppo Android Studio � Struttura di un progetto Android � Componenti base di Android Agenda
  • 5.
    Prima un po’di storia...
  • 6.
    1990 2007 20102014 2015 1991 1995 2008 2010 2014 2015 Evoluzione
  • 7.
    Apple pie 1.0 (alpha) Battenberg1.1 (beta) Cupcake 1.5 Donut 1.6 Eclair 2.0/2.1 Froyo 2.2 Gingerbread 2.3 Honeycomb 3.0 Ice Cream Sandwich 4.0 (API Level 15) Jelly Bean 4.1 / 4.2 / 4.3 (API Level 16 - 17 - 18) KitKat 4.4 (API Level 19) Lollipop 5.0 / 5.1 (API Level 21 - 22) Marshmallow 6.0 (API Level 23) Nougat 7.0 / 7.1 (API Level 24 - 25) Storia di Android
  • 8.
  • 9.
  • 10.
    Frammentazione: iOS vsAndroid Fonte: https://developer.android.com/about/dashboards/index.htmlFonte: https://developer.apple.com/support/app-store/
  • 11.
  • 12.
    I layers diAndroid Linux Kernel Native Libraries Android Runtime Android Framework Applications Linux Kernel I servizi core sono gestiti da un kernel Linux 2.6 che fornisce un livello di astrazione tra l’hardware e gli elementi di livello superiore dello stack Native Libraries Librerie C/C++ per l’integrazione di mediaplayer, web browser, database, librerie grafiche come OpenGL, etc. Android Runtime Insieme alle librerie native costituisce la base per il framework Android. Fino alla versione 4.4 di Android la VM era la Dalvik Virtual Machine dopodiché è stato creato ART (Android Runtime) Android Framework Framework di astrazione per la creazione delle applicazioni Applications Le applicazioni che usiamo tutti i giorni! :-)
  • 13.
    Dalvik vs. ART DalvikART Versione Android fino alla 4.4 A partire dalla 5.0 (in beta dalla 4.4) Tipo di compilazione JIT (Just in Time) AOT (Ahead of Time) Tempo d’installazione Migliore Peggiore Tempo di esecuzione Peggiore Migliore Occupazione su disco Migliore Peggiore Consumo della batteria Peggiore Migliore
  • 14.
  • 15.
    App Workflow ● Scriviamoil codice in Java (...e non solo!) ● Il compilatore produce bytecode Java ● Il DX converte il bytecode in un file classes.dex ● APK Packager impacchetta e firma la nostra apk
  • 16.
    Tools di sviluppo ●ADT (Android Developer Tools) Bundle ○ Versioni degli SDK ○ Librerie Firebase, Play Services e Support ○ Immagini dei sistemi operativi per creare i simulatori ○ Documentazione ○ Esempi di codice ● Android Studio (non più Eclipse con il plugin ADT!) ● Emulatori Android ○ Android Virtual Device Manager ○ Genymotion
  • 17.
    Android Studio -Interfaccia
  • 18.
    Interfaccia di AndroidStudio - Run & Debug Barra dei comandi per: ● Run / InstantRun ● Debug ● Run applicazione con Coverage ● Attaccare il Debug a un processo attivo sul device / emulatore ● Rilanciare la propria applicazione ● Fermare l’applicazione in running ● Selezionare device per emulazione
  • 19.
    Interfaccia di AndroidStudio - Debug
  • 20.
    Interfaccia di AndroidStudio - Analisi Log con Logcat
  • 21.
    Interfaccia di AndroidStudio - Monitoring
  • 22.
    � Tool alinea di comando � Incluso in Android SDK Platform-Tools (android_sdk/platform-tools) � Permette la comunicazione con i device (fisici o emulatori) � Programma client-server così composto: � Client -> installato sulla macchina di sviluppo e permette l’invio di comandi � Daemon (adbd) -> demone presente su ogni singolo device per eseguire i comandi ricevuti dal server � Server -> processo avviato sulla macchina di sviluppo che mette in comunicazione Client e Daemon. La porta TCP di default è la 5037 Android Debug Bridge - Cos’è?
  • 23.
    Elenco dei devicesdisponibili adb devices Connessione/Disconnessione a un device via rete adb connect/disconnect <indirizzo_ip:porta> Avvio Logcat del device adb logcat Installazione Applicazione su device adb install -r <nome_file> Riavviare il device adb reboot Start di una shell sul device adb shell Disinstallazione Applicazione dal device adb shell am start -a android.intent.action.DELETE -d package:<nome_package> Comandi base di ADB
  • 24.
    Struttura di unprogetto Android
  • 25.
    Struttura del progetto- Parte 1 Risorsa Descrizione Obbligatoria AndroidManifest.xml Descrittore dell’applicazione nel quale sono definiti tutti i componenti e i permessi. Si src Contiene le classi sorgenti dell’applicazione e il file AndroidManifest.xml. Si res Contiene le risorse dell’applicazione. Si assets Contiene i file che devono essere portati nell’apk così come sono. No drawable Contiene le risorse grafiche dell’applicazione. No anim Contiene i descrittori XML delle animazioni usate nell’applicazione. No layout Contiene i descrittori XML del layout delle varie viste dell’applicazione. No
  • 26.
    Struttura del progetto- Parte 2 Risorsa Descrizione Obbligatoria menu Contiene i descrittori XML che rappresentano i menù all’interno dell’applicazione. No values Contiene le risorse per la definizione degli stili, i testi, le dimensioni, etc. No xml Contiene I descrittori XML che non rientrano nelle cartelle precedenti. Ad esempio il descrittore per i settings. No raw Contiene i file nel suo formato dati “grezzo”. No libs Contiene tutte le librerie esterne utili al progetto. No jni Contiene il codice nativo che può essere invocato tramite Java Native Interface (JNI). No gen Contiene i file Java generati da Android Studio, come ad esempio R.java per le risorse. Generata
  • 27.
    � Ogni applicazioneha il suo AndroidManifest.xml � E’ obbligatorio � Contiene: � La definizione dei componenti Android presenti nell’applicazione � Il versionName e il versionCode dell’applicazione � Il package name dell’applicazione � I permessi richiesti dall’applicazione Introduzione al file AndroidManifest.xml
  • 28.
    Esempio di AndroidManifest.xml <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="it.englab.androidcourse.helloworldapplication" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET"/> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="25" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Sample" > <activity android:name="it.englab.androidcourse.helloworldapplication.MainActivity" android:label="@string/app_name" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
  • 29.
    Activities, Services, ContentProviders e Broadcast Receivers Componenti base di Android
  • 30.
    � Activity � Service �Broadcast Receiver � Content Provider Componenti base di Android
  • 31.
    � Rappresenta lavista con la quale l’utente interagisce � Si crea estendendo android.app.Activity � Contiene un layout che ne rappresenta la UI � Dev’essere definita nel AndroidManifest.xml con il tag <activity> � Ha un ciclo di vita Activity
  • 32.
    � Si creaestendendo la classe android.app.Service � Non ha un layout � Il codice è eseguito nel MainThread ma… � Usato per operazioni che non richiedono UI � Dev’essere definito nel AndroidManifest.xml con il tag <service> � Ha un ciclo di vita...più semplice dell’Activity e gestito da altri componenti Service
  • 33.
    � Sono inascolto di eventi di tipo broadcast � Si crea estendendo la classe android.content.BroadcastReceiver � Può essere dichiarato nel AndroidManifest.xml con il tag <receiver> o tramite codice � Sono in ascolto di eventi anche con l’applicazione chiusa � Si deve implementare solo il metodo onReceive(Context context, Intent intent) � Il codice è eseguito nel MainThread Broadcast Receiver
  • 34.
    � Rappresenta l’accessoai dati � E’ accessibile attraverso i ContentResolver � Si crea estendendo la classe android.content.ContentProvider � Dev’essere definito nel AndroidManifest.xml con il tag <provider> � Permettono di condividere l’accesso ai dati ad altre applicazioni Content Provider
  • 35.

Editor's Notes

  • #14 Link utili https://infinum.co/the-capsized-eight/art-vs-dalvik-introducing-the-new-android-runtime-in-kit-kat https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime
  • #16 Link utile: https://developer.android.com/studio/build/index.html
  • #17 Link utili: Installazione Android Studio Genymotion
  • #24 Link utili: Guida ad ADB Logcat
  • #27 Link utile: https://developer.android.com/studio/projects/index.html