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 |
|
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
невозможно собрать с помощью системы сборки 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
.