Generazione di istantanee del fornitore

Android 11 supporta gli artefatti di creazione di snapshot VNDK e gli snapshot dei fornitori, 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 fornitore precedente e un'immagine di sistema più recente.

Le versioni di immagini miste non sono supportate per gli elementi seguenti.

  • Android.mk. Poiché Soong genera lo snapshot del fornitore, i moduli definiti in Android.mk non vengono acquisiti come snapshot del fornitore (anche i moduli proprietari del SoC in Android.mk non sono garantiti per funzionare).

  • Disinfettante. Gli snapshot del fornitore e VNDK non supportano il disinfettante poiché le varianti del disinfettante devono essere create separatamente.

Informazioni sugli snapshot dei fornitori

Uno snapshot del fornitore è uno snapshot di proprietà dell'OEM. È un insieme di moduli C++ predefiniti installati in /vendor ma mantenuti su AOSP. Senza acquisire uno snapshot del fornitore della versione precedente di Android, l'aggiornamento a una nuova versione di Android potrebbe interrompere la partizione del fornitore poiché i moduli dello 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: true o vendor_available: true
  • Librerie statiche VNDK con vendor_available: true
  • Eseguibili e file oggetto con vendor: true o vendor_available: true

I moduli nelle seguenti directory sono considerati codice hardware di proprietà del SoC e vengono ignorati.

  • device/
  • vendor/
  • hardware/ , ad eccezione di
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

I codici hardware di proprietà del SoC potrebbero esistere anche in altre directory. Al momento, gli snapshot dei fornitori non supportano tali configurazioni.

Creazione di snapshot dei fornitori

Crea uno snapshot del fornitore utilizzando i seguenti comandi.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

Questi comandi creano un file vendor-$(TARGET_DEVICE).zip in $DIST_DIR . L'esempio seguente mostra un file ZIP di 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 nome del modulo, directory esportate, file init_rc e file vintf_fragments .
  • La directory configs contiene file .rc e .xml dai flag init_rc e vintf_fragments .

Installazione degli snapshot del fornitore

Per installare uno snapshot del fornitore, accedere alla directory di destinazione e utilizzare i seguenti comandi.

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

Questo comando genera /vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp . L'esempio seguente mostra la struttura della 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)

Creazione di immagini dei fornitori

Utilizzando gli artefatti di creazione dello snapshot VNDK e uno snapshot del fornitore, puoi creare vendor.img indipendentemente dalla versione di Android nell'albero di origine, rendendo possibile la creazione di versioni miste di immagini. Dopo aver installato sia lo snapshot VNDK che lo snapshot del fornitore, imposta BOARD_VNDK_VERSION sulla versione del fornitore. Per esempio:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Quando BOARD_VNDK_VERSION è impostato su un valore diverso da current , il sistema di compilazione:

  • Abilita i moduli snapshot VNDK e i moduli snapshot del fornitore di BOARD_VNDK_VERSION . Ogni modulo snapshot sovrascrive un modulo sorgente C++ con lo stesso nome.
  • Imposta ro.vndk.version su BOARD_VNDK_VERSION .
  • Installa i moduli snapshot VNDK di BOARD_VNDK_VERSION su system_ext .