Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Generación de instantáneas de proveedores

Android 11 soportes VNDK artefactos de generación de instantáneas e instantáneas de los proveedores, que se puede utilizar para construir vendor.img independientemente de la versión de Android en el árbol de fuentes. Esto permite versiones mixtas de imágenes, como un 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 Soong genera la instantánea proveedor, módulos definidos en Android.mk no son capturados como una instantánea proveedor (módulos SOC-patentada en Android.mk también no están garantizados para trabajar).

  • Desinfectante. Las instantáneas de proveedores y VNDK no admiten desinfectante, ya que las variantes de desinfectante 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 prediseñados C ++ 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 con API o ABI.

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

  • Compartidos, estática, y las bibliotecas de cabecera 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/ , a excepción de
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

Los códigos de hardware propiedad de SoC también pueden existir en otros directorios. En este momento, las instantáneas de proveedores no admiten este tipo de configuraciones.

Creación de instantáneas de proveedores

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

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

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

Instalación de instantáneas de proveedores

Para instalar una instantánea de proveedor, navegue hasta el directorio de destino y use 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 un 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 vendor building

Usando VNDK instantánea artefactos de construcción y una instantánea del proveedor, se puede construir vendor.img independientemente de la versión de Android en el árbol de origen, por lo que es posible la creación de versiones mixtas de imágenes. Después de instalar tanto el VNDK instantánea y el proveedor de instantáneas, conjunto 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 que no sea current , el sistema de construcción:

  • Permite VNDK instantánea módulos y el proveedor instantánea módulos de BOARD_VNDK_VERSION . Cada módulo de instantánea anula un módulo fuente de C ++ que tiene el mismo nombre.
  • Conjuntos ro.vndk.version a BOARD_VNDK_VERSION .
  • Se instala VNDK snapshot módulos de BOARD_VNDK_VERSION a system_ext .