Android 11 поддерживает артефакты сборки VNDK snapshot и vendor snapshots, которые можно использовать для сборки vendor.img независимо от версии Android в исходном коде. Это позволяет использовать смешанные версии образов, например, более старый образ vendor и более новый образ системы.
Смешанные версии изображений не поддерживаются для следующих случаев.
Android.mk.Поскольку Soong генерирует снимок поставщика, модули, определенные вAndroid.mkне попадают в этот снимок поставщика (также не гарантируется работоспособность проприетарных модулей SoC вAndroid.mk).Санитайзер. Снимки Vendor и VNDK не поддерживают санитайзер, поскольку варианты санитайзера необходимо собирать отдельно.
О снимках состояния поставщиков
Снимок поставщика — это снимок, принадлежащий производителю оборудования. Это набор предварительно собранных модулей 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 snapshot и vendor snapshot, вы можете собрать vendor.img независимо от версии Android в исходном коде, что позволяет создавать смешанные версии образов. После установки как VNDK snapshot, так и vendor snapshot, установите BOARD_VNDK_VERSION в значение версии vendor. Например:
# 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.