Architettura Android

L'architettura del sistema Android contiene i seguenti componenti:

Panoramica dell'architettura del sistema Android
Architettura del sistema Figura 1. Android
  • Framework per applicazioni. Il framework dell'applicazione viene utilizzato più spesso dagli sviluppatori di applicazioni. In qualità di sviluppatore di hardware, dovresti essere a conoscenza delle API per sviluppatori poiché molte vengono mappate direttamente alle interfacce HAL sottostanti e possono fornire informazioni utili sull'implementazione dei driver.
  • Binder IPC. Il meccanismo di 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 Gestione notifiche) e multimediali (servizi coinvolti nel gioco e supporto di registrazione).
  • Hardware Abstraction Layer (HAL). Un HAL definisce un'interfaccia standard da implementare per i fornitori di hardware, che consente ad Android di essere indipendente dalle implementazioni dei 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 dettagli, vedere Hardware Abstraction Layer (HAL) .
  • Kernel Linux. Lo sviluppo dei driver di dispositivo è simile allo sviluppo di un tipico driver di dispositivo Linux. Utilizza Android una versione del kernel Linux con alcune aggiunte speciali come Low Memory Killer (un sistema di gestione della memoria che è più aggressivo in memoria preservando), serrature scia (un PowerManager servizio di sistema), il driver Binder IPC, e altre caratteristiche importanti per una piattaforma mobile embedded. Queste aggiunte riguardano principalmente 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 come compilare un kernel .

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

Android 8.0 riprogettato il quadro operativo Android (in un progetto denominato Treble) per rendere più facile, più veloce e meno costoso per i produttori di dispositivi aggiornamento 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 dai sottosistemi che non sono ancora stati convertiti in AIDL.

Treble separa l'implementazione del fornitore (software di livello inferiore specifico del dispositivo scritto da produttori di silicio) dal framework del sistema operativo Android tramite una nuova interfaccia del fornitore. Fornitori o produttori di SOC costruire HAL una volta e metterli in un /vendor partizione sul dispositivo; il quadro, nella sua partizione, può essere sostituito con un aggiornamento over-the-air (OTA) ricompilandosi HALS.

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 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:

    Ambiente aggiornamento Figura 2. legacy Android
  • In Android 8.0 e versioni successive, una nuova interfaccia fornitore stabile 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 lavoro aggiuntivo richiesto dai produttori di silicio:

    Ambiente aggiornamento Figura 3. Android corrente

Tutti i nuovi dispositivi che si avviano con Android 8.0 e versioni successive possono sfruttare la nuova architettura. Per garantire la compatibilità in avanti delle implementazioni dei fornitori, l'interfaccia fornitore è convalidato dal Venditore Test Suite (VTS) , che è analogo al Compatibility Test Suite (CTS) . È possibile utilizzare VTS per automatizzare i test del kernel HAL e del sistema operativo in architetture Android sia legacy che attuali.

Risorse di architettura

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

  • Tipi HAL . Descrive gli HAL binderizzati, passthrough, Same-Process (SP) e legacy.
  • AIDL . Documentazione su AIDL, indipendentemente dal fatto che venga utilizzato generalmente o come interfaccia HAL.
  • HIDL (Generale) . Contiene informazioni generali sull'interfaccia tra un HAL ei suoi utenti.
  • HIDL (C ++) . Contiene i 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.
  • Dispositivo Albero sovrapposizioni . Fornisce dettagli sull'utilizzo degli overlay della struttura ad albero dei dispositivi (DTO) in Android.
  • Venditore Native Development Kit (VNDK) . Descrive l'insieme di librerie esclusive del fornitore per l'implementazione degli HAL del fornitore.
  • Venditore Interface Object (VINTF) . Descrive gli oggetti che aggregano informazioni rilevanti su un dispositivo e rendono disponibili tali informazioni tramite un'API interrogabile.
  • SELinux per Android 8.0 . Dettagli Modifiche e personalizzazioni di SELinux.

In aggiunta alle risorse su questo sito, i membri del team di Treble pubblicato Treble: Veloce aggiornamenti software mediante la creazione di un equilibrio in un Active Software ecosistema di distribuito globalmente parti interessate . Il paper è gratuito per i membri ACM ei non membri possono acquistare o leggere l'abstract.