Sia che siate utenti di iPhone, sia che lo siate di Android avrete sicuramente utilizzato svariate app per svolgere altrettanti compiti.
Alcuni, magari, hanno anche provato a svilupparne una da soli, altri invece vorrebbero farlo ma non sanno nemmeno da dove iniziare. Sicuramente un background di programmazione aiuta in questi casi, ma comunque può non essere sufficiente, dato la particolare struttura e architettura che hanno le varie applicazioni mobili.
In aiuto della curiosità degli utenti Android, fortunatamente, arrivano 200 video tutorial, per un totale di circa 20 ore, che vi faranno da tutor nell’apprendere il linguaggio del robottino verde di Google. Su YouTube è possibile trovare una playlist con questi interessanti video.
Per farvi un’idea di come siano strutturati i video basta vedere quello inserito in testa all’articolo, che è il primo della sopracitata playlist; per i restanti potete cliccare [url=http://www.youtube.com/playlist?list=PL34F010EEF9D45FB8]qui[/url]
Per approcciarsi alla programmazione su Android, però, vale la pena anche analizzare quale sia la architettura del sistema per cui si sta sviluppando unitamente alla cognizione di quali siano le componenti fondamentali di cui è composta una applicazione.
[title]L’Architettura di Android[/title]
[image]https://leganerd.com/wp-content/uploads/LEGANERD_046213.jpg[/image]
L’ architettura di Android, come si può notare dalla figura, ha una struttura tipicamente a layer, dove i livelli inferiori offrono servizi a quelli superiori. Ne verranno ora analizzati alcuni aspetti, senza avere la pretesa di fornirne una descrizione dettagliata e completa.
Il livello piu basso è rappresentato dal kernel Linux nella versione 2.6. La necessità quando fu creato Android era infatti quella di disporre di un vero e proprio sistema operativo che fornisse gli strumenti
di basso livello per la virtualizzazione dell’hardware sottostante attraverso la definizione di diversi driver, dal nome auto-esplicativo.
La scelta di Linux è stata conseguenza della necessità di avere un SO che fornisse tutte le feature di sicurezza, gestione della memoria, gestione dei processi e che fosse affidabile e testato.
L’Application Framework
Questo layer contiene le API fondamentali per l’esecuzione di funzionalità ben precise e di fondamentale importanza in ciascuna applicazione Android. Da notare che tutte le applicazioni utilizzano lo stesso AF e come tali possono essere sostituite, estese o modificate; a riprova del motto che si può trovare sul sito di Android:
All applications are equals
Fra queste vale la pena citare:
- Activity Manager: Le activity sono il cuore pulsante di ogni applicazione Android, e sono lo strumento fondamentale con cui l’utente interagisce con l’applicazione. L’activity manager ha lo scopo di gestire il ciclo di vita di ogni activity, con tutto ciò che ne deriva.
- Content Provider: Ha la responsabilità di gestire la condivisione di informazioni fra i vari processi. Puo essere visto come una repository condivisa con cui le diverse app possono interagire inserendo o leggendo informazioni.
- View System: L’interfaccia grafica di una applicazione per Android è composta da quelle che sono specializzazioni della classe View, ciascuna caratterizzata da una particolare forma e da un diverso modo di interagire con essa. La gestione della renderizzazione dei componenti nonchè della gestione degli eventi associati è responsabilità proprio del componente VS.
- Location Manager: Le applicazioni che gestiscono, tra le informazioni disponibili, quelle relative alla localizzazione tipicamente vengono realizzate con l’ausilio di questo componente contenente API specifiche per la geolocalizzazione e georeferenziazione.
- Notification Manager: Mette a disposizione un insieme di strumenti che una applicazione può utilizzare per inviare particolari notifiche al dispositivo a seguito di particolari eventi.
[title] Anatomia di una applicazione Android[/title]
Le applicazioni per Android devono, ovviamente garantire un discreto livello di interattività con l’utente, il quale le potrà utilizzare attraverso una delle interfacce che queste mettono a disposizione; ad esempio potrebbero essere selezionati dei tasti da una tastiera QWERTY.
La definizione di tali interfacce, dei metodi di comunicazione fra queste, dei metodi di interazione richiede la creazione di alcune componenti fondamentali per ogni applicazione.
Le Activity
Si può facilmente dedurre come una parte fondamentale dell’architettura debba essere rappresentata dalle gestione dell’interfaccia la quale viene realizzata attraverso la definizione di Activity. La responsabilita di questi componenti è quella di descrivere le varie schermate dell’applicazione e attraverso la composizione delle View gestire le azioni dell’utente.
Per semplificare, senza perdere di significato, una attività può essere vista come una schermata, o meglio come un contenitore di componenti grafici che potranno occupare tutto il display, parte di esso o anche essere completamente nascosti per apparire quando vengono verificati particolari eventi. Una normale applicazione, quindi, consisterà di una sequenza di schermate, le quali permettono la visualizzazione di informazioni o ancora
dispongono dei componenti per l’interazione con l’utente. Tali schermate, che si alternano sul display, possono anche comunicare fra di loro scambiandosi informazioni. A tale scopo la piattaforma organizza le attività secondo una struttura a stack dove quella in cima è sempre quella attiva in un particolare momento. La visualizzazione di una nuova schermata semplicemente corrisponde all’avvio di una nuova Activity , la quale verrà portata in cima allo stack mettendo in uno stato di pausa quelle precedenti.
Nel momento in cui una Activity termina il suo lavoro questa farà in modo di ritornare le eventuali informazioni raccolte alla attività precedente, la quale sarà riesumata come attiva.
Sarà, ovviamente, compito del sistema rendere trasparenti queste operazioni all’utente, mentre allo sviluppatore sarà delegata la gestione dei vari stati di una attività attraverso l’implementazione dei metodi di callback.
Intent ed Intent Filter
La parte forse piu interessante di questa architettura è la possibilità di riutilizzare le Activity (ed altri componenti) per quelle operazioni che sono comuni a piu applicativi.
Questa tipologia di scenario è davvero molto frequente, basta pensare ad una applicazione che ha bisogno di utilizzare le informazioni della rubrica del telefono attraverso la selezione di un contatto da un elenco, che necessariamente potrebbe non essere la medesima rubrica del telefono. I dati recuperati potranno poi essere utilizzati per effettuare una chiamata, inviare un messaggio o semplicemente una vcard ad un altro utente attraverso il bluetooth o la rete.
Se ogni applicazione implementasse la propria modalità di selezione del dato si avrebbe uno spreco di risorse; anche dal punto di vista dell’usabilità ci sarebbe il pericolo di eseguire la stessa operazione in modi diversi fra loro.
Android ha deciso di gestire il tutto attraverso la definizione degli Intent.
In sintesi, quando una applicazione ha la necessità di eseguire una particolare operazione, magari implementata da una Activity esterna ad essa, altro non farà che creare un Intent richiedendo l’utilizzo di una qualche risorsa, o componente, in grado di poterlo esaudire. Un Intent sarà quindi caratterizzato da informazioni relative all’operazione da eseguire, e da un meccanismo per l’identicazione del tipo di dati su cui la stessa opererà.
Il file AndroidManifest.xml
Ultimo, ma non meno importante, componente è il file di “configurazione” di ogni applicazione.
La prima domanda che sorge spontanea è come faccia il dispositivo ad associare a una icona, dei permessi e delle Activity ad una applicazione. Oltre a questo, come si è detto precedentemente, serviranno anche delle direttive all’applicazione che permettano di capire, ad esempio, da quante attività è composta, da come queste interagiscano fra loro, o se è richiesto l’utilizzo di Activity esterne all’applicazione stessa.
Tale lavoro è svolto dal file di configurazione AndroidManifest.xml. Tale file è il vero e proprio punto cardine di ogni app, basti pensare che se viene richiamata, attraverso la definizione di un Intent una attività non contenuta all’interno di questo file, all’utente viene restituito un errore e si ha un crash.
Queste, in linea di massima, sono le cose principali da sapere (a mio parere) per potersi approcciare allo sviluppo su questa piattaforma. Oltre ai tutorial video, consiglio anche le varie guide passo passo fornite dalla google stessa, all’indirizzo ufficiale di Android (developer.android.com) dove potrete trovare anche tutte le istruzioni per installare l’SDK e partire con le vostre sperimentazioni.