Android 11 поддерживает артефакты сборки снимка VNDK и снимки поставщика, которые можно использовать для сборки vendor.img независимо от версии Android в исходном дереве. Это позволяет использовать смешанные версии образов, например более старый образ поставщика и более новый образ системы.
Смешанные версии изображений не поддерживаются для следующих функций:
Android.mk.Поскольку снимок поставщика создает Soong, модули, определенные вAndroid.mk, не включаются в него (модули, принадлежащие SoC и находящиеся вAndroid.mk, также не гарантируют работу).Дезинфицирующее средство. Снапшоты поставщика и VNDK не поддерживают санитайзер, так как его варианты нужно создавать отдельно.
Снимки поставщиков
Снимок поставщика принадлежит производителю оригинального оборудования. Это набор готовых модулей C++, установленных в /vendor, но поддерживаемых в AOSP. Если не сделать снимок поставщика для предыдущей версии Android, обновление до новой версии может нарушить работу раздела поставщика, поскольку модули снимка поставщика могут быть удалены или изменены без совместимости с API или ABI.
В моментальном снимке поставщика содержатся следующие модули AOSP:
- Общие, статические и заголовочные библиотеки с
vendor: trueилиvendor_available: true. - Статические библиотеки VNDK с
vendor_available: true - Исполняемые и объектные файлы с расширениями
vendor: trueилиvendor_available: true
Модули из следующих каталогов считаются кодом оборудования, принадлежащим SoC, и игнорируются.
device/vendor/hardware/, кромеhardware/interfaceshardware/libhardwarehardware/libhardware_legacy
Коды оборудования, принадлежащего SoC, также могут находиться в других каталогах. В настоящее время снимки поставщиков не поддерживают такие конфигурации.
Как создавать снимки поставщиков
Создайте снимок поставщика, используя следующие команды.
. build/envsetup.shlunch targetm dist vendor-snapshot
Эти команды создают файл vendor-$(TARGET_DEVICE).zip в каталоге $DIST_DIR. Ниже приведен пример ZIP-файла со снимком поставщика:
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- JSON-файлы содержат флаги, такие как название модуля, экспортированные каталоги, файлы
init_rcиvintf_fragments. - Каталог
configsсодержит файлы.rcи.xmlиз параметровinit_rcиvintf_fragments.
Как установить снимки поставщика
Чтобы установить снимок поставщика, перейдите в целевой каталог и используйте следующие команды.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VERЭта команда генерирует
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
Ниже приведен пример структуры каталогов снимка поставщика.
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
Создание образов поставщиков
Используя артефакты сборки VNDK snapshot и vendor snapshot, вы можете собрать vendor.img независимо от версии Android в дереве исходного кода, что позволяет создавать смешанные версии образов. После установки снимка VNDK и снимка поставщика задайте для параметра BOARD_VNDK_VERSION версию поставщика. Пример:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Если для свойства BOARD_VNDK_VERSION задано значение, отличное от current, система сборки:
- Включает модули VNDK и модули снимков поставщика
BOARD_VNDK_VERSION. Каждый модуль снимка переопределяет исходный модуль C++ с тем же именем. - Устанавливает для параметра
ro.vndk.versionзначениеBOARD_VNDK_VERSION. - Устанавливает модули моментального снимка VNDK из
BOARD_VNDK_VERSIONвsystem_ext.