Android 9 y versiones posteriores incluyen compatibilidad para crear particiones de product
mediante el sistema de compilación de Android. Anteriormente, Android 8.x impuso la separación de los componentes específicos de SoC de la partición del system
a la partición del vendor
sin dedicar espacio para los componentes específicos del OEM creados a partir del sistema de compilación de Android. Android 9 y superior proporciona permisos adicionales y funciones de lista blanca que se aplican a aplicaciones privadas en diferentes particiones.
Acerca de las particiones de productos
Muchos OEM personalizan la imagen del sistema AOSP para implementar sus propias funciones, así como los requisitos del operador. Sin embargo, tales personalizaciones hacen que sea imposible usar una sola imagen del sistema para múltiples SKU de software. Cada imagen debe ser diferente para admitir las personalizaciones, como con diferentes entornos locales o operadores. El uso de una partición de product
separada para contener personalizaciones hace posible usar una sola imagen del sistema para múltiples SKU de software. (La partición system
alberga un código genérico que se puede compartir entre muchas SKU de software). La partición del vendor
continúa alojando el código BSP específico de SoC que se puede compartir entre varios dispositivos en función del SoC dado.
El uso de particiones independientes tiene algunas desventajas, como la gestión del espacio en disco (se debe reservar una cantidad limitada de espacio para el crecimiento futuro) y el mantenimiento de una interfaz binaria de aplicación (ABI) estable entre particiones. Antes de decidir usar particiones de product
, tómese el tiempo para considerar su implementación única de AOSP y las posibles tácticas de mitigación (como volver a particionar un dispositivo durante una actualización inalámbrica (OTA) , que no hace Google pero sí lo hacen algunos OEM ). La partición dinámica será una buena solución para esto.
Particiones y permisos de productos
En Android 9 y versiones posteriores, un cambio en los permisos y el proceso de inclusión en la lista blanca afecta la forma en que otorga permisos de aplicaciones privadas en las particiones de su "producto". El archivo permissions.xml
debe residir en la misma partición que las aplicaciones privadas. Colocar un archivo de permissions.xml
en la partición del system
para aplicaciones privadas no extiende esos permisos a aplicaciones privadas en la partición del product
, aunque el primero es una extensión del segundo. Para obtener detalles sobre los permisos y los procesos de inclusión en la lista blanca, consulte Lista blanca de permisos privilegiados .
Legado /oem vs /producto
Tenemos dos tipos de atributos de la partición del product
según la aplicación de la interfaz del producto . Además, la partición del product
es diferente a la partición oem
heredada:
Dividir | Atributos |
---|---|
oem |
|
product |
|
product (interfaces forzadas) |
|
Por estos motivos, Android 9 es compatible con la partición del product
y conserva la compatibilidad con la partición oem
heredada para los dispositivos que dependen de ella. Para desacoplar la partición del product
de la partición del system
, Android 11 admite el cumplimiento de las interfaces del product
.
/componentes del producto
La partición del product
contiene los siguientes componentes:
- Propiedades del sistema específicas del producto (
/product/build.prop
) - RRO específicas del producto (
/product/overlay/*.apk
) - Aplicaciones específicas del producto (
/product/app/*.apk
) - Aplicaciones privadas específicas del producto (
/product/priv-app/*.apk
) - Bibliotecas específicas del producto (
/product/lib/*
) - Bibliotecas java específicas del producto (
/product/framework/*.jar
) - Configuraciones del sistema Android Framework específicas del producto (
/product/etc/sysconfig/*
y/product/etc/permissions/*
) - Archivos multimedia específicos del producto (
/product/media/audio/*
) - Archivos de animación de
bootanimation
específicos del producto
Sin imágenes_personalizadas
No puedes usar custom_images
. Carecen de soporte para lo siguiente:
- Instalación de módulos en un objetivo específico .
custom_images
admite la copia de artefactos en una imagen, pero no puede instalar un módulo en una partición específica especificando su partición de destino como parte de una regla de compilación. - Pronto apoyo .
custom_images
no se puede construir usando el sistema de construcción Soong. - Soporte de actualización OTA .
custom_images
se utilizan como imágenes ROM de fábrica que no pueden recibir actualizaciones OTA.
Mantenimiento de ABI entre particiones
La partición del product
en Android 9 es una extensión de la partición del system
. Hay una ABI débil entre las particiones del product
y system
, por lo que ambas deben actualizarse al mismo tiempo, y la ABI debe estar basada en el SDK del sistema. Si el SDK del sistema no cubre todas las superficies de API entre product
y el system
, los OEM deben mantener sus propias ABI entre las dos particiones.
Las particiones del product
y system
pueden depender entre sí. Sin embargo, las pruebas con la imagen genérica del sistema (GSI) deben funcionar correctamente sin la partición del product
.
Cuando se aplican las interfaces del product
, la partición del product
se desacopla de la partición del system
. La partición del product
utiliza solo las interfaces permitidas de la partición del system
.
La partición del product
no debe depender de la partición del vendor
. Está prohibida la interacción directa entre el product
y las particiones del vendor
. (Esto es aplicado por SEpolicy.)
Implementación de particiones de productos
Antes de implementar una nueva partición de productos, revise los cambios de partición de productos relacionados en AOSP . Luego, para configurar el product
, incluya las siguientes banderas de creación de productos o tableros:
-
BOARD_USES_PRODUCTIMAGE
-
BOARD_PRODUCTIMAGE_PARTITION_SIZE
-
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
-
PRODUCT_PRODUCT_PROPERTIES
para/product/build.prop
. Estos deben estar dentro de$(call inherit-product path/to/device.mk)
, como enPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instalación de un módulo en la partición del producto
Utilice los siguientes indicadores de compilación para instalar un módulo en la partición del product
.
-
product_specific: true
enAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
enAndroid.mk
Habilitación del arranque verificado
Para evitar que la partición del product
sea manipulada por software malintencionado, habilite Android Verified Boot (AVB) para esa partición (al igual que lo hace con las particiones del vendor
y del system
). Para habilitar AVB, incluya los siguientes indicadores de compilación: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.