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 incluyenTARGET_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
).
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:
- En
/prebuilts/vndk/vVER
, usarepo start
para crear una nueva rama de Git. - Recupera y descomprime los artefactos de compilación de instantáneas del VNDK.
- Ejecuta
gen_buildfiles.py
para generar automáticamente los archivos de compilación. (Android.bp
) - 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. - 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 enPRODUCT_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 comoPLATFORM_VERSION_CODENAME
- En el lanzamiento,
PLATFORM_SDK_VERSION
se copia enPLATFORM_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 encurrent
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 cuandoBOARD_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 envendor.img
en/vendor/default.prop