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.sh
lunch target
m 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
.