Generieren von Lieferanten-Snapshots

Android 11 unterstützt VNDK-Snapshot-Build-Artefakte und Anbieter-Snapshots, die Sie zum Erstellen vendor.img verwenden können, unabhängig von der Android-Version im Quellbaum. Dies ermöglicht gemischte Versionen von Images, z. B. ein älteres Anbieter- und ein neueres System-Image.

Gemischte Bildversionen 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 (die Funktionsfähigkeit von SoC-proprietären Modulen in Android.mk ist ebenfalls nicht garantiert).

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

Über Anbieter-Snapshots

Ein Anbieter-Snapshot ist ein OEM-eigener Snapshot. Es handelt sich um eine Reihe vorgefertigter C++-Module, die in /vendor installiert, aber auf AOSP verwaltet werden. Ohne die Erfassung eines Anbieter-Snapshots der vorherigen Android-Version kann ein 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 auf 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/ , außer
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

SoC-eigene Hardwarecodes können auch in anderen Verzeichnissen vorhanden sein. Derzeit unterstützen Anbieter-Snapshots solche Konfigurationen nicht.

Snapshots von Anbietern erstellen

Erstellen Sie mit den folgenden Befehlen einen Anbieter-Snapshot.

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

Diese Befehle erstellen eine vendor-$(TARGET_DEVICE).zip Datei in $DIST_DIR . Das folgende Beispiel zeigt eine Snapshot-ZIP-Datei eines Anbieters.

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 Modulnamen, exportierte Verzeichnisse, init_rc Dateien und vintf_fragments Dateien.
  • Das Verzeichnis configs enthält .rc und .xml Dateien aus den Flags init_rc und vintf_fragments .

Anbieter-Snapshots installieren

Um einen Anbieter-Snapshot zu installieren, navigieren Sie zum Zielverzeichnis und verwenden Sie die folgenden Befehle.

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

Dieser Befehl generiert /vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp . 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)

Erstellen von Anbieterbildern

Mithilfe von VNDK-Snapshot-Build-Artefakten und einem Anbieter-Snapshot können Sie vendor.img unabhängig von der Android-Version im Quellbaum erstellen und so gemischte Versionen von Bildern 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. Zum Beispiel:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Wenn BOARD_VNDK_VERSION auf einen anderen Wert als current festgelegt ist, führt das Build-System Folgendes aus:

  • Aktiviert VNDK-Snapshot-Module und Anbieter-Snapshot-Module von BOARD_VNDK_VERSION . Jedes Snapshot-Modul überschreibt ein C++-Quellmodul mit demselben Namen.
  • Setzt ro.vndk.version auf BOARD_VNDK_VERSION .
  • Installiert VNDK-Snapshot-Module von BOARD_VNDK_VERSION in system_ext .