L’architettura del sistema operativo Android
L’architettura di Android è formata da svariati livelli, dove quelli inferiori offrono servizi ai livelli superiori offrendo un alto grado di astrazione.
Kernel di Linux in Android
Il livello alla base dell’architettura di Android rappresenta il kernel di Linux nella versione 2.6. Android pertanto si appoggia a Linux per i servizi del sistema centrale come sicurezza, gestione della memoria, esecuzione, network stack, e driver model.
Il kernel funziona anche da abstraction layer tra l’hardware e il resto del software, inoltre ci sono driver per la gestione delle periferiche multimediali, del display, della connessione Wi-Fi e dell’alimentazione.
È stato deciso di utilizzare il kernel di Linux in quanto vi era la necessità di avere un sistema operativo mobile che fornisse tutte le feature di sicurezza, gestione della memoria, gestione dei processi, power management e che fosse quindi molto affidabile e ampliamente testato.
Di conseguenza il venditore che vuole utilizzare Android sui propri dispositivi, non dovrà fare altro che installare il kernel di Linux implementando i driver per il proprio hardware.
Librerie native di Android
Android comprende un set di librerie native realizzate in C e C++, le quali rappresentano il core vero di Android e si trovano sopra al livello costituito dal kernel di Linux. Tra le principali librerie abbiamo:
- Media Framework, componente in grado di gestire i diversi CODEC per i vari formati di acquisizione e riproduzione audio e video.
Il Media Framework si basa sulla libreria open source OpenCORE di PacketVideo, membro dell’OHA.
Le librerie supportano la riproduzione e la registrazione di molti popolari formati audio e video, compresi file di immagini, inclusi MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG. È scontato che i nuovi formati saranno supportati dai nuovi dispositivi che verranno messi sul mercato.
- Surface Manager è un componente che gestisce l’accesso alle funzionalità del display e coordina le diverse finestre che le applicazioni vogliono visualizzare sullo schermo, permettendo la visualizzazione contemporanea di grafica 2D e 3D dalle diverse applicazioni.
- Open GL ES è la libreria usata da Android per la grafica 3D, la quale permette di accedere alle funzionalità di un eventuale acceleratore grafico hardware.
L’Open GL ES consiste in un insieme di API multipiattaforma che forniscono l’accesso a funzionalità 2D e 3D in dispositivi embedded.
- Scalable Graphics Library (SGL) è una libreria in C++ che, insieme alle OpenCL, forma il motore grafico 2D e viene utilizzata principalmente dal Window Manager e dal Surface Manager all’interno del processo di renderizzazione grafica.
- FreeType consiste in un motore per il rendering di bitmap e vector font. FreeType è di piccole dimensioni, molto efficiente, altamente personalizzabile e soprattutto portabile.
Il suo punto di forza è quello di fornire un insieme di API semplici per ciascun tipo di font in modo indipendente dal formato del corrispondente file.
- SQLite è una libreria in-process che implementa un DBMS relazionale caratterizzato dal fatto di essere molto compatto, diretto, di non necessitare alcuna configurazione e specialmente di essere transazionale. In-process significa che SQLite opera e lavora nello stesso processo dell’applicazione che lo usa.
Bisogna sottolineare come SQLite non sia un prodotto di Android ma esista autonomamente con diversi tool a supporto.
- WebKit è il browser engine scelto e utilizzato da sistemi Android, ma non solo poiché viene adoperato anche dai browser Safari e Chrome. In quanto browser engine, WebKit va integrato in diversi tipi di applicazioni.
Questo browser integrato è 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 basati su Linux embedded come Android.
- Secure Socket Layer (SSL) è una libreria che non poteva essere trascurata da Android, in quanto riguarda la sicurezza attraverso la gestione dei Secure Socket Layer. Secure Socket Layer sono protocolli crittografici che permettono una comunicazione sicura e una integrità dei dati su reti TCP/IP, come ad esempio Internet. I SSL cifrano la comunicazione dalla sorgente alla destinazione (end-to-end) sul livello di trasporto.
Core library di Android
L’esecuzione di un’applicazione in Android è simile a quanto accade in ambiente Java, con la differenza che in fase di compilazione serve necessariamente il file jar (di nome android.jar) per la creazione del bytecode Java, mentre in esecuzione il device mette a disposizione la versione dex del runtime che costituisce la core library. Il codice dex viene ovviamente eseguito dalla DVM.
Application Framework di Android
Salendo di livello abbiamo l’Application Framework, il quale consiste in un insieme di API e componenti inerenti l’esecuzione di funzionalità ben precise e di fondamentale importanza in ciascuna applicazione Android.
Tutte le librerie descritte finora vengono utilizzate in questo livello da un insieme di componenti che formano l’Application Framework:
- Activity Manager, la cui responsabilità è l’organizzazione delle varie schermate di un’applicazione in uno stack a seconda dell’ordine di visualizzazione delle stesse sullo schermo dei diversi dispositivi. Più genericamente l’Activity Manager è lo strumento fondamentale attraverso il quale l’utente interagisce con l’applicazione.
- Package Manager, il quale gestisce il ciclo di vita delle applicazioni nei dispositivi, come il processo d’installazione, aspetti grafici dell’applicazione, diverse activity o aspetti di sicurezza.
- Window Manager, il quale permette di gestire le finestre delle varie applicazioni, gestite da processi diversi, sullo schermo del dispositivo.
- Telephony Manager, consente una maggiore interazione con le funzionalità caratteristiche di un telefono come una banale chiamata o la verifica dello stato della stessa telefonata.
- Content Provider, ha la responsabilità di gestire la condivisione di informazioni tra i vari processi.
- Resource Manager, è un componente che ha il compito di ottimizzare le risorse mettendo a disposizione una serie di API di semplice utilizzo.
- View System, si occupa della gestione della renderizzazione dei componenti e degli eventi associati. L’interfaccia grafica di un’applicazione per Android è composta da quelle che saranno specializzazioni della classe View, ciascuna caratterizzata da una particolare forma e da un diverso modo di interagire con essa attraverso un’accurata gestione degli eventi associati.
- Location Manager, mette a disposizione API che vengono utilizzate da applicazioni relative la localizzazione e la gestione delle mappe.
- Notification Manager, rende disponibili un insieme di strumenti che l’applicazione può utilizzare per inviare una particolare notifica al dispositivo, il quale la dovrà presentare all’utente con i meccanismi che conosce.