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

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

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

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

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

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

В Android 9 и более поздних версиях изменение разрешений и процесса внесения в белый список влияет на то, как вы предоставляете разрешения частным приложениям в разделах «продукта». Файл 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 невозможно собрать с помощью системы сборки 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 .