Anbieter-Snapshots generieren

Android 11 unterstützt VNDK-Snapshot-Build-Artefakte und Anbieter-Snapshots, mit denen Sie vendor.img unabhängig von der Android-Version im Stammverzeichnis erstellen können. So sind gemischte Versionen von Images möglich, z. B. ein älteres Anbieter- und ein neueres System-Image.

Gemischte Image-Versionen werden für Folgendes nicht unterstützt:

  • Android.mk. Da Soong den Anbieter-Snapshot generiert, werden in Android.mk definierte Module nicht als Anbieter-Snapshot erfasst. Auch die Funktion von SoC-spezifischen Modulen in Android.mk ist nicht garantiert.

  • Desinfektionsmittel Anbieter- und VNDK-Snapshots unterstützen kein Sanitizer, da Sanitizer-Varianten separat erstellt werden müssen.

Anbieter-Snapshots

Ein Anbieter-Snapshot ist ein Snapshot, der dem OEM gehört. Es handelt sich um eine Reihe vorgefertigter C++-Module, die in /vendor installiert, aber in AOSP verwaltet werden. Wenn Sie keinen Anbieter-Snapshot der vorherigen Android-Version erfassen, kann das Upgrade auf eine neue Android-Version die Anbieterpartition beschädigen, da Anbieter-Snapshot-Module ohne API- oder ABI-Kompatibilität entfernt oder geändert werden können.

Ein Anbieter-Snapshot enthält die folgenden Module in AOSP.

  • Gemeinsam genutzte, statische und Header-Bibliotheken mit vendor: true oder vendor_available: true
  • Statische VNDK-Bibliotheken mit vendor_available: true
  • Ausführbare Dateien und Objektdateien mit vendor: true oder vendor_available: true

Module in den folgenden Verzeichnissen gelten als SoC-eigener Hardwarecode und werden ignoriert.

  • device/
  • vendor/
  • hardware/, mit folgenden Ausnahmen:
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

SoC-eigene Hardwarecodes können auch in anderen Verzeichnissen vorhanden sein. Solche Konfigurationen werden derzeit nicht von Anbieter-Snapshots unterstützt.

Anbieter-Snapshots erstellen

Erstellen Sie mit den folgenden Befehlen einen Anbieter-Snapshot.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

Mit diesen Befehlen wird eine vendor-$(TARGET_DEVICE).zip-Datei in $DIST_DIR erstellt. Das folgende Beispiel zeigt eine ZIP-Datei mit einem Anbieter-Snapshot:

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • Die JSON-Dateien enthalten Flags wie den Modulnamen, exportierte Verzeichnisse, init_rc-Dateien und vintf_fragments-Dateien.
  • Das Verzeichnis configs enthält .rc- und .xml-Dateien von den Flags init_rc und vintf_fragments.

Anbieter-Snapshots installieren

Wenn Sie einen Anbieter-Snapshot installieren möchten, rufen Sie das Zielverzeichnis auf und verwenden Sie die folgenden Befehle.

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

Mit diesem Befehl wird /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp generiert. Das folgende Beispiel zeigt die Verzeichnisstruktur eines Anbieter-Snapshots:

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

Anbieter-Images erstellen

Mit VNDK-Snapshot-Build-Artefakten und einem Anbieter-Snapshot können Sie vendor.img unabhängig von der Android-Version im Quellbaum erstellen. So lassen sich gemischte Versionen von Images erstellen. Nachdem Sie sowohl den VNDK-Snapshot als auch den Anbieter-Snapshot installiert haben, legen Sie BOARD_VNDK_VERSION auf die Version des Anbieters fest. Beispiel:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Wenn BOARD_VNDK_VERSION auf einen anderen Wert als current festgelegt ist, geschieht Folgendes:

  • Aktiviert VNDK-Snapshot-Module und Anbieter-Snapshot-Module von BOARD_VNDK_VERSION. Jedes Snapshot-Modul überschreibt ein C++-Quellmodul mit demselben Namen.
  • Legt für ro.vndk.version den Wert BOARD_VNDK_VERSION fest.
  • Installiert die VNDK-Snapshot-Module von BOARD_VNDK_VERSION in system_ext.