Genera snapshot dei fornitori

Android 11 supporta la creazione di snapshot VNDK elementi e snapshot dei fornitori, che puoi utilizzare per creare vendor.img indipendentemente Versione di Android nell'albero delle origini. Ciò consente versioni miste delle immagini, come di un fornitore precedente e una nuova immagine di sistema.

Le versioni immagine miste non sono supportate per quanto segue.

  • Android.mk. Poiché Takeg genera l'istantanea del fornitore, i moduli definiti I Android.mk non vengono acquisiti come snapshot del fornitore (moduli di proprietà SoC in il funzionamento di Android.mk non è garantito).

  • Igienizzante. Gli snapshot del fornitore e VNDK non supportano il sanitizer come sanitizer varianti 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 installata in /vendor, ma mantenuta su AOSP. Senza acquisire un fornitore istantanea della versione precedente di Android, con 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 senza 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
  • Eseguibili e file di 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à dei SoC potrebbero esistere anche in altre directory. Al momento, Gli snapshot dei fornitori non supportano queste configurazioni.

Crea snapshot dei fornitori

Crea uno snapshot del fornitore utilizzando i comandi seguenti.

. 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 nome del modulo, directory esportate, init_rc e vintf_fragments file.
  • La directory configs contiene .rc e .xml file dai flag init_rc e vintf_fragments.

Installa snapshot dei fornitori

Per installare uno snapshot del fornitore, accedi alla directory di destinazione e utilizza 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/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)

Crea immagini dei fornitori

Utilizzo della creazione di snapshot VNDK elementi e un'istantanea del fornitore, puoi creare vendor.img indipendentemente nell'albero di origine, in modo da poter creare versioni miste in formato Docker. Dopo aver installato sia lo snapshot VNDK sia lo snapshot del fornitore, imposta BOARD_VNDK_VERSION alla versione del fornitore. Ad esempio:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Se BOARD_VNDK_VERSION è impostato su un valore diverso da current, la build di sistema:

  • Abilita i moduli snapshot VNDK e i moduli snapshot fornitore di BOARD_VNDK_VERSION. Ogni modulo snapshot esegue l'override di un modulo di origine C++ con lo stesso nome.
  • Imposta ro.vndk.version su BOARD_VNDK_VERSION.
  • Installa i moduli snapshot VNDK di BOARD_VNDK_VERSION in system_ext.