Genera snapshot VNDK

Uno snapshot VNDK è un insieme di librerie VNDK-core e VNDK-SP per una release Android. Puoi eseguire l'upgrade solo della partizione di sistema se system.img include lo snapshot VNDK corrispondente necessario vendor.img.

Gli snapshot VNDK ufficiali vengono creati automaticamente sul server di build Android ed è stato registrato in /prebuilts/vndk della struttura di origine di Android. Per per scopi di sviluppo, puoi creare snapshot VNDK localmente. Gli snapshot VNDK vengono supportato per le versioni TARGET_ARCH ARM, Arm64, x86 e x86_64.

Crea snapshot

Il server di build Android genera artefatti della build e file di snapshot VNDK utilizzando i seguenti parametri e comandi build.

Parametri build

Il nome della destinazione di build è vndk. La configurazione della destinazione della build è mostrato di seguito.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH è uguale all'immagine di sistema generica (GSI) archi di destinazione (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT. Per snapshot v28 (Android 9) e versioni successive, include le configurazioni più comuni elencate sopra.

Comandi di Build

Per le istantanee ufficiali, Android 9 e versioni successive include un target di esempio (vndk) in vndk.mk che crea e restituisce un VNDK snapshot a $DIST_DIR. Il file ZIP dello snapshot utilizza il formato android-vndk-$(TARGET_ARCH).zip. Ad esempio:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

Il server di build Android utilizza Script build.sh per creare tutti gli archi supportati con il seguente comando.

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

L'istantanea VNDK per una versione Android viene generata dal modello ramo di rilascio.

Crea localmente

Durante lo sviluppo, puoi creare snapshot VNDK da una struttura di origine locale con i seguenti comandi.

  • Per creare contemporaneamente tutti gli archi supportati, esegui il seguente script di build (build.sh)
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Per creare uno specifico TARGET_ARCH, esegui questo comando: tramite comandi SQL.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

Il file android-vndk-$(TARGET_ARCH).zip corrispondente è stato creato sotto $DIST_DIR.

File di snapshot

Uno snapshot VNDK include i seguenti file.

  • Variante del fornitore delle librerie condivise con core VNDK e VNDK-SP.
    • Le librerie condivise LL-NDK non sono necessarie perché sono compatibili con le versioni precedenti.
    • Per i target a 64 bit, sia TARGET_ARCH che Sono state create e incluse TARGET_2ND_ARCH librerie.
  • L'elenco delle librerie VNDK-core, VNDK-SP, LL-NDK e VNDK-private è disponibile all'indirizzo [vndkcore|vndksp|llndk|vndkprivate].libraries.txt.
  • File di licenza.
  • module_paths.txt. Registra i percorsi dei moduli per tutte le VNDK che è necessario per verificare che i progetti GPL dispongano di fonti disponibili in un determinato albero di origine Android.

Per un determinato file ZIP snapshot VNDK, android-vndk-$(TARGET_ARCH).zip, le librerie predefinite VNDK vengono raggruppate in directory separate denominate arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) secondo ABI un po' di freschezza. Ad esempio, per android-vndk-arm64.zip, il file libs a 64 bit sono posizionati in arch-arm64-armv8-a e le librerie a 32 bit posizionato sotto arch-arm-armv8-a. L'esempio seguente mostra struttura di directory per un VNDK arm64 (TARGET_ARCH=arm64) il file ZIP dello snapshot (android-vndk-arm64.zip).

Struttura della directory degli snapshot VNDK
Figura 1. Struttura della directory dello snapshot VNDK (esempio)

Crea per snapshot dei fornitori

Android 11 supporta fornitore snapshot, che ti consentono di creare vendor.img indipendentemente la versione di Android nell'albero del codice sorgente. Uno snapshot VNDK predefinito contiene i file della raccolta condivisa (.so) che possono essere installati sui dispositivi e collegati dai file binari C++ del fornitore in runtime. Per creare contro lo snapshot VNDK, ti servono artefatti aggiuntivi, come file di intestazione i flag esportati.

a generare questi artefatti (insieme allo snapshot VNDK) da un'origine locale. usa il seguente comando.

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

Questo comando crea android-vndk-$(TARGET_ARCH).zip file in $DIST_DIR. L'esempio di seguito è un file ZIP snapshot VNDK ARM64 con gli artefatti della build. I file in grassetto sono file appena aggiunti al VNDK normale. uno snapshot (mostrato nella Figura 1) e includere file JSON (che archiviano cflags di ogni libreria) e tutti i file di intestazione esportati.

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

Carica snapshot VNDK

Gli snapshot VNDK vengono controllati nell'albero di origine in /prebuilts/vndk/vVER, dove VER è uguale alla versione dello snapshot VNDK (che segue la versione dell'SDK della release di Android corrispondente). Per ad esempio, l'istantanea VNDK di Android 8.1 ha la versione 27.

Utilizza lo script update.py

Lo script update.py (/development/vndk/snapshot/update.py) automatizza il processo di con l'aggiunta di uno snapshot VNDK predefinito all'albero di origine. Rileva automaticamente creare artefatti e compilare correttamente le proprietà associate nel generato Android.bp. Questo script esegue le seguenti attività:

  1. In /prebuilts/vndk/vVER, utilizza repo start per creare un nuovo ramo Git.
  2. Recupera e decomprime gli artefatti di build dello snapshot VNDK.
  3. Esegue gen_buildfiles.py per generare automaticamente i file di build (Android.bp).
  4. Esegue check_gpl_license.py per verificare le librerie predefinite autorizzate ai sensi della General Public License (GPL) dispongono di fonti rilasciate in struttura di origine attuale.
  5. Utilizza git commit per eseguire il commit di nuove modifiche.

Usa snapshot VNDK creati localmente

Puoi anche utilizzare snapshot VNDK creati localmente. Quando --local , lo script update.py recupera lo snapshot VNDK gli artefatti della build dalla directory locale specificata (anziché l'interfaccia server di compilazione) che contiene i file android-vndk-$(TARGET_ARCH).zip generati a partire da development/vndk/snapshot/build.sh. Con Opzione --local, lo script update.py ignora la modalità GPL controllo delle licenze e git commit passaggi.

Sintassi:

python update.py VER --local local_path

Comando di esempio per aggiornare lo snapshot VNDK di Android 8.1 con una build locale elementi in /path/to/local/dir:

python update.py 27 --local /path/to/local/dir

Esempio di struttura di directory di uno snapshot VNDK creato localmente:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
Gli artefatti locali della build vengono aggiunti automaticamente se gli artefatti sono stati creati con VNDK_SNAPSHOT_BUILD_ARTIFACTS=true.

Installa snapshot VNDK

L'immagine di sistema installa le librerie di snapshot VNDK al momento della creazione utilizzando informazioni in BOARD_VNDK_VERSION, PRODUCT_EXTRA_VNDK_VERSIONS e ro.vndk.version. Puoi controllare quali snapshot VNDK vengono installati dalla piattaforma VNDK predefinita directory di snapshot (ad esempio, /prebuilts/vndk/v29 o /prebuilts/vndk/v30) utilizzando una delle seguenti opzioni.

  • Opzione 1: BOARD_VNDK_VERSION. Utilizza la moduli snapshot per creare gli attuali moduli del fornitore e installare solo i moduli snapshot richiesti per i moduli del fornitore.
  • Opzione 2: PRODUCT_EXTRA_VNDK_VERSIONS. Installa i moduli snapshot VNDK a prescindere dai moduli del fornitore attuale. Verranno installati gli snapshot VNDK predefiniti elencati in PRODUCT_EXTRA_VNDK_VERSIONS senza collegarlo ad altri moduli al momento della creazione.

Imposta BOARD_VNDK_VERSION

BOARD_VNDK_VERSION mostra la versione VNDK del fornitore attuale sono necessari per la creazione. Se BOARD_VNDK_VERSION ha un versione dello snapshot VNDK disponibile nella directory /prebuilts/vndk, Lo snapshot VNDK indicato in BOARD_VNDK_VERSION è installato. Se lo snapshot VNDK non è disponibile nella directory, si verifica un errore di generazione.

La definizione di BOARD_VNDK_VERSION consente anche ai moduli VNDK di installato. Link ai moduli del fornitore con la versione dello snapshot VNDK definita in BOARD_VNDK_VERSION al momento della creazione (non viene creato moduli VNDK nell'origine del sistema). Quando scarichi l'intera struttura di origine da un repository, le origini del sistema e dei fornitori si basano sullo stesso .

Imposta PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS elenca le versioni VNDK aggiuntive da utilizzare installato. Di solito è sufficiente avere uno snapshot VNDK per l'attuale del fornitore. Tuttavia, in alcuni casi potrebbe essere necessario includere più di snapshot in un'unica immagine di sistema. Ad esempio, GSI dispone di più snapshot supportare più versioni del fornitore con una sola immagine di sistema. Mediante l'impostazione PRODUCT_EXTRA_VNDK_VERSIONS, puoi installare lo snapshot VNDK oltre alla versione VNDK in BOARD_VNDK_VERSION.

Se PRODUCT_EXTRA_VNDK_VERSIONS ha un elenco specifico di versioni, il sistema di compilazione cerca snapshot predefiniti dell'elenco delle versioni nella Directory prebuilts/vndk. Se il sistema di compilazione individua tutti gli elementi elencati di snapshot, installa i file di snapshot su ogni APEX VNDK (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER, Le versioni mancanti generano un errore di build.

I moduli VNDK non sono collegati ai moduli del fornitore al momento della creazione, ma possono utilizzate in fase di runtime, se i moduli del fornitore nella partizione del fornitore richiedono uno dei seguenti le versioni VNDK installate. PRODUCT_EXTRA_VNDK_VERSIONS è valido solo se BOARD_VNDK_VERSION è definito.

VERSIONE_PIATTAFORMA_VNDK

PLATFORM_VNDK_VERSION definisce la versione VNDK per l'attuale VNDK moduli nell'origine del sistema. Il valore viene impostato automaticamente:

  • Prima della release, PLATFORM_VNDK_VERSION è impostato come PLATFORM_VERSION_CODENAME.
  • Al momento del rilascio, l'elemento PLATFORM_SDK_VERSION viene copiato in PLATFORM_VNDK_VERSION.

Dopo il rilascio della versione di Android, le librerie VNDK attuali vengono installato su VNDK APEX (/system/apex/com.android.vndk.vVER), dove VER è la versione archiviata in PLATFORM_VNDK_VERSION.

Quando il criterio BOARD_VNDK_VERSION è impostato su current, il valore PLATFORM_VNDK_VERSION è archiviato in ro.vndk.version, altrimenti BOARD_VNDK_VERSION viene archiviato ro.vndk.version. Il valore di PLATFORM_VNDK_VERSION è impostato sul Versione dell'SDK al momento del rilascio di Android; prima del rilascio, i caratteri alfanumerici Android nome in codice è utilizzato per PLATFORM_VNDK_VERSION.

Riepilogo delle impostazioni della versione VNDK

La tabella riassume le impostazioni della versione VNDK.

Creazione
fornitore
Versione
bacheca
Release
SDK
Versione
piattaforma
Proprietà
versione
Installa directory
Moduli VNDK attuali current Prima CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
Dopo SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
Moduli di snapshot predefiniti VNDK_VER
per l'istantanea
Prima o dopo CODE_NAME
o SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Board Version (BOARD_VNDK_VERSION). VNDK la versione richiesta dai moduli del fornitore. Imposta su current se I moduli del fornitore possono collegarsi ai moduli di sistema attuali.
  • Versione piattaforma (PLATFORM_VNDK_VERSION). Versione VNDK sviluppata dagli attuali moduli di sistema. Creata solo quando BOARD_VNDK_VERSION equivale a attuale.
  • Proprietà versione (ro.vndk.version). Proprietà che specifica la versione VNDK richiesta da file binari e libs in reseller.img vengono eseguiti tutti i test delle unità. Archiviato in vendor.img alle ore /vendor/default.prop.