Android 11 supporta gli artefatti di build dello snapshot VNDK e gli snapshot del fornitore, che puoi utilizzare per creare vendor.img indipendentemente dalla versione di Android nell'albero di origine. Ciò consente versioni miste di immagini, ad esempio un'immagine fornitore precedente e un'immagine di sistema più recente.
Le versioni immagine miste non sono supportate per quanto segue.
Android.mk.Poiché Soong genera lo snapshot del fornitore, i moduli definiti inAndroid.mknon vengono acquisiti come snapshot del fornitore (anche i moduli proprietari del SoC inAndroid.mknon sono garantiti).Disinfettante. Gli snapshot del fornitore e di VNDK non supportano il sanitizer perché le varianti del sanitizer devono essere create separatamente.
Informazioni sugli snapshot dei fornitori
Uno snapshot del fornitore è uno snapshot di proprietà dell'OEM. Si tratta di un insieme di moduli C++ predefiniti
installati in /vendor ma gestiti su AOSP. Senza acquisire uno snapshot del fornitore
della versione precedente di Android, l'upgrade a una nuova versione di Android
potrebbe interrompere la partizione del fornitore perché i moduli snapshot del fornitore possono essere rimossi
o modificati senza compatibilità API o ABI.
Uno snapshot del fornitore contiene i seguenti moduli su AOSP.
- Librerie condivise, statiche e di intestazione con
vendor: trueovendor_available: true - Librerie statiche VNDK con
vendor_available: true - File eseguibili e oggetto con
vendor: trueovendor_available: true
I moduli nelle seguenti directory sono considerati codice hardware di proprietà del SoC e vengono ignorati.
device/vendor/hardware/, ad eccezione dihardware/interfaceshardware/libhardwarehardware/libhardware_legacy
I codici hardware di proprietà del SoC potrebbero esistere anche in altre directory. Al momento, gli snapshot dei fornitori non supportano queste configurazioni.
Creare snapshot dei fornitori
Crea uno snapshot del fornitore utilizzando i seguenti comandi.
. build/envsetup.shlunch targetm dist vendor-snapshot
Questi comandi creano un file vendor-$(TARGET_DEVICE).zip in
$DIST_DIR. L'esempio seguente mostra un file ZIP dello snapshot del fornitore:
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
- I file JSON contengono flag come il nome del modulo, le directory esportate, i file
init_rce i filevintf_fragments. - La directory
configscontiene i file.rce.xmldei flaginit_rcevintf_fragments.
Installare gli snapshot dei fornitori
Per installare uno snapshot del fornitore, vai alla directory di destinazione e utilizza i seguenti comandi.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VERQuesto comando genera
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
L'esempio seguente mostra la struttura delle directory di uno snapshot del fornitore:
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)
Crea immagini fornitore
Utilizzando gli artefatti di build dello snapshot VNDK e uno snapshot del fornitore, puoi creare vendor.img indipendentemente dalla versione di Android nell'albero di origine, il che consente di creare versioni miste di immagini. Dopo aver installato sia lo snapshot VNDK che lo snapshot fornitore, imposta
BOARD_VNDK_VERSION sulla versione del fornitore. Ad esempio:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Quando BOARD_VNDK_VERSION è impostato su un valore diverso da current, il sistema di build:
- Abilita i moduli snapshot VNDK e i moduli snapshot fornitore di
BOARD_VNDK_VERSION. Ogni modulo snapshot sostituisce un modulo di origine C++ con lo stesso nome. - Imposta
ro.vndk.versionsuBOARD_VNDK_VERSION. - Installa i moduli snapshot VNDK di
BOARD_VNDK_VERSIONasystem_ext.