Progettazione snapshot VNDK

Gli snapshot VNDK possono essere utilizzati da un'immagine di sistema per fornire il VNDK corretto alle immagini dei fornitori anche quando le immagini di sistema e dei fornitori vengono create diverse versioni di Android. La creazione di uno snapshot VNDK richiede l'acquisizione le librerie VNDK come snapshot e le contrassegnandole con un numero di versione. La l'immagine del fornitore può collegarsi a una versione VNDK specifica che fornisce le ABI richieste per i moduli nell'immagine del fornitore. Tuttavia, nella stessa versione VNDK, le librerie VNDK devono essere Stabile con ABI.

La progettazione degli snapshot VNDK include metodi per generando precompilazioni di uno snapshot VNDK dall'immagine di sistema attuale installazione le librerie predefinite nella partizione di sistema di una versione più recente di Android.

Informazioni sulle librerie VNDK

HIDL-HAL, introdotti in Android 8.0 consente upgrade separati per le partizioni di sistema e del fornitore. VNDK definisce insiemi di librerie (VNDK-core, VNDK-SP e LL-NDK) che il codice del fornitore può collegarsi e impedire ai fornitori di utilizzare librerie che non si trovano in un VNDK per iniziare. Di conseguenza, è possibile creare ed eseguire l'immagine del fornitore se il VNDK corretto i set di dati nell'immagine di sistema vengono forniti all'immagine del fornitore.

Core VNDK

Il set di librerie VNDK-core è installato /system/lib[64]/vndk-${VER} ed è disponibile solo per i processi del fornitore con un livello API pari a ${VER}. I processi di sistema non possono utilizzare queste librerie e devono utilizza invece le librerie installate in /system/lib[64]. Poiché della rigorosa restrizione dello spazio dei nomi per ogni processo, le librerie VNDK-core sono protetti dal doppio caricamento.

Per includere una libreria in VNDK-core, aggiungi quanto segue a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Le librerie VNDK-SP sono installate in /system/lib[64]/vndk-sp-${VER} e sono disponibili per i processi del fornitore e i processi di sistema (tramite SP-HAL librerie installate nella partizione del fornitore). Le librerie VNDK-SP possono essere a doppio caricamento.

Per includere una libreria in VNDK-SP, aggiungi quanto segue a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Le librerie LL-NDK sono installate in /system/lib[64]. Moduli dei fornitori possono utilizzare le librerie stub LL-NDK per accedere ai simboli preselezionati di LL-NDK librerie. Le librerie LL-NDK devono essere compatibili con le versioni precedenti e stabili per ABI consente alle versioni precedenti dei moduli del fornitore di utilizzare nuove versioni delle librerie LL-NDK. A causa delle caratteristiche stabili in ABI di LL-NDK, lo snapshot VNDK non c'è bisogno di includere librerie LL-NDK per le immagini dei vecchi fornitori.

Informazioni sugli snapshot VNDK

Android 8.1 includeva VNDK librerie create dal codice sorgente. Tuttavia, nelle versioni successive Android, ogni versione VNDK deve essere acquisita come istantanea e fornita come pre-build per abilitare il collegamento a un'immagine precedente del fornitore.

A partire da Android 9, le nuove versioni di Android includi almeno uno snapshot delle directory VNDK-core e VNDK-SP per le nel codice sorgente di Android. Al momento della creazione, gli snapshot richiesti installato in /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER} (directory che possono essere utilizzate la partizione del fornitore), dove ${VER} è la variabile di stringa che rappresenta il nome della versione dello snapshot VNDK.

Poiché le librerie degli snapshot VNDK possono differire per ogni versione VNDK, lo snapshot include anche le configurazioni dello spazio dei nomi Linker, installate etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt e /etc/vndksp.libraries.${VER}.txt.

Esempio: eseguire l'upgrade del sistema e del fornitore immagini

Nessuno snapshot richiesto; build senza configurazioni aggiuntive per VNDK snapshot.

Esempio: eseguire l'upgrade solo dell'immagine di sistema

Devi includere i file di configurazione dello spazio dei nomi per snapshot VNDK e linker per l'immagine del fornitore nell'immagine di sistema. I file di configurazione dello spazio dei nomi del linker vengono configurate automaticamente per cercare librerie VNDK in /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER}.

Figura 1. Upgrade solo del sistema

Esempio: eseguire l'upgrade dell'immagine di sistema, modifica secondaria dell'immagine del fornitore

La creazione di un'immagine del fornitore su uno snapshot VNDK non è ancora supportata, quindi deve creare l'immagine del fornitore separatamente con il suo codice sorgente originale, eseguire l'upgrade dell'immagine di sistema come descritto nell'esempio precedente.

Architettura dello snapshot VNDK

Per creare un'immagine di sistema Android 9 compatibile con un Immagine del fornitore di Android 8.1, l'istantanea VNDK corrispondente ad Android 8.1 l'immagine del fornitore deve essere fornita insieme ad Android 9 immagine di sistema, come mostrato di seguito:

Figura 2. Architettura dello snapshot VNDK

La progettazione dello snapshot VNDK include i seguenti metodi:

  • Generazione di uno snapshot per VNDK-core e VNDK-SP librerie. Android 9 include uno script per creare uno snapshot della build VNDK attuale. Questo script raggruppa tutti biblioteche in /system/lib[64]/vndk-28 e /system/lib[64]/vndk-sp-28 create con la versione attuale come snapshot VNDK, dove 28 è la versione VNDK di Android 9. Lo snapshot include anche il linker di configurazione dello spazio dei nomi /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt e /etc/vndksp.libraries.28.txt. Lo snapshot generato verrà utilizzato con versioni di Android più recenti (superiori ad Android 9).
  • Installazione delle librerie VNDK-core e VNDK-SP predefinite da un un'istantanea. In Android 9, un'istantanea VNDK ha un insieme di librerie VNDK-core predefinite e un set di librerie VNDK-SP, come file di configurazione dello spazio dei nomi linker. Quando fornisci un elenco di VNDK versioni degli snapshot da installare, al momento della creazione, l'immagine di sistema viene installata le librerie di snapshot VNDK in /system/lib[64]/vndk-${VER} e le directory e il linker /system/lib[64]/vndk-sp-${VER} di configurazione dello spazio dei nomi per gli snapshot VNDK Directory /etc.

Controllo delle versioni VNDK

Ogni release di Android ha un solo snapshot VNDK e la versione dell'SDK viene utilizzata come una versione VNDK (che significa che la versione VNDK ha un numero intero, ad esempio 27 per Android 8.1). La versione VNDK viene corretta con la versione Android rilasciate. La versione VNDK utilizzata dalla partizione del fornitore viene archiviata automaticamente nella proprietà ro.vndk.version, che può essere letta sul runtime. Questa versione viene quindi utilizzata per identificare la versione VNDK del fornitore per alcune librerie e identifica la versione dello snapshot VNDK per lo spazio dei nomi configurazione.

Creare librerie VNDK

Il comando make vndk crea librerie con vndk: { enabled: true, … }, inclusi dipendenze e spazio dei nomi di configurazione dei deployment. Se il criterio BOARD_VNDK_VERSION := current è impostato, vengono create con il comando make.

Poiché questa build non installa le librerie VNDK dallo snapshot, le librerie VNDK installate non sono stabili per ABI. Tuttavia, quando una versione di Android viene rilasciata, l'ABI per la versione VNDK corrente è corretta. A questo punto, qualsiasi L'interruzione dell'ABI è un errore di build, quindi le patch per la versione di Android non devono modificare l'ABI per le librerie VNDK.