Particiones de productos

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
  • No actualizable; generalmente parpadea una vez en la fábrica.
  • Construido por 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 solo cuando se encuentra un archivo específico allí).
  • Solo usa la API pública en la partición del 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 del product .
  • Puede usar 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 del product .
  • No puede usar API ocultas, solo usa API públicas y del sistema en la partición del system .

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 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 del product .

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