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 inAndroid.mk
definierte Module nicht als Anbieter-Snapshot erfasst (die Funktionsfähigkeit von SoC-proprietären Modulen inAndroid.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
odervendor_available: true
- Statische VNDK-Bibliotheken mit
vendor_available: true
- Ausführbare Dateien und Objektdateien mit
vendor: true
odervendor_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 undvintf_fragments
Dateien. - Das Verzeichnis
configs
enthält.rc
und.xml
Dateien aus den Flagsinit_rc
undvintf_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
aufBOARD_VNDK_VERSION
. - Installiert VNDK-Snapshot-Module von
BOARD_VNDK_VERSION
insystem_ext
.