Снимок VNDK — это набор библиотек VNDK-core и VNDK-SP для выпуска Android. Вы можете обновить только системный раздел, если system.img
включает соответствующий снимок VNDK, необходимый для vendor.img
.
Официальные моментальные снимки VNDK автоматически создаются на сервере сборки Android и сохраняются в /prebuilts/vndk
дерева исходных кодов Android. В целях разработки вы можете создавать моментальные снимки VNDK локально. Моментальные снимки VNDK поддерживаются для вариантов arm, arm64, x86 и x86_64 TARGET_ARCH
.
Снимки здания
Сервер сборки Android создает артефакты сборки и файлы моментальных снимков VNDK, используя следующие параметры сборки и команды сборки.
Параметры сборки
Целевое имя сборки — vndk
. Конфигурация цели сборки показана ниже.
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
совпадает с целевыми арками Generic System Image (GSI) (arm
,arm64
,x86
,x86_64
). -
TARGET_ARCH_VARIANT
. Для моментальных снимков версии 28 (Android 9) и более поздних версий включены популярные конфигурации, перечисленные выше.
Команды сборки
Для официальных моментальных снимков Android 9 и более поздних версий включает образец цели ( vndk
) в vndk.mk
, который создает и выводит моментальный снимок VNDK в $DIST_DIR
. ZIP-файл моментального снимка использует формат android-vndk-$(TARGET_ARCH).zip
. Например:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Сервер сборки Android использует скрипт build.sh
для сборки всех поддерживаемых вариантов арки с помощью следующей команды.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Моментальный снимок VNDK для версии Android создается из ветки выпуска этой версии.
Локальное строительство
Во время разработки вы можете создавать моментальные снимки VNDK из локального исходного дерева с помощью следующих команд.
- Чтобы собрать все поддерживаемые арки одновременно, выполните следующий скрипт сборки (
build.sh
).cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Чтобы построить один конкретный
TARGET_ARCH
, выполните следующие команды.lunch aosp_TARGET_ARCH-user
m -j vndk dist
Соответствующий android-vndk-$(TARGET_ARCH).zip
создается в $DIST_DIR
.
Файлы снимков
Моментальный снимок VNDK включает следующие файлы.
- Вендорный вариант общих библиотек VNDK-core и VNDK-SP.
- Общие библиотеки LL-NDK не нужны, поскольку они обратно совместимы.
- Для 64-битных целей создаются и включаются библиотеки
TARGET_ARCH
иTARGET_2ND_ARCH
.
- Список библиотек VNDK-core, VNDK-SP, LL-NDK и VNDK-private находится в
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - Файлы лицензии.
-
module_paths.txt
. Записывает пути модулей для всех библиотек VNDK, что необходимо для проверки того, что проекты GPL имеют исходные коды, выпущенные в заданном дереве исходных текстов Android.
Для заданного ZIP-файла моментального снимка VNDK android-vndk-$(TARGET_ARCH).zip
предварительно созданные библиотеки VNDK сгруппированы в отдельные каталоги с именами arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
в соответствии с разрядностью ABI. Например, для android-vndk-arm64.zip
64-битные библиотеки помещаются в arch-arm64-armv8-a
а 32-битные — в arch-arm-armv8-a
. В приведенном ниже примере показана структура каталогов для ZIP-файла моментального снимка VNDK arm64 ( TARGET_ARCH=arm64
) ( android-vndk-arm64.zip
).
Создание снимков поставщиков
Android 11 поддерживает моментальные снимки поставщиков , которые позволяют создавать vendor.img
независимо от версии Android в исходном дереве. Моментальный снимок VNDK по умолчанию содержит файлы общей библиотеки ( .so
), которые можно установить на устройства, а затем связать с двоичными файлами C++ поставщика во время выполнения. Для сборки на основе этого моментального снимка VNDK вам потребуются дополнительные артефакты, такие как файлы заголовков и экспортированные флаги.
Чтобы сгенерировать такие артефакты (вместе со снимком VNDK) из локального исходного дерева, используйте следующую команду.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Эта команда создает android-vndk-$(TARGET_ARCH).zip
в каталоге $DIST_DIR
. Пример ниже представляет собой ZIP-файл моментального снимка VNDK arm64 с артефактами сборки. Файлы, выделенные полужирным шрифтом, — это новые файлы, добавленные в обычный моментальный снимок VNDK (показан на рис. 1), и они включают файлы JSON (в которых хранятся cflags
каждой библиотеки) и все экспортированные файлы заголовков.
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
Загрузка снимков VNDK
Моментальные снимки VNDK проверяются в дереве исходного кода в разделе /prebuilts/vndk/v VER
, где VER
равен версии моментального снимка VNDK (которая следует за версией SDK соответствующего выпуска Android). Например, снимок состояния Android 8.1 VNDK имеет версию 27.
Использование скрипта update.py
Сценарий update.py
( /development/vndk/snapshot/update.py
) автоматизирует процесс добавления предварительно созданного моментального снимка VNDK в исходное дерево. Он автоматически обнаруживает артефакты сборки и соответствующим образом заполняет связанные свойства в сгенерированном Android.bp
. Этот скрипт выполняет следующие задачи:
- В
/prebuilts/vndk/v VER
используетrepo start
репозитория для создания новой ветки Git. - Извлекает и распаковывает артефакты сборки моментальных снимков VNDK.
- Запускает
gen_buildfiles.py
для автоматического создания файлов сборки (Android.bp
). - Запускает
check_gpl_license.py
, чтобы проверить исходные коды готовых библиотек под лицензией General Public License (GPL), выпущенные в текущем дереве исходных текстов. - Использует
git commit
для фиксации новых изменений.
Использование локально созданных моментальных снимков VNDK
Вы также можете использовать локально созданные моментальные снимки VNDK. Если указан параметр --local
, сценарий update.py
извлекает артефакты сборки моментальных снимков VNDK из локального $DIST_DIR
(вместо сервера сборки Android) и пропускает этапы проверки лицензии GPL и git commit
. Чтобы установить локально созданный моментальный снимок VNDK, перейдите в целевой каталог и используйте сценарий update.py
.
Синтаксис:
python update.py VER --local
Пример команды для обновления моментального снимка VNDK Android 8.1 с помощью локальных артефактов сборки:
python update.py 27 --local
Пример структуры каталогов локально созданного моментального снимка VNDK:
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)Локальные артефакты сборки добавляются автоматически, если артефакты были созданы с
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.Установка снапшотов VNDK
Образ системы устанавливает библиотеки моментальных снимков VNDK во время сборки, используя информацию в BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
и ro.vndk.version
. Вы можете управлять тем, какие моментальные снимки VNDK будут устанавливаться из готовых каталогов моментальных снимков VNDK (например, /prebuilts/vndk/v29
или /prebuilts/vndk/v30
), используя один из следующих параметров.
- Вариант 1:
BOARD_VNDK_VERSION
. Используйте модули моментальных снимков для создания текущих модулей поставщиков и устанавливайте только те модули моментальных снимков, которые необходимы для модулей поставщиков. - Вариант 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. Установите модули моментальных снимков VNDK независимо от модулей текущего поставщика. При этом устанавливаются предварительно созданные моментальные снимки VNDK, перечисленные вPRODUCT_EXTRA_VNDK_VERSIONS
, без привязки их к каким-либо другим модулям во время сборки.
Настройка BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
показывает версию VNDK, для сборки которой требуются модули текущего поставщика. Если BOARD_VNDK_VERSION
имеет доступную версию моментального снимка VNDK в /prebuilts/vndk
, будет установлен моментальный снимок VNDK, указанный в BOARD_VNDK_VERSION
. Если моментальный снимок VNDK недоступен в каталоге, возникает ошибка сборки.
Определение BOARD_VNDK_VERSION
также позволяет устанавливать модули VNDK. Модули поставщика связываются с версией моментального снимка VNDK, определенной в BOARD_VNDK_VERSION
во время сборки (это не создает текущие модули VNDK в исходном коде системы). При загрузке полного дерева исходных кодов из репозитория исходные коды системы и поставщика основаны на одной и той же версии Android.
Установка PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
перечисляет дополнительные версии VNDK, которые необходимо установить. Обычно достаточно иметь один моментальный снимок VNDK для текущего раздела поставщика. Однако в некоторых случаях может потребоваться включить несколько моментальных снимков в один образ системы. Например, у GSI есть несколько моментальных снимков для поддержки версий нескольких поставщиков с одним образом системы. Установив PRODUCT_EXTRA_VNDK_VERSIONS
, вы можете установить модули моментальных снимков VNDK в дополнение к версии VNDK в BOARD_VNDK_VERSION
.
Если PRODUCT_EXTRA_VNDK_VERSIONS
имеет определенный список версий, система сборки ищет готовые моментальные снимки списка версий в prebuilts/vndk
. Если система сборки находит все перечисленные моментальные снимки, она устанавливает эти файлы моментальных снимков в каждый VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER
. Отсутствующие версии вызывают ошибку сборки.
Модули VNDK не связываются с модулями поставщиков во время сборки, но их можно использовать во время выполнения, если для модулей поставщиков в разделе поставщиков требуется одна из установленных версий VNDK. PRODUCT_EXTRA_VNDK_VERSIONS
действителен, только если определена BOARD_VNDK_VERSION
.
ПЛАТФОРМА_VNDK_ВЕРСИЯ
PLATFORM_VNDK_VERSION
определяет версию VNDK для текущих модулей VNDK в исходном коде системы. Значение устанавливается автоматически:
- Перед выпуском
PLATFORM_VNDK_VERSION
устанавливается какPLATFORM_VERSION_CODENAME
. - При выпуске
PLATFORM_SDK_VERSION
копируется вPLATFORM_VNDK_VERSION
.
После выпуска версии Android текущие библиотеки VNDK устанавливаются в VNDK APEX ( /system/apex/com.android.vndk.v VER
), где VER
— это версия, хранящаяся в PLATFORM_VNDK_VERSION
.
Когда BOARD_VNDK_VERSION
установлено значение current
, PLATFORM_VNDK_VERSION
сохраняется в ro.vndk.version
, в противном случае BOARD_VNDK_VERSION
сохраняется в ro.vndk.version
. PLATFORM_VNDK_VERSION
устанавливается на версию SDK при выпуске Android; до выпуска буквенно-цифровое кодовое имя Android используется для PLATFORM_VNDK_VERSION
.
Сводка настроек версии VNDK
В таблице ниже приведены настройки версии VNDK.
Продавец Строить | Доска Версия | SDK Выпускать | Платформа Версия | Версия Имущество | Установить каталог |
---|---|---|---|---|---|
Текущие модули ВНДК | current | До | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
После | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
Готовые модули моментальных снимков | VNDK_VER для снимка | До или после | CODE_NAME или SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Версия платы (
BOARD_VNDK_VERSION
). Версия VNDK, которую требуется построить модулям поставщика. Установите значение «current
», если модули поставщика могут связываться с текущими системными модулями. - Версия платформы (
PLATFORM_VNDK_VERSION
). Версия VNDK, которую строят текущие системные модули. Создается только тогда, когдаBOARD_VNDK_VERSION
равна текущей. - Свойство версии (
ro.vndk.version
). Свойство, указывающее версию VNDK, для запуска которой требуются двоичные файлы и библиотеки в vendor.img. Хранится вvendor.img
в/vendor/default.prop
.