Anche se i tutorial in formato elettronico, aggiornati e gratuiti, non mancano, chi preferisce la concretezza di un manuale cartaceo potrebbe prendere in considerazione l'acquisto di questo volume introduttivo sulla versione 4 di Android, una
guida di base, come suggerisce il titolo, ma che non rinuncia alla completezza, (almeno come numero di argomenti, facendo leva proprio sulle dimensioni e la varietà di argomenti trattati).
Il manuale comincia con una brevissima
prefazione, nella quale sono indicati i prerequisiti per il lettore, e dove compare anche un
collegamento utile a comprendere cosa sia necessario sapere, in particolare riguardo a Java, prima di iniziare la programmazione Android. A questo proposito, esiste anche un manuale
ad hoc di Apress, "
Learn Java for Android Development", di cui si parla anche in
un altro libro.
Dalla
pagina web del libro è possibile scaricare il codice sorgente dei progetti insieme all'indice completo, ed è possibile accedere al modulo per la segnalazione degli errori. Vi si trova anche una descrizione un po' sommaria dei contenuti, che riflette in poche righe il contenuto di quarantanove capitoli. Lasciando ogni speranza, dunque, entriamo.
Il
primo capitolo illustra
the big picture: cosa c'è e cosa manca nei dispositivi mobili, cos'è Android e in particolare le sue quattro articolazioni (attività, servizi, intenti e fornitori di contenuti) e tutto quanto mette a disposizione; infine, un quadro di quello che si troverà nel seguito del libro: prima la predisposizione dell'ambiente, poi la creazione di un semplice progetto, e infine l'esplorazione completa o quasi delle API.
Eccoci dunque al
secondo capitolo, dove ci si predispone a lavorare installando il JDK dalla versione 5 in su, poi gli strumenti di sviluppo Android, il plug-in per Eclipse, o eventualmente Ant di Apache, e poi impostando l'emulatore o, se esiste, collegando il dispositivo su cui effettuare le prove. Come promesso, il
terzo capitolo porta alla creazione del primo progetto Android, con o senza Eclipse, per poi procedere nel
quarto all'analisi delle strutture che sono state così generate, e nel
quinto all'esame delle peculiarità di Eclipse, anche se il capitolo si conclude rivendicando una completa indipendenza dall'ambiente di sviluppo usato dal lettore.
Il
sesto capitolo mostra come apportare alcune migliorie al progetto appena creato, in particolare al supporto di diversi formati dello schermo e differenti versioni di Android. Qui si conclude la prima parte, che evidentemente ha uno scopo di conoscenza molto generale; infatti la seconda si apre con una riscrittura del progetto che viene effettuata molto rapidamente nel
settimo capitolo, inserendo il codice per creare una semplice presentazione di informazioni (data e ora).
Con l'
ottavo capitolo si iniziano a visitare i layout XML prima di arricchire un po' la conoscenza dell'interfaccia grafica tramite i widget del
nono capitolo, e i container del
decimo. I capitoli
undici e dodici invece avviano all'interazione con l'utente, attraverso la tastiera, ma anche controlli cone
Spinner,
GridView e i campi di testo che eventualmente si autocompletano. Altri strumenti utili di questo genere sono le
ListView approfondite nel
capitolo tredici, o i
TimePicker del
quattordicesimo.
Nel
quindicesimo capitolo invece si parla del browser e di come includere il package
android.webkit nei progetti. Un leggero cambio di rotta nel
capitolo sedici, dove si parla invece di menu, e nel
diciassette, che in tre pagine e due figure accenna ai messaggi pop-up. Altro capitolo lampo il
diciottesimo, che impiega appena quattro pagine per spiegare le principali caratteristiche delle cosiddette attività, e dei relativi cicli di vita con i metodi correlati. Qualche dettaglio in più viene invece inserito nel
diciannovesimo capitolo, dedicato alla gestione della rotazione.
Il
capitolo venti introduce un argomento complesso e non banale, ovvero i thread, e così anche i
due successivi che si occupano di
intent, attività e subattività. Procedendo sulla strada delle applicazioni complesse si incontra la necessità di gestire informazioni salvate al di fuori del codice Java strettamente legato all'applicazione, come viene mostrato nel
capitolo 23 che tra gli altri esempi si occupa di immagini, XML, caratteri o altre tipologie di file. La seconda parte del libro si chiude con il
capitolo ventiquattro nel quale vengono rapidamente esplorati gli stili, prendendo spunto da un esempio e concludendo con una fulminea definizione e descrizione dei temi.
A questo punto si apre la
terza parte del libro, dedicata ai tablet, partendo da una considerazione storica relativa alla risoluzione dei dispositivi Android; dal 2009 in poi si assiste ad una moltiplicazione dei formati e del relativo supporto, e dalla versione 3.0 troviamo due modalità di gestione delle diverse dimensioni del display, di cui si parla qui, nel
capitolo 28, oltre che nella documentazione. Nel frattempo, i
capitoli 26 e 27 sono dedicati ad alcuni aspetti specifici dei tablet come la
Action Bar.
La terza parte si chiude con il
capitolo ventinove, dedicato allo spinoso problema dei cambi della piattaforma: al momento esce una nuova versione ogni sei-dodici mesi, e le cose cambiano anche nell'hardware con l'arrivo di televisori, netbook e altre diavolerie che in futuro saranno adattate o inventate. Il problema si rileva fin dall'installazione degli strumenti di sviluppo, e prosegue con la possibile confusione che nasce leggendo di target o SDK version, per cui è necessario chiarire bene i concetti e soprattutto presentare le soluzioni giuste per capire di quali classi si dispone, e come ad esempio isolare il codice Honeycomb o scrivere app dedicate solo al tablet.
Col
capitolo trenta inizia la
quarta parte del libro, che parla di accesso ai file in lettura e scrittura, tenendo conto dell'importanza della velocità e della destinazione. Attenzione in certi casi anche al file system YAFFS, problema peraltro aggirabile usando
SQLite o la classe
Java RandomAccessFile in modalità sincrona.
Il
capitolo trentuno è dedicato alla preferenze, mappe formate da coppie chiave/valore che permettono di specificare e conservare la configurazione di un programma o di una singola attività, grazie alle API che vengono qui illustrate ed esemplificate. Il
successivo invece introduce
SQLite, pur riconoscendo fin dalla premessa che per approfondire l'argomento sarebbe necessario consultare altro materiale. L'esempio parte dalla creazione del database e, dopo la creazione delle tabelle e l'inserimento dei dati, mostra come effettuare delle query e visualizzarli in una
ListView. Un cenno anche alla possibilità di distribuire un'applicazione con dati di esempio.
Il
capitolo 33, anche se breve, potrebbe aprire nuovi orizzonti fino a sviluppi imprevedibili, dal momento che spiega come integrare librerie Java nel progetto Android, ma soprattutto come fare in modo che poi il tutto funzioni, per esempio limitandosi ad includere il codice strettamente necessario, magari poi ricompilandolo prima dell'uso. Dal momento che si può incorporare un linguaggio di scripting, viene proposto un esempio di IDE BeanShell, per poi concludere il capitolo con indicazioni sull'uso di altri linguaggi come JRuby, Perl Python, Lua, Rhino e PHP.
Un altro capitolo interessante è il
trentaquattresimo, dedicato alla comunicazione via Internet, via Wi-Fi o con costosi servizi di telefonia mobile, e all'uso che ne possono fare le applicazioni Android, a parte quello già illustrato nel capitolo 15 a proposito di
Webkit. L'intenzione è quella di usare e riusare componenti già esistenti, partendo dalla libreria
HttpClient di Apache inclusa nel sistema.
Con il
capitolo trentacinquesimo inizia la
quinta parte del libro, dedicata ai servizi, ovvero quelle attività durature che a volte bisogna prolungare anche quando ne vengono avviate delle altre; ad esempio, si può mantenere la connessione a una chat anche se nel frattempo arriva una telefonata, oppure aggiornare un feed RSS, o magari connettersi alla rete cellulare per effettuare aggiornamenti e incrementare silenziosamente i consumi del cellulare.
Non sono molte le applicazioni che necessitano di servizi, e quasi mai ne serve più di uno, ma si tratta di strumenti che è bene conoscere e sapere usare quando serve, a partire dalle classi che vanno estese per proseguire con i metodi, compreso
onTrimMemory introdotto da Android 4.0 per la gestione automatica di situazioni in cui la memoria scarseggia. Il
capitolo successivo esamina alcuni scenari d'impiego dei servizi e la relativa implementazione; ad esempio, il download, l'ascolto di audiolibri o musica, l'uso di un Web Service per il reperimento di informazioni.
Il passaggio successivo, argomento del
capitolo 37, riguarda la gestione delle notifiche rivolte all'utente attraverso vibrazioni del telefono, messaggi pop-up, o icone che si muovono o cambiano aspetto; evidentemente si tratta di un insieme di capacità organizzate sotto forma di framework, che permette ad esempio di aggiungere icone di stato o lampeggiamenti vari a quelli eventualmente già presenti sul dispositivo, nei limiti del possibile. Nell'ultima sezione del capitolo vengono evidenziate alcune peculiarità di
Ice Cream Sandwich e
Honeycomb.
La
sesta parte del libro affronta alcuni argomenti di varia natura come le richieste di permessi nel
capitolo 38, l'accesso a servizi legati al GPS nel
capitolo 39, l'uso delle mappe di Google nel
sucessivo — prende in considerazione anche i possibili problemi legali o di contratto ed eventuali
alternative — la gestione delle chiamate telefoniche nel
41 e dei font nel
42, mentre il
capitolo 43 si occupa di strumenti di sviluppo aggiuntivi, come ad esempio
Hierarchy Viewer per esplorare la ramificazione delle classi di una applicazione, ma soprattutto DDMS per controllare un gran numero di aspetti e attività dell'applicazione.
Avviandosi alla conclusione si parla del possibile utilizzo di piattaforme alternative per lo sviluppo Android: anche se principalmente si utilizza Java, c'è spazio anche per chi conosce meglio e preferisce JavaScript oppure HTML5 —
capitolo 45 — PhoneGap, esaminato nel
capitolo 46, o magari Rhodes, JRuby, Mono,
App Inventor o
Titanium Mobile, brevemente trattati tutit insieme nelle sei pagine del
capitolo 47.
In chiusura, cinque pagine del
capitolo 49 tratteggiano alcune delle possibili linee di sviluppo futuro della piattaforma, mentre l'ormai tradizionale domanda
Where Do We Go from Here trova una breve risposta nell'
ultimo capitolo del libro, il numero 49.