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
.