Ein VNDK-Snapshot besteht aus einer Reihe von VNDK-Core- und VNDK-SP-Bibliotheken für einen Android-Release.
Sie können nur dann ein Upgrade für die Systempartition ausführen, wenn die system.img
enthält den entsprechenden VNDK-Snapshot, der vom
vendor.img
.
Offizielle VNDK-Snapshots werden automatisch auf dem Android-Build-Server erstellt
und in /prebuilts/vndk
der Android-Quellstruktur eingecheckt. Für
können Sie VNDK-Snapshots
lokal erstellen. VNDK-Snapshots sind
wird für die TARGET_ARCH
-Varianten ARM, ARM64, x86 und x86_64 unterstützt.
Build-Snapshots
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 lautet vndk
. Die Build-Zielkonfiguration
wie 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 mit dem generischen Systemimage (GSI) identisch. Zielbogen (arm
,arm64
,x86
,x86_64
)TARGET_ARCH_VARIANT
Für Snapshot v28 (Android 9) und höher enthält beliebte Konfigurationen, die oben aufgeführt sind.
Build-Befehle
Offizielle Momentaufnahmen: Android 9 und höher
enthält ein Beispielziel (vndk
) in
vndk.mk
, der einen VNDK erstellt und ausgibt
Snapshot von $DIST_DIR
. Die ZIP-Datei mit dem Snapshot verwendet das Format
android-vndk-$(TARGET_ARCH).zip
Beispiel:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Der Android-Build-Server verwendet die Methode
build.sh
-Skript zum Erstellen aller unterstützten Architekturen
mit dem folgenden Befehl.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Der VNDK-Snapshot für eine Android-Version wird aus dem Release-Zweig.
Build lokal
Während der Entwicklung können Sie VNDK-Snapshots aus einer lokalen Quellstruktur mit die folgenden Befehle.
- Führen Sie das folgende Build-Skript aus, um alle unterstützten Architekturen auf einmal zu erstellen
(
build.sh
)cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Um eine bestimmte
TARGET_ARCH
zu erstellen, führen Sie folgenden Befehl aus: .lunch aosp_TARGET_ARCH-user
m -j vndk dist
Die entsprechende android-vndk-$(TARGET_ARCH).zip
-Datei wird erstellt.
weniger als $DIST_DIR
.
Snapshot-Dateien
Ein VNDK-Snapshot enthält die folgenden Dateien.
- Anbietervariante der gemeinsam genutzten VNDK-Core- und VNDK-SP-Bibliotheken.
- Freigegebene LL-NDK-Bibliotheken werden nicht benötigt, da sie abwärtskompatibel sind.
- Für 64-Bit-Ziele werden sowohl
TARGET_ARCH
als auchTARGET_2ND_ARCH
-Bibliotheken wurden erstellt und eingeschlossen.
- Eine Liste der privaten Bibliotheken mit VNDK-Kernen, VNDK-SP, LL-NDK und VNDK finden Sie hier:
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
- Lizenzdateien.
module_paths.txt
Erfasst die Modulpfade für alle VNDK Bibliotheken, die benötigt werden, um zu prüfen, ob die in einer bestimmten Android-Quellstruktur veröffentlicht wurden.
Für eine bestimmte ZIP-Datei mit dem VNDK-Snapshot
android-vndk-$(TARGET_ARCH).zip
, die vordefinierten VNDK-Bibliotheken sind
separaten Verzeichnissen mit dem Namen
arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
laut ABI
Gebärde. Für android-vndk-arm64.zip
sind beispielsweise die 64-Bit-Bibliotheken
unter arch-arm64-armv8-a
platziert und die 32-Bit-Bibliotheken
unter arch-arm-armv8-a
platziert. Im Beispiel unten sehen Sie
Verzeichnisstruktur für eine Arm64-VNDK (TARGET_ARCH=arm64
)
ZIP-Datei des Snapshots (android-vndk-arm64.zip
)
Für Anbieter-Snapshots erstellen
Unterstützung für Android 11
Anbieter
Snapshots, mit denen Sie vendor.img
unabhängig von
die Android-Version
in der Quellstruktur. Ein Standard-VNDK-Snapshot enthält den
Dateien der gemeinsam genutzten Bibliothek (.so
), die auf Geräten und
und werden dann zur Laufzeit mit den C++-Binärdateien des Anbieters verknüpft. Um gegen
benötigen Sie zusätzliche Artefakte wie Header-Dateien und
exportierten Flags.
Um solche Artefakte (zusammen mit dem VNDK-Snapshot) aus einer lokalen Quelle zu generieren Struktur erstellen, verwenden Sie den folgenden Befehl.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Mit diesem Befehl werden android-vndk-$(TARGET_ARCH).zip
-Dateien erstellt unter
$DIST_DIR
. Das Beispiel unten zeigt eine arm64-VNDK-Snapshot-ZIP-Datei
mit Build-Artefakten. Die fett formatierten Dateien sind neu zum normalen VNDK hinzugefügte Dateien
(in Abbildung 1 gezeigt) und enthalten JSON-Dateien (in denen
cflags
jeder Bibliothek) und aller 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 in der Quellstruktur unter
/prebuilts/vndk/vVER
, wobei
VER
entspricht der Version des VNDK-Snapshots
Dies entspricht der SDK-Version des entsprechenden Android-Release. Für
Beispiel: Der VNDK-Snapshot für Android 8.1 hat Version 27.
Das Skript update.py verwenden
Das Skript update.py
(/development/vndk/snapshot/update.py
) automatisiert den Prozess
Hinzufügen eines vordefinierten VNDK-Snapshots zur Quellstruktur Nest Protect erkennt automatisch
erstellt Artefakte und füllt die zugehörigen Properties in der
generierten Android.bp
. Dieses Skript führt die folgenden Aufgaben aus:
- In
/prebuilts/vndk/vVER
wirdrepo start
zum Erstellen eines neuen Git-Zweigs verwendet. - Ruft VNDK-Snapshot-Build-Artefakte ab und entpackt sie.
- Führt
gen_buildfiles.py
aus, um die Build-Dateien automatisch zu generieren (Android.bp
) - Führt
check_gpl_license.py
aus, um die vordefinierten Bibliotheken zu prüfen haben unter der General Public License (GPL) Quellen veröffentlicht in der aktuellen Quellstruktur. - Für neue Änderungen wird
git commit
verwendet.
Lokal erstellte VNDK-Snapshots verwenden
Sie können auch lokal erstellte VNDK-Snapshots verwenden. Wenn die --local
Option angegeben ist, ruft das Skript update.py
den VNDK-Snapshot ab
Build-Artefakte aus dem angegebenen lokalen Verzeichnis (anstelle des Android-
Build-Server) mit den android-vndk-$(TARGET_ARCH).zip
-Dateien
die mithilfe der development/vndk/snapshot/build.sh
generiert wurden. Mit der
--local
auswählen, überspringt das Skript update.py
die
Lizenzüberprüfung und git commit
Schritte.
Syntax:
python update.py VER --local local_path
Beispielbefehl zum Aktualisieren des Android 8.1-VNDK-Snapshots mit lokalem Build
Artefakte 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)Lokale Build-Artefakte werden automatisch hinzugefügt, wenn Artefakte mit
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.
VNDK-Snapshots installieren
Das System-Image installiert die VNDK-Snapshot-Bibliotheken bei der Build-Erstellung mithilfe der Methode
Informationen in BOARD_VNDK_VERSION
,
PRODUCT_EXTRA_VNDK_VERSIONS
und ro.vndk.version
.
Sie können steuern, welche VNDK-Snapshots über das vorkonfigurierte VNDK installiert werden
Snapshot-Verzeichnisse (z. B. /prebuilts/vndk/v29
oder
/prebuilts/vndk/v30
) mit einer der folgenden Optionen.
- Option 1:
BOARD_VNDK_VERSION
. Verwenden Sie die Methode Snapshot-Module, um die aktuellen Anbietermodule zu erstellen und 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 vordefinierten VNDK-Snapshots installiert, diePRODUCT_EXTRA_VNDK_VERSIONS
, ohne sie mit anderen zu verknüpfen Module bei der Build-Erstellung.
BOARD_VNDK_VERSION festlegen
BOARD_VNDK_VERSION
zeigt die VNDK-Version des aktuellen Anbieters an
Module erforderlich sind. Wenn BOARD_VNDK_VERSION
einen
verfügbare VNDK-Snapshot-Version im Verzeichnis /prebuilts/vndk
, die
Der in BOARD_VNDK_VERSION
angegebene VNDK-Snapshot ist installiert. Wenn
der VNDK-Snapshot nicht im Verzeichnis verfügbar ist, tritt ein Build-Fehler auf.
Durch das Definieren von BOARD_VNDK_VERSION
können die VNDK-Module auch
installiert haben. Die Anbietermodule sind mit der VNDK-Snapshot-Version verknüpft, die in
BOARD_VNDK_VERSION
bei der Build-Erstellung (hier wird kein aktueller Build erstellt)
VNDK-Module in der Systemquelle). Wenn Sie die vollständige Quellstruktur aus
in einem Repository, basieren sowohl die System- als auch die Anbieterquellen auf demselben Android-
Veröffentlichung.
PRODUCT_EXTRA_VNDK_VERSIONS festlegen
PRODUCT_EXTRA_VNDK_VERSIONS
listet die zusätzlichen VNDK-Versionen auf, die verwendet werden sollen
installiert haben. Normalerweise reicht es aus, einen VNDK-Snapshot für den aktuellen
Anbieterpartitionierung. In einigen Fällen müssen Sie jedoch möglicherweise mehrere
Snapshots in einem System-Image erstellen. GSI hat z. B. mehrere Momentaufnahmen,
mehrere Anbieterversionen mit einem System-Image unterstützen. Durch Festlegen
PRODUCT_EXTRA_VNDK_VERSIONS
, Sie können den VNDK-Snapshot installieren
Module zusätzlich zur VNDK-Version in BOARD_VNDK_VERSION
.
Wenn PRODUCT_EXTRA_VNDK_VERSIONS
eine bestimmte Liste von Versionen hat,
sucht das Build-System nach vordefinierten Snapshots der Versionsliste in der
prebuilts/vndk
-Verzeichnis. Wenn das Build-System alle aufgelisteten
Snapshots erstellt, werden diese Snapshot-Dateien in jedem VNDK-APEX installiert
(out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER
.
Fehlende Versionen generieren einen Build-Fehler.
Die VNDK-Module sind nicht mit den Anbietermodulen verknüpft, können aber
Wird zur Laufzeit verwendet, wenn für die Anbietermodule in der Anbieterpartition eines der folgenden Elemente erforderlich ist:
die installierten VNDK-Versionen. PRODUCT_EXTRA_VNDK_VERSIONS
ist gültig
nur wenn BOARD_VNDK_VERSION
definiert ist.
PLATTFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
definiert die VNDK-Version für das aktuelle VNDK
Module in der Systemquelle. Der Wert wird automatisch festgelegt:
- Vor der Veröffentlichung wurde
PLATFORM_VNDK_VERSION
festgelegt alsPLATFORM_VERSION_CODENAME
. - Bei Veröffentlichung wird
PLATFORM_SDK_VERSION
kopiert zuPLATFORM_VNDK_VERSION
.
Nach Veröffentlichung der Android-Version werden die aktuellen VNDK-Bibliotheken
VNDK APEX installiert
(/system/apex/com.android.vndk.vVER
), wobei
VER
ist die Version, die in folgendem Verzeichnis gespeichert ist:
PLATFORM_VNDK_VERSION
Wenn BOARD_VNDK_VERSION
auf current
gesetzt ist, wird der
PLATFORM_VNDK_VERSION
wird in ro.vndk.version
gespeichert,
Andernfalls wird BOARD_VNDK_VERSION
gespeichert in
ro.vndk.version
. PLATFORM_VNDK_VERSION
ist festgelegt auf
SDK-Version bei Veröffentlichung von Android Vor der Veröffentlichung wurde die alphanumerische Android-App
Codename wird für PLATFORM_VNDK_VERSION
verwendet.
Zusammenfassung der VNDK-Versionseinstellungen
In der Tabelle sind die Einstellungen für die VNDK-Version zusammengefasst.
Anbieter Erstellen |
Board- Version |
SDK- Release |
Plattform- version |
Version Property |
Verzeichnis installieren |
---|---|---|---|---|---|
Aktuelle VNDK-Module | current |
Vorher | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
Nach | 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 |
- Board-Version (
BOARD_VNDK_VERSION
). VNDK (VNDK) die die Anbietermodule für die Erstellung benötigen. Legen Siecurrent
fest, wenn Anbietermodule können mit aktuellen Systemmodulen verknüpft werden. - Plattformversion (
PLATFORM_VNDK_VERSION
). VNDK-Version, die von aktuellen Systemmodulen erstellt wird. Nur erstellt, wennBOARD_VNDK_VERSION
entspricht dem aktuellen Wert. - Versionsattribut (
ro.vndk.version
): Unterkunft die VNDK-Version angibt, die die Binärdateien und Bibliotheken in der Datei "vendor.img" benötigen. ausführen. Gespeichert imvendor.img
unter/vendor/default.prop
.