vuoi
o PayPal
tutte le volte che vuoi
Android: un Sistema Operativo versatile e open source
Android è un Sistema Operativo sviluppato da Google per dispositivi mobili basato su una versione modificata di Linux, attualmente leader di mercato per dispositivi a basso/medio costo. Android è open source, quindi chiunque voglia usare il sistema operativo può farlo scaricando l'intero codice sorgente, ed è questo fattore che ha portato Android ad avere la larga diffusione di oggi, tanto da essere utilizzato non solo per telefoni, ma anche per tablet, televisioni e dispositivi indossabili.
L'architettura di Android è strutturata a layer, ognuno dei quali offre servizi al livello sottostante:
- Il Kernel Linux di Android è il nucleo del Sistema Operativo, ed offre le feature di sicurezza, gestione della memoria, gestione dei processi, power management; è stato scelto l'utilizzo di un Kernel Linux in quanto molto affidabile e ampliamente testato.
- Al di sopra del Kernel Linux ci sono le Librerie Native di Android, ovvero tutto un insieme di librerie scritte in C/C++ che forniscono funzionalità di base per lo sviluppo di applicazioni Android.
- Media Framework: componente in grado di gestire i diversi CODEC per i vari formati di acquisizione e riproduzione di audio e di video. Gestisce quindi gli aspetti multimediali.
- Surface Manager: componente che gestisce l'accesso alle funzionalità del display e coordina le diverse finestre che le applicazioni vogliono visualizzare sullo schermo.
- SQLite è una libreria in-process che implementa un DBMS relazionale caratterizzato dal fatto di essere molto compatto, diretto, di non necessitare alcuna configurazione speciale e di essere transazionale.
- WebKit: è il browser engine scelto e utilizzato da sistemi Android. Esso è open source ed è fondato sulle tecnologie HTML, CSS, JavaScript e DOM.
- Libc (System C library): consiste in un'implementazione della libreria standard C system (libc), disegnata per i dispositivi Android.
- Se un nuovo livello di API introduce delle funzionalità importanti, è inevitabile sviluppare applicazioni Android con tale livello di API;
- È inutile passare al nuovo livello di API se le funzionalità aggiunte non sono rilevanti;
- Con Android Studio, per realizzare un'app, occorre inizialmente definire il livello di API, per tale motivo l'ambiente di sviluppo mostra allo sviluppatore la percentuale di
dispositiviAndroid che utilizza quella versione, cosi da avere una stima della percentuale di utenti chepotrà usufruirne. Ad esempio, scegliere di sviluppare un app con una versione precedentealla KitKat, vorrebbe dire che quasi nessuno potrebbe installare l'applicazione.
Quindi ogni nuovo livello di API fornisce nuove funzionalità ma esclude l'utilizzo alle versioniprecedenti. In genere Android rilascia un nuovo livello di API ogni 6 mesi ed associa ad ognuno diessi un nome simbolico riferito a dei dolci:
Nome in codice | Versione | Data di rilascio iniziale | Livello API |
---|---|---|---|
Android 1.0 | 1.0 | 23 settembre 2008 | 1 |
Petit Four | 1.1 | 9 febbraio 2009 | 2 |
Cupcake | 1.5 | 27 aprile 2009 | 3 |
Donut | 1.6 | 15 settembre 2009 | 4 |
Eclair | 2.0 - 2.1 | 26 ottobre 2009 | 5 - 7 |
Froyo | 2.2 - 2.2.3 | 20 maggio 2010 | 8 |
Gingerbread | 2.3 - 2.3.7 | 6 dicembre 2010 | 9 - 10 |
Honeycomb | 3.0 - 3.2.6 | 22 febbraio 2011 | 11 - 13 |
Ice Cream Sandwich | 4.0 - 4.0.4 | 18 ottobre 2011 | 14 - 15 |
Jelly Bean | 4.1 - 4.3.1 | 9 luglio 2012 | 16 - 18 |
KitKat | 4.4 - 4.4.4 | 31 ottobre 2013 | 19 - 20 |
Lollipop | 5.0 - 5.1.1 | 12 novembre 2014 | 21 - 22 |
Marshmallow | 6.0 - 6.0.1 | 5 ottobre 2015 | 23 |
Nougat | 7.0 - 7.1.2 | 22 agosto 2016 | 24 - 25 |
Oreo | 8.0 - 8.1 | 21 agosto 2017 | 26 - 27 |
Pie | 9 | 6 agosto 2018 | 28 |
Android 10 | 10 | 3 settembre 2019 | 29 |
Android 11 | 11 | 8 settembre 2020 | 30 |
Bean 4.1 – 4.3.1 9 luglio 2012 16 – 18
KitKat 4.4 – 4.4.4 31 ottobre 2013 19 – 20
Lollipop 5.0 – 5.1.1 12 novembre 2014 21 – 22
Marshmallow 6.0 – 6.0.1 5 ottobre 2015 23
Nougat 7.0 – 7.1.2 22 agosto 2016 24 – 25
Oreo 8.0 – 8.1 21 agosto 2017 26 – 27
Pie 9 6 agosto 2018 28
Android 10 10 3 settembre 2019 29
Le applicazioni Android sono distribuite sotto forma di file APK (Android Package). Al loro interno vengono raccolti gli eseguibili in formato DEX, le eventuali risorse associate ed una serie di descrittori che delineano il contenuto del pacchetto. Vediamo quali sono le componenti fondamentali di un applicazione Android:
- Activity: è un interfaccia utente, cioè la schermata dell’applicazione che in un certo momento l’utente vede. È il punto di partenza dello sviluppo di un applicazione. In genere ci sono tante Activity che fanno parte della stessa applicazione ma sono separate (hanno vita propria,
Service: il suo scopo è quello di eseguire un lavoro lungo e continuato che viene svolto in background senza bisogno di interazione diretta con l'utente, preparando i dati che l'Activity deve mostrare all'utente. Viene usato in genere quando il lavoro richiesto impiega tanto tempo (2-3 secondi).
Content Provider: è la parte dell'app che si interfaccia con le risorse (file, DB), si occupa di condividere dati custoditi in rete, su DB, sui file, ecc.. fra applicazioni o fra parti di esse.
Broadcast Receiver: è il ricevitore dell'app, si occupa di ricevere messaggi (a livello di sistema) su più fronti. In altre parole esso
Utilizzato quando si intende intercettare un particolare evento attraverso tutto il sistema.
Widget: componenti usati dall'app per interagire con l'utente.
Intent: meccanismi che consentono la comunicazione fra Activity diverse o fra Activity e Services, comunicano un'intenzione a un altro componente (cioè chiedono ad un altro componente che sia effettuata un operazione). In altre parole un Intent è un sistema di messaggistica tra componenti e prevede 3 usi fondamentali: avvio di un Activity, avvio di un Service, invio di messaggi di Broadcast. Esistono 2 tipi di Intent:
- Intent esplicito: contiene il nome del destinatario, cioè del componente da avviare. Viene usato in genere per lanciare un'altra Activity o un altro Service noto nella stessa app.
- Intent Implicito: non contiene il destinatario ma soltanto l'intenzione di fare qualcosa che è rivolta ad una qualsiasi componente dell'app in grado di svolgere quell'azione.
Android ricerca le componenti in grado di soddisfare quel compito, confrontando il contenuto dell'Intent con gli Intent Filters dichiarati nel file manifest.xml, che sono delle associazioni azioni-componente. L'ambiente di sviluppo che in genere si utilizza è Android Studio, il quale offre la funzionalità di testare l'applicazione sviluppata mediante un emulatore chiamato AVD (Android Virtual Device).
Un progetto Android è strutturato con 4 directory fondamentali, che sono:
- src: ospitano i package e le classi della nostra applicazione.
- res e assets: ospitano le risorse esterne necessarie all'applicazione, come le immagini, i file audio ed altro ancora. Dentro la cartella res, lo sviluppatore può inserire una o più delle seguenti sotto-directory:
- drawable: Questa directory deve essere usata per le immagini necessarie al software (PNG e JPEG).
- layout: Questa directory ospita i file XML che descrivono il layout delle interfacce.
- utente.o values: Questa directory ospita i file XML che descrivono stringhe e altri parametri utilizzati dall'applicazione, come la definizione dei colori.
- xml: Questa directory ospita file XML di tipo qualsiasi, che il sistema interpreta e rende semplici da acquisire.
- raw: Questa directory ospita file binari di tipo qualsiasi (ad esempio audio o filmati) che l'applicazione poi carica.
- gen: che contiene la speciale classe chiamata R. Invocando questa classe è possibile richiamare via codice le risorse memorizzate sotto la directory res.
Ogni applicazione Android deve essere accompagnata da un file chiamato AndroidManifest.xml nella sua cartella principale. Il Manifest raccoglie informazioni basilari sull'app, informazioni necessarie al sistema per far girare qualsiasi porzione di codice della stessa. Tra le altre cose il Manifest presente in ciascuna app del Play Store si occupa delle seguenti cose:
- Dare un nome al package Java dell'applicazione, che
è anche un identificatore univoco della stessa.
Descrivere le componenti dell’applicazione (attività, servizi, receiver, provider, ecc.), nomina le classi e pubblica le loro “competenze”. Ad esempio ogni qual volta viene creata una nuova Activity è necessario registrarla qui dentro.
Determinare quali processi ospiteranno componenti dell’applicazione.
Dichiarare le Permissions, cioè i permessi dell’app, e i permessi necessari alle altre app per interagire con la stessa.
Dichiarare il livello minimo di API Android che l’app richiede.
Elencare le librerie necessarie all’app.
Quella di Android è una Programmazione Event Driven, cioè un app Android è composta da tanti processi che nella maggior parte del tempo non fanno nulla, ma attendono che l’utente oppure il sistema li invochino scatenando un evento. Android prevede 3 concetti fondamentali per gestire gli eventi:
Event Listener:
Sono degli ascoltatori, cioè o