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

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.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 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 .