Android 11 поддерживает артефакты сборки снимков VNDK и снимки вендоров, которые можно использовать для сборки vendor.img независимо от версии Android в исходном дереве. Это позволяет использовать смешанные версии образов, например, образ старого вендора и новый образ системы.
Смешанные версии изображений не поддерживаются для следующих случаев.
Android.mk.Поскольку Soong генерирует снимок поставщика, модули, определённые вAndroid.mkне сохраняются как снимок поставщика (работоспособность проприетарных модулей SoC вAndroid.mkтакже не гарантируется).Санитайзер. Снимки Vendor и VNDK не поддерживают Санитайзер, поскольку его варианты необходимо создавать отдельно.
О снимках поставщиков
Снимок вендора — это снимок, принадлежащий OEM-производителю. Это набор готовых модулей C++, установленных в /vendor , но поддерживаемых в AOSP. Без создания снимка вендора предыдущей версии Android обновление до новой версии Android может привести к повреждению раздела вендора, поскольку модули снимка вендора могут быть удалены или изменены без совместимости с API или ABI.
Снимок поставщика содержит следующие модули на AOSP.
- Общие, статические и заголовочные библиотеки с
vendor: trueилиvendor_available: true - Статические библиотеки VNDK с
vendor_available: true - Исполняемые файлы и объектные файлы с
vendor: trueилиvendor_available: true
Модули в следующих каталогах считаются аппаратным кодом, принадлежащим SoC, и игнорируются.
-
device/ -
vendor/ -
hardware/, за исключением-
hardware/interfaces -
hardware/libhardware -
hardware/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/v VER /$(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 и снимок поставщика, вы можете собрать 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.