Разделы продукта

Android 9 и более поздние версии включают поддержку создания разделов product с помощью системы сборки Android. Ранее в Android 8.x применялось разделение компонентов, специфичных для SoC, из system раздела в раздел vendor без выделения места для OEM-компонентов, созданных из системы сборки Android. Android 9 и более поздние версии предоставляют дополнительные разрешения и функции белого списка , которые применяются к priv-приложениям в разных разделах.

О товарных разделах

Многие OEM-производители настраивают образ системы AOSP для реализации своих собственных функций, а также требований оператора связи. Однако такие настройки делают невозможным использование одного образа системы для нескольких SKU программного обеспечения. Каждое изображение должно быть другим, чтобы поддерживать настройки, например, с разными языковыми стандартами или операторами связи. Использование отдельного раздела product для хранения настроек позволяет использовать один образ системы для нескольких SKU программного обеспечения. ( system раздел содержит общий код, который может использоваться многими SKU программного обеспечения). В разделе vendor по-прежнему размещается код BSP, специфичный для SoC, который может совместно использоваться несколькими устройствами на основе данного SoC.

Использование отдельных разделов имеет некоторые недостатки, такие как управление дисковым пространством (ограниченный объем пространства должен оставаться зарезервированным для будущего расширения) и поддержание стабильного двоичного интерфейса приложения (ABI) между разделами. Прежде чем принять решение об использовании разделов product , найдите время, чтобы рассмотреть уникальную реализацию AOSP и возможные тактики смягчения последствий (например, повторное разделение устройства во время беспроводного (OTA) обновления , которое не выполняется Google, но выполняется некоторыми OEM-производителями. ). Хорошим решением для этого будет динамическое разбиение .

Разделы продукта и разрешения

В Android 9 и более поздних версиях изменение разрешений и процесса внесения в белый список влияет на то, как вы предоставляете разрешения priv-apps в разделах вашего продукта. Файл permissions.xml должен находиться в том же разделе, что и priv-apps. Размещение файла permissions.xml в system разделе для priv-apps не распространяет эти разрешения на priv-apps в разделе product , хотя первый является расширением второго. Подробнее о разрешениях и процессах внесения в белый список см. в разделе «Белый список привилегированных разрешений» .

Наследие /oem против /product

У нас есть два вида атрибутов раздела product в зависимости от реализации интерфейса продукта . Кроме того, раздел product отличается от устаревшего раздела oem :

Раздел Атрибуты
oem
  • Не обновляемый; обычно прошивается один раз на заводе.
  • Создан для небольших вариаций, таких как брендинг и цвет. Различное содержимое разделов oem не означает, что программное обеспечение продукта отличается.
  • system раздел не зависит от oem -раздела. (Он использует раздел oem только тогда, когда там находится определенный файл).
  • Использует общедоступный API только в system разделе.
product
  • Обновляемый
  • В паре с образом системы (обновляются вместе)
  • Создан для каждого продукта или семейства продуктов.
  • Системный раздел может зависеть от раздела product .
  • Можно использовать закрытые API, поскольку они обновляются одновременно.
product (принудительные интерфейсы)
  • Обновляемый
  • Отвязан от образа системы.
  • Создан для каждого продукта или семейства продуктов.
  • system раздел не зависит от раздела product .
  • Не может использовать скрытые API, но использует общедоступные и системные API в system разделе.

По этим причинам Android 9 поддерживает раздел product , сохраняя при этом поддержку устаревшего раздела oem для устройств, которые от него зависят. Чтобы отделить раздел product от system раздела, Android 11 поддерживает принудительное применение интерфейсов product .

/компоненты продукта

Раздел product содержит следующие компоненты:

  • Системные свойства продукта ( /product/build.prop )
  • RRO для конкретных продуктов ( /product/overlay/*.apk )
  • Приложения для конкретных продуктов ( /product/app/*.apk )
  • Приватные приложения для конкретных продуктов ( /product/priv-app/*.apk )
  • Библиотеки для конкретных продуктов ( /product/lib/* )
  • Библиотеки Java для конкретных продуктов ( /product/framework/*.jar )
  • Конфигурации системы Android Framework для конкретных продуктов ( /product/etc/sysconfig/* и /product/etc/permissions/* )
  • Медиафайлы для конкретных продуктов ( /product/media/audio/* )
  • Файлы bootanimation для конкретных продуктов

Нет custom_images

Вы не можете использовать custom_images . Им не хватает поддержки для следующего:

  • Установка модулей в конкретную цель . custom_images поддерживает копирование артефактов в образ, но не может установить модуль в определенный раздел, указав его целевой раздел как часть правила сборки.
  • Скоро поддержка . custom_images нельзя собрать с помощью системы сборки Soong.
  • Поддержка ОТА-обновлений . custom_images используются в качестве заводских образов ПЗУ, которые не могут получать обновления OTA.

Поддержание ABI между разделами

Раздел product в Android 9 является расширением system раздела. Между product и system разделом существует слабый ABI, поэтому оба должны быть обновлены одновременно, а ABI должен быть основан на системном SDK. Если системный SDK не охватывает все поверхности API между product и system , OEM-производители должны поддерживать свои собственные ABI между двумя разделами.

Разделы product и system могут зависеть друг от друга. Однако тесты с универсальным образом системы (GSI) должны правильно работать без раздела product .

При принудительном использовании интерфейсов product раздел product отделяется от system раздела. Раздел product использует только разрешенные интерфейсы из system раздела.

Раздел product не должен зависеть от раздела vendor . Прямое взаимодействие между разделами product и vendor запрещено. (Это обеспечивается SEpolicy.)

Внедрение продуктовых разделов

Перед реализацией нового раздела продукта просмотрите соответствующие изменения раздела продукта в AOSP . Затем, чтобы настроить product , включите следующие флаги доски или сборки продукта:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES для /product/build.prop . Они должны находиться внутри $(call inherit-product path/to/device.mk) , как в PRODUCT_PRODUCT_PROPERTIES += product.abc=ok .

Установка модуля в раздел продукта

Используйте следующие флаги сборки, чтобы установить модуль в раздел product .

  • product_specific: true в Android.bp
  • LOCAL_PRODUCT_MODULE := true в Android.mk

Включение проверенной загрузки

Чтобы предотвратить подделку раздела product вредоносным программным обеспечением, включите Android Verified Boot (AVB) для этого раздела (так же, как вы делаете это для раздела vendor и system раздела). Чтобы включить AVB, включите следующие флаги сборки: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .