В Android 9 и более поздних версий поддерживается создание разделов product с помощью системы сборки Android. Ранее в Android 8.x компоненты, относящиеся к однокристальной системе, были отделены от раздела system и перенесены в раздел vendor. При этом не было выделено место для компонентов, относящихся к OEM-производителю и созданных в системе сборки Android. В Android 9 и более поздних версиях есть дополнительные разрешения и функции белого списка, которые применяются к привилегированным приложениям в разных разделах.
Разделы товаров
Многие производители оригинального оборудования настраивают системный образ AOSP, чтобы реализовать собственные функции и требования операторов связи. Однако из-за таких настроек невозможно использовать один образ системы для нескольких SKU программного обеспечения. Каждое изображение должно быть уникальным, чтобы поддерживать настройки, например для разных регионов или операторов связи. Использование отдельного раздела product для хранения настроек позволяет использовать один образ системы для нескольких SKU программного обеспечения. (В разделе system размещен общий код, который можно использовать в разных версиях ПО.) Раздел vendor по-прежнему содержит код BSP для однокристальной системы, который может использоваться на нескольких устройствах с такой системой.
У использования отдельных разделов есть недостатки, например необходимость управлять местом на диске (определенный объем должен быть зарезервирован для будущего роста) и поддерживать стабильный двоичный интерфейс приложения (ABI) между разделами. Прежде чем использовать разделы product, проанализируйте свою реализацию AOSP и возможные способы устранения неполадок. Например, некоторые производители оригинального оборудования переразбивают диск устройства во время беспроводного обновления. Google так не делает.
Динамическое разделение – хорошее решение для этой задачи.
Разделы товаров и разрешения
В Android 9 и более поздних версиях изменение разрешений и процесса добавления в белый список влияет на то, как вы предоставляете разрешения для приложений с повышенными привилегиями в разделах `product`. Файл permissions.xml должен находиться в том же разделе, что и приложения с привилегиями. Если поместить файл permissions.xml в раздел system для привилегированных приложений, это не распространит разрешения на привилегированные приложения в разделе product, хотя первый раздел является расширением второго.
Подробнее о разрешениях и добавлении в белый список привилегированных разрешений…
Устаревший параметр /oem и параметр /product
В зависимости от принудительного применения интерфейса продукта у раздела product есть два типа атрибутов. Кроме того, раздел product отличается от устаревшего раздела oem:
| Раздел | Атрибуты |
|---|---|
oem |
|
product |
|
product (принудительные интерфейсы) |
|
По этим причинам в Android 9 поддерживается раздел product, но при этом сохраняется поддержка устаревшего раздела oem для устройств, которые от него зависят. Чтобы отделить раздел product от раздела system, в Android 11 поддерживается принудительное применение интерфейсов product.
/компоненты продукта
Раздел product содержит следующие компоненты:
- Системные свойства для определенного продукта (
/product/build.prop) - Правила возврата для определенных товаров (
/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поддерживает копирование артефактов в образ, но не может установить модуль в определенный раздел, указав целевой раздел в правиле сборки. - Поддержка Soong.
custom_imagesнельзя создать с помощью системы сборки Soong. - Поддержка беспроводных обновлений.
custom_imagesиспользуются в качестве образов заводского ПЗУ, которые нельзя получить в виде беспроводного обновления.
Поддерживать ABI между разделами
Раздел product в Android 9 является расширением раздела system. Между разделами product и system существует слабая совместимость ABI, поэтому их необходимо обновить одновременно. ABI должен быть основан на системном SDK. Если системный SDK не охватывает все поверхности API между product и system, производители оборудования должны поддерживать собственные ABI между двумя разделами.
Разделы product и system могут зависеть друг от друга. Однако тесты с общим образом системы (GSI) должны работать правильно без раздела product.
Когда интерфейсы product принудительно применяются, раздел product
отделяется от раздела system. Раздел product использует только разрешенные интерфейсы из раздела system.
Раздел product не должен зависеть от раздела vendor через нестабильные интерфейсы. Прямое взаимодействие между разделами product и vendor запрещено.
(Это обеспечивается политикой SEpolicy.)
Как реализовать сегментацию товаров
Прежде чем внедрять новый раздел продукта, ознакомьтесь с изменениями, связанными с разделами продуктов, в AOSP. Затем, чтобы настроить product, добавьте следующие флаги платы или сборки продукта:
BOARD_USES_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPEPRODUCT_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 от вредоносного программного обеспечения, включите для него проверку при запуске (AVB), как и для разделов vendor и system. Чтобы включить AVB, добавьте следующие флаги сборки:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.