Genera snapshot dei fornitori

Android 11 supporta gli elementi di build degli snapshot VNDK e gli snapshot del fornitore, che puoi utilizzare per compilare vendor.img indipendentemente dalla versione di Android nella struttura di origine. In questo modo è possibile utilizzare versioni miste di immagini, ad esempio un fornitore precedente e un'immagine di sistema più recente.

Le versioni delle immagini miste non sono supportate per quanto segue.

  • Android.mk. Poiché Takeg genera l'istantanea del fornitore, i moduli definiti in Android.mk non vengono acquisiti come snapshot del fornitore (nemmeno i moduli di proprietà dei SoC in Android.mk non sono garantiti per funzionare).

  • Disinfettante. Gli snapshot del fornitore e del VNDK non supportano lo sanitizer perché le varianti dello 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++ precompilati 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 dello snapshot del fornitore possono essere rimossi o modificati in assenza di compatibilità con 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
  • File 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 essere presenti anche in altre directory. Al momento, gli snapshot del fornitore non supportano queste configurazioni.

Crea 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 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_rc e i file vintf_fragments.
  • La directory configs contiene i file .rc e .xml dei flag init_rc e vintf_fragments.

Installare gli snapshot del fornitore

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

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/vVER/$(TARGET_ARCH)/Android.bp. L'esempio seguente mostra la struttura di 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)

Creare immagini del fornitore

Utilizzando gli elementi di build dello snapshot VNDK e uno snapshot del fornitore, puoi compilare vendor.img indipendentemente dalla versione di Android nella struttura di origine, il che consente di creare versioni miste delle immagini. Dopo aver installato lo snapshot VNDK e lo snapshot del 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 compilazione:

  • Attiva i moduli snapshot VNDK e i moduli snapshot del fornitore di BOARD_VNDK_VERSION. Ogni modulo istantanea sostituisce un modulo di origine C++ con lo stesso nome.
  • Imposta ro.vndk.version su BOARD_VNDK_VERSION.
  • Installa i moduli snapshot VNDK da BOARD_VNDK_VERSION a system_ext.