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 enAndroid.mk
no se capturan como una instantánea del proveedor (tampoco se garantiza que los módulos propietarios de SoC enAndroid.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
ovendor_available: true
- Bibliotecas estáticas VNDK con
vendor_available: true
- Ejecutables y archivos de objetos con
vendor: true
ovendor_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 archivosvintf_fragments
. - El directorio
configs
contiene archivos.rc
y.xml
de los indicadoresinit_rc
yvintf_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
enBOARD_VNDK_VERSION
. - Instala módulos de instantáneas VNDK de
BOARD_VNDK_VERSION
ensystem_ext
.