Diseño de instantáneas del VNDK

Una imagen del sistema puede usar instantáneas del VNDK para proporcionar el VNDK correcto. hasta imágenes de proveedores, incluso cuando se compilan a partir de imágenes diferentes versiones de Android. La creación de una instantánea del VNDK requiere la captura VNDK como un resumen y marcándolos con un número de versión. El imagen del proveedor puede vincularse con una versión específica del VNDK que proporcione las ABI necesarias para los módulos en la imagen del proveedor. Sin embargo, dentro de la misma versión del VNDK, las bibliotecas de VNDK deben Stable para ABI.

El diseño de la instantánea del VNDK incluye métodos para generar compilaciones previas de una instantánea del VNDK a partir de la imagen del sistema actual y instalación esas bibliotecas precompiladas a la partición del sistema de una versión más reciente de Android.

Información acerca de las bibliotecas de VNDK

HIDL-HAL, que se introdujo en Android 8.0 habilita actualizaciones independientes para las particiones del sistema y el proveedor. VNDK define conjuntos de bibliotecas (VNDK-core, VNDK-SP y LL-NDK) que el código del proveedor puede vincular y impedir que los proveedores usen bibliotecas que no estén en un VNDK automático. Como resultado, se puede compilar y ejecutar la imagen del proveedor si se crea de la imagen del sistema se proporcionan a la imagen del proveedor.

Núcleo del VNDK

El conjunto de bibliotecas VNDK-core se instala en /system/lib[64]/vndk-${VER} y está disponible solo para procesos de proveedores con un nivel de API igual a ${VER} Los procesos del sistema no pueden usar estas bibliotecas y deben En su lugar, usa las bibliotecas instaladas en /system/lib[64]. Porque de la restricción estricta de espacio de nombres para cada proceso, las bibliotecas del núcleo del VNDK están a salvo de la carga dual.

Para incluir una biblioteca en VNDK-core, agrega lo siguiente a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Se instalaron las bibliotecas de VNDK-SP en /system/lib[64]/vndk-sp-${VER} y están disponibles para los procesos del proveedor y del sistema (a través del SP-HAL instaladas en una partición del proveedor). Las bibliotecas VNDK-SP pueden carga doble.

Para incluir una biblioteca en VNDK-SP, agrega lo siguiente a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Las bibliotecas de LL-NDK se instalan en /system/lib[64]. Módulos de proveedores Puedes usar bibliotecas de stubs de LL-NDK para acceder a símbolos preseleccionados de LL-NDK. bibliotecas. Las bibliotecas de LL-NDK deben ser retrocompatibles y estables con ABI para habilita versiones anteriores de módulos de proveedores para usar versiones nuevas de bibliotecas LL-NDK. Debido a las características estables de ABI de LL-NDK, la instantánea del VNDK no no es necesario incluir bibliotecas LL-NDK para imágenes de proveedores anteriores.

Información acerca de los resúmenes del VNDK

Android 8.1 incluido VNDK compiladas a partir del código fuente. Sin embargo, para las versiones posteriores Android, cada versión del VNDK debe capturarse como un resumen y proporcionarse como un para habilitar la vinculación a una imagen anterior del proveedor.

A partir de Android 9, las nuevas versiones de Android incluir, al menos, un resumen de los directorios VNDK-core y VNDK-SP para versiones anteriores en el código fuente de Android. Durante la compilación, se crearán las instantáneas requeridas instalada en /system/lib[64]/vndk-${VER} y /system/lib[64]/vndk-sp-${VER} (directorios que pueden usar los la partición de proveedor), en la que ${VER} es la variable de cadena que representa el nombre de la versión de la instantánea del VNDK.

Como las bibliotecas de instantáneas del VNDK pueden diferir para cada versión del VNDK, este servicio también incluye la configuración del espacio de nombres del vinculador, instalada como etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt y /etc/vndksp.libraries.${VER}.txt

Ejemplo: Actualización del sistema y el proveedor imágenes

No se requiere ninguna instantánea. compilación sin configuraciones adicionales para VNDK instantáneas.

Ejemplo: Actualiza solo la imagen del sistema

Se deben incluir los archivos de configuración del espacio de nombres del vinculador y la instantánea del VNDK para imagen del proveedor en la imagen del sistema. Los archivos de configuración del espacio de nombres del vinculador se configuran automáticamente para buscar bibliotecas de VNDK en /system/lib[64]/vndk-${VER} y /system/lib[64]/vndk-sp-${VER}

Figura 1: Actualización del sistema únicamente

Ejemplo: Actualización de la imagen del sistema, cambio menor en la imagen del proveedor

Aún no se admite la compilación de una imagen de proveedor a partir de una instantánea del VNDK, por lo que debe compilar la imagen del proveedor por separado con su código fuente original y, luego, actualiza la imagen del sistema como se describe en el ejemplo anterior.

Arquitectura de la instantánea del VNDK

Para hacer que una imagen del sistema de Android 9 sea compatible con un Imagen de proveedor de Android 8.1, el resumen del VNDK que coincide con la versión de Android 8.1 imagen del proveedor deben proporcionarse con la versión imagen del sistema, como se muestra a continuación:

Figura 2: Arquitectura de la instantánea del VNDK

El diseño de la instantánea del VNDK incluye los siguientes métodos:

  • Cómo generar una instantánea para el núcleo del VNDK y el VNDK-SP bibliotecas. Android 9 incluye una secuencia de comandos que que se puede usar para hacer un resumen de la compilación del VNDK actual. Esta secuencia de comandos agrupa todo bibliotecas en /system/lib[64]/vndk-28 y /system/lib[64]/vndk-sp-28 que se crearon con el como una instantánea del VNDK, en la que 28 es la versión del VNDK de Android 9 El resumen también incluye el vinculador archivos de configuración de espacio de nombres /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt y /etc/vndksp.libraries.28.txt Se usará la instantánea generada con versiones de Android más recientes (posteriores a Android 9).
  • La instalación de bibliotecas VNDK-core y VNDK-SP compiladas previamente desde un instantánea. En Android 9, un resumen del VNDK un conjunto de bibliotecas del núcleo de VNDK y un conjunto de bibliotecas de VNDK-SP. como archivos de configuración de espacio de nombres del vinculador. Cuando proporcionas una lista de VNDK versiones de instantáneas que se instalarán; en el momento de la compilación, la imagen del sistema instala las bibliotecas de instantáneas del VNDK a /system/lib[64]/vndk-${VER} y los directorios y el vinculador /system/lib[64]/vndk-sp-${VER} archivos de configuración del espacio de nombres para que esas instantáneas del VNDK /etc.

Control de versiones del VNDK

Cada versión de Android tiene solo un resumen del VNDK y se usa la versión del SDK como una versión del VNDK (es decir, tiene un número entero, como 27, para Android 8.1). La versión del VNDK se corrige cuando la versión de Android es lanzamiento. Se almacena la versión del VNDK que usa la partición del proveedor. automáticamente en la propiedad ro.vndk.version, que se puede leer en tiempo de ejecución. Esta versión se usa para identificar la versión del VNDK del proveedor. para algunas bibliotecas y la identificación de la versión de instantánea del VNDK para el espacio de nombres configuración.

Cómo compilar bibliotecas de VNDK

El comando make vndk compila bibliotecas que tienen vndk: { enabled: true, … }, incluidas las dependencias y los espacios de nombres. de configuración de Terraform. Si se establece BOARD_VNDK_VERSION := current, estas bibliotecas se compilan con el comando make.

Debido a que en esta compilación no se instalan las bibliotecas de VNDK desde el resumen, la Las bibliotecas de VNDK instaladas no son estables para la ABI. Sin embargo, cuando una versión de Android se corrigió la ABI de la versión actual del VNDK. En este punto, cualquier La falla de la ABI es un error de compilación, por lo que no se deben realizar parches para la versión de Android cambiar la ABI para las bibliotecas de VNDK.