Anbieter-Snapshots generieren

Android 11 unterstützt den VNDK-Snapshot-Build Artefakte und Anbieter-Snapshots, mit denen Sie vendor.img unabhängig von Android-Version in der Quellstruktur. Dies ermöglicht gemischte Versionen von Bildern wie älterer Anbieter und ein neueres System-Image.

Gemischte Bildversionen werden in folgenden Fällen nicht unterstützt.

  • Android.mk. Da Soong den Anbieter-Snapshot generiert, sind die in Android.mk werden nicht als Anbieter-Snapshot erfasst (proprietäre SoC-Module in Android.mk funktionieren möglicherweise auch nicht.

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

Anbieter-Snapshots

Ein Anbieter-Snapshot ist ein OEM-eigener Snapshot. Es besteht aus einer Reihe vorgefertigter C++-Module installiert in /vendor, aber auf AOSP verwaltet. Ohne einen Zulieferunternehmen Übersicht über die vorherige Android-Version, ein Upgrade auf eine neue Android-Version Die Anbieterpartition wird möglicherweise beschädigt, da anbieter-Snapshot-Module entfernt werden können ohne API- oder ABI-Kompatibilität geändert werden.

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

  • Freigegebene, 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 Ausnahme von <ph type="x-smartling-placeholder">
      </ph>
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

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

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. 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 die Dateien .rc und .xml aus den Flags init_rc und vintf_fragments.

Anbieter-Snapshots installieren

Wechseln Sie zum Installieren eines Anbieter-Snapshots zum Zielverzeichnis und verwenden Sie den 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/vVER/$(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)

Anbieter-Images erstellen

VNDK-Snapshot-Build verwenden Artefakte und einen Anbieter-Snapshot haben, können Sie vendor.img unabhängig von der Version in der Quellstruktur, wodurch es möglich ist, gemischte Versionen von Bilder. Nachdem Sie sowohl den VNDK-Snapshot als auch den Anbieter-Snapshot installiert haben, BOARD_VNDK_VERSION auf die Version des Anbieters. Beispiel:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Wenn BOARD_VNDK_VERSION auf einen anderen Wert als current gesetzt ist, erstellt der Build System:

  • Aktiviert VNDK- 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.