Android 11 admite artefactos de compilación de resúmenes de VNDK y instantáneas de proveedores, que puedes usar para compilar vendor.img
sin importar la versión de Android que uses en el árbol fuente. De esta manera, puedes usar versiones de imágenes combinadas (por ejemplo, una imagen del sistema nueva y una de un proveedor anterior).
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 enAndroid.mk
no se capturan como una instantánea del proveedor (tampoco se garantiza que funcionen los módulos propietarios de SoC enAndroid.mk
).Limpia. Las instantáneas del proveedor y del VNDK no admiten el sanitizador, ya que las variantes del sanitizador deben compilarse por separado.
Acerca de los resúmenes de proveedores
Una instantánea del proveedor es una instantánea que pertenece al OEM. Es un conjunto de módulos C++ precompilados que se instalan en /vendor
, pero se mantienen en AOSP. Si no se captura una instantánea del proveedor de la versión anterior de Android, la actualización a una versión nueva de Android podría dañar la partición del proveedor, ya que los módulos de instantáneas del proveedor se pueden quitar o cambiar sin compatibilidad con la API o ABI.
Una instantánea del proveedor contiene los siguientes módulos en AOSP.
- Bibliotecas compartidas, estáticas y de encabezados con
vendor: true
ovendor_available: true
- Bibliotecas estáticas del VNDK con
vendor_available: true
- Archivos ejecutables y de objetos con
vendor: true
ovendor_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 porhardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
Es posible que los códigos de hardware propiedad del SoC también existan en otros directorios. Por el momento, las instantáneas del proveedor no admiten 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áneas 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 el nombre del módulo, los directorios exportados, los archivos
init_rc
y los archivosvintf_fragments
. - El directorio
configs
contiene archivos.rc
y.xml
de las marcasinit_rc
yvintf_fragments
.
Instala instantáneas de proveedores
Para instalar una instantánea del proveedor, navega al directorio de destino y usa 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/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
Con los artefactos de compilación de resúmenes de VNDK y una instantánea del proveedor, puedes compilar vendor.img
sin importar la versión de Android en el árbol fuente, lo que permite crear versiones mixtas de imágenes. Después de instalar la instantánea del VNDK y la del proveedor, configura 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 de current
, el sistema de compilación hace lo siguiente:
- 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 de origen de C++ que tiene el mismo nombre. - Establece
ro.vndk.version
enBOARD_VNDK_VERSION
. - Instala módulos de instantáneas del VNDK de
BOARD_VNDK_VERSION
asystem_ext
.