Generieren von VNDK-Snapshots

Ein VNDK-Snapshot ist ein Satz von VNDK-Kern- und VNDK-SP-Bibliotheken für eine Android-Version. Sie können nur die Systempartition aktualisieren , wenn die system.img den entsprechenden VNDK Schnappschuss von dem benötigten enthalten vendor.img .

Offizielle VNDK Snapshots werden automatisch auf dem Android - Build - Server und überprüft in gebaut /prebuilts/vndk des Android - Source - Tree. Zu Entwicklungszwecken können Sie VNDK-Snapshots lokal erstellen. VNDK Snapshots werden für Arm, arm64, x86 unterstützt und x86_64 TARGET_ARCH Aromen.

Erstellen von Schnappschüssen

Der Android-Build-Server generiert Build-Artefakte und VNDK-Snapshot-Dateien mithilfe der folgenden Build-Parameter und Build-Befehle.

Build-Parameter

Der Build - Zielname ist vndk . Die Build-Zielkonfiguration wird unten gezeigt.

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 die gleiche wie generisches System Bild (GSI) Ziel Archs ( arm , arm64 , x86 , x86_64 ).
  • TARGET_ARCH_VARIANT . Für Snapshot v28 (Android 9) und höher, enthält die oben aufgeführten gängigen Konfigurationen.

Build-Befehle

Für offizielle Schnappschüsse enthält Android 9 und höher eine Probe Ziel ( vndk ) in vndk.mk , die einen VNDK Snapshot baut und gibt $DIST_DIR . 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 build.sh Skript all unterstützten Bogen Aromen mit dem folgenden Befehl zu bauen.

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.

Lokal bauen

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 bauen, führen Sie die folgende Build - Skript ( build.sh ).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Um einen bestimmten Aufbau TARGET_ARCH , führen Sie die folgenden Befehle ein .
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

Die entsprechende android-vndk-$(TARGET_ARCH).zip - Datei wird erstellt unter $DIST_DIR .

Snapshot-Dateien

Ein VNDK-Snapshot enthält die folgenden Dateien.

  • Anbietervariante 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, beide TARGET_ARCH und TARGET_2ND_ARCH sind Bibliotheken gebaut und enthalten.
  • Liste der VNDK-Kern, VNDK-SP, LL-NDK und VNDK-private Bibliotheken ist auf [vndkcore|vndksp|llndk|vndkprivate].libraries.txt .
  • Lizenzdateien.
  • module_paths.txt . Zeichnet die Modulpfade für alle VNDK-Bibliotheken auf, die erforderlich sind, um zu überprüfen, ob GPL-Projekte über Quellen verfügen, die in einem bestimmten Android-Quellbaum veröffentlicht wurden.

Für eine gegebene VNDK Snapshot ZIP - Datei, android-vndk-$(TARGET_ARCH).zip werden die VNDK vorkompilierte Bibliotheken in separaten Verzeichnissen gruppiert namens arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) nach ABI Bitness. Zum Beispiel für android-vndk-arm64.zip , die 64-Bit - libs platziert werden unter arch-arm64-armv8-a und die 32-Bit - Bibliotheken werden unter platziert arch-arm-armv8-a . Das folgende Beispiel zeigt die Verzeichnisstruktur für eine arm64 ( TARGET_ARCH=arm64 ) VNDK Snapshot ZIP - Datei ( android-vndk-arm64.zip ).

VNDK-Snapshot-Verzeichnisstruktur
Abbildung 1. VNDK Snapshot Verzeichnisstruktur (Beispiel)

Erstellen für Anbieter-Snapshots

Android 11 unterstützt Anbieter Schnappschüsse , mit denen Sie bauen vendor.img unabhängig von der Android - Version auf dem Quellbaum. Ein Standard VNDK Snapshot enthält die gemeinsam genutzten Bibliotheksdateien ( .so ), die Geräte installiert werden kann und dann von Hersteller C ++ Binärdateien in Runtime verbunden. Zu bauen gegen diese VNDK Snapshot, müssen Sie zusätzliche Artefakte wie Header - Dateien und exportiert 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 werden neu Dateien in dem normalen VNDK Snapshot hinzugefügt (siehe Abbildung 1) und umfassen JSON - Dateien (die Speicher cflags jede Bibliothek) 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 Schnappschüsse werden im Quellbaum überprüft unter /prebuilts/vndk/v VER , wo VER auf die Version des VNDK snapshot gleich ist (die die SDK Version des entsprechenden Android Release folgt). Der Android 8.1 VNDK-Snapshot hat beispielsweise die Version 27.

Verwenden des update.py-Skripts

Das update.py Skript ( /development/vndk/snapshot/update.py ) automatisiert den Prozess eines prebuilt VNDK Snapshot zu dem Quellbaum hinzuzufügen. Es erkennt automatisch Artefakte build und füllt in geeigneter Weise in den zugehörigen Eigenschaften in dem erzeugten Android.bp . Dieses Skript führt die folgenden Aufgaben aus:

  1. In /prebuilts/vndk/v VER , Anwendungen repo start neuen Git - Zweigs zu erstellen.
  2. Ruft VNDK-Snapshot-Build-Artefakte ab und entpackt sie.
  3. Läuft gen_buildfiles.py zum automatischen erzeugen , um die Build - Dateien ( Android.bp ).
  4. Läuft check_gpl_license.py die vorkompilierte Bibliotheken lizenziert unter der General Public License (GPL) zu überprüfen , haben in der aktuellen Quellbaum Quellen freigegeben.
  5. Uses git commit neue Änderungen zu übernehmen.

Lokal erstellte VNDK-Snapshots verwenden

Sie können auch lokal erstellte VNDK-Snapshots verwenden. Wenn die --local Option angegeben wird, die update.py holt Skript VNDK Snapshot - Build - Artefakte aus lokalen $DIST_DIR (anstelle des Android - Build - Server) und überspringt die GPL - Lizenz Prüfung und git commit Schritte. Eine lokal gebaut VNDK Snapshot Navigieren Sie in das Zielverzeichnis verwenden , installieren update.py Skript.

Syntax:

python update.py VER --local

Beispielbefehl zum Aktualisieren des Android 8.1 VNDK-Snapshots mit lokalen Build-Artefakten:

python update.py 27 --local

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 gebaut wurden VNDK_SNAPSHOT_BUILD_ARTIFACTS=true .

Installieren von VNDK-Snapshots

Das System - Image installiert VNDK Snapshot - Bibliotheken bei der Erstellung der Informationen in Verwendung BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS und ro.vndk.version . Sie können die Kontrolle VNDK Schnappschüsse aus dem prebuilt Verzeichnisse VNDK Snapshot (zum Beispiel installiert werden /prebuilts/vndk/v29 oder /prebuilts/vndk/v30 ) eine der folgenden Optionen.

  • 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. Dies installiert die vorkompilierte VNDK Schnappschüsse in aufgelistet PRODUCT_EXTRA_VNDK_VERSIONS ohne sie zu anderen Modulen zur Bauzeit verbindet.

Einstellung von BOARD_VNDK_VERSION

BOARD_VNDK_VERSION zeigt die VNDK Version , dass die aktuellen Lieferantenmodule zu bauen benötigt werden. Wenn BOARD_VNDK_VERSION eine verfügbare VNDK Snapshot - Version in hat /prebuilts/vndk Verzeichnis schnappschuß die VNDK in angezeigt BOARD_VNDK_VERSION installiert ist. Wenn der VNDK-Snapshot nicht im Verzeichnis verfügbar ist, tritt ein Build-Fehler auf.

Definieren BOARD_VNDK_VERSION ermöglicht auch die VNDK Module installiert werden. Lieferantenmodule Verbindung mit dem VNDK Snapshot - Version definiert in BOARD_VNDK_VERSION zur Buildzeit (dies baut keine aktuellen VNDK Module im System Quelle). Beim Herunterladen des vollständigen Quellbaums aus einem Repository basieren sowohl die System- als auch die Anbieterquellen auf derselben Android-Version.

PRODUCT_EXTRA_VNDK_VERSIONS einstellen

PRODUCT_EXTRA_VNDK_VERSIONS listet die zusätzlichen VNDK Versionen installiert werden. 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 einschließen. Der GSI verfügt beispielsweise über mehrere Snapshots, um mehrere Herstellerversionen mit einem System-Image zu unterstützen. Durch die Einstellung PRODUCT_EXTRA_VNDK_VERSIONS , können Sie die VNDK Snapshot - Module zusätzlich zur VNDK Version in installieren BOARD_VNDK_VERSION .

Wenn PRODUCT_EXTRA_VNDK_VERSIONS hat eine bestimmte Liste von Versionen, die Build - System sieht für vorkompilierte Schnappschüsse von der Versionsliste im prebuilts/vndk Verzeichnis. Wenn das Build - System alle aufgelisteten Schnappschüsse findet, installiert es diese Snapshot - Dateien zu jedem VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER . Fehlende Versionen erzeugen einen Buildfehler.

Die VNDK-Module werden zur Build-Zeit nicht mit den Anbietermodulen verknüpft, können jedoch 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 im System Quelle. Der Wert wird automatisch eingestellt:

  • Vor der Freigabe werden die PLATFORM_VNDK_VERSION als gesetzt PLATFORM_VERSION_CODENAME .
  • Bei Release, PLATFORM_SDK_VERSION wird kopiert PLATFORM_VNDK_VERSION .

Nachdem die Android - Version freigegeben wird, werden die aktuellen VNDK Bibliotheken VNDK APEX installiert ( /system/apex/com.android.vndk.v VER ), wobei VER die Version in gespeichert ist PLATFORM_VNDK_VERSION .

Wenn BOARD_VNDK_VERSION gesetzt wird current , die PLATFORM_VNDK_VERSION wird in gespeichert ro.vndk.version , sonst BOARD_VNDK_VERSION in gespeichert ro.vndk.version . PLATFORM_VNDK_VERSION wird auf die SDK - Version gesetzt , wenn Android Versionen; vor der Freigabe wird der alphanumerische Android Codename für verwendet PLATFORM_VNDK_VERSION .

Zusammenfassung der VNDK-Versionseinstellungen

Die folgende Tabelle fasst die VNDK-Versionseinstellungen zusammen.

Verkäufer
Bauen
Planke
Ausführung
SDK
Veröffentlichung
Plattform
Ausführung
Ausführung
Eigentum
Installationsverzeichnis
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 für die Erstellung von Anbietermodulen erforderlich ist. Auf current , wenn Lieferantenmodule mit aktuellen Systemmodule verknüpfen.
  • Plattform Version ( PLATFORM_VNDK_VERSION ). VNDK-Version, die aktuelle Systemmodule erstellen. Errichtet nur , wenn BOARD_VNDK_VERSION Strom entspricht.
  • Version - Eigenschaft ( ro.vndk.version ). Eigenschaft, die die VNDK-Version angibt, die für die Ausführung der Binärdateien und Bibliotheken in "vendor.img" erforderlich ist. Gespeichert in der vendor.img bei /vendor/default.prop .