Archivi categoria: Java

Android Programmazione Avanzata (seconda edizione)

Ho realizzato solo nei giorni scorsi che, preso dal solito turbine infinito di cose da fare, avevo totalmente scordato di pubblicare sul mio blog la notizia della pubblicazione della seconda edizione del libro “Android Programmazione Avanzata”. Per la precisione, il libro è stato pubblicato a giugno dello scorso anno e porta con sé tante novità.

libro_2nd

Prima di tutto sono cambiati gli autori: il grandissimo Emanuele Di Saverio ha lasciato il testimone a una compagnia più numerosa, composta da Fabio Collini, Matteo Bonifazi (già autore di Android in Sette giorni) e Alessandro Martellucci. In realtà, Fabio Collini ha curato circa il 50% degli argomenti, mentre io, Matteo e Alessandro abbiamo curato il resto. È cambiata anche la casa editrice: FAG ha ceduto la pubblicazione a LSWR.

È stato un lavoro molto faticoso ma entusiasmante. La fatica ha una doppia origine: prima di tutto, scrivere un libro di programmazione avanzata che distilli l’esperienza reale degli autori richiede tanto tempo, tanta sperimentazione e soprattutto costringe a scartare tutti quei temi di cui sono pieni il web e altri libri. In secondo luogo, man mano che gli anni avanzano, gli impegni di ciascuno (tra lavoro e famiglia) lasciano sempre meno tempo a disposizione della scrittura e purtroppo non tutte le sere si ha l’energia o l’ispirazione per fare un lavoro di qualità. Se la fatica non passa facilmente, lavorare con persone in gamba come Fabio, Matteo e Alessandro ha reso l’impresa raggiungibile. Sarebbe stato impossibile, anche con tutto il tempo del mondo a disposizione, raggiungere la qualità che ciascuno di loro ha portato al libro. Non diversamente dal 2012 con Emanuele, anche se dopo tre anni Android è ancora più grande, i temi sempre più numerosi e, appunto, tempo ed energie sempre di meno.

Io ho curato il capitolo su Bluetooth, che in questa nuova edizione si arricchisce di tutta la nuova specifica Bluetooth Low Energy.

Ecco la ghiotta lista di argomenti:

  • Activity e task in background (tema sempre caldissimo!!!)
  • Programmazione funzionale
  • Grafica e interfaccia utente
  • Supporto multidevice
  • Bluetooth
  • Android Wear
  • Chromecast e Google Cast
  • Qualità del codice
  • Sicurezza (appendice)

Spariscono notifiche push, NFC e networking, che ormai non sono più argomenti avanzati. Chissà quali spariranno nella terza edizione e quali saranno quelli nuovi. Direi che se ne parlerà tra qualche anno! 😀

Come sempre, il libro è disponibile in tutte le librerie fisiche e virtuali, ad esempio su Amazon e IBS.

Sviluppare applicazioni per Android in 7 giorni

Una delle domande che mi viene posta più di frequente è quale sia il modo migliore di approcciare lo sviluppo su Android.

Solitamente la risposta è semplice: “prendi i tutorial ufficiali e uno smartphone con cui giocare, lascia perdere le bibbie e gli emulatori”. Ritengo, infatti, che i tutorial ufficiali siano ben fatti e che toccare con mano il risultato del proprio lavoro sia gratificante e sfidante allo stesso tempo.

Mi rendo conto, però, che oggi Android è davvero tropo grande per partire da là (nel 2008, quando ho iniziato a giocarci, era decisamente molto più piccolo… seppur enorme rispetto a JME!). Anche i tutorial cominciano ad essere tanti e spesso diventa difficile orientarsi. Fermo restando il consiglio sull’uso di uno smartphone fisico, credo che un ottimo aiuto per avvicinarsi alla programmazione Android sia il libro recentemente pubblicato da Matteo Bonifazi per l’editore LSWR. “Sviluppare applicazioni per Android in 7 giorni” è un libro onesto: in poco meno di 200 pagine e senza la pretesa di candidarsi a onniscenza di Android, questo volume insegna le basi per tradurre le idee in app funzionanti e pubblicabili. Un passo per volta, un tema al giorno, appunto, per una settimana, dal setup dell’ambiente di sviluppo alla pubblicazione sul Play Store. Compresi tracciamenti e pubblicità. Senza paroloni, senza trucchi (tipo traduzioni 1:1 di altri testi, ndr). Un libro onesto, appunto, scritto da chi il codice lo scrive tutti i giorni. Il titolo non deve tranne in inganno: non è una guida imprecisa o all’acqua di rose, ma è evidente che l’autore ha faticato non poco per essere conciso (e già Pascal dice che essere brevi è molto più faticoso che essere prolissi: “Questa lettera è più lunga delle altre perché non ho avuto agio di farla più breve.”). Ovviamente il lettore deve conoscere i concetti base della programmazione in linguaggio Java e deve possedere i fondamenti della programmazione ad oggetti.

App-Android-7-giorni

C’è tutto? No, assolutamente no. C’è quello che occorre per iniziare? Sì, assolutamente sì. Matteo ha sapientemente tolto dettagli inutili, lasciando quelli che servono a comprendere con rigore i meccanismi base del sistema. Insomma, il libro vale quel che costa e il tempo che si passa a leggerlo. Per molti aspetti, ha un approccio da maker, con la coscienza che puntare ad oltre un miliardo di device richiede comunque metodo.

Il libro è disponibile in formato cartaceo e ebook su Amazon e altri bookstore.

C’è anche un sito ufficiale a supporto: https://androidinsettegiorni.wordpress.com/

Codemotion 2012

Anche quest’anno si rinnova l’appuntamento con il Codemotion, che si svolgerà a Roma il 23 e 24 Marzo. L’edizione 2012 porta due grandi novità: l’evento si svolge in due giornate (venerdì e sabato) e in contemporanea su due città (Roma e Madrid).

Insieme al caro Emanuele Di Saverio (giusto il tempo di riposarci dopo la pubblicazione di "Android – Programmazione Avanzata") terrò un talk dedicato alla tecnologia NFC. Faremo una panoramica sulla tecnologia e una ricognizione sulle API che consentono di utilizzarla.

Libro Android Programmazione Avanzata

Dopo tanti mesi di lavoro, tanto codice, tanti device, tanta revisione è finalmente arrivato il libro scritto a quattro mani con Emanuele Di Saverio: Android – Programmazione Avanzata.

Il libro, pubblicato dalle Edizioni FAG di Milano e realizzato con la partecipazione di Samsung Italia, è dedicato a chi già conosce la programmazione su Android e vuole approfondire alcune tematiche avanzate. Niente “Hello World”, niente introduzione ai componenti grafici e alle Activity: solo tecniche avanzate o approfondimenti su argomenti solitamente poco trattati (ad esempio, il testing o la tecnologia NFC).

Il testo è, in un certo senso, la summa dell’esperienza maturata in diversi anni di lavoro sulla piattaforma Android. Nasce dal pratico (progetti industriali) e dall’esperienza concreta degli autori (da Android 1.x ad Android 4!). Mancano, pertanto, quegli argomenti su cui né io né Emanuele abbiamo mai lavorato intensamente (ad esempio, giochi e grafica 3D). Per chi fosse interessato, in questa presentazione sono descritti nel dettaglio i nove capitoli che lo compongono:

Il libro è già acquistabile presso:

Chi preferisse acquistare l’e-book può farlo qui:

Prime impressioni su Honeycomb

Ho avuto la possibilita’ di toccare con mano le qualita’ di Honeycomb, la release 3.0 di Android dedicata ai tablet, su un Motorola XOOM WiFi arrivato dagli Stati Uniti (ci vorra’ ancora un po’ per vederlo in Italia).

Non sono solito fare recensioni di hardware (le lascio agli specialisti, quali TuttoAndroid o Androidiani), ma vorrei comunque raccontare le mie impressioni. Vorrei anche sorvolare molti degli aspetti positivi: anche questi sono piu’ che celebrati da Google e Motorola 🙂 In generale, Honeycomb e’ un ambiente di buona qualita’, molto potente e con una buona usabilita’; non e’ certo un prodotto rivoluzionario ne’, credo, il punto di riferimento per la user experience, ma sono convinto che ci siano basi solide e valide per creare dell’ottimo software per i tablet Android.

E’ inevitabile il confronto con il leader: l’iPad. Che piaccia o che non piaccia, prima dell’iPad i tablet erano un mero esercizio tecnologico; con l’arrivo dell’iPad, il mondo s’e’ messo ad inseguire Apple, borbottando, criticando, deridendo, ma comunque copiando. A quanto pare Apple ha fatto molte scelte giuste e neppure tanto scontate, se la concorrenza fatica anche a copiarle.

Io sono palesemente entusiasta del mondo Android e di questa piattaforma ho fatto il mio futuro professionale dei prossimi anni; nonostante questo, non posso non trovarne le lacune e, anzi, credo che evidenziare i punti deboli sia il modo migliore per trovare spunti di miglioramento.

Ecco qualche commento sparso:

– UI. Credo che Google abbia fatto un bel lavoro: l’interfaccia utente di Honeycomb e’ piacevole, abbastanza originale in se’ e sufficientemente coerente con quanto esiste su smartphone. Me la aspettavo piu’ bella, ma questo e’ un giudizio del tutto soggettivo. Ci sono nuove animazioni, ci sono nuovi menu’ della ActionBar e nuovi tab per navigare tra i Fragment di una Activity. Questa, in realta’, e’ una degli aspetti che mi lasciano perplesso: le applicazioni esistenti utilizzano i menu’ “classici” di Android (che qui non sono piu’ accessibili attraverso tasto fisico, ma per mezzo di un pulsante virtuale che compare nella System Bar immediatamente a destra del tasto di navigazione tra le applicazioni aperte), mentre le nuove si possono avvantaggiare del nuovo menu’: l’utente, dunque, si trova di fronte due user-experience diverse e deve necessariamente verificare, per ogni applicazione, dove sia stato messo il menu’. I nuovi tab, inoltre, sono sicuramente una bella novita’ e rinfrescata rispetto ai TabWidget della versione smartphone, ma quest’ultima continuera’ a soffrire di arretratezza e soprattutto costringera’ gli sviluppatori a fare due versioni delle applicazioni. E considerato che Android non offre un meccanismo simile all’Universal Binary di iOS, il processo complessivo si complica un po’ (si, lo so, giocando con risorse e codice si puo’ avere qualcosa di molto piu’ potente dell’Universal Binary, ma – ripeto – si tratta di qualcosa di piuttosto laborioso e decisamente non lineare). Qui sotto potete vedere il rendering dei menu’ nuovi (sul browser) e di quelli vecchi (sull’ottima Bluetooth Fine Transfer di Medieval Software).

– Hardware. Il Motorola XOOM e’ “un grosso tablet”. Non voglio ripetere qui le misure pubblicate in ovunque sul web, ma al tocco sembra piu’ corposo dell’iPad di prima generazione, decisamente enorme se paragonato all’iPad 2. Anzi, quello che stona e’ proprio il fatto che XOOM e iPad 2 siano praticamente coevi (hanno due mesi di differenza) ma lo XOOM sembra di una o due generazioni precedenti. Piu’ grosso, plasticoso e con la superficie touch decisamente meno cristallina di quella dell’iPad. Direi, pero’, che spessore, peso e alluminio siano gli aspetti che rendono l’iPad migliore. Curiosamente, lo XOOM nasce come dispositivo landscape: la videocamera, infatti, e’ posta sul lato lungo anziche’ su quello corto, come avviene sull’iPad. Anche il marchio Motorola leggibile solo in landscape suggerisce di impugnare il tablet in posizione orizzontale. Direi che per vedere un tablet figo dal punto di vista hardware dovremo aspettare i nuovi modelli Samsung.

– Prestazioni. Molto veloce. Merito del sistema operativo, merito del dual-core, merito della grafica, merito della fata turchina. Non lo so, ma e’ molto veloce. Unica grave pecca e’ una inspiegabile lentezza del browser. Scrollando le pagine (ad esempio verso l’alto) la porzione che era a schermo scorre velocemente mentre la nuova appare bianca e si aggiorna dopo una frazione di secondo. Questo e’ piu’ evidente su pagine complesse ma in generale si manifesta con qualsiasi sito. Capisco che il numero di pixel da gestire e’ grande rispetto ad uno smartphone, ma e’ anche vero che la potenza di calcolo a disposizione non e’ poca e soprattutto il browser diventa un componente indispensabile su un oggetto di questa categoria e, dunque, dovrebbe essere quello meglio curato. Qui sotto ho riportato il grafico del benchmark di Quadrant eseguito sullo XOOM:

– Applicazioni. Detto senza mezzi termini: quelle non ottimizzate per Honeycomb fanno proprio schifo! Un’applicazione semplice in ambiente smartphone, fatta con componenti standard e niente fronzoli, che puo’ essere definia “passabile” sul cellulare, vista sullo XOOM diventa davvero brutta. Il problema piu’ grosso (ne parlo nel prossimo punto) e’ che il Market non consente di filtrare le app fatte esclusivamente per Honeycomb: bisogna affidarsi al titolo assegnato dal publisher (“HD”, “for Honeycomb”, “tablet”). Il tema di default di Honeycomb, poi, e’ con fondo bianco, in leggera “controtendenza” rispetto al nero degli smartphone. Insomma, per sfruttare bene i tablet ci vogliono applicazioni ad hoc.

– Market. Da quanto e’ uscito l’Android Market ha collezionato piu’ lacune che traguardi di download. Classifiche non localizzate, prezzi delle applicazioni nella valuta del publisher (mai viste le applicazioni con il prezzo espresso in Yen? 😀 ), mancanza delle statistiche per gli sviluppatori: queste sono solo alcune delle mancanze dell’Android Market che con il tempo sono state risolte. Ora, con l’arrivo di Honeycomb, molte di quelle mancanze sono piu’ o meno colmate (resta quella delle classifiche localizzate) ma se ne presenta una nuova, che accennavo sopra: non c’e’ (o, se preferite, non ho trovato) un modo automatico per vedere SOLO per applicazioni sviluppate per Honeycomb. Il Market consente di sfogliare tutta la lista delle applicazioni disponibili e non c’e’ quella bella suddivisione dello store che troviamo su iPad.

– Manufacturer. L’ho twittato una marea di volte e non ho timore di scriverlo nuovamente qui: malgrado Motorola produca dell’hardware di ottima qualita’, ha una politica pessima di supporto all’aggiornamento software. Detto in parole povere, comprare un terminale Motorola significa potenzialmente mettersi in casa un oggetto che sara’ obsoleto con il prossimo rilascio del sistema operativo, perche’ verosimilmente Motorola lo aggiornera’ dopo molti mesi o non lo aggiornera’ per niente. In passato, vedere il mio HTC Magic del giugno 2009 ufficialmente aggiornato a Froyo entro il 2010 e contemporaneamente vedere il Motorola Milestone comprato a gennaio 2010 ricevere quello stesso aggiornamento ad aprile 2011 mi ha fatto arrabbiare non poco. Ho dunque il ragionevole dubbio che Motorola abbandoni lo XOOM (primo device al mondo con Honeycomb) cosi’ come ha di fatto abbandonato il Milestone (primo device al mondo con Eclair, nella sua declinazione americana Droid). Arrivera’ lo XOOM 2 o qualcos’altro che distarra’ il manufacturer dai clienti che le hanno dato fiducia al primo lancio. Insomma, grandi annunci, grandi fanfare, ma poi l’acquirente e’ lasciato a se’ stesso. Inutile dire che se i manufacturer non supporteranno per almeno DUE anni i terminali Android in commercio, Apple restera’ l’unica garanzia di avere un oggetto che diventa obsoleto piu’ lentamente. Qualcuno dice che Apple lo fa perche’ ha pochi modelli in circolazione: questo e’ vero, ma se un manufacturer decide di vendere 10 modelli DEVE attrezzarsi per supportarli tutt’e 10. Inoltre – lo sappiamo bene – su 10 modelli che escono difficilmente abbiamo 10 hw diversi: cambiano poche cose, giusto per catturare l’attenzione di diverse fasce di clientela.

– USB. Una nota a parte merita l’interfacciamento via USB; la cosa potra’ apparire strana e di poca importanza, ma secondo me cambia parecchio la user experience su Android. Finora gli smartphone equipaggiati con Android sono stati caratterizzati da pochissima memoria flash interna (da 256MB al giga, circa), lasciando alla SD card il compito di memorizzare immagini, musica ed eventualmente i dati voluminosi delle applicazioni piu’ esigenti. Poiche’, pero’, le applicazioni si installano della memoria interna, era facile saturarla in breve tempo, costringendo l’utente a rimuovere delle applicazioni per installarne di nuove. Prima con delle utility di terze parti (utilizzabili sono con terminali rooted), poi con l’arrivo di Froyo, e’ stato possibile installare le applicazioni su SD. Anche questa e’ stata una soluzione tampone: la memoria a disposizione del sistema operativo restava comunque ridotta e comunque la rimozione della SD rendeva invisibili le applicazioni su di essa installate. Stesso discorso per terminali quali l’ottimo Nexus S, che pur dichiarando 16GB di memoria, offre tutto questo spazio come storage USB (esterno) e, dunque, soggetto alle stesse limitazioni di cui sopra (e’ pur vero che lo spazio a disposizione del sistema e’ di 1GB, dunque ben oltre la media dei terminali Android). In sintesi: per poter esportare la SD (o porzioni della memoria interna) questa deve essere “staccabile” e condivisibile sia USB. Finora questo e’ avvenuto grazie al profilo MSC (Mass-Storage Class), che consente al computer host il controllo diretto e a basso livello della periferica di memorizzazione (sino al livello del filesystem fisico). Honeycomb sostituisce MSC con il profilo MTP (Media Transfer Protocol), che condivide un filesystem logico accessibile contemporaneamente dal device e al computer host. In pratica, il controllo a basso livello resta ad Android, mentre il computer accede al filesystem attraverso un demone che lo virtualizza (come se fosse un server FTP o WebDAV). Il computer host, dunque, non puo’ effettuare operazioni come formattazione o partizionamento del filesystem. Il vantaggio e’ immediato: i 32GB del device sono sempre accessibili e tutti a disposizione del sistema operativo e delle applicazioni. Finalmente si lavora senza quelle odiose limitazioni in mente. E anche il pannello di controllo di dice che c’e’ un’unica memoria, piu’ che abbondante:

Vi e’, ovviamente, il rovescio della medaglia: mentre MSC e’ universalmente supportato, per MTP occorre un driver. Su Windows e’ integrato con il sistema operativo: il protocollo e’ stato progettato da Microsoft per i suoi player mp3! Su Linux ci si appoggia alla libmtp (usata da molti software), mentre su Mac OS X l’unica possibilita’ e’ rappresentata dall’utility XNJB. Dubito fortemente che vedremo MTP integrato nel finder in tempi brevi (ce la vedete Apple a supportare contemporaneamente un protocollo di Microsoft per i tablet di Google? 🙂 ).

In sintesi: benvenuto Honeycomb, c’era bisogno di questo slancio nel mondo Android. Ora aspettiamo il merge con la piattaforma smartphone, un Market piu’ intelligente, una UI piu’ coerente, una maggiore serieta’ dei manufacturer per l’aggiornamento dei terminali.

Android Stack

Spesso amici e colleghi mi chiedono quali terminali Android uso per fare i test… giusto qualche giorno fa li ho messi tutti assieme e ho fatto questa “foto di famiglia”:

IMG_7813

Se volete conoscere quali terminali sono, guardate la foto su Flickr oppure guardate lo stack partendo dal basso (Archos 7 Home Tablet, Zii EGG, Motorola Milestone, Geeksphone One, HTC Dream, HTC Magic, LG Optimus One, Samsung Galaxy Mini, ZTE Blade, Huawei U8220, Samsung Nexus S, Huawei Ideos).

Nasce Android Gears

Da tempo volevo avviare un regolare blogging su Android, per condividere esperienze sullo sviluppo per questo interessante sistema operativo. Alla fine, per un motivo o per un altro, non ci sono riuscito. Scrivere un articolo richiede tempo, che e’ la risorsa che scarseggia di piu’.

Se il blogging non e’ possibile, proviamo con il microblogging, ovvero con Twitter. 140 caratteri, non uno di piu’. In fondo va bene cosi’: condividere conoscenza ed esperienze non deve passare necessariamente per articoli chilometrici. Basta una keyword, un link, una nota. Questo e’ cio’ che gli sviluppatori si scambiano quotidianamente mentre scrivono codice. “Ti ricordi come si fa questo?”, “A te e’ capitato questo errore?”, “Hai letto quell’articolo?”, “Guarda questa classe: puo’ essere utile in tante situazioni”. Ecco, Android Gears vuole essere il mio modo di cinquettare quel che scopro, imparo, sviluppo su Android. Senza presunzione, senza grandi pretese: solo volonta’ di condividere, niente di piu’. Spero possa essere utile a tutti i colleghi e gli appassionati di sviluppo software.

Come “effetto collaterale”, vorrei che la sequenza di tweet costituisse una collezioni di tips da scorrere, come se fosse una guida: rileggendola tra 4 mesi, o magari tra un anno, vorrei che il lettore trovasse comunque informazioni interessanti (ammesso, ovviamente, che le cose non siano cambiate radicalmente su Android), senza informazioni inutili come “e’ stato annunciato il terminale 123 della PQR Corporation”, info utilissima oggi ma inutile fra un mese. Finche’ possibile, dunque, evitero’ dei “tweet di annuncio” (ad esempio, “e’ uscito il firmware XYZ per il terminale ABC), ma meno che non si tratti di cose molto importanti e strettamente legate all’attivita’ di sviluppo (ad esempio, “e’ stato rilasciato l’SDK per Google TV”).

Poiche’ il web non e’ un mare di isole ma di “posti connessi”, qualche tweet conterra’ anche link a risorse per gli sviluppatori. Per lo stesso motivo di cui sopra, evitero’ segnalare link ben noti e scontati, ma segnalero’ quelli piu’ particolari o esoterici (ad esempio, come far funzionare ADB per un certo terminale ribelle).

That’s all, ho scritto fin troppo.

Se volete, potete seguirmi su http://twitter.com/androidgears