Ein VNDK-Snapshot besteht aus einer Reihe von VNDK-Core- und VNDK-SP-Bibliotheken für eine Android-Version.
Sie können nur die Systempartition aktualisieren, wenn die system.img
den entsprechenden VNDK-Snapshot enthält, der von der vendor.img
benötigt wird.
Offizielle VNDK-Snapshots werden automatisch auf dem Android-Build-Server erstellt und in /prebuilts/vndk
des Android-Quellbaums eingecheckt. Für Entwicklungszwecke können Sie VNDK-Snapshots lokal erstellen. VNDK-Snapshots werden für TARGET_ARCH
-Varianten von arm, arm64, x86 und x86_64 unterstützt.
Snapshots erstellen
Der Android-Buildserver generiert Build-Artefakte und VNDK-Snapshot-Dateien mit den folgenden Build-Parametern und Build-Befehlen.
Build-Parameter
Der Name des Build-Ziels lautet vndk
. Die Konfiguration des Buildziels ist unten dargestellt.
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
entspricht den Zielarchitekturen des generischen System-Images (GSI) (arm
,arm64
,x86
,x86_64
).TARGET_ARCH_VARIANT
. Für Snapshot v28 (Android 9) und höher sind die oben aufgeführten gängigen Konfigurationen enthalten.
Build-Befehle
Für offizielle Snapshots enthält Android 9 und höher ein Beispielziel (vndk
) in vndk.mk
, das einen VNDK-Snapshot erstellt und in $DIST_DIR
ausgibt. Die ZIP-Datei des Snapshots hat das Format android-vndk-$(TARGET_ARCH).zip
.
Beispiel:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Der Android-Buildserver verwendet das Script build.sh
, um alle unterstützten Arch-Varianten mit dem folgenden Befehl zu erstellen.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Der VNDK-Snapshot für eine Android-Version wird aus dem Release-Branch dieser Version generiert.
Lokal erstellen
Während der Entwicklung können Sie VNDK-Snapshots mit den folgenden Befehlen aus einem lokalen Quellbaum erstellen.
- Wenn Sie alle unterstützten Architekturen gleichzeitig erstellen möchten, führen Sie das folgende Build-Script (
build.sh
) aus.cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Führen Sie die folgenden Befehle aus, um eine bestimmte
TARGET_ARCH
zu erstellen.lunch aosp_TARGET_ARCH-user
m -j vndk dist
Die entsprechende android-vndk-$(TARGET_ARCH).zip
-Datei wird unter $DIST_DIR
erstellt.
Snapshot-Dateien
Ein VNDK-Snapshot enthält die folgenden Dateien.
- Anbietervariante der VNDK-Core- und VNDK-SP-Freigabebibliotheken.
- LL-NDK-gemeinsam genutzte Bibliotheken sind nicht erforderlich, da sie abwärtskompatibel sind.
- Für 64-Bit-Ziele werden sowohl
TARGET_ARCH
- als auchTARGET_2ND_ARCH
-Bibliotheken erstellt und eingeschlossen.
- Eine Liste der VNDK-Core-, VNDK-SP-, LL-NDK- und VNDK-Private-Bibliotheken finden Sie unter
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - Lizenzdateien
module_paths.txt
: Protokolliert die Modulpfade für alle VNDK-Bibliotheken. Dies ist erforderlich, um zu prüfen, ob GPL-Projekte Quellen in einem bestimmten Android-Quellbaum veröffentlicht haben.
Für eine bestimmte VNDK-Snapshot-ZIP-Datei, android-vndk-$(TARGET_ARCH).zip
, sind die vorgefertigten VNDK-Bibliotheken nach der ABI-Bitanzahl in separaten Verzeichnissen mit dem Namen arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
gruppiert. Bei android-vndk-arm64.zip
werden die 64-Bit-Bibliotheken beispielsweise unter arch-arm64-armv8-a
und die 32-Bit-Bibliotheken unter arch-arm-armv8-a
abgelegt. Das folgende Beispiel zeigt die Verzeichnisstruktur für eine VNDK-Snapshot-ZIP-Datei (android-vndk-arm64.zip
) für ARM64 (TARGET_ARCH=arm64
).

Für Anbieter-Snapshots erstellen
Android 11 unterstützt Snapshots von Anbietern, mit denen Sie vendor.img
unabhängig von der Android-Version im Stammverzeichnis erstellen können. Ein standardmäßiger VNDK-Snapshot enthält die Dateien der freigegebenen Bibliothek (.so
), die auf Geräten installiert und dann zur Laufzeit über die C++-Binärdateien des Anbieters verknüpft werden können. Wenn Sie mit diesem VNDK-Snapshot erstellen möchten, benötigen Sie zusätzliche Artefakte wie Headerdateien und exportierte Flags.
Verwenden Sie den folgenden Befehl, um solche Artefakte (zusammen mit dem VNDK-Snapshot) aus einem lokalen Quellbaum zu generieren.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Mit diesem Befehl werden android-vndk-$(TARGET_ARCH).zip
-Dateien unter $DIST_DIR
erstellt. Das folgende Beispiel ist eine arm64-VNDK-Snapshot-ZIP-Datei mit Build-Artefakten. Die fett formatierten Dateien sind dem normalen VNDK-Snapshot (siehe Abbildung 1) neu hinzugefügte Dateien. Dazu gehören JSON-Dateien (mit cflags
jeder Bibliothek) und alle exportierten Headerdateien.
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
VNDK-Snapshots hochladen
VNDK-Snapshots werden im Stammbaum unter /prebuilts/vndk/vVER
geprüft. Dabei entspricht VER
der Version des VNDK-Snapshots, die der SDK-Version der entsprechenden Android-Version folgt. Der VNDK-Snapshot für Android 8.1 hat beispielsweise die Version 27.
Skript „update.py“ verwenden
Das update.py
-Script (/development/vndk/snapshot/update.py
) automatisiert das Hinzufügen eines vorkonfigurierten VNDK-Snapshots zum Quellbaum. Es erkennt automatisch Build-Artefakte und füllt die zugehörigen Eigenschaften im generierten Android.bp
entsprechend aus. Dieses Script führt die folgenden Aufgaben aus:
- In
/prebuilts/vndk/vVER
wirdrepo start
verwendet, um einen neuen Git-Branch zu erstellen. - Ruft VNDK-Snapshot-Build-Artefakte ab und entpackt sie.
- Führt
gen_buildfiles.py
aus, um die Builddateien (Android.bp
) automatisch zu generieren. - Führt
check_gpl_license.py
aus, um zu prüfen, ob die vorkonfigurierten Bibliotheken, die gemäß der General Public License (GPL) lizenziert sind, im aktuellen Quellbaum veröffentlicht wurden. - Verwendet
git commit
, um neue Änderungen zu übernehmen.
Lokal erstellte VNDK-Snapshots verwenden
Sie können auch lokal erstellte VNDK-Snapshots verwenden. Wenn die Option --local
angegeben ist, ruft das update.py
-Script VNDK-Snapshot-Build-Artefakte aus dem angegebenen lokalen Verzeichnis (anstelle des Android-Build-Servers) ab, das die android-vndk-$(TARGET_ARCH).zip
-Dateien enthält, die aus dem development/vndk/snapshot/build.sh
generiert wurden. Mit der Option --local
überspringt das update.py
-Script die GPL-Lizenzprüfung und die Schritte git commit
.
Syntax:
python update.py VER --local local_path
Beispielbefehl zum Aktualisieren des Android 8.1-VNDK-Snapshots mit lokalen Build-Artefakten in /path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
Beispiel für die Verzeichnisstruktur eines lokal erstellten VNDK-Snapshots:
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)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
erstellt wurden.
VNDK-Snapshots installieren
Das System-Image installiert VNDK-Snapshot-Bibliotheken zur Buildzeit anhand der Informationen in BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
und ro.vndk.version
.
Mit einer der folgenden Optionen können Sie festlegen, welche VNDK-Snapshots aus den vorkonfigurierten VNDK-Snapshot-Verzeichnissen (z. B. /prebuilts/vndk/v29
oder /prebuilts/vndk/v30
) installiert werden.
- Option 1:
BOARD_VNDK_VERSION
. Verwenden Sie die Snapshot-Module zum Erstellen der aktuellen Anbietermodule und installieren Sie nur die Snapshot-Module, die für die Anbietermodule erforderlich sind. - Option 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. Installieren Sie die VNDK-Snapshot-Module unabhängig von den aktuellen Anbietermodulen. Dadurch werden die inPRODUCT_EXTRA_VNDK_VERSIONS
aufgeführten vorkompilierten VNDK-Snapshots installiert, ohne dass sie zur Buildzeit mit anderen Modulen verknüpft werden.
BOARD_VNDK_VERSION festlegen
BOARD_VNDK_VERSION
zeigt die VNDK-Version an, die für das Erstellen aktueller Anbietermodule erforderlich ist. Wenn unter BOARD_VNDK_VERSION
im Verzeichnis /prebuilts/vndk
eine VNDK-Snapshot-Version verfügbar ist, wird der in BOARD_VNDK_VERSION
angegebene VNDK-Snapshot installiert. Wenn der VNDK-Snapshot nicht im Verzeichnis verfügbar ist, tritt ein Buildfehler auf.
Wenn Sie BOARD_VNDK_VERSION
definieren, können auch die VNDK-Module installiert werden. Anbietermodule werden bei der Buildzeit mit der in BOARD_VNDK_VERSION
definierten VNDK-Snapshot-Version verknüpft. Dadurch werden keine aktuellen VNDK-Module in der Systemquelle erstellt. Wenn Sie den vollständigen Quellbaum aus einem Repository herunterladen, basieren sowohl die System- als auch die Anbieterquellen auf derselben Android-Release.
PRODUCT_EXTRA_VNDK_VERSIONS festlegen
PRODUCT_EXTRA_VNDK_VERSIONS
enthält die zusätzlichen VNDK-Versionen, die installiert werden sollen. Normalerweise reicht ein VNDK-Snapshot für die aktuelle Anbieterpartition aus. In einigen Fällen müssen Sie jedoch möglicherweise mehrere Snapshots in einem System-Image aufnehmen. Beispielsweise hat das GSI mehrere Snapshots, um mehrere Anbieterversionen mit einem System-Image zu unterstützen. Wenn Sie PRODUCT_EXTRA_VNDK_VERSIONS
festlegen, können Sie die VNDK-Snapshot-Module zusätzlich zur VNDK-Version in BOARD_VNDK_VERSION
installieren.
Wenn PRODUCT_EXTRA_VNDK_VERSIONS
eine bestimmte Liste von Versionen enthält, sucht das Build-System im Verzeichnis prebuilts/vndk
nach vorkonfigurierten Snapshots der Versionsliste. Wenn das Build-System alle aufgeführten Snapshots findet, werden diese Snapshot-Dateien in jeder VNDK-APEX (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER
) installiert. Fehlende Versionen führen zu einem Buildfehler.
Die VNDK-Module werden bei der Buildzeit nicht mit den Anbietermodulen verknüpft, können aber zur Laufzeit verwendet werden, wenn die Anbietermodule in der Anbieterpartition eine der installierten VNDK-Versionen erfordern. PRODUCT_EXTRA_VNDK_VERSIONS
ist nur gültig, wenn BOARD_VNDK_VERSION
definiert ist.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
definiert die VNDK-Version für aktuelle VNDK-Module in der Systemquelle. Der Wert wird automatisch festgelegt:
- Vor der Veröffentlichung ist die
PLATFORM_VNDK_VERSION
aufPLATFORM_VERSION_CODENAME
festgelegt. - Bei der Veröffentlichung wird
PLATFORM_SDK_VERSION
inPLATFORM_VNDK_VERSION
kopiert.
Nach der Veröffentlichung der Android-Version werden die aktuellen VNDK-Bibliotheken in VNDK APEX (/system/apex/com.android.vndk.vVER
) installiert. Dabei ist VER
die in PLATFORM_VNDK_VERSION
gespeicherte Version.
Wenn BOARD_VNDK_VERSION
auf current
festgelegt ist, wird PLATFORM_VNDK_VERSION
in ro.vndk.version
gespeichert. Andernfalls wird BOARD_VNDK_VERSION
in ro.vndk.version
gespeichert. PLATFORM_VNDK_VERSION
wird bei Android-Releases auf die SDK-Version festgelegt. Vor der Veröffentlichung wird für PLATFORM_VNDK_VERSION
der alphanumerische Android-Codename verwendet.
Zusammenfassung der VNDK-Versionen
In der Tabelle sind die Einstellungen für die VNDK-Version zusammengefasst.
Anbieter Build |
Board -Version |
SDK -Release |
Plattform Version |
Version -Property |
Installationsverzeichnis |
---|---|---|---|---|---|
Aktuelle VNDK-Module | current |
Vorher | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
Nachher | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
Vordefinierte Snapshot-Module | VNDK_VER für Snapshot |
Vorher oder nachher | CODE_NAME oder SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- Boardversion (
BOARD_VNDK_VERSION
): VNDK-Version, die für das Erstellen von Anbietermodulen erforderlich ist. Legen Siecurrent
fest, wenn Anbietermodule mit aktuellen Systemmodulen verknüpft werden können. - Plattformversion (
PLATFORM_VNDK_VERSION
): VNDK-Version, mit der die aktuellen Systemmodule erstellt werden. Wird nur erstellt, wennBOARD_VNDK_VERSION
dem aktuellen Wert entspricht. - Version Property (
ro.vndk.version
): Property, die die VNDK-Version angibt, die für die Ausführung der Binärdateien und Bibliotheken in vendor.img erforderlich ist. In dervendor.img
unter/vendor/default.prop
gespeichert.