Android visto da dentro

L’articolo della settimana scorsa del nostro caro Alessio, che potete rileggere qui, mi ha dato lo spunto per condividere con tutti voi la mia esperienza con Android, questa volta però dal punto di vista di uno sviluppatore quale sono, che ha conosciuto questo OS fin dalla sua nascita e che attualmente ci lavora, con molta soddisfazione, in maniera assidua da qualche tempo a questa parte.

Conobbi Android nel lontano dicembre del 2007, quando uscita la release m3-rc37a, corsi subito a scaricare tutto il pacchetto di sviluppo delle applicazioni, compreso l’ambiente Eclipse in linguaggio Java.

Ricordo che ci lavorai sopra solo qualche settimana e solo per diletto, spinto più che altro dalla curiosità di prendere confidenza con il mondo, a me sconosciuto all’epoca, degli smartphone, e che abbandonai il tutto in vista di tempi migliori in quanto il materiale a disposizione era molto incompleto, ed anche solo il design di una banale interfaccia era molto complesso.

Mi ripromisi però che ci avrei riprovato in futuro, in quanto rimasi affascinato dalle potenzialità e dalle promesse di Google, ma ho dovuto aspettare sino all’inizio di questo 2011 per concedergli una nuova chance. Capita infatti che un mio amico, project manager di una azienda di sicurezza produttrice di un antifurto wireless su rete GSM per aziende e privati, mi chiese se fosse possibile creare un software di telegestione per l’impianto, completamente indipendente e che girasse su uno smartphone di nuova generazione.

Preso così su due piedi proposi subito l’iPhone ed il relativo iOS quale piattaforma di sviluppo, ma addentrandomi nei dettagli tecnici dell’operazione, mi accorsi come il solo fatto di non poter interpretare gli sms in arrivo costituiva, per un’applicazione di quel tipo, uno scoglio insuperabile. Anche la mia indagine su Windows Phone 7 andò male più o meno per gli stessi motivi, e fu così che mi tornò in mente il robottino verde di Android!

Con mia sorpresa scoprii che il sistema operativo era maturato parecchio, che tutte le funzionalità sia dell’OS che dell’hardware erano più o meno accessibili dalle API, e che finalmente i tools di sviluppo erano diventati fruibili con facilità, senza contare il fatto che ci sono terminali con un sacco di funzionalità a partire da 80 euro!

Una delle cose che amo di più di questo sistema è il concetto di base per quanto riguarda la sicurezza delle applicazioni di terze parti, che come ben sappiamo costituiscono una grossa fetta del successo di un dispositivo piuttosto che di un altro. Il motivo per cui infatti, alcune funzionalità sono bloccate su iOS e/o WP7, come ad esempio la “lettura” degli sms o delle email, è la sicurezza: un’app che abbia accesso a queste informazioni potrebbe infatti essere molto pericolosa, in quanto potrebbe rubarci preziose informazioni contenute nel telefono (rubrica, sms, mail, files…).

Android invece, nel modo in cui vi mostrerò di seguito, “scarica” sull’utente la responsabilità di ciò che installa (come succede sul pc d’altro canto), e trovo questo ribaltamento rispetto al resto del mondo estremamente valido per due motivi. Il primo, è che è ora che tutti gli utenti diventino consapevoli di ciò che fanno sui loro terminali, sia che si tratti del PC personale, dell’ufficio o del telefono. Il secondo è che noi sviluppatori onesti, possiamo realizzare ciò che vogliamo senza essere costretti a restrizioni, fatemi dire assurde, per colpa dei soliti malintenzionati disonesti! Ciò che bisogna fare quando si realizza un’app su Android, è inserire una serie di righe di questo tipo:

<uses-permission android:name=”android.permission.SEND_SMS” />

<uses-permission android:name=”android.permission.RECEIVE_SMS” />

L’applicazione in sostanza, è obbligata a dichiarare quali funzionalità con potenziale impatto sulla sicurezza intenderà usare, in questo esempio la possibilità di inviare e ricevere sms, e tali informazioni saranno poi ben mostrate all’utente che acquista ed installa l’applicazione dal market. Pertanto, se io desiderassi creare un’app che legga segretamente gli sms potrei farlo, ma l’utente è avvisato che ciò che sta scaricando ed eseguendo compierà questa operazione, e sarà sua cura decidere se permetterglielo oppure no.

Ora voi potreste giustamente obiettare come nessuno vada a leggere seriamente questi avvisi e che l’utente debba essere protetto sempre e comunque, ma io non la penso così: quando comprate un’auto, è vostra cura non fare le curve ai 200 all’ora, non è l’auto che deve integrare dei sistemi di sicurezza per impedirvelo, o no? Certamente i problemi di sicurezza permangono, ma quelli ci sono anche in casa Apple e Microsoft, e la situazione si aggrava se si utilizzano apparecchi con il jailbreak di turno, ma a quel punto lasciatemi dire che ve la andate proprio a cercare!

La “libertà”, non solo in questo ambito, è una cosa necessaria e benefica, benché, sia chiaro, pericolosa: ma non possiamo però evolvere se sottostiamo alle rigide regole di una o due aziende, ed è quindi necessario rischiare su una piattaforma più aperta. Alessio nel suo articolo, ha parlato di associazione tra Windows ed Android, proprio perché la relativa “apertura” del sistema genera un’ inevitabile voglia di paragoni.

Sicuramente uno dei punti di forza, ma anche di debolezza, di Windows è il fatto che gira ovunque ed è customizzabile da noi sviluppatori praticamente al 100%, permettendoci di farci sopra tutto ciò che desideriamo. Android da questo punto di vista è simile, e proprio per questo i punti di forza e di debolezza  sono quasi uguali a quelli della grande M. E’ anche vero che, se davvero il mondo PC deve convergere verso i dispositivi smart, siano essi telefoni o tablet, ci vuole un sistema operativo libero ed aperto, di certo non chiuso e non legato ad un solo tipo di hardware, strategia adottata da Apple e che ritengo sulla lunga distanza non vincente.

Cambiando argomento, molti colleghi lamentano il problema della frammentazione, perché come sicuramente già sapete sono innumerevoli le piattaforme su cui gira una qualche versione di Android. Io non ne sono spaventato, anche se ammetto sarebbe certamente più facile se ci fosse un solo standard, però è da sempre così per chi sviluppa su Windows, quindi non capisco le tante lamentale.

Inoltre le API di Android sono adatte a gestire queste differenze, sia in termini di dimensioni dello schermo che di hardware. E’ infatti molto facile fare un’app che sia fruibile su qualsiasi “polliciaggio”, in quanto è sufficiente usare dei layout relativi e mai assoluti, così come è facile sapere in anticipo quali potenzialità hardware abbia il dispositivo e quindi adattare di conseguenza il comportamento del software. Senza contare che, sempre per mezzo di poche righe di codice, è possibile nascondere automaticamente le app sul market ai telefoni privi di una certa funzionalità necessaria al software.

Certamente, se vogliamo fare un videogame, l’insieme di terminali adatti è notevolmente più piccolo, ma la situazione in casa della concorrenza non è tanto diversa: anche di iPhone ne esistono, quasi, 5 versioni, senza contare i due modelli di iPad ed iPod! Ma nel panorama delle applicazioni più normali ed utili, e qui mi ricollego al mio articolo della settimana scorsa, non vedo la frammentazione un problema, in quanto l’hardware necessario a fare la maggior parte delle cose è presente sulla gran parte dei dispositivi in commercio.

Insomma, penso che questa frammentazione non porti assolutamente a dei problemi nuovi, ma sposti semplicemente i problemi che già abbiamo nel mondo PC anche nel mondo smartphone, dove inevitabilmente tutto sta convergendo. Il fatto di essere open source poi, è un notevole vantaggio anche sui costi, e con il progressivo affinamento delle tecnologie di produzione, sono certo che da qui ad un annetto avremo smartphone così potenti che ogni altra paura sarà solo un ricordo.

Spostandosi più sul versante sviluppo, vorrei sottolineare come sviluppare per Android sia divertente e veloce, e gli strumenti di debug sono ottimi così come la documentazione e gli esempi disponibili. Ovviamente, la logica rispetto ad un applicazione per Windows è differente, ma siamo pur sempre su un telefono, e si familiarizza molto velocemente con il concetto di lifecyle delle Activity (ogni Activity rappresenta una form del programma, ed ha una sua vita autonoma nei confronti dell’intera applicazione, che è vista più come un pacchetto di Activity che un programma singolo).

Ci sono poi un sacco di eventi generati dal sistema operativo, ai quali ci si sottoscrive dichiarando quelli che si chiamano Intent, da cui ricavare mille informazioni utili, dalla ricezione di un sms alle email, dallo stato del gps a quello dell’accelerometro, il tutto coerentemente integrato nelle logiche del linguaggio Java e più in generale della programmazione ad oggetti, al fine di dare al programmatore la possibilità di fare ciò preferisce con un modello di sviluppo quasi identico a quello che c’è nel mondo Windows. Non c’è quindi alcun linguaggio nuovo da imparare (leggi Objective-C) e nessuna logica particolare, questione che favorisce le simpatie degli sviluppatori.

Gli strumenti di editing grafico lasciano ancora un po’ a desiderare, anche se il tool integrato in Eclipse è buono seppur rimane necessario, per raffinare bene gli stili e le visuali, mettere mano all’xml nudo e crudo, di per sé però molto logico e razionale e quindi di facile editabilità. La situazione migliora notevolmente se come target si sceglie Android 3.0, dove il numero di controlli built-in sale notevolmente di numero e di qualità, mentre nelle realeases precedenti c’è solo l’indispensabile.

L’emulatore per il debug è molto valido perché permette di simulare una larga varietà di dispositivi e funzionalità hardware, anche se è un po’ troppo esoso in quanto a richieste hardware ed è generalmente poco responsivo. Il debug su un dispositivo fisico invece è notevolmente migliore, le applicazioni girano molto più velocemente e tutto viene tracciato con cura al fine di dare ai programmatori gli strumenti corretti per vedere cosa succede al proprio codice mentre è in esecuzione.

Tirando le somme, posso solo dire che lo sviluppo su Android è molto divertente, e le prospettive future di crescita ne fanno certamente un buon punto di inizio per chi vuole imparare un nuovo tipo di ambiente di programmazione, senza dover stravolgere il proprio background: è un’esperienza che sono certo sarà utile, anche lavorativamente, in un futuro non troppo lontano, visto anche che il market share è destinato ad aumentare con percentuali stratosferiche. Mi sembra inoltre che l’esperienza utente sia molto valida, in quanto ritengo la navigazione tra i vari menù piuttosto efficace e con molte possibilità di intervento anche su dettagli più da power user che da utente medio.

Sicuramente Android rappresenta una grossa speranza ed una grossa chance per le piattaforme del futuro, in quanto mira ad offrire ciò che da anni Microsoft ci offre nel mondo PC. Da migliorare c’è ancora molto chiaramente, ma credo che la rivoluzione smartphone passi più da qui che da, ad esempio, Apple: una piattaforma chiusa e di tendenza va bene per un po’ e solo per l’utente non smaliziato, ma quando entriamo in gioco noi “tecnici” la chiusura non è mai vista di buon occhio.

Senza contare che il cuore di Android è il caro kernel Linux 2.6.x, questione che sicuramente potrà far crescere il Pinguino e fargli raggiungere luoghi (vedi tablet) che da solo non potrebbe neppure immaginare. Sembra banale chiudere l’articolo con l’ovvietà che sarà il pubblico a decretare il vincitore, ma mai come in questo momento è vero: ci sono molti contendenti (Apple, Microsoft, Nokia, RIM, Google…) allo scettro di “punto di riferimento nel mondo mobile”, mondo che in futuro diventerà un business superiore a quello del PC vista l’inesorabile convergenza di cui siamo tutti testimoni oculari.

Se guardiamo alla storia recente del PC, è l’apertura di windows verso l’hardware e verso gli sviluppatori ad averne decretato il successo, e dubito che una sola azienda come Apple, con una piattaforma chiusa, possa ottenere lo stesso risultato: la torta è molto ricca e tutti ne vogliono mangiare un pezzo, e credo che al momento solo Android possa sfamare i big del settore: Google ci mette l’OS, altri l’hardware ed altri ancora il software, proprio come succede su Windows e tutti sono contenti perché hanno una fetta di business.

Ovviamente il modello messo in piedi da Google è differente rispetto a quello che ha reso famoso Windows: i profitti non si generano più sulle licenze delle singole copie vendute, ma piuttosto sulla pubblicità. Il modello sarà anche, nel mondo mobile, ancora acerbo, ma non dimentichiamo che Google fattura miliardi di dollari proprio con quel modello applicato al mondo “PC”, quindi credo proprio possa essere vincente anche altrove.

Da sviluppatore se un vincitore dovrà esserci, sarò felice che sia Android, che nonostante le contraddizioni e le paure sulle materie più disparate (privacy, frammentazione, sicurezza…) è la piattaforma che più mi diverte e convince.

Press ESC to close