Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Diseño de instantáneas de VNDK

Las instantáneas de VNDK pueden ser utilizadas por una imagen del sistema para proporcionar las bibliotecas VNDK correctas a las imágenes del proveedor, incluso cuando las imágenes del sistema y del proveedor se crean a partir de diferentes versiones de Android. La creación de una instantánea de VNDK requiere capturar las bibliotecas de VNDK como una instantánea y marcarlas con un número de versión. La imagen del proveedor puede vincularse con una versión de VNDK específica que proporciona las ABI necesarias para los módulos en la imagen del proveedor. Sin embargo, dentro de la misma versión VNDK, las bibliotecas deben ser VNDK ABI estable .

VNDK instantánea diseño incluye métodos para la generación de la pre-construye de una instantánea VNDK de la imagen actual del sistema y la instalación de las librerías pre-construidos a la partición del sistema de una versión más reciente de Android.

Acerca de las bibliotecas VNDK

HIDL-HAL , introducidos en Android 8.0, permite realizar actualizaciones independientes para los proveedores del sistema y particiones. VNDK define conjuntos de bibliotecas (VNDK-core, VNDK-SP y LL-NDK) que el código del proveedor puede vincular y bloquea a los proveedores para que no utilicen bibliotecas que no están en un conjunto VNDK. Como resultado, la imagen del proveedor se puede crear y ejecutar si se proporcionan los conjuntos de VNDK adecuados en la imagen del sistema a la imagen del proveedor.

Núcleo VNDK

El conjunto VNDK núcleos de las bibliotecas se instala en /system/lib[64]/vndk-${VER} y está disponible sólo para los procesos de los proveedores con el nivel API iguales a ${VER} . Los procesos del sistema no pueden usar estas bibliotecas y en su lugar deben utilizar las bibliotecas instaladas en el /system/lib[64] . Debido a la estricta restricción del espacio de nombres para cada proceso, las bibliotecas del núcleo de VNDK están a salvo de la carga dual.

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

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

VNDK-SP

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

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

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

LL-NDK

Bibliotecas LL-NDK se instalan en /system/lib[64] . Los módulos del proveedor pueden utilizar las bibliotecas de códigos auxiliares LL-NDK para acceder a los símbolos preseleccionados de las bibliotecas LL-NDK. Las bibliotecas LL-NDK deben ser compatibles con versiones anteriores y tener estabilidad ABI para permitir que las versiones antiguas de los módulos de los proveedores utilicen nuevas versiones de las bibliotecas LL-NDK. Debido a las características de estabilidad ABI de LL-NDK, la instantánea de VNDK no necesita incluir bibliotecas de LL-NDK para imágenes de proveedores antiguos.

Acerca de las instantáneas de VNDK

Android 8.1 incluyen bibliotecas VNDK construidas a partir del código fuente . Sin embargo, para versiones posteriores de Android, cada versión de VNDK debe capturarse como una instantánea y proporcionarse como una compilación previa para habilitar la vinculación a una imagen de proveedor anterior.

A partir de Android 9, las nuevas versiones de Android incluirán al menos una instantánea de los directorios VNDK-core y VNDK-SP para versiones anteriores en el código fuente de Android. En tiempo de compilación, las instantáneas necesarios se instalarán en /system/lib[64]/vndk-${VER} y /system/lib[64]/vndk-sp-${VER} (directorios que pueden ser utilizados por el proveedor partición), donde ${VER} es la variable de cadena que representa el nombre de la versión de la instantánea VNDK.

Como bibliotecas de la VNDK instantánea pueden ser diferentes para cada versión VNDK, la VNDK también Snapshot incluye las configuraciones de espacio de nombres enlazador, instalados como etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt y /etc/vndksp.libraries.${VER}.txt .

Ejemplo: actualización de imágenes del sistema y del proveedor

No se requiere instantánea; compile sin configuraciones adicionales para instantáneas de VNDK.

Ejemplo: actualizar solo la imagen del sistema

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

Única figura del sistema 1. La actualización

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

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

Arquitectura de instantáneas de VNDK

Para que una imagen del sistema Android 9 sea compatible con una imagen del proveedor de Android 8.1, la instantánea de VNDK que coincide con la imagen del proveedor de Android 8.1 debe proporcionarse con la imagen del sistema Android 9, como se muestra a continuación:

Arquitectura Figura 2. VNDK instantánea

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

  • Generación de una instantánea para bibliotecas VNDK-núcleo y VNDK-SP. Android 9 incluye un script que puede usar para hacer una instantánea de la compilación actual de VNDK. Este script reúne todas las bibliotecas en /system/lib[64]/vndk-28 y /system/lib[64]/vndk-sp-28 que se construyeron con la fuente de corriente como una instantánea VNDK, donde 28 es la versión VNDK de 9. La instantánea Android también incluye los archivos de configuración de espacio de nombres enlazador /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt y /etc/vndksp.libraries.28.txt . La instantánea generada se utilizará con las versiones más recientes de Android (superiores a Android 9).
  • Instalación de bibliotecas VNDK-núcleo y VNDK-SP pre-construidos a partir de una instantánea. En Android 9, una instantánea de VNDK tiene un conjunto de bibliotecas de núcleo VNDK predefinidas y un conjunto de bibliotecas VNDK-SP, así como archivos de configuración del espacio de nombres del vinculador. Cuando proporciona una lista de las versiones VNDK instantánea para ser instalado, en tiempo de compilación, la imagen del sistema instala el VNDK instantánea bibliotecas a /system/lib[64]/vndk-${VER} y /system/lib[64]/vndk-sp-${VER} directorios y archivos de configuración enlazador de espacio de nombres para esas instantáneas VNDK a /etc directorio.

Control de versiones de VNDK

Cada versión de Android tiene solo una instantánea de VNDK y la versión de SDK se usa como una versión de VNDK (lo que significa que la versión de VNDK tiene un número entero, como 27 para Android 8.1). La versión de VNDK se corrige cuando se lanza la versión de Android. La versión VNDK utilizado por el proveedor partición se almacena automáticamente en la ro.vndk.version propiedad, que se puede leer en tiempo de ejecución. Luego, esta versión se utiliza para identificar la versión de VNDK del proveedor para algunas bibliotecas e identificar la versión de instantánea de VNDK para la configuración del espacio de nombres.

Construyendo bibliotecas VNDK

El make vndk comando construye bibliotecas que tienen vndk: { enabled: true, … } , incluyendo las dependencias y los archivos de configuración de espacio de nombres. Si BOARD_VNDK_VERSION := current se establece, estas bibliotecas se construyen con el make de comandos.

Debido a que esta compilación no instala las bibliotecas VNDK de la instantánea, las bibliotecas VNDK instaladas no son estables en ABI. Sin embargo, cuando se lanza una versión de Android, se corrige la ABI para la versión actual de VNDK. En este punto, cualquier rotura de ABI es un error de compilación, por lo que los parches de la versión de Android no deben cambiar la ABI de las bibliotecas VNDK.