Android, panoramica e sviluppo

21
 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

description

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.

Transcript of Android, panoramica e sviluppo

Page 1: Android, panoramica e sviluppo

   

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

Page 2: Android, panoramica e sviluppo

   

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.

Page 3: Android, panoramica e sviluppo

   

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

Page 4: Android, panoramica e sviluppo

   

Android – Modello di sviluppo

Android è open source, diffidate da chi dice il contrario.*

● Licenza Apache2 (con parti GPLv2)

● Sorgenti rilasciati sempre (honeycomb a parte) tempestivamente su http://android.git.kernel.org/

● Nonostante la relativa velocità di rilascio di nuove versioni il modello di sviluppo si avvicina più ad un modello “Cattedrale” piuttosto che “Bazar” (© Eric S. Raymond)

Sorgenti rilasciati tutti su un colpo, poca predisposizione ad accettare patch, tramacci con le aziende produttrici di dispositivi.

● Fork del kernel Linux

Fin da subito il kernel usato poteva essere considerato un fork, solo col tempo si è capito però che Google non è molto interessata a contribuire al kernel “mainline”. Linus in questo però si è dimostrato ottimista.

*Stallman ultimamente ha detto che Android non è software libero, non ho troppa difficoltà a dire che ha ragione, ma open source lo rimane.

Page 5: Android, panoramica e sviluppo

   

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.

Page 6: Android, panoramica e sviluppo

   

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.

Page 7: Android, panoramica e sviluppo

   

Android – problemi per gli utentiLa 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.

Page 8: Android, panoramica e sviluppo

   

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)

Page 9: Android, panoramica e sviluppo

   

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)

Page 10: Android, panoramica e sviluppo

   

Android - Programmiamo!

Basi della programmazione Android:

● Activity → UI

● Service → Servizi in background

● BroadcastReceiver → Ricevono “segnali”

Page 11: Android, panoramica e sviluppo

   

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.

Page 12: Android, panoramica e sviluppo

   

Android - Activity

Page 13: Android, panoramica e sviluppo

   

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.

Page 14: Android, panoramica e sviluppo

   

Android - InterfacciaCome 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).

Page 15: Android, panoramica e sviluppo

   

Android - InterfacciaLato 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

Page 16: Android, panoramica e sviluppo

   

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.

Page 17: Android, panoramica e sviluppo

   

Android - ServiziI 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”.

Page 18: Android, panoramica e sviluppo

   

Android - BroadcastReceiverIl 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 applicazioniche si trovano di default nel sistema possono esseretranquillamente sostituite da applicazioni alternative,come l'app Messaggi, il launcher, il browser...

Page 19: Android, panoramica e sviluppo

   

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.

Page 20: Android, panoramica e sviluppo

   

Android – Altri esempi di integrazione

Altri esempi intent-filter

AppLink

Page 21: Android, panoramica e sviluppo

   

FineI could have made money this way, and perhaps amused myself 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 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 back on years of building walls to divide people, and feel I had spent my life making the world a worse placespent my life making the world a worse place

Avrei potuto fare soldi in questo modo, e mi sarei anche potuto Avrei potuto fare soldi in questo modo, e mi sarei anche potuto divertire scrivendo codice. Ma sapevo che alla fine della mia divertire scrivendo codice. Ma sapevo che alla fine della mia carriera mi sarei guardato indietro verso anni passati a costruire carriera mi sarei guardato indietro verso anni passati a costruire muri per dividere le persone. E avrei sentito di aver speso la mia muri per dividere le persone. E avrei sentito di aver speso la mia vita rendendo il mondo peggiorevita rendendo il mondo peggiore

????

Happy coding.

Mail: [email protected] Twitter: @monossido Blog: lorenzobraghetto.com G+: Lorenzo Braghetto Jabber/Gtalk: [email protected]