Android, panoramica sulla storia, la licenza, il modello di sviluppo, perchè e come Google si è buttato nel mondo mobile.
Android programmazione, panoramica veloce sulle particolarità della programmazione Android rispetto altre piattaforme.
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Android, panoramica e sviluppo
1. Chi sono
Lorenzo Braghetto
@monossido
Student of Computer science in University of Padua,
Free Software addicted,
Travels lover,
Android developer,
Rugby fan.
www.lorenzobraghetto.com
2. Android – la crescita
● Inizialmente sviluppato dalla Android Inc. acquisita da Google nel 2005
● Uno dei cofondatori della Android Inc., Andy Rubin, ora è vice presidente del settore
mobile di Google
● A fine 2007 viene fondata la Open Headset Alliance, comprendente oggi 84
soggetti fra produttori software, hardware e operatori mobili.
● Subito dopo viene rilasciato l'SDK di Android versione 1.0
● Settembre 2008 primo telefono Android, T-mobile G1 (aka HTC Dream) - “With
Google”
● Nel 2009 c'è il primo boom; febbraio esce Android versione 1.1, aprile la 1.5,
settembre la 1.6, ottobre la 2.0
● Gennaio 2010 esce Android 2.1, assieme al primo Google Phone, il Nexus One.
● Maggio 2010 esce Android 2.2, considerata una versione stabile e matura di Android.
● Dicembre 2010 esce Android 2.3, assieme al secondo Google Phone, il Nexus S.
● Febbraio 2011 esce Android 3.0, prima versione di Android completamente closed
source.
3. Android - Numeri
550K terminali attivati al giorno
(si parla già, non ufficialmente, di 1milione al giorno)
135 milioni di terminali venduti
400 modelli diversi di device
dati aggiornati a giugno 2011 che riguardano solo i device con le Google Apps
5. Android – i nostri telefoni
Che software gira nei nostri telefoni?
È Android, ma non è Android.
Nella stra-grande maggioranza dei telefoni gira sempre
una versione di Android più o meno pesantemente
modificata dal produttore.
Merito o demerito della licenza Apache2, che permette a
chiunque di prendere i sorgenti Android, fare le proprie
modifiche e rilasciarle con la licenza che più gli aggrada,
anche closed source.
Solo i Google Phone possono “vantarsi” di far girare una versione di
Android direttamente derivata dai sorgenti Google. Anche in questo caso
però non bisogna dimenticarsi delle Google Apps proprietarie e di
eventuali probabili driver e librerie anch'esse proprietarie.
6. Android – Perchè e come.
Perchè Google si è buttata nel mondo mobile? E perchè l'ha
fatto utilizzando un modello di sviluppo open source?
Perchè ha scelto la licenza Apache2?
● Il mobile è diventata una grande opportunità, Google l'ha capito giusto in
tempo ed è riuscita a smuovere il mercato.
● Google, da sempre, guadagna soldi con l'advertising offrendo servizi
gratuiti agli utenti. Questo è un modello di business che si adatta molto
bene al modello di sviluppo open source. Il software non è un prodotto
da vendere, ma un servizio.
● Apache2 è perfetta per accellerare l'adozione di una nuova piattaforma.
I produttori non sprecano soldi a reinventare la ruota e possono
“brandizzare” a piacere Android, nel frattempo Google continua ad
aumentare il bacino di utenti che usano i suoi servizi.
7. Android – problemi per gli utenti
La scelta della licenza Apache2 e di un modello di distribuzione
aperto a qualunque produttore ha creato qualche problema agli
utenti (e agli sviluppatori).
L'utente che compra un nuovo telefono con Android andrà ad usare in realtà
“Android by $produttore”.
Tutto quello che riguarda la manutenzione del software, quindi, non è
responsabilità di Google, ma dei produttori. Questo può comportare per
esempio che:
● per motivi commerciali viene deciso di non aggiornare più il software di
alcuni dispositivi (tipicamente di fascia bassa)
● se arrivano gli aggiornamenti normalmente arrivano sempre in ritardo rispetto
i Google Phone
● vengono aggiunti bug (vedi camera samsung Galaxy S)
● l'interfaccia, cambiando, può cambiare anche l'estetica delle applicazioni
create da terzi.
8. Android - vantaggi
E i vantaggi?
● SO mobile open source, con il progetto Neo Freerunner fallito e Meego
abbandonato teniamoci ben stretto Android (e speriamo in Tizen)
● Un'unica piattaforma sviluppata da un colosso dell'informatica
disponibile in tante diverse versioni e, soprattutto, che gira su hardware
tanto diversi è un grosso vantaggio sia per l'utente che per lo
sviluppatore.
● Non è solo il codice che è aperto, ma tutto l'ecosistema. A partire dalla
semplice libertà di personalizzazione dell'utente, passando per un market
senza filtri e imposizioni dall'alto, libertà di installare un'applicazione
senza passare dal Market, buona possibilità di integrarsi col sistema
tramite le API.
● Naturalmente la possibilità di crearsi una propria versione di Android :) (se
si ha un dispositivo con bootloader sbloccabile)
9. Come evitare gli svantaggi e
godere dei vantaggi?
Comprate un Google Phone e compilatevi la vostra
personale versione di Android o usate/compilate quella di
qualcuno più esperto di voi. (cyanogen ;) )
● + i Google Phone hanno il supporto diretto in AOSP
● - rimarrete comunque dipendenti da librerie e driver proprietari oltre che
dalle Google Apps (se le volete)
10. Android - Programmiamo!
Basi della programmazione Android:
● Activity → UI
● Service → Servizi in background
● BroadcastReceiver → Ricevono “segnali”
11. Android - Activity
L'activity è quel processo che si prende carico di visualizzare
l'interfaccia grafica dell'applicazione.
Vita di un'activity:
onCreate() → onStart() → onResume() →
onRestart() →
onPause() → onStop() → onDestroy()
Il sistema può decidere, nel caso di scarsa quantità di ram
disponibile, di distruggere le activity che ha in memoria.
13. Android – Activity
Lo stato di un activity viene salvato?
● Fino a che l'activity rimane nell'onStop() o nell'onPause() l'activity
mantiene tutti gli oggetti in memoria e l'utente che tornerà ad
un activity già precedentemente utilizzata la vedrà inalterata.
● Se l'activity entra nell'onDestroy i dati venogno, ovviamente, persi.
In quel caso lo sviluppatore può preoccuparsi di salvare alcuni
dati “critici” grazi al onSaveInstanceState() e a recuperarli con
l'onRestoreInstanceState()
Una volta con meno di 256mb di ram il secondo caso era il più probabile.
Ora con 512mb di ram il problema è meno marcato.
14. Android - Interfaccia
Come viengono disegnati gli oggetti di un
interfaccia?
Tramite file XML è possibile realizzare
l'interfaccia.
Recentemente l'editor visuale ha finalmente
raggiunto livelli accettabili (ma non
sufficienti).
15. Android - Interfaccia
Lato codice java l'interfaccia scritta in XML va aggiunta col comando
setContentView() nel metodo onCreate()
Qualsiasi altra interazione dell'utente con l'interfaccia grafica può essere
implementata nell'onCreate() o negli altri metodi, ma in questo modo le
azioni verranno eseguite nel Thread dell'UI, rallentandolo.
D'altra parte nessun altro Thread esterno può modificare la UI.
Soluzione → AsyncTask
16. Android – Supportare diverse
Risoluzioni
Un grande pregio di Android è che con relativamente poca fatica si
possono creare applicazioni compatibili con i più disparati dispositivi. I
problemi principali sono la grandezza dello schermo e la densita di pixel.
● Regola numero 1, AndroidManifest.xml
● Regola numero 2, usare i dp(Density-independent pixel ) e se proprio
necessario le cartelle layout-small/medium/large/xlarge (che identificano
la grandezza dello schermo)
● Regola numero 3, usare le cartelle drawable-*dpi per le immagini (che
identificano la densita di pixel) e se necessario usare il tool Draw 9-patch.
17. Android - Servizi
I servizi si usano quando c'è bisogno di un processo che andrà in
background e che non è legato a nessun'activity particolare.
Ciclo di vita di un servizio:
onCreate() → onStartCommand()
→ onDestroy()
Anche i Servizi, come le Activity, possono essere killati dal sistema
se manca RAM.
Per ovviare a questo problema si può usare il metodo
startForeground() che richiede come argomento un
oggetto “notification”.
18. Android - BroadcastReceiver
Il BroadcastReceiver è un “ricevitore” di segnali. Può essere usato
per segnali custom o segnali generati dal sistema.
● Segnali custom, potrebbe service al cambio di un'impostazione da parte
dell'utente o per avvisare un activity o un servizio di un certo evento.
● Segnali mandati dal sistema; utilissimi per l'integrazione col sistema,
alcuni esempi:
Grazie a questi Broadcast Intent molte applicazioni
che si trovano di default nel sistema possono essere
tranquillamente sostituite da applicazioni alternative,
come l'app Messaggi, il launcher, il browser...
19. Android – Altri esempi di
integrazione
● Intent filter
Nell'AndroidManifest è possibile specificare che una certa
Activity riesca a gestire precise azioni e dati e che faccia parte
di una precisa categoria. Esempio, fare in modo che compaia
fra le applicazioni che riescono a “gestire” immagini.
20. Android – Altri esempi di
integrazione
Altri esempi intent-filter
AppLink
21. Fine
I could have made money this way, and perhaps amused myself
writing code. But I knew that at the end of my career, I would look
back on years of building walls to divide people, and feel I had
spent my life making the world a worse place
Avrei potuto fare soldi in questo modo, e mi sarei anche potuto
divertire scrivendo codice. Ma sapevo che alla fine della mia
carriera mi sarei guardato indietro verso anni passati a costruire
muri per dividere le persone. E avrei sentito di aver speso la mia
vita rendendo il mondo peggiore
??
Happy coding.
Mail: lorenzo@lorenzobraghetto.com
Twitter: @monossido
Blog: lorenzobraghetto.com
G+: Lorenzo Braghetto
Jabber/Gtalk: monossido@lorenzobraghetto.com