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 |
|
product |
|
product (принудительные интерфейсы) |
|
По этим причинам 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
.