Создание снимков поставщика

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 .