VNDK-Snapshots generieren

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 auch TARGET_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)

VNDK-Snapshot-Verzeichnisstruktur
Abbildung 1: Verzeichnisstruktur des VNDK-Snapshots (Beispiel)

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:

  1. In /prebuilts/vndk/vVER wird repo start zum Erstellen eines neuen Git-Zweigs verwendet.
  2. Ruft VNDK-Snapshot-Build-Artefakte ab und entpackt sie.
  3. Führt gen_buildfiles.py aus, um die Build-Dateien automatisch zu generieren (Android.bp)
  4. 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.
  5. 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, die PRODUCT_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 als PLATFORM_VERSION_CODENAME.
  • Bei Veröffentlichung wird PLATFORM_SDK_VERSION kopiert zu PLATFORM_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 Sie current 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, wenn BOARD_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 im vendor.img unter /vendor/default.prop.