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 inAndroid.mk
definierte Module nicht als Anbieter-Snapshot erfasst. Auch die Funktion von SoC-spezifischen Modulen inAndroid.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
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/
, 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 undvintf_fragments
-Dateien. - Das Verzeichnis
configs
enthält.rc
- und.xml
-Dateien von den Flagsinit_rc
undvintf_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 WertBOARD_VNDK_VERSION
fest. - Installiert die VNDK-Snapshot-Module von
BOARD_VNDK_VERSION
insystem_ext
.