Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

ConfigStore HAL

Android 8.0 se divide la monolítica del sistema operativo Android en genérico ( system.img ) y hardware específico ( vendor.img y odm.img ) particiones. Como resultado de este cambio, la compilación condicional debe eliminarse de los módulos instalados en la partición del sistema y dichos módulos deben determinar la configuración del sistema en tiempo de ejecución (y comportarse de manera diferente según esa configuración).

ConfigStore HAL proporciona un conjunto de API para acceder a elementos de configuración de solo lectura que se utilizan para configurar el marco de Android. Esta página describe el diseño de ConfigStore HAL (y por qué las propiedades del sistema no se utilizaron para este propósito); otros artículos de esta sección de detalle de la interfaz de HAL , la ejecución del servicio y uso del lado del cliente , todo ello utilizando surfaceflinger como un ejemplo. Para obtener ayuda con clases de interfaz ConfigStore, consulte Adición de Clases y elementos de la interfaz .

¿Por qué no utilizar las propiedades del sistema?

Consideramos usar las propiedades del sistema, pero encontramos varios problemas fundamentales, que incluyen:

  • Límites de longitud sobre valores. Las propiedades del sistema tienen límites estrictos en la longitud de sus valores (92 bytes). Además, como estos límites se han expuesto directamente a las aplicaciones de Android como macros C, aumentar la longitud puede causar problemas de compatibilidad con versiones anteriores.
  • Sin soporte de tipo. Todos los valores son esencialmente cadenas, y las API de simplemente analizar la cadena en un int o bool . Otros tipos de datos compuesto (por ejemplo, matriz y struct) deben ser codificados / descodificados por los clientes (por ejemplo, "aaa,bbb,ccc" pueden ser codificados como una matriz de tres cuerdas).
  • Sobrescribe. Debido a que las propiedades del sistema de solo lectura se implementan como propiedades de una sola escritura, los proveedores / ODM que desean anular los valores de solo lectura definidos por AOSP deben importar sus propios valores de solo lectura antes que los valores de solo lectura definidos por AOSP. Esto, a su vez, da como resultado que los valores reescribibles definidos por el proveedor sean anulados por los valores definidos por AOSP.
  • Abordar los requisitos de espacio. Las propiedades del sistema ocupan una cantidad relativamente grande de espacio de direcciones en cada proceso. Propiedades del sistema se agrupan en prop_area unidades con un tamaño fijo de 128 KB, todos los cuales se asigna a un espacio de direcciones del proceso, incluso si se está accediendo a una única propiedad del sistema en el mismo. Esto puede causar problemas en dispositivos de 32 bits donde el espacio de direcciones es valioso.

Intentamos superar estas limitaciones sin sacrificar la compatibilidad, pero seguimos preocupados de que las propiedades del sistema no estuvieran diseñadas para admitir el acceso a elementos de configuración de solo lectura. Finalmente, decidimos que las propiedades del sistema son más adecuadas para compartir algunos elementos actualizados dinámicamente en todo Android en tiempo real, y que existía la necesidad de un nuevo sistema dedicado a acceder a elementos de configuración de solo lectura.

Diseño ConfigStore HAL

El diseño básico es simple:

Diseño de Configstore HAL

Diseño Figura 1. ConfigStore HAL

  • Describa los indicadores de compilación (que se utilizan actualmente para compilar condicionalmente el marco) en HIDL.
  • Los proveedores y los fabricantes de equipos originales proporcionan valores específicos del dispositivo y de SoC para las marcas de compilación mediante la implementación del servicio HAL.
  • Modifique el marco para usar el servicio HAL para encontrar el valor de un elemento de configuración en tiempo de ejecución.

Los elementos de configuración actualmente referenciados por el marco se incluyen en un paquete HIDL versionado ( android.hardware.configstore@1.0 ). Los proveedores / OEM proporcionan valores a los elementos de configuración mediante la implementación de interfaces en este paquete, y el marco usa las interfaces cuando necesita obtener un valor para un elemento de configuración.

Consideraciones de Seguridad

Los indicadores de compilación definidos en la misma interfaz se ven afectados por la misma política de SELinux. Si una o más banderas de construcción deben tener diferentes políticas de SELinux, deben ser separados a otra interfaz. Esto puede requerir una revisión importante de android.hardware.configstore package como las interfaces separados ya no son compatibles con versiones anteriores.