Prima di sviluppare un’app, bisogna capire com’è strutturato il sistema operativo.
Stack Android:
Linux Kernel Layer
Native Layer
Application Framework Layer
Application Layer
Tutte le applicazioni sono scritte in Java che si basano su framework applicativo pieno di librerie e classi astratte che utilizzano l’ambiente Apache Harmony. Tutte le funzioni quali mandare un sms, usare internet si basa su librerie scritte in C++.
Hardware Abstraction Layer (HAL) è formato da un insieme di funzioni che tine conto delle differenze fisiche dei vari dispositivi. Permette al software di funzionare su dispositivi differenti.
Le applicazioni vengono eseguite tramite DVM Dalvik Virtual Machine una macchina virtuale adattata per l’uso dei dispositivi mobili. Dalla versione 5.0 è stata sostituita da ART (android Run Time)
Applicazioni
Le applicazioni, più comunemente dette app, sono dei programmi ti tipo Event Driven ossia guidate dagli eventi gestiti all’interno del dispositivo mobile come il touch dello schermo, le azioni dei sensori, ecc.
2 tipi:
- applicazioni vere e proprie che occupano tutto lo schermo come ad esempio il browser
- widget che occupano una piccola e fissata porzione dello schermo come ad esempio l’orologio di Android
le applicazioni sono composte da 4 componenti:
- Activity
- Service
- Broadcast Receiver
- Content Provider
Le applicazioni devono sempre contenere un’activity.
Activity
Blocco di codice che interagisce con l’utente utilizzando lo schermo e i dispositivi di input, usando i pulsanti, le caselle di testo, pulsanti radio, ecc presenti nell’android .widget. Esse vengono usate ereditando la classe android.app.Activity.
Service
Programmi eseguiti in background e non interagiscono con l’utente, ad esempio la riproduzione di un mp3. Esse estendo la classe android.app.Service
Broadcast Receiver
Si usa quando si deve intercettare un evento di sistema, ad esempio si scatta una foto o parte il segnale di batteria scarica Si estende la classe android.content.BroadcastReceiver
Content Provider
Espongono i dati e le informazioni, è il canale di comunicazione tra le differenti applicazioni installate nel sistema. Si estende la classe android.content.Content Provider
Nota Bene: un’applicazione ha al suo interno le activity
Approfondimenti su Activity
I sistemi Android non possiedono schermi come quelli del PC per cui le finestre vengono affiancate solo parzialmente.
Le activity passano attraverso i seguenti stati:
Resumed o Active o Running: è visibile e riceve i dati in input
Paused: è parzialmente visibile, non riceve input
Stopped: non è visibile ma ancora in esecuzione
Destroyed: è rimossa dalla memoria del dispositivo
L’attività che occupa il display è in esecuzione e interagisce con l’utente, le altre attività sono ibernate per ridurre al minimo il consumo delle risorse.
Metodi della classe Activity
protect void onCreate(android.os.BundlesavedInstanceState) –> viene richiamato alla creazione dell’attività, l’argomento savedInstanceState restituisce al metodo un eventuale stato dell’attività passato ad un’altra istanza che è stata terminata. E’ null se non vi è alcuno stato precedentemente salvato.
protect void onRestart()–> segnala che l’attività è stata riavviata dopo che è stata arrestata.
protect void onStart()–> segnala che l’attività viene resa visibile allo schermo
protect void onResume()–>segnala che l’attività inizia ad interagire con l’utente.
protect void onPause()–> l’attività con l’utente termina
protect void onStop()–>attività non più visibile sullo schermo
protect void onDestroy()–>applicazione terminata
Per poter modificare il codice di questi metodi dobbiamo eseguire un override del metodo della classe madre, prestando attenzione ad inserire, nella prima riga di codice il costruttore della classe attraverso l’operatore super.
File APK
Le app vengono distribuite sotto forma di pacchetto autoinstallante in un file con estensione .APK (android Package), è un file compresso.
All’interno del file c’è un certificato che permette l’installazione di un pacchetto .APK su Abdroid: il certificato deve essere presente in qualsiasi pacchetto, altrimenti Android non installerà nulla.
Il certificato viene creato dallo sviluppatore può crearne di due tipi: uno di debagging (ad uso interno) oppure un di mercato (per al distribuzione) ed in questo caso se la copia sarà libera oppure limitata.
Il distributore aggiunge una sua chiave e permetterà la distribuzione. Oppure lo sviluppatore si autocrea un certificato ed in fase di installazione comparirà un messaggio “a suo rishio e pericolo”)