Android 9 y las versiones posteriores admiten la compilación de particiones product
con el sistema de compilación de Android. Anteriormente, Android 8.x aplicaba la separación de componentes específicos de SoC de la partición system
a la partición vendor
sin dedicar espacio a los componentes específicos de OEM compilados a partir del sistema de compilación de Android. Android 9 y versiones posteriores proporcionan funciones de permisos y listas de entidades permitidas adicionales que se aplican a apps privadas en diferentes particiones.
Acerca de las particiones de productos
Muchos OEMs personalizan la imagen del sistema de AOSP para implementar sus propias funciones, así como los requisitos de los operadores. Sin embargo, esas personalizaciones hacen que sea imposible usar una sola imagen del sistema para varios SKU de software. Cada imagen debe ser diferente para admitir las personalizaciones, como con diferentes configuraciones regionales o operadores. El uso de una partición product
separada para contener personalizaciones permite usar una sola imagen del sistema para varios SKU de software. (la partición system
aloja código genérico que se puede compartir entre muchos SKU de software). La partición vendor
sigue alojando el código BSP específico del SoC, que se puede compartir entre varios dispositivos según el SoC determinado.
El uso de particiones separadas tiene algunas desventajas, como la administración del espacio en el disco (se debe reservar una cantidad limitada de espacio para el crecimiento futuro) y mantener una interfaz binaria de aplicación (ABI) estable entre las particiones. Antes de decidir usar particiones product
, tómate el tiempo para considerar tu 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 realiza Google, pero sí algunos OEM).
El particionamiento dinámico es 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 de entidades permitidas afecta la forma en que otorgas permisos de apps privadas en tus particiones de "producto". El archivo permissions.xml
debe residir en la misma partición que priv-apps. Colocar un archivo permissions.xml
en la partición system
para apps privadas no extiende esos permisos a las apps privadas en la partición product
, aunque la primera sea una extensión de la última.
Para obtener detalles sobre los permisos y los procesos de inclusión en la lista de entidades permitidas, consulta Inclusión de permisos con privilegios en la lista de entidades permitidas.
/oem heredado en comparación con /product
Tenemos dos tipos de atributos de la partición product
según la aplicación forzosa de la interfaz del producto. Además, la partición product
es diferente de la partición oem
heredada:
Partición | Atributos |
---|---|
oem |
|
product |
|
product (interfaces aplicadas de manera forzosa) |
|
Por estos motivos, Android 9 admite la partición product
y, al mismo tiempo, conserva la compatibilidad con la partición oem
heredada para los dispositivos que dependen de ella. Para desacoplar la partición product
de la partición system
, Android 11 admite la aplicación forzosa de interfaces product
.
/componentes del producto
La partición product
contiene los siguientes componentes:
- Propiedades del sistema específicas del producto (
/product/build.prop
) - RRO específicos del producto (
/product/overlay/*.apk
) - Apps específicas del producto (
/product/app/*.apk
) - Apps privadas específicas del producto (
/product/priv-app/*.apk
) - Bibliotecas específicas del producto (
/product/lib/*
) - Bibliotecas de Java específicas del producto (
/product/framework/*.jar
) - Parámetros de configuración del sistema de Framework de Android específicos del producto (
/product/etc/sysconfig/*
y/product/etc/permissions/*
) - Archivos multimedia específicos del producto (
/product/media/audio/*
) - Archivos
bootanimation
específicos del producto
No hay custom_images
No puedes usar custom_images
. No son compatibles con lo siguiente:
- Instalar módulos en un destino 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. - Compatibilidad con Soong.
custom_images
no se puede compilar con el sistema de compilación Soong. - Compatibilidad con actualizaciones OTA
custom_images
se usan como imágenes de ROM de fábrica que no pueden recibir actualizaciones inalámbricas.
Mantén las ABI entre particiones
La partición product
en Android 9 es una extensión de la partición system
. Hay una ABI débil entre las particiones 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 plataformas de API entre product
y system
, los OEMs deben mantener sus propias ABI entre las dos particiones.
Las particiones product
y system
pueden depender una de la otra. Sin embargo, las pruebas con la imagen genérica del sistema (GSI) deben funcionar correctamente sin la partición product
.
Cuando se aplican las interfaces product
, la partición product
se desconecta de la partición system
. La partición product
solo usa las interfaces permitidas de la partición system
.
La partición product
no debe tener ninguna dependencia a través de interfaces inestables en la partición vendor
. Se prohíbe la interacción directa entre las particiones product
y vendor
.
(SEpolicy aplica esta restricción).
Implementa particiones de productos
Antes de implementar una nueva partición de producto, revisa los
cambios relacionados
en la partición de productos en AOSP. Luego, para configurar product
,
incluye las siguientes marcas de compilación de productos o de la placa:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
para/product/build.prop
. Deben estar dentro de un$(call inherit-product path/to/device.mk)
, como enPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instala un módulo en la partición del producto
Usa las siguientes marcas de compilación para instalar un módulo en la partición product
.
product_specific: true
enAndroid.bp
LOCAL_PRODUCT_MODULE := true
enAndroid.mk
Habilita el inicio verificado
Para evitar que software malicioso manipule la partición product
, habilita el inicio verificado (AVB) de Android para esa partición (al igual que lo haces para las particiones vendor
y system
). Para habilitar AVB, incluye las siguientes marcas de compilación: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.