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
.