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 enAndroid.mk
no se capturan como un resumen del proveedor (módulos propiedad de SoC de Tampoco se garantiza queAndroid.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
ovendor_available: true
- Bibliotecas estáticas del VNDK con
vendor_available: true
- Archivos ejecutables y de objeto 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
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
yvintf_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 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
enBOARD_VNDK_VERSION
. - Instala los módulos de instantáneas del VNDK de
BOARD_VNDK_VERSION
ensystem_ext
.