Generación de instantáneas de proveedores

Android 11 admite artefactos de compilación de instantáneas VNDK e instantáneas de proveedores, que puede usar para compilar vendor.img independientemente de la versión de Android en el árbol de origen. Esto permite versiones mixtas de imágenes, como una imagen de proveedor anterior y una imagen de sistema más nueva.

Las versiones de imágenes mixtas no son compatibles con lo siguiente.

  • Android.mk. Debido a que Soong genera la instantánea del proveedor, los módulos definidos en Android.mk no se capturan como una instantánea del proveedor (tampoco se garantiza que los módulos propietarios de SoC en Android.mk funcionen).

  • Desinfectante. Las instantáneas de proveedores y VNDK no son compatibles con Sanitizer, ya que las variantes de Sanitizer deben crearse por separado.

Acerca de las instantáneas de proveedores

Una instantánea del proveedor es una instantánea propiedad del OEM. Es un conjunto de módulos C++ prediseñados instalados en /vendor pero mantenidos en AOSP. Sin capturar una instantánea del proveedor de la versión anterior de Android, la actualización a una nueva versión de Android podría romper la partición del proveedor porque los módulos de instantáneas del proveedor se pueden eliminar o cambiar sin compatibilidad API o ABI.

Una instantánea del proveedor contiene los siguientes módulos en AOSP.

  • Bibliotecas compartidas, estáticas y de encabezado con vendor: true o vendor_available: true
  • Bibliotecas estáticas VNDK con vendor_available: true
  • Ejecutables y archivos de objetos con vendor: true o vendor_available: true

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

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

Es posible que también existan códigos de hardware propiedad de SoC en otros directorios. En este momento, las instantáneas de proveedores no admiten dichas configuraciones.

Instantáneas de proveedores de edificios

Cree una instantánea del proveedor utilizando los siguientes comandos.

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

Estos comandos crean un archivo vendor-$(TARGET_DEVICE).zip en $DIST_DIR . El siguiente ejemplo 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 indicadores como el nombre del módulo, directorios exportados, archivos init_rc y archivos vintf_fragments .
  • El directorio configs contiene archivos .rc y .xml de los indicadores init_rc y vintf_fragments .

Instalación de instantáneas de proveedores

Para instalar una instantánea del proveedor, navegue hasta el directorio de destino y utilice los 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/v VER /$(TARGET_ARCH)/Android.bp . El siguiente ejemplo muestra la estructura de directorios de una instantánea de 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)

Imágenes de proveedores de edificios

Al utilizar artefactos de compilación de instantáneas de VNDK y una instantánea del proveedor, puede compilar vendor.img independientemente de la versión de Android en el árbol de origen, lo que permite crear versiones mixtas de imágenes. Después de instalar tanto la instantánea de VNDK como la instantánea del proveedor, configure BOARD_VNDK_VERSION en la versión del proveedor. Por ejemplo:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

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

  • Habilita los módulos de instantáneas de VNDK y los módulos de instantáneas de proveedores de BOARD_VNDK_VERSION . Cada módulo de instantánea anula un módulo fuente de C++ que tiene el mismo nombre.
  • Establece ro.vndk.version en BOARD_VNDK_VERSION .
  • Instala módulos de instantáneas VNDK de BOARD_VNDK_VERSION en system_ext .