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 .