Generazione di snapshot del fornitore

Android 11 supporti VNDK artefatti costruire istantanee e istantanee vendor, che è possibile utilizzare per costruire vendor.img indipendentemente dalla versione di Android sull'albero di origine. Ciò consente versioni miste di immagini, come un vecchio fornitore e un'immagine di sistema più recente.

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

  • Android.mk. Perché Soong genera l'istantanea fornitore, moduli definiti nella Android.mk non vengono acquisite come istantanea fornitore (moduli SoC proprietaria in Android.mk inoltre non è garantito il funzionamento).

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

Informazioni sulle istantanee del fornitore

Uno snapshot del fornitore è uno snapshot di proprietà dell'OEM. È un insieme di moduli predefiniti C ++ 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 perché i moduli snapshot del fornitore possono essere rimossi o modificati senza compatibilità con API o ABI.

Un'istantanea del fornitore contiene i seguenti moduli su AOSP.

  • Condivise, statico, e le librerie 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 del fornitore non supportano tali configurazioni.

Creazione di istantanee dei fornitori

Crea un'istantanea del fornitore utilizzando i seguenti comandi.

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

Questi comandi creano un vendor-$(TARGET_DEVICE).zip file 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 bandiere come il nome del modulo, directory esportate, init_rc file e vintf_fragments file.
  • Il configs directory contiene .rc e .xml file da bandiere init_rc e vintf_fragments .

Installazione di snapshot del fornitore

Per installare un'istantanea 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)

Immagini del venditore di edifici

Utilizzando VNDK snapshot manufatti di build e un'istantanea fornitore, si può costruire vendor.img indipendentemente dalla versione di Android sulla struttura di origine, rendendo possibile la creazione di versioni miste di immagini. Dopo aver installato sia il VNDK snapshot e vendor snapshot, insieme BOARD_VNDK_VERSION alla 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 generazione:

  • Consente VNDK istantanea moduli e fornitore un'istantanea moduli di BOARD_VNDK_VERSION . Ogni modulo snapshot sovrascrive un modulo sorgente C++ con lo stesso nome.
  • Imposta ro.vndk.version a BOARD_VNDK_VERSION .
  • Installazioni VNDK snapshot moduli di BOARD_VNDK_VERSION a system_ext .