Android è uno stack software open source basato su Linux, creato per un'ampia gamma di dispositivi e fattori di forma. La Figura 1 mostra i componenti principali della piattaforma Android.
![Lo stack software di Android](https://developer.android.com/static/guide/platform/images/android-stack_2x.png?authuser=6&hl=it)
Figura 1. Lo stack software di Android.
Kernel Linux
La base della piattaforma Android è il kernel Linux. Ad esempio, Android Runtime (ART) si basa sul kernel Linux per funzionalità sottostanti come il threading e la gestione della memoria di basso livello.
L'utilizzo di un kernel Linux consente ad Android di sfruttare le funzionalità di sicurezza principali e permette ai produttori di dispositivi di sviluppare driver hardware per un kernel noto.
Livello di astrazione hardware (HAL)
Il livello di astrazione hardware (HAL) fornisce interfacce standard che espongono le funzionalità hardware del dispositivo al framework dell'API Java di livello superiore. L'HAL è costituito da più moduli libreria, ognuno dei quali implementa un'interfaccia per un tipo specifico di componente hardware, come la fotocamera o il modulo Bluetooth. Quando un'API framework effettua una chiamata per accedere all'hardware del dispositivo, il sistema Android carica il modulo della libreria per quel componente hardware.
Runtime Android
Per i dispositivi con Android 5.0 (livello API 21) o versioni successive, ogni app
viene eseguita nel proprio processo e con la propria istanza di Android Runtime
(ART). ART è scritto per eseguire più macchine virtuali su dispositivi con memoria ridotta eseguendo file DEX (Dalvik Executable Format), un formato bytecode progettato specificamente per Android e ottimizzato per un utilizzo di memoria minimo. Gli strumenti di creazione, come d8
, compilano le origini Java in bytecode DEX, che possono essere eseguite sulla piattaforma Android.
Ecco alcune delle principali funzionalità di ART:
- Compilation in anticipo (AOT) e just-in-time (JIT)
- Garbage collection ottimizzata
- Su Android 9 (livello API 28) e versioni successive, la conversione dei file DEX di un pacchetto dell'app in un codice macchina più compatto
- Miglioramento del supporto del debug, compreso un profiler di campionamento dedicato, segnalazione di eccezioni di diagnostica e report sugli arresti anomali dettagliati e la possibilità di impostare watchpoint per monitorare campi specifici
Prima della versione 5.0 di Android (livello API 21), Dalvik era il runtime di Android. Se la tua app funziona bene su ART, può funzionare anche su Dalvik, ma il contrario potrebbe non essere vero.
Android include anche una serie di librerie di runtime principali che forniscono la maggior parte delle funzionalità del linguaggio di programmazione Java, tra cui alcune funzionalità del linguaggio Java 8 utilizzate dal framework dell'API Java.
Librerie C/C++ native
Molti servizi e componenti del sistema Android principali, come ART e HAL, sono creati da codice nativo che richiede librerie native scritte in C e C++. La piattaforma Android fornisce API framework Java per esporre la funzionalità di alcune di queste librerie native alle app. Ad esempio, puoi accedere a OpenGL ES tramite l'API OpenGL Java del framework Android per aggiungere il supporto per disegnare e modificare la grafica 2D e 3D nella tua app.
Se stai sviluppando un'app che richiede codice C o C++, puoi usare Android NDK per accedere ad alcune di queste librerie della piattaforma nativa direttamente dal tuo codice nativo.
Framework API Java
L'intero set di funzionalità del sistema operativo Android è disponibile tramite API scritte in Java. Queste API costituiscono i componenti di base necessari per creare app Android, semplificando il riutilizzo dei servizi e dei componenti di sistema principali e modulari, tra cui:
- Un sistema di visualizzazione ricco ed estensibile che puoi utilizzare per creare l'interfaccia utente di un'app, inclusi elenchi, griglie, caselle di testo, pulsanti e persino un browser web incorporabile.
- Un resource manager che fornisce accesso a risorse non di codice come stringhe localizzate, grafica e file di layout
- Un gestore delle notifiche che consente a tutte le app di visualizzare avvisi personalizzati nella barra di stato.
- Un gestore attività che gestisce il ciclo di vita delle app e fornisce uno stack di back stack per navigazione comune
- Fornitori di contenuti che consentono alle app di accedere ai dati di altre app, come l'app Contatti, o di condividere i propri dati.
Gli sviluppatori hanno accesso completo alle stesse API framework utilizzate dalle app per sistema Android.
App di sistema
Android include una serie di app principali per email, SMS, calendari, navigazione su internet, contatti e altro ancora. Le app incluse nella piattaforma non hanno uno stato speciale tra quelle che l'utente sceglie di installare. Pertanto, un'app di terze parti può diventare il browser web, il servizio di messaggistica SMS o la tastiera predefinita dell'utente. Sono previste alcune eccezioni, ad esempio l'app Impostazioni del sistema.
Le app di sistema funzionano sia come app per gli utenti sia come app per fornire funzionalità chiave a cui gli sviluppatori possono accedere dalla loro app. Ad esempio, se vuoi che la tua app consegni gli SMS, non è necessario creare autonomamente questa funzionalità. Puoi richiamare qualsiasi app per SMS già installata per recapitare un messaggio al destinatario da te specificato.