Android 9 y versiones posteriores incluyen soporte para crear particiones product
utilizando el sistema de compilación de Android. Anteriormente, Android 8.x imponía la separación de componentes específicos de SoC de la partición del system
a la partición vendor
sin dedicar espacio para componentes específicos de OEM creados a partir del sistema de compilación de Android. Android 9 y versiones posteriores proporcionan permisos adicionales y funciones de lista blanca que se aplican a aplicaciones privadas en diferentes particiones.
Acerca de las particiones de productos
Muchos fabricantes de equipos originales personalizan la imagen del sistema AOSP para implementar sus propias funciones, así como los requisitos del operador. Sin embargo, dichas personalizaciones hacen imposible utilizar una única imagen del sistema para múltiples SKU de software. Cada imagen debe ser diferente para admitir las personalizaciones, como por ejemplo con diferentes locales o operadores. El uso de una partición product
separada para contener personalizaciones hace posible utilizar una única imagen del sistema para múltiples SKU de software. (La partición system
aloja código genérico que se puede compartir entre muchos SKU de software). La partición del vendor
continúa albergando código BSP específico de SoC que se puede compartir entre múltiples dispositivos según el SoC determinado.
El uso de particiones separadas tiene algunas desventajas, como la administración del espacio en disco (debe permanecer reservada una cantidad limitada de espacio para el crecimiento futuro) y el mantenimiento de una interfaz binaria de aplicaciones (ABI) estable entre particiones. Antes de decidir utilizar particiones 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 realiza Google pero sí algunos OEM ). La partición dinámica será una buena solución para esto.
Particiones y permisos del producto.
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 permissions.xml
en la partición system
para priv-apps no extiende esos permisos a priv-apps en la partición 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 Listas permitidas de permisos privilegiados .
Legado /oem frente a /producto
Tenemos dos tipos de atributos de la partición product
dependiendo de la aplicación de la interfaz del producto . Además, la partición product
es diferente a la partición oem
heredada:
Dividir | Atributos |
---|---|
oem |
|
product |
|
product (interfaces forzadas) |
|
Por estos motivos, Android 9 admite la partición product
y 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 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í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
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 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. - Pronto apoyo .
custom_images
no se puede crear con el sistema de compilación de Soong. - Soporte de actualización OTA .
custom_images
se utilizan como imágenes ROM de fábrica que no pueden recibir actualizaciones OTA.
Mantener 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 superficies API entre product
y 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 product
.
Cuando se aplican las interfaces product
, la partición product
se desacopla de la partición system
. La partición product
utiliza solo 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
. Está prohibida la interacción directa entre el product
y las particiones vendor
. (Esto lo aplica SEpolicy).
Implementación de particiones de productos
Antes de implementar una nueva partición de producto, revise los cambios de partición de producto relacionados en AOSP . Luego, para configurar product
, incluya los siguientes indicadores de construcción de tablero o producto:
-
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 product
.
-
product_specific: true
enAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
enAndroid.mk
Habilitar el arranque verificado
Para evitar que software malintencionado altere la partición product
, habilite el arranque verificado de Android (AVB) para esa partición (tal como lo hace para las particiones del vendor
y system
). Para habilitar AVB, incluya los siguientes indicadores de compilación: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.