Un instantané VNDK est un ensemble de bibliothèques VNDK-core et VNDK-SP pour une version Android. Vous pouvez mettre à niveau uniquement la partition système si le system.img
inclut l'instantané VNDK correspondant requis par le vendor.img
.
Les instantanés VNDK officiels sont créés automatiquement sur le serveur de build Android et archivés dans /prebuilts/vndk
de l'arborescence des sources Android. À des fins de développement, vous pouvez créer des instantanés VNDK localement. Les instantanés VNDK sont pris en charge pour les versions arm, arm64, x86 et x86_64 TARGET_ARCH
.
Création d'instantanés
Le serveur de build Android génère des artefacts de build et des fichiers d'instantanés VNDK à l'aide des paramètres de build et des commandes de build suivants.
Paramètres de construction
Le nom de la cible de build est vndk
. La configuration de la cible de build est présentée ci-dessous.
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
est identique aux arcs cibles GSI (Generic System Image) (arm
,arm64
,x86
,x86_64
). -
TARGET_ARCH_VARIANT
. Pour les instantanés v28 (Android 9) et versions ultérieures, inclut les configurations populaires répertoriées ci-dessus.
Construire des commandes
Pour les instantanés officiels, Android 9 et versions ultérieures incluent un exemple de cible ( vndk
) dans vndk.mk
qui crée et génère un instantané VNDK vers $DIST_DIR
. Le fichier ZIP de l'instantané utilise le format android-vndk-$(TARGET_ARCH).zip
. Par exemple:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Le serveur de build Android utilise le script build.sh
pour créer toutes les versions d'arch prises en charge avec la commande suivante.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
L'instantané VNDK pour une version Android est généré à partir de la branche de publication de cette version.
Construire localement
Pendant le développement, vous pouvez créer des instantanés VNDK à partir d'une arborescence source locale avec les commandes suivantes.
- Pour créer toutes les arches prises en charge en même temps, exécutez le script de construction suivant (
build.sh
).cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Pour créer un
TARGET_ARCH
spécifique, exécutez les commandes suivantes.lunch aosp_TARGET_ARCH-user
m -j vndk dist
Le fichier android-vndk-$(TARGET_ARCH).zip
correspondant est créé sous $DIST_DIR
.
Fichiers d'instantanés
Un instantané VNDK comprend les fichiers suivants.
- Variante du fournisseur des bibliothèques partagées VNDK-core et VNDK-SP.
- Les bibliothèques partagées LL-NDK ne sont pas nécessaires car elles sont rétrocompatibles.
- Pour les cibles 64 bits, les bibliothèques
TARGET_ARCH
etTARGET_2ND_ARCH
sont créées et incluses.
- La liste des bibliothèques privées VNDK-core, VNDK-SP, LL-NDK et VNDK se trouve sur
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - Fichiers de licence.
-
module_paths.txt
. Enregistre les chemins de module pour toutes les bibliothèques VNDK, ce qui est nécessaire pour vérifier que les projets GPL ont des sources publiées dans une arborescence de sources Android donnée.
Pour un fichier ZIP d'instantané VNDK donné, android-vndk-$(TARGET_ARCH).zip
, les bibliothèques prédéfinies du VNDK sont regroupées dans des répertoires distincts nommés arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
en fonction du nombre de bits ABI. Par exemple, pour android-vndk-arm64.zip
, les bibliothèques 64 bits sont placées sous arch-arm64-armv8-a
et les bibliothèques 32 bits sont placées sous arch-arm-armv8-a
. L'exemple ci-dessous montre la structure de répertoires d'un fichier ZIP d'instantané VNDK arm64 ( TARGET_ARCH=arm64
) ( android-vndk-arm64.zip
).
Création d'instantanés de fournisseurs
Android 11 prend en charge les instantanés du fournisseur , qui vous permettent de créer vendor.img
quelle que soit la version d'Android dans l'arborescence source. Un instantané VNDK par défaut contient les fichiers de bibliothèque partagés ( .so
) qui peuvent être installés sur les appareils, puis liés à partir des binaires C++ du fournisseur au moment de l'exécution. Pour construire à partir de cet instantané VNDK, vous avez besoin d'artefacts supplémentaires tels que des fichiers d'en-tête et des indicateurs exportés.
Pour générer de tels artefacts (avec l'instantané VNDK) à partir d'une arborescence source locale, utilisez la commande suivante.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Cette commande crée des fichiers android-vndk-$(TARGET_ARCH).zip
sous $DIST_DIR
. L'exemple ci-dessous est un fichier ZIP d'instantané arm64 VNDK avec des artefacts de construction. Les fichiers en gras sont des fichiers récemment ajoutés à l'instantané VNDK normal (illustré dans la figure 1) et incluent les fichiers JSON (qui stockent cflags
de chaque bibliothèque) et tous les fichiers d'en-tête exportés.
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
Téléchargement d'instantanés VNDK
Les instantanés VNDK sont vérifiés dans l'arborescence source sous /prebuilts/vndk/v VER
, où VER
est égal à la version de l'instantané VNDK (qui suit la version SDK de la version Android correspondante). Par exemple, l'instantané Android 8.1 VNDK a la version 27.
Utilisation du script update.py
Le script update.py
( /development/vndk/snapshot/update.py
) automatise le processus d'ajout d'un instantané VNDK prédéfini à l'arborescence source. Il détecte automatiquement les artefacts de construction et remplit de manière appropriée les propriétés associées dans le Android.bp
généré. Ce script effectue les tâches suivantes :
- Dans
/prebuilts/vndk/v VER
, utiliserepo start
pour créer une nouvelle branche Git. - Récupère et décompresse les artefacts de création d’instantanés VNDK.
- Exécute
gen_buildfiles.py
pour générer automatiquement les fichiers de construction (Android.bp
). - Exécute
check_gpl_license.py
pour vérifier que les bibliothèques prédéfinies sous licence GPL (General Public License) ont des sources publiées dans l'arborescence des sources actuelle. - Utilise
git commit
pour valider de nouvelles modifications.
Utilisation d'instantanés VNDK créés localement
Vous pouvez également utiliser des instantanés VNDK créés localement. Lorsque l'option --local
est spécifiée, le script update.py
récupère les artefacts de génération d'instantanés VNDK à partir du répertoire local spécifié (au lieu du serveur de build Android) qui contient les fichiers android-vndk-$(TARGET_ARCH).zip
générés à partir du development/vndk/snapshot/build.sh
. development/vndk/snapshot/build.sh
. Avec l'option --local
, le script update.py
ignore la vérification de la licence GPL et les étapes git commit
.
Syntaxe:
python update.py VER --local local_path
Exemple de commande pour mettre à jour l'instantané VNDK Android 8.1 avec des artefacts de build locaux dans /path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
Exemple de structure de répertoires d'un instantané VNDK construit localement :
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)Les artefacts de construction locaux sont ajoutés automatiquement si les artefacts ont été construits avec
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.Installation des instantanés VNDK
L'image système installe les bibliothèques d'instantanés VNDK au moment de la construction à l'aide des informations contenues dans BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
et ro.vndk.version
. Vous pouvez contrôler quels instantanés VNDK sont installés à partir des répertoires d'instantanés VNDK prédéfinis (par exemple, /prebuilts/vndk/v29
ou /prebuilts/vndk/v30
) à l'aide de l'une des options suivantes.
- Option 1 :
BOARD_VNDK_VERSION
. Utilisez les modules de cliché pour créer les modules du fournisseur actuel et installez uniquement les modules de cliché requis pour les modules du fournisseur. - Option 2 :
PRODUCT_EXTRA_VNDK_VERSIONS
. Installez les modules d'instantanés VNDK quels que soient les modules du fournisseur actuel. Cela installe les instantanés VNDK prédéfinis répertoriés dansPRODUCT_EXTRA_VNDK_VERSIONS
sans les lier à d'autres modules au moment de la construction.
Paramètre BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
affiche la version VNDK que les modules du fournisseur actuel doivent créer. Si BOARD_VNDK_VERSION
dispose d'une version d'instantané VNDK disponible dans le répertoire /prebuilts/vndk
, l'instantané VNDK indiqué dans BOARD_VNDK_VERSION
est installé. Si l'instantané VNDK n'est pas disponible dans le répertoire, une erreur de génération se produit.
Définir BOARD_VNDK_VERSION
permet également d'installer les modules VNDK. Les modules du fournisseur sont liés à la version de l'instantané VNDK définie dans BOARD_VNDK_VERSION
au moment de la construction (cela ne crée pas les modules VNDK actuels dans la source système). Lors du téléchargement de l'arborescence complète des sources à partir d'un référentiel, les sources du système et du fournisseur sont basées sur la même version d'Android.
Paramètre PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
répertorie les versions supplémentaires du VNDK à installer. Normalement, il suffit d'avoir un instantané VNDK pour la partition actuelle du fournisseur. Cependant, dans certains cas, vous devrez peut-être inclure plusieurs instantanés dans une seule image système. Par exemple, le GSI dispose de plusieurs instantanés pour prendre en charge plusieurs versions de fournisseurs avec une seule image système. En définissant PRODUCT_EXTRA_VNDK_VERSIONS
, vous pouvez installer les modules d'instantanés VNDK en plus de la version VNDK dans BOARD_VNDK_VERSION
.
Si PRODUCT_EXTRA_VNDK_VERSIONS
possède une liste spécifique de versions, le système de build recherche des instantanés prédéfinis de la liste des versions dans le répertoire prebuilts/vndk
. Si le système de build localise tous les instantanés répertoriés, il installe ces fichiers d'instantanés sur chaque VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER
. Les versions manquantes génèrent une erreur de build.
Les modules VNDK ne sont pas liés aux modules du fournisseur au moment de la construction, mais peuvent être utilisés au moment de l'exécution si les modules du fournisseur dans la partition du fournisseur nécessitent l'une des versions VNDK installées. PRODUCT_EXTRA_VNDK_VERSIONS
est valide uniquement si BOARD_VNDK_VERSION
est défini.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
définit la version VNDK pour les modules VNDK actuels dans la source système. La valeur est définie automatiquement :
- Avant la sortie,
PLATFORM_VNDK_VERSION
est défini surPLATFORM_VERSION_CODENAME
. - Lors de la sortie,
PLATFORM_SDK_VERSION
est copié dansPLATFORM_VNDK_VERSION
.
Une fois la version Android publiée, les bibliothèques VNDK actuelles sont installées sur VNDK APEX ( /system/apex/com.android.vndk.v VER
), où VER
est la version stockée dans PLATFORM_VNDK_VERSION
.
Lorsque BOARD_VNDK_VERSION
est défini sur current
, PLATFORM_VNDK_VERSION
est stocké dans ro.vndk.version
, sinon BOARD_VNDK_VERSION
est stocké dans ro.vndk.version
. PLATFORM_VNDK_VERSION
est défini sur la version du SDK lors de la sortie d'Android ; avant la sortie, le nom de code Android alphanumérique est utilisé pour PLATFORM_VNDK_VERSION
.
Résumé des paramètres de version du VNDK
Le tableau ci-dessous résume les paramètres de la version VNDK.
Fournisseur Construire | Conseil Version | SDK Libérer | Plate-forme Version | Version Propriété | Répertoire d'installation |
---|---|---|---|---|---|
Modules VNDK actuels | current | Avant | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
Après | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
Modules d'instantanés prédéfinis | VNDK_VER pour un instantané | Avant ou après | CODE_NAME ou SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Version de la carte (
BOARD_VNDK_VERSION
). Version VNDK dont les modules du fournisseur ont besoin pour être construits. Défini surcurrent
si les modules du fournisseur peuvent être liés aux modules système actuels. - Version de la plateforme (
PLATFORM_VNDK_VERSION
). Version VNDK construite par les modules système actuels. Construit uniquement lorsqueBOARD_VNDK_VERSION
est égal au courant. - Propriété Version (
ro.vndk.version
). Propriété qui spécifie la version VNDK dont les binaires et les bibliothèques de supplier.img ont besoin pour s'exécuter. Stocké dans levendor.img
à/vendor/default.prop
.