Particiones de productos

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
  • No actualizable; Por lo general, parpadea una vez en la fábrica.
  • Creado según pequeñas variaciones, como la marca y el color. Tener diferentes contenidos de partición oem no significa que el software del producto sea diferente.
  • La partición system no depende de la partición oem . (Utiliza la partición oem sólo cuando se encuentra un archivo específico allí).
  • Solo utiliza API pública en la partición system .
product
  • Actualizable
  • Junto con la imagen del sistema (se actualizan juntos)
  • Construido por producto o familias de productos.
  • La partición del sistema puede depender de la partición product .
  • Puede utilizar API no públicas ya que se actualizan simultáneamente.
product (interfaces forzadas)
  • Actualizable
  • Desacoplado con la imagen del sistema.
  • Construido por producto o familias de productos.
  • La partición system no depende de la partición product .
  • No se pueden utilizar API ocultas, solo utiliza API públicas y del sistema en la partición system .

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 en PRODUCT_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 en Android.bp
  • LOCAL_PRODUCT_MODULE := true en Android.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 .