Architettura Android

L'architettura del sistema Android contiene i seguenti componenti:

Panoramica dell'architettura del sistema Android
Figura 1. Architettura del sistema Android
  • Quadro dell'applicazione . Il framework dell'applicazione viene utilizzato più spesso dagli sviluppatori di applicazioni. Come sviluppatore hardware, dovresti essere a conoscenza delle API per sviluppatori poiché molte mappano direttamente alle interfacce HAL sottostanti e puoi fornire informazioni utili sull'implementazione dei driver.
  • Raccoglitore IPC . Il meccanismo Binder Inter-Process Communication (IPC) consente al framework dell'applicazione di attraversare i confini del processo e chiamare il codice dei servizi di sistema Android. Ciò consente alle API del framework di alto livello di interagire con i servizi di sistema Android. A livello di framework dell'applicazione, questa comunicazione è nascosta allo sviluppatore e le cose sembrano "funzionare".
  • Servizi di sistema . I servizi di sistema sono componenti modulari e mirati come Window Manager, Search Service o Notification Manager. La funzionalità esposta dalle API del framework dell'applicazione comunica con i servizi di sistema per accedere all'hardware sottostante. Android include due gruppi di servizi: sistema (come Window Manager e Notification Manager) e media (servizi coinvolti nella riproduzione e registrazione dei media).
  • Livello di astrazione hardware (HAL) . Un HAL definisce un'interfaccia standard da implementare per i fornitori di hardware, che consente ad Android di essere indipendente dalle implementazioni di driver di livello inferiore. L'utilizzo di un HAL consente di implementare funzionalità senza influenzare o modificare il sistema di livello superiore. Le implementazioni HAL sono impacchettate in moduli e caricate dal sistema Android al momento opportuno. Per i dettagli, vedere Hardware Abstraction Layer (HAL) .
  • kernel Linux . Lo sviluppo dei driver di dispositivo è simile allo sviluppo di un tipico driver di dispositivo Linux. Android utilizza una versione del kernel Linux con alcune aggiunte speciali come Low Memory Killer (un sistema di gestione della memoria più aggressivo nel preservare la memoria), wakelock (un servizio di sistema PowerManager ), il driver Binder IPC e altre importanti funzionalità per una piattaforma mobile embedded. Queste aggiunte sono principalmente per la funzionalità del sistema e non influiscono sullo sviluppo del driver. È possibile utilizzare qualsiasi versione del kernel purché supporti le funzionalità richieste (come il driver del raccoglitore). Tuttavia, ti consigliamo di utilizzare l'ultima versione del kernel Android. Per i dettagli, vedere Creazione di kernel .

Linguaggio di definizione dell'interfaccia HAL (AIDL/HIDL)

Android 8.0 ha riprogettato il framework del sistema operativo Android (in un progetto noto come Treble ) per rendere più semplice, veloce e meno costoso per i produttori l'aggiornamento dei dispositivi a una nuova versione di Android. In questa nuova architettura, il linguaggio di definizione dell'interfaccia HAL (HIDL, pronunciato "hide-l") specifica l'interfaccia tra un HAL e i suoi utenti, consentendo la sostituzione del framework Android senza ricostruire gli HAL. In Android 10, le funzionalità HIDL sono state incorporate in AIDL. Da allora, HIDL è deprecato e viene utilizzato solo da sottosistemi che non sono ancora stati convertiti in AIDL.

Treble separa l'implementazione del fornitore (software di livello inferiore specifico del dispositivo scritto dai produttori di silicio) dal framework del sistema operativo Android tramite una nuova interfaccia del fornitore. I fornitori oi produttori di SOC creano HAL una volta e li collocano in una partizione /vendor sul dispositivo; il framework, nella propria partizione, può quindi essere sostituito con un aggiornamento over-the-air (OTA) senza ricompilare gli HAL.

La differenza tra l'architettura Android legacy e l'attuale architettura basata su IDL sta nell'uso dell'interfaccia del fornitore:

  • In Android 7.x e versioni precedenti non esiste un'interfaccia del fornitore formale, quindi i produttori di dispositivi devono aggiornare grandi porzioni del codice Android per spostare un dispositivo a una versione più recente di Android:

    Figura 2. Ambiente di aggiornamento Android legacy
  • In Android 8.0 e versioni successive, una nuova interfaccia stabile del fornitore fornisce l'accesso alle parti specifiche dell'hardware di Android, in modo che i produttori di dispositivi possano fornire nuove versioni di Android semplicemente aggiornando il framework del sistema operativo Android, senza che i produttori di silicio richiedano ulteriore lavoro:

    Figura 3. Ambiente di aggiornamento Android corrente

Tutti i nuovi dispositivi che vengono lanciati con Android 8.0 e versioni successive possono sfruttare la nuova architettura. Per garantire la compatibilità in avanti delle implementazioni del fornitore, l'interfaccia del fornitore è convalidata dalla Vendor Test Suite (VTS) , che è analoga alla Compatibility Test Suite (CTS) . Puoi utilizzare VTS per automatizzare i test del kernel HAL e OS nelle architetture Android legacy e attuali.

Risorse di architettura

Per i dettagli sull'architettura Android, vedere le seguenti sezioni:

  • Tipi HAL . Descrive HAL vincolati, passthrough, Same-Process (SP) e legacy.
  • AIDL . Documentazione sull'AIDL, sia che venga utilizzata in generale o come interfaccia HAL.
  • HIDL (generale) . Contiene informazioni generali sull'interfaccia tra un HAL e i suoi utenti.
  • HIDL (C++) . Contiene dettagli per la creazione di implementazioni C++ delle interfacce HIDL.
  • HIDL (Java) . Contiene dettagli sul frontend Java per le interfacce HIDL.
  • ConfigStore HAL . Descrive le API per l'accesso agli elementi di configurazione di sola lettura usati per configurare il framework Android.
  • Overlay dell'albero dei dispositivi . Fornisce dettagli sull'utilizzo degli overlay dell'albero dei dispositivi (DTO) in Android.
  • Kit di sviluppo nativo del fornitore (VNDK) . Descrive l'insieme di librerie esclusive del fornitore per l'implementazione di HAL del fornitore.
  • Oggetto interfaccia fornitore (VINTF) . Descrive gli oggetti che aggregano informazioni rilevanti su un dispositivo e le rendono disponibili tramite un'API interrogabile.
  • SELinux per Android 8.0 . Dettagli Modifiche e personalizzazioni di SELinux.

Oltre alle risorse su questo sito, i membri del team di Treble hanno pubblicato Treble: Fast Software Updates by Creation an Equilibrium in an Active Software Ecosystem of Globally Distributed Stakeholders . Il paper è gratuito per i membri ACM e i non membri possono acquistare o leggere l'abstract.