Genera instantáneas de los proveedores

Android 11 admite la compilación de instantáneas del VNDK artefactos y los resúmenes de proveedores, que puedes usar para compilar vendor.img sin importar la Versión de Android en el árbol de fuentes. Esto permite versiones mixtas de imágenes, como como proveedor anterior y como imagen de sistema más reciente.

Las versiones de imágenes mixtas no son compatibles con los siguientes elementos.

  • Android.mk. Como Soong genera la instantánea del proveedor, los módulos definidos en Android.mk no se capturan como un resumen del proveedor (módulos propiedad de SoC de Tampoco se garantiza que Android.mk funcionen.

  • Sanitizador: Las instantáneas del proveedor y del VNDK no admiten limpiadores como desinfectante. las variantes de datos deben compilarse por separado.

Acerca de los resúmenes de proveedores

Una instantánea del proveedor es una que pertenece al OEM. Es un conjunto de módulos de C++ precompilados. Se instala en /vendor, pero se mantiene en AOSP. Sin captar a un proveedor instantánea de la versión anterior de Android, actualizando a una nueva versión de Android podría romper la partición del proveedor porque se pueden quitar los módulos de instantáneas del proveedor o se modifique sin compatibilidad con la API o ABI.

Un resumen del proveedor contiene los siguientes módulos sobre AOSP.

  • Bibliotecas compartidas, estáticas y de encabezados con vendor: true o vendor_available: true
  • Bibliotecas estáticas del VNDK con vendor_available: true
  • Archivos ejecutables y de objeto con vendor: true o vendor_available: true

Los módulos de los siguientes directorios se consideran código de hardware propiedad del SoC. y se ignoran.

  • device/
  • vendor/
  • hardware/, excepto por
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

Los códigos de hardware propiedad del SoC también pueden existir en otros directorios. En este momento, las instantáneas del proveedor no son compatibles con esas configuraciones.

Compila instantáneas de los proveedores

Compila una instantánea del proveedor con los siguientes comandos.

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

Estos comandos crean un archivo vendor-$(TARGET_DEVICE).zip en $DIST_DIR En el siguiente ejemplo, se muestra un archivo ZIP de instantánea del proveedor:

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
  • Los archivos JSON contienen marcas, como nombre de módulo, directorios exportados, init_rc y vintf_fragments.
  • El directorio configs contiene archivos .rc y .xml de las marcas init_rc y vintf_fragments.

Instala instantáneas de proveedores

Para instalar una instantánea del proveedor, navega al directorio de destino y usa el siguientes comandos.

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

Este comando genera /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp En el siguiente ejemplo, se muestra la estructura de directorios de una instantánea del proveedor:

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)

Compila imágenes de proveedores

Uso de la compilación de resumen del VNDK artefactos y un resumen del proveedor, puedes compilar vendor.img sin importar la versión de Android en el árbol de fuentes, lo que posibilita la creación de versiones mixtas de imágenes de contenedores. Luego de instalar la instantánea del VNDK y la del proveedor, configura BOARD_VNDK_VERSION a la versión del proveedor Por ejemplo:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Cuando BOARD_VNDK_VERSION se establece en un valor distinto de current, la compilación sistema:

  • Habilita los módulos de instantáneas del VNDK y los módulos de instantáneas del proveedor de BOARD_VNDK_VERSION Cada módulo de instantáneas anula un módulo de origen de C++ con el mismo nombre.
  • Establece ro.vndk.version en BOARD_VNDK_VERSION.
  • Instala los módulos de instantáneas del VNDK de BOARD_VNDK_VERSION en system_ext.