1. Cos'è Android? Android Code Camp for Beginners 28-11-2013 #codeEU #acc4b @InfoAppl @NeutralAccess http://informatica.uniurb.it/ http://www.neunet.it/ Gioele Luchetti Saverio Delpriori Lorenz Klopfenstein
Dec 05, 2014
1.
Cos'è Android?
Android Code Camp for Beginners28-11-2013#codeEU #acc4b@InfoAppl @NeutralAccesshttp://informatica.uniurb.it/http://www.neunet.it/
Gioele LuchettiSaverio Delpriori
Lorenz Klopfenstein
1.1
Breve storia
● Sistema operativo open-source inizialmente pensato per dispositivi mobili e poi evolutosi.
● Attualmente leader del mercato...e lo sarà per molto tempo, secondo le stime.
Cos'è Android?
● Android Inc. fondata nel 2003 da Andy Rubin con l'obiettivo di creare:“smarter mobile devices that are more aware of its owner's
location and preferences”● Inizialmente sviluppato in segreto e già con
problemi di budget nel primo anno di vita● Passa poco tempo e Google acquisisce la
società (17 agosto 2005)
○ Rubin comincia a lavorare con kernel Linux
Storia
● L'OHA (Open Handset Alliance) si svela al mondo il 5 novembre 2007 ○ vi facevano parte diversi operatori di telefonia, di
dispositivi e di SoC○ ufficialmente il consorzio sviluppa standard aperti
da utilizzare nel mondo mobile● Quello stesso giorno viene annunciato il
progetto Android ○ Framework per dispositivi mobili○ Linux kernel 2.6
Storia (2)
● L'anno successivo viene presentato il primo prodotto, l'HTC Dream (22 ottobre 2008)
○ Android 1.0 “Apple Pie”○ Android Market○ Notifiche○ Google Apps○ Media Player○ Camera○ WiFi○ Bluetooth
Storia (3)
● Da lì in poi è sviluppo prorompente
● Prime versioni con una vera diffusione sul mercato ○ 1.5 “Cupcake” (13 aprile 2009)
○ 1.6 “Donut” (16 settembre 2009)
● Ogni 6 mesi circa una nuova versione○ Attualmente 4.4 “KitKat”
Storia (4)
Storia (5)
● Dal 2010 Google ha lanciato una sua serie di dispositivi Nexus sviluppati da partner e con una esperienza d'uso Android "pura"
○ HTC One○ Samsung Nexus S○ Samsung Galaxy Nexus○ Asus Nexus 7 (2012/3)
○ LG Nexus 4/5○ Samsung Nexus 10
Storia (6)
1.2
Caratteristiche
Progetto open-source
Ottobre 2010, Steve Jobs:
„Google likes to characterize Android as open and iOS as closed. We think this is disingenuous. […] The real difference is integrated versus fragmented.”
Progetto open-source
Progetto open-source
● Il codice di Android (OS) è disponibile sotto licenze free e open-source.
● Le applicazioni di base (parte di AOSP) sono open-source.○ L'ecosistema Google: no.
(Google Play, Gmail, Calendar, etc.)
● Le applicazioni AOSP non ottengono aggiornamenti da Google.
Ecosistemi “chiusi”
Lo sviluppo di applicazioni AOSP è effettivamente fermo a “Froyo”.
Tentativo di controllo:● Store e applicazioni proprietarie
Amazon, Google Play, integrazione con Google Music, Hangouts, etc.
● Launcher personalizzatiSamsung TouchWiz
● Feature aggiuntiveSamsung Note “multi-window”, Google Now, eye tracking...
Qualsiasi sia la strategia, sembra avere successo.
Diffusione
Frammentazione
Frammentazione (in pratica)
2.
Cosa può fare Android?
2.1
Cos'è un API di sistema?
Architettura di Android
API in termini semplici
Application Programming Interface
Definisce l'interfaccia (come interagiscono) tra due componenti software.
Ad esempio: sistema operativo ed applicazione.
I comandi previsti da una API possono essere sfruttati per qualcosa di “utile”.
API di un sistema operativo mobile
Bidirezionali: comandi ed eventi.
PER ESEMPIO
Ciclo di vita: lancio, sospensione, terminazione, etc…Interazione utente: tap, slide, drag, etc…Hardware: WiFi, Bluetooth, etc…Grafica, accesso file-system...
Scrittura di applicazioni
Applicazioni a livello utente scritte in linguaggio Java, utilizzando le stesse API.
App di sistema=
App terze parti
2.2
Livello API
Cos'è un livello API Android?
Partendo dalla versione 1.0, ogni nuova versione di Android introduce nuove funzionalità:
Per l'utente finale ed il programmatore.
Le aggiunte vanno a definire un nuovo “livello” di API che si può sfruttare per ottenere applicazioni più potenti.
Perché è importante?
Utilizzare una API di livello X rende l'applicazione automaticamente incompatibile con tutti i dispositivi con livello/versione inferiore.
Scelta importante in fase di progettazione.
È così limitante?
Quando si tratta di una funzionalità fondamentale è inevitabile.
Funzionalità cosmetiche possono essere semplificate per versioni più vecchie di Android.
Support library di Android.
EvoluzioneAnno Versione Nome in codice Livello
2008 1.0 Apple Pie 1
2009
1.1 Petit Four 2
1.5 Cupcake 3
1.6 Donut 4
2.0 Eclair 6-7
20102.2 Froyo (Frozen Yogurt) 8
2.3 GingerBread 9-10
20113.0 HoneyComb 11-13
4.0 IceCream Sandwich 14-15
20124.1 JellyBean 16
4.2 JellyBean (MR 1) 17
20134.3 JellyBean (MR 2) 18
4.4 KitKat 19
● Riproduzione e cattura audio/video.● Riconoscimento vocale.● Soft keyboard● Widget.● Notifiche.● WebView.
Cupcake 1.5 (API 3)
● Gestures.● Sintesi vocale.● Supporto CDMA.● Supporto per dimensioni e
densità di schermi variabili.
Donut 1.6 (API 4)
● Mappe.● Navigazione● Supporto Bluetooth 2.1.● Live wallpapers.
Eclair 2.1 (API 7)
● Fragments.● Action Bar.● Supporto multimediale
migliorato.● Stile digitale.● Periferiche USB.
HoneyComb 3.0 (API 11-12)
● UI riprogettata (+coerenza).● Notifiche più potenti.● API sociali.
IceCream Sandwich 4.0 (API 14)
● Project Butter.● Notifiche espandibili.● Display secondari.● Lockscreen widgets.● Supporto per utenti multipli.
JellyBean 4.1-2 (API 16-17)
3.
Elementi principali di un'applicazione Android
Elementi principali di un'app
Activity
Service
Broadcast Receiver
Content Provider
Content Provider
Content Provider
Activity
Widget
Widget
Widget
Notification
Notification
3.1
Activity
Activity
Ogni Activity rappresenta una schermata di una applicazione.
Activity
Ad ogni Activity corrisponde (idealmente) un'attività atomica.
3.2
Servizi background
Service
Un’attività dell'app o del sistema invisibile all'utente (gira in background).
Alcuni esempi:Media player.Download di un file.Raccolta dati del sistema.Aggiorna le informazioni periodicamente.Completa un'azione intrapresa in una Activity.
Service
Non comunica direttamente con l’utente ma può comunicare con le activity (anche di altre applicazioni) e con il sistema.
Service
Se fondamentali per un’applicazione possono essere istanziati come foreground service.
Posizionano un'iconanella barra di sistema(visibili all'utente).
Non vengono terminateperché ciò peggiorerebbel'esperienza d'uso.
Hanno una notifica fissanella barra relativa.
3.3
Intent
Cos'è un Intent?
Costituiscono il sistema di messaggistica fra i vari componenti del sistema.
Ogni Intent è una struttura che incapsula dati.
Questi dati costituiscono una astrazione di:Un’operazione da eseguire.Un evento che si è appena verificato.
Componenti di un Intent
Action: descrive “cosa” intende fare.Di sistema: ACTION_VIEW, ACTION_EDIT, ACTION_SEND…
Category: descrive “come” viene lanciato l'Intent.
Default, Launcher, Preferenze, etc…
Data: informazioni passate al ricevitore.Flags: specificano modalità di passaggio.Component name: specifica l'esatto componente che gestirà l'Intent (opzionale).
Intent Resolution
Il mittente è sempre noto mentre il ricevente può non esserlo a priori.
Intent esplicito Il component name del componente destinatario è specificato (class name qualificato).
Intent implicito Il component name non è specificato. Il sistema si occupa di trovare il componente giusto (eventualmente potrà chiedere all'utente).
Intent Resolution
3.4
Notifiche
3.2.7 Notification
Servono per informare l’utente di un evento scatenato o avvenuto:
○ Nel sistema.○ Nell’Activity con cui l’utente sta interagendo.○ Nei componenti senza interfaccia (come i
Service).
Toast Notification
Per eventi avvenuti in background.
Nessun input dall’utente.
Status Notification
Per eventi relativi avvenuti in background.Richiedono l’input utente.Sono persistenti.
Nella barra delle notifiche finché l’utente non interagisce cliccandoci o cancellandole. Al click spesso viene lanciata un’activity.
Status Notification
Dialog Notification
Per eventi relativi all’Activity corrente.(Caricamento, conferma, etc…)
Supportano l’input utente.
4.
Sviluppo su Android
4.1
Cosa serve? Come si comincia? Aiuto!
Linguaggio
Il codice si scrive principalmente in Java.
Per alcune applicazioni molto specifiche anche in C++.
Layout, manifest ed alcune risorse vanno specificate in XML.
Strumenti
Disponibili come unico “bundle” messo a disposizione da Google:● Eclipse● Compilatore & co.● Strumenti (ADB, emulatore, AVD)● Immagini di sistema e librerie
4.2
Ciclo di vita di un'Activity
Ciclo di vita
Ciclo di vita al lancio
Ciclo di vita alla terminazione
Terminazione del processo
Riavvio del processo
4.3
Layout e grafica
View e Layout
Un Activity è composta genericamente da View e raggruppamenti delle stesse.
Layout in XML
Il layout è definito (normalmente) tramite un file XML.