Android 11 unterstützt VNDK-Snapshot-Build-Artefakte und Vendor-Snapshots, mit denen Sie vendor.img unabhängig von der Android-Version im Quellbaum erstellen können. So sind gemischte Versionen von Images möglich, z. B. ein älteres Anbieter-Image und ein neueres System-Image.
Gemischte Image-Versionen werden für Folgendes nicht unterstützt.
Android.mk.Da Soong den Vendor-Snapshot generiert, werden inAndroid.mkdefinierte Module nicht als Vendor-Snapshot erfasst. SoC-eigene Module inAndroid.mkfunktionieren auch nicht garantiert.Desinfektionsmittel Anbieter- und VNDK-Snapshots unterstützen keine Bereinigung, da Bereinigungsvarianten separat erstellt werden müssen.
Anbieter-Snapshots
Ein Anbietersnapshot ist ein Snapshot, der dem OEM gehört. Es handelt sich um eine Reihe von vorgefertigten C++-Modulen, die in /vendor installiert, aber in AOSP verwaltet werden. Ohne einen Vendor-Snapshot der vorherigen Android-Version zu erstellen, kann ein Upgrade auf eine neue Android-Version die Vendor-Partition beschädigen, da Vendor-Snapshot-Module ohne API- oder ABI-Kompatibilität entfernt oder geändert werden können.
Ein Vendor-Snapshot enthält die folgenden Module in AOSP.
- Gemeinsam genutzte, statische und Header-Bibliotheken mit
vendor: trueodervendor_available: true - Statische VNDK-Bibliotheken mit
vendor_available: true - Ausführbare Dateien und Objektdateien mit
vendor: trueodervendor_available: true
Module in den folgenden Verzeichnissen gelten als SoC-eigene Hardware und werden ignoriert.
device/vendor/hardware/, mit Ausnahme vonhardware/interfaceshardware/libhardwarehardware/libhardware_legacy
SoC-eigene Hardwarecodes können auch in anderen Verzeichnissen vorhanden sein. Derzeit werden solche Konfigurationen in Vendor-Snapshots nicht unterstützt.
Anbieter-Snapshots erstellen
Erstellen Sie mit den folgenden Befehlen einen Vendor-Snapshot.
. build/envsetup.shlunch targetm 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 Anbietersnapshot:
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 Modulname, exportierte Verzeichnisse,
init_rc-Dateien undvintf_fragments-Dateien. - Das Verzeichnis
configsenthält die Dateien.rcund.xmlaus den Flagsinit_rcundvintf_fragments.
Anbieter-Snapshots installieren
Wenn Sie einen Vendor-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 VERMit diesem Befehl wird /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp generiert.
Das folgende Beispiel zeigt die Verzeichnisstruktur eines Vendor-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 Vendor-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 Vendor-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, führt das Build-System folgende Schritte aus:
- Aktiviert VNDK-Snapshot-Module und Vendor-Snapshot-Module von
BOARD_VNDK_VERSION. Jedes Snapshot-Modul überschreibt ein C++-Quellmodul mit demselben Namen. - Legt
ro.vndk.versionaufBOARD_VNDK_VERSIONfest. - Installiert VNDK-Snapshot-Module von
BOARD_VNDK_VERSIONbissystem_ext.