Ein VNDK-Snapshot ist ein Satz 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 die Varianten arm, arm64, x86 und x86_64 TARGET_ARCH
unterstützt.
Schnappschüsse erstellen
Der Android-Build-Server generiert Build-Artefakte und VNDK-Snapshot-Dateien mithilfe der folgenden Build-Parameter und Build-Befehle.
Build-Parameter
Der Name des Build-Ziels ist vndk
. Die Build-Zielkonfiguration 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
ist dasselbe wie Generic System Image (GSI) -Zielbögen (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.
Befehle erstellen
Für offizielle Snapshots enthält Android 9 und höher ein Beispielziel ( vndk
) in vndk.mk
, das einen VNDK-Snapshot erstellt und an $DIST_DIR
ausgibt. Die Snapshot-ZIP-Datei verwendet das Format android-vndk-$(TARGET_ARCH).zip
. Zum Beispiel:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Der Android-Build-Server verwendet das Skript 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-Zweig dieser Version generiert.
Bauen vor Ort
Während der Entwicklung können Sie mit den folgenden Befehlen VNDK-Snapshots aus einem lokalen Quellbaum erstellen.
- Um alle unterstützten Archs auf einmal zu erstellen, führen Sie das folgende Build-Skript (
build.sh
) aus.cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Um ein bestimmtes
TARGET_ARCH
zu erstellen, führen Sie die folgenden Befehle aus.lunch aosp_TARGET_ARCH-user
m -j vndk dist
Die entsprechende Datei android-vndk-$(TARGET_ARCH).zip
wird unter $DIST_DIR
erstellt.
Snapshot-Dateien
Ein VNDK-Snapshot enthält die folgenden Dateien.
- Herstellervariante der gemeinsam genutzten VNDK-Core- und VNDK-SP-Bibliotheken.
- Gemeinsam genutzte LL-NDK-Bibliotheken werden nicht benötigt, da sie abwärtskompatibel sind.
- Für 64-Bit-Ziele werden sowohl die Bibliotheken
TARGET_ARCH
als auchTARGET_2ND_ARCH
erstellt und eingebunden.
- Die 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
. Zeichnet die Modulpfade für alle VNDK-Bibliotheken auf. Dies wird benötigt, um zu überprüfen, ob GPL-Projekte über in einem bestimmten Android-Quellbaum veröffentlichte Quellen verfügen.
Für eine bestimmte VNDK-Snapshot-ZIP-Datei, android-vndk-$(TARGET_ARCH).zip
, werden die vorgefertigten VNDK-Bibliotheken entsprechend der ABI-Bitness in separaten Verzeichnissen mit dem Namen arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
gruppiert. Beispielsweise werden für android-vndk-arm64.zip
die 64-Bit-Bibliotheken unter arch-arm64-armv8-a
und die 32-Bit-Bibliotheken unter arch-arm-armv8-a
platziert. Das folgende Beispiel zeigt die Verzeichnisstruktur für eine arm64-VNDK-Snapshot-ZIP-Datei ( TARGET_ARCH=arm64
) ( android-vndk-arm64.zip
).
![VNDK-Snapshot-Verzeichnisstruktur](https://source.android.google.cn/static/docs/core/architecture/images/vndk_snapshot_directory.png?authuser=6&hl=de)
Erstellen für Anbieter-Snapshots
Android 11 unterstützt Hersteller-Snapshots , mit denen Sie vendor.img
unabhängig von der Android-Version im Quellbaum erstellen können. Ein standardmäßiger VNDK-Snapshot enthält die gemeinsam genutzten Bibliotheksdateien ( .so
), die auf Geräten installiert und dann zur Laufzeit von C++-Binärdateien des Anbieters verknüpft werden können. Um diesen VNDK-Snapshot zu erstellen, benötigen Sie zusätzliche Artefakte wie Header-Dateien und exportierte Flags.
Um solche Artefakte (zusammen mit dem VNDK-Snapshot) aus einem lokalen Quellbaum zu generieren, verwenden Sie den folgenden Befehl.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Dieser Befehl erstellt android-vndk-$(TARGET_ARCH).zip
Dateien unter $DIST_DIR
. Das folgende Beispiel ist eine arm64-VNDK-Snapshot-ZIP-Datei mit Build-Artefakten. Die fett gedruckten Dateien sind neu hinzugefügte Dateien zum normalen VNDK-Snapshot (dargestellt in Abbildung 1) und umfassen JSON-Dateien (in denen cflags
jeder Bibliothek gespeichert sind) und alle exportierten Header-Dateien.
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
Hochladen von VNDK-Snapshots
VNDK-Snapshots werden im Quellbaum unter /prebuilts/vndk/v VER
überprüft, wobei VER
der Version des VNDK-Snapshots entspricht (die der SDK-Version der entsprechenden Android-Version folgt). Der Android 8.1 VNDK-Snapshot hat beispielsweise Version 27.
Verwenden des update.py-Skripts
Das update.py
Skript ( /development/vndk/snapshot/update.py
) automatisiert den Prozess des Hinzufügens eines vorgefertigten VNDK-Snapshots zum Quellbaum. Es erkennt automatisch Build-Artefakte und füllt die zugehörigen Eigenschaften entsprechend in die generierte Android.bp
ein. Dieses Skript führt die folgenden Aufgaben aus:
- Verwendet in
/prebuilts/vndk/v VER
repo start
, um einen neuen Git-Zweig zu erstellen. - Ruft VNDK-Snapshot-Build-Artefakte ab und entpackt sie.
- Führt
gen_buildfiles.py
aus, um die Build-Dateien (Android.bp
) automatisch zu generieren. - Führt
check_gpl_license.py
aus, um zu überprüfen, ob für die vorgefertigten Bibliotheken, die unter der General Public License (GPL) lizenziert sind, Quellen im aktuellen Quellbaum veröffentlicht sind. - Verwendet
git commit
um neue Änderungen zu übernehmen.
Verwendung lokal erstellter VNDK-Snapshots
Sie können auch lokal erstellte VNDK-Snapshots verwenden. Wenn die Option --local
angegeben ist, ruft das Skript update.py
VNDK-Snapshot-Build-Artefakte aus dem angegebenen lokalen Verzeichnis (anstelle des Android-Build-Servers) ab, in dem sich die aus der development/vndk/snapshot/build.sh
generierten android-vndk-$(TARGET_ARCH).zip
Dateien befinden development/vndk/snapshot/build.sh
. Mit der Option --local
überspringt das Skript update.py
die GPL-Lizenzprüfung und git commit
Schritte.
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
Beispielverzeichnisstruktur 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)Lokale Build-Artefakte werden automatisch hinzugefügt, wenn Artefakte mit
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
erstellt wurden.VNDK-Snapshots installieren
Das Systemabbild installiert VNDK-Snapshot-Bibliotheken zur Erstellungszeit unter Verwendung der Informationen in BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
und ro.vndk.version
. Mit einer der folgenden Optionen können Sie steuern, welche VNDK-Snapshots aus den vorgefertigten 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 vorgefertigten VNDK-Snapshots installiert, die inPRODUCT_EXTRA_VNDK_VERSIONS
aufgeführt sind, ohne sie zur Erstellungszeit mit anderen Modulen zu verknüpfen.
Festlegen von BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
zeigt die VNDK-Version an, für deren Erstellung aktuelle Herstellermodule erforderlich sind. Wenn BOARD_VNDK_VERSION
über eine verfügbare VNDK-Snapshot-Version im Verzeichnis /prebuilts/vndk
verfügt, wird der in BOARD_VNDK_VERSION
angegebene VNDK-Snapshot installiert. Wenn der VNDK-Snapshot im Verzeichnis nicht verfügbar ist, tritt ein Build-Fehler auf.
Durch die Definition BOARD_VNDK_VERSION
können auch die VNDK-Module installiert werden. Herstellermodule werden zur Erstellungszeit mit der in BOARD_VNDK_VERSION
definierten VNDK-Snapshot-Version verknüpft (dadurch werden keine aktuellen VNDK-Module in der Systemquelle erstellt). Beim Herunterladen des vollständigen Quellbaums aus einem Repository basieren sowohl die System- als auch die Herstellerquellen auf derselben Android-Version.
Festlegen von PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
listet die zusätzlichen VNDK-Versionen auf, die installiert werden sollen. Normalerweise reicht es aus, einen VNDK-Snapshot für die aktuelle Herstellerpartition zu haben. In einigen Fällen müssen Sie jedoch möglicherweise mehrere Snapshots in ein Systemabbild einbinden. Beispielsweise verfügt das GSI über mehrere Snapshots, um mehrere Herstellerversionen mit einem System-Image zu unterstützen. Durch Festlegen PRODUCT_EXTRA_VNDK_VERSIONS
können Sie die VNDK-Snapshot-Module zusätzlich zur VNDK-Version in BOARD_VNDK_VERSION
installieren.
Wenn PRODUCT_EXTRA_VNDK_VERSIONS
über eine bestimmte Versionsliste verfügt, sucht das Build-System im Verzeichnis prebuilts/vndk
nach vorgefertigten Snapshots der Versionsliste. Wenn das Build-System alle aufgelisteten Snapshots findet, installiert es diese Snapshot-Dateien auf jedem VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER
. Fehlende Versionen erzeugen einen Build-Fehler.
Die VNDK-Module werden zur 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 eingestellt:
- Vor der Veröffentlichung ist
PLATFORM_VNDK_VERSION
aufPLATFORM_VERSION_CODENAME
festgelegt. - Bei der Veröffentlichung wird
PLATFORM_SDK_VERSION
nachPLATFORM_VNDK_VERSION
kopiert.
Nach Veröffentlichung der Android-Version werden die aktuellen VNDK-Bibliotheken in VNDK APEX ( /system/apex/com.android.vndk.v VER
) installiert, wobei VER
die in PLATFORM_VNDK_VERSION
gespeicherte Version ist.
Wenn BOARD_VNDK_VERSION
auf current
gesetzt ist, wird PLATFORM_VNDK_VERSION
in ro.vndk.version
gespeichert, andernfalls wird BOARD_VNDK_VERSION
in ro.vndk.version
gespeichert. PLATFORM_VNDK_VERSION
ist bei der Veröffentlichung von Android auf die SDK-Version eingestellt. Vor der Veröffentlichung wird der alphanumerische Android-Codename für PLATFORM_VNDK_VERSION
verwendet.
Zusammenfassung der VNDK-Versionseinstellungen
Die folgende Tabelle fasst die VNDK-Versionseinstellungen zusammen.
Verkäufer Bauen | Planke Ausführung | SDK Freigeben | Plattform Ausführung | Ausführung Eigentum | Verzeichnis installieren |
---|---|---|---|---|---|
Aktuelle VNDK-Module | current | Vor | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
Nach | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
Vorgefertigte Snapshot-Module | VNDK_VER für Schnappschuss | Vorher oder nachher | CODE_NAME oder SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Board-Version (
BOARD_VNDK_VERSION
). VNDK-Version, die Anbietermodule zum Erstellen benötigen. Aufcurrent
setzen, wenn Herstellermodule mit aktuellen Systemmodulen verknüpft werden können. - Plattformversion (
PLATFORM_VNDK_VERSION
). VNDK-Version, die aktuelle Systemmodule erstellen. Wird nur erstellt, wennBOARD_VNDK_VERSION
gleich aktuell ist. - Versionseigenschaft (
ro.vndk.version
). Eigenschaft, die die VNDK-Version angibt, die die Binärdateien und Bibliotheken in Vendor.img zum Ausführen benötigen. Gespeichert in dervendor.img
unter/vendor/default.prop
.