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 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.
Dado que Soong genera la instantánea del proveedor, los módulos definidos enAndroid.mk
no se capturan como una instantánea del proveedor (no se garantiza que funcionen los módulos propietarios de SoC enAndroid.mk
).Desinfectante. Las instantáneas de proveedores y VNDK no son compatibles con el desinfectante, ya que las variantes del desinfectante deben compilarse 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++ precompilados 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 quitar o cambiar sin compatibilidad con 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 objeto 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/
, 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 tales 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 archivo de vendor-$(TARGET_DEVICE).zip
en $DIST_DIR
. El siguiente ejemplo muestra un archivo ZIP de instantáneas 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 indicadores como el nombre del módulo, los directorios exportados, los archivos
init_rc
y los archivosvintf_fragments
. - El directorio de
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 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 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)
Creación de imágenes de proveedores
Con los artefactos de compilación de instantáneas de VNDK y una instantánea de proveedor, puede compilar vendor.img
independientemente de la versión de Android en el árbol de origen, lo que hace posible crear versiones mixtas de imágenes. Después de instalar tanto la instantánea de VNDK como la instantánea del proveedor, establezca 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 diferente al 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
.