Android 11 поддерживает артефакты сборки моментальных снимков VNDK и моментальные снимки поставщиков, которые можно использовать для сборки vendor.img
независимо от версии Android в исходном дереве. Это позволяет использовать смешанные версии образов, например более старый образ поставщика и более новый образ системы.
Версии смешанных образов не поддерживаются для следующего.
Android.mk.
Поскольку Soong создает снимок поставщика, модули, определенные вAndroid.mk
, не фиксируются как снимок поставщика (собственные модули SoC вAndroid.mk
также не гарантируют работу).Дезинфицирующее средство. Снимки поставщика и 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
. - Устанавливает модули моментальных снимков
BOARD_VNDK_VERSION
вsystem_ext
.