Generar resúmenes del VNDK

Un resumen del VNDK es un conjunto de bibliotecas del núcleo del VNDK y el VNDK-SP de una versión de Android. Puedes actualizar solo la partición del sistema si el system.img incluye la instantánea del VNDK correspondiente que necesita el vendor.img

Los resúmenes oficiales del VNDK se compilan automáticamente en el servidor de compilación de Android. y te registraste en /prebuilts/vndk del árbol de fuentes de Android. Para para fines de desarrollo, puedes compilar instantáneas del VNDK de forma local. Los resúmenes del VNDK son Se admite para las variantes TARGET_ARCH arm, arm64, x86 y x86_64.

Instantáneas de compilación

El servidor de compilación de Android genera artefactos de compilación y archivos de instantáneas del VNDK. usando los siguientes parámetros y comandos de compilación.

Parámetros de compilación

El nombre del destino de compilación es vndk. La configuración del destino de compilación se muestra a continuación.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH es igual a la imagen genérica del sistema (GSI) arcos de destino (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT Para Snapshot v28 (Android 9) y versiones posteriores, incluye las configuraciones populares antes mencionadas.

Comandos de compilación

Para instantáneas oficiales, Android 9 y versiones posteriores incluye un destino de muestra (vndk) en vndk.mk que compila y genera un VNDK instantánea en $DIST_DIR. El archivo ZIP de la instantánea usa el formato android-vndk-$(TARGET_ARCH).zip Por ejemplo:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

El servidor de compilación de Android usa Secuencia de comandos build.sh para compilar toda la arquitectura compatible con el siguiente comando.

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

El resumen del VNDK de una versión de Android se genera a partir del archivo de la versión.

Compila de forma local

Durante el desarrollo, puedes compilar resúmenes del VNDK a partir de un árbol de fuentes local con los siguientes comandos.

  • Para compilar todas las arquitecturas compatibles a la vez, ejecuta la siguiente secuencia de comandos de compilación (build.sh).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Para compilar un TARGET_ARCH específico, ejecuta el siguiente comando: con comandos de SQL sencillos.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

Se creará el archivo android-vndk-$(TARGET_ARCH).zip correspondiente. por debajo de $DIST_DIR.

Archivos de instantáneas

Un resumen del VNDK incluye los siguientes archivos.

  • Variante de proveedor de las bibliotecas compartidas VNDK-core y VNDK-SP.
    • Las bibliotecas compartidas de LL-NDK no son necesarias, ya que son retrocompatibles.
    • Para objetivos de 64 bits, tanto TARGET_ARCH como Se compilan y se incluyen TARGET_2ND_ARCH bibliotecas.
  • La lista de bibliotecas privadas de VNDK, VNDK, SP, NDK y VNDK está en la siguiente lista: [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • Archivos de licencia.
  • module_paths.txt Registra las rutas de acceso de los módulos para todos los VNDK. bibliotecas, lo cual es necesario para verificar que los proyectos de GPL tengan fuentes que se hayan lanzado en un árbol de fuentes de Android determinado.

En el caso del archivo ZIP de una instantánea del VNDK, android-vndk-$(TARGET_ARCH).zip, las bibliotecas previamente compiladas del VNDK se agrupadas en directorios separados llamados arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) según la ABI bits. Por ejemplo, para android-vndk-arm64.zip, las bibliotecas de 64 bits se colocan en arch-arm64-armv8-a, y las bibliotecas de 32 bits se colocado en arch-arm-armv8-a. En el siguiente ejemplo, se muestra Estructura de directorios para un VNDK de arm64 (TARGET_ARCH=arm64) archivo ZIP de instantánea (android-vndk-arm64.zip).

Estructura de directorios de instantáneas del VNDK
Figura 1: Estructura de directorios de instantáneas del VNDK (ejemplo)

Cómo compilar para obtener resúmenes de proveedores

Es compatible con Android 11. proveedor instantáneas, que te permiten compilar vendor.img sin importar la versión de Android en el árbol de fuentes. Una instantánea predeterminada del VNDK contiene la archivos de biblioteca compartida (.so) que se pueden instalar en dispositivos y y, luego, se vincula desde los objetos binarios C++ del proveedor en el tiempo de ejecución. Para compilar en contra esa instantánea del VNDK, necesitas artefactos adicionales como archivos de encabezado y las marcas exportadas.

Generar estos artefactos (junto con la instantánea del VNDK) a partir de una fuente local en el árbol, usa el siguiente comando.

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

Este comando crea archivos android-vndk-$(TARGET_ARCH).zip en $DIST_DIR El siguiente ejemplo es un archivo ZIP con una instantánea del VNDK de arm64 con artefactos de compilación. Los archivos en negrita son archivos agregados recientemente al VNDK normal. (aparece en la Figura 1) y también incluye archivos JSON (que almacenan cflags de cada biblioteca) y todos los archivos de encabezado exportados.

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

Sube resúmenes del VNDK

Las instantáneas del VNDK se verifican en el árbol de fuentes, en la /prebuilts/vndk/vVER, donde VER es igual a la versión de la instantánea del VNDK (que sigue la versión del SDK de la versión de Android correspondiente). Para Por ejemplo, el resumen del VNDK de Android 8.1 tiene la versión 27.

Usa la secuencia de comandos update.py

La secuencia de comandos update.py (/development/vndk/snapshot/update.py) automatiza el proceso de adición de una instantánea del VNDK precompilada al árbol fuente Detecta automáticamente artefactos y completa adecuadamente las propiedades asociadas en la Android.bp generado. Esta secuencia de comandos realiza las siguientes tareas:

  1. En /prebuilts/vndk/vVER, usa repo start para crear una nueva rama de Git.
  2. Recupera y descomprime los artefactos de compilación de instantáneas del VNDK.
  3. Ejecuta gen_buildfiles.py para generar automáticamente los archivos de compilación. (Android.bp)
  4. Ejecuta check_gpl_license.py para verificar las bibliotecas ya compiladas con licencia bajo la Licencia Pública General (GPL) tienen fuentes publicadas en árbol de fuentes actual.
  5. Usa git commit para confirmar los cambios nuevos.

Cómo usar instantáneas del VNDK compiladas localmente

También puedes usar instantáneas del VNDK compiladas localmente. Cuando el --local se especifica una opción, la secuencia de comandos update.py recupera el resumen del VNDK artefactos de compilación a partir del directorio local especificado (en lugar del directorio de compilación) que tiene los archivos android-vndk-$(TARGET_ARCH).zip generados a partir de development/vndk/snapshot/build.sh. Con la Opción --local, la secuencia de comandos update.py omite la GPL verificación de licencia y git commit pasos.

Sintaxis:

python update.py VER --local local_path

Comando de ejemplo para actualizar el resumen del VNDK de Android 8.1 con compilación local artefactos en /path/to/local/dir:

python update.py 27 --local /path/to/local/dir

Ejemplo de estructura de directorio de una instantánea del VNDK creada localmente:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
Los artefactos de compilación local se agregan automáticamente si los artefactos se compilaron con VNDK_SNAPSHOT_BUILD_ARTIFACTS=true

Cómo instalar resúmenes del VNDK

La imagen del sistema instala bibliotecas de instantáneas del VNDK en el tiempo de compilación mediante el información en BOARD_VNDK_VERSION, PRODUCT_EXTRA_VNDK_VERSIONS y ro.vndk.version. Puedes controlar qué instantáneas del VNDK se instalan desde el VNDK precompilado. directorios de instantáneas (por ejemplo, /prebuilts/vndk/v29 o /prebuilts/vndk/v30) con una de las siguientes opciones.

  • Opción 1: BOARD_VNDK_VERSION. Usa el instantáneas para compilar los módulos del proveedor actual e instalar solo el los módulos de instantáneas que se requieren para los módulos del proveedor.
  • Opción 2: PRODUCT_EXTRA_VNDK_VERSIONS. Instala los módulos de resumen del VNDK, independientemente de los módulos de los proveedores actuales. Esto instala las instantáneas del VNDK precompiladas que se enumeran en PRODUCT_EXTRA_VNDK_VERSIONS sin vincularlos a ninguna otra módulos durante el tiempo de compilación.

Configurar BOARD_VNDK_VERSION

BOARD_VNDK_VERSION muestra la versión de VNDK que usa el proveedor actual. o módulos específicos para compilar. Si BOARD_VNDK_VERSION tiene un versión disponible de la instantánea del VNDK en el directorio /prebuilts/vndk, la La instantánea del VNDK que se indica en BOARD_VNDK_VERSION está instalada. Si La instantánea del VNDK no está disponible en el directorio. Se produce un error de compilación.

Definir BOARD_VNDK_VERSION también permite que los módulos del VNDK esté instalado. Los módulos de proveedores se vinculan con la versión de la instantánea del VNDK definida en BOARD_VNDK_VERSION en el tiempo de compilación (esto no compila VNDK en la fuente del sistema). Al descargar el árbol de fuentes completo de un repositorio, las fuentes del sistema y del proveedor se basan en el mismo lanzamiento.

Configurar PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS enumera las versiones adicionales del VNDK que se esté instalado. Por lo general, es suficiente tener una instantánea del VNDK para en la partición de proveedor. Sin embargo, en algunos casos, quizás debas incluir varias instantáneas en una imagen del sistema. Por ejemplo, la GSI tiene varias instantáneas para admitir varias versiones de los proveedores con una imagen del sistema. Estableciendo PRODUCT_EXTRA_VNDK_VERSIONS, puedes instalar la instantánea del VNDK además de la versión de VNDK en BOARD_VNDK_VERSION.

Si PRODUCT_EXTRA_VNDK_VERSIONS tiene una lista específica de versiones, el sistema de compilación busca instantáneas precompiladas de la lista de versiones en la prebuilts/vndk. Si el sistema de compilación localiza todos los elementos instantáneas, instala esos archivos de instantáneas en cada archivo APEX del VNDK (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. Las versiones faltantes generan un error de compilación.

Los módulos del VNDK no se vinculan con los módulos de proveedores en el tiempo de compilación, pero pueden usarse en el entorno de ejecución si los módulos del proveedor en la partición del proveedor requieren uno de las versiones instaladas del VNDK. El campo PRODUCT_EXTRA_VNDK_VERSIONS es válido solo si se define BOARD_VNDK_VERSION.

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION define la versión de VNDK para el VNDK actual. módulos en la fuente del sistema. El valor se establece automáticamente:

  • Antes del lanzamiento, PLATFORM_VNDK_VERSION se establece como PLATFORM_VERSION_CODENAME
  • En el lanzamiento, PLATFORM_SDK_VERSION se copia en PLATFORM_VNDK_VERSION

Después del lanzamiento de la versión de Android, las bibliotecas actuales del VNDK se Se instaló en VNDK APEX. (/system/apex/com.android.vndk.vVER), donde VER es la versión almacenada en PLATFORM_VNDK_VERSION

Cuando BOARD_VNDK_VERSION se establece en current, la PLATFORM_VNDK_VERSION está almacenado en ro.vndk.version, De lo contrario, BOARD_VNDK_VERSION se almacenará en ro.vndk.version PLATFORM_VNDK_VERSION se establece en Versión del SDK cuando se lanza Android; antes del lanzamiento, el código alfanumérico de Android el nombre interno se usa para PLATFORM_VNDK_VERSION.

Resumen de la configuración de la versión del VNDK

En la tabla, se resume la configuración de la versión del VNDK.

Proveedor
Compilación
Versión
del tablero
Versión
del SDK
Versión
de la plataforma
Propiedad de la versión
Instalar directorio
Módulos del VNDK actuales current Antes CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
Después SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
Módulos de instantáneas compilados previamente VNDK_VER
para instantánea
Antes o después CODE_NAME
o SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Versión de la placa (BOARD_VNDK_VERSION). VNDK que los módulos de proveedores deben compilar. Se establece en current si los módulos de proveedores pueden vincularse con los módulos del sistema actuales.
  • Versión de la Plataforma (PLATFORM_VNDK_VERSION). Versión de VNDK que compilan los módulos del sistema actuales. Creado solo cuando BOARD_VNDK_VERSION es igual al valor actual.
  • Propiedad de la versión (ro.vndk.version). Propiedad que especifica la versión del VNDK que requieren los objetos binarios y las bibliotecas de vendor.img para cuando se ejecute. Se almacena en vendor.img en /vendor/default.prop