La arquitectura del sistema Android contiene los siguientes componentes:
- Marco de aplicación . Los desarrolladores de aplicaciones utilizan con mayor frecuencia el marco de la aplicación. Como desarrollador de hardware, debe conocer las API de desarrollador, ya que muchas se asignan directamente a las interfaces HAL subyacentes y pueden proporcionar información útil sobre la implementación de controladores.
- Aglutinante IPC . El mecanismo Binder Inter-Process Communication (IPC) permite que el marco de la aplicación cruce los límites del proceso y llame al código de servicios del sistema Android. Esto permite que las API de framework de alto nivel interactúen con los servicios del sistema Android. En el nivel del marco de la aplicación, esta comunicación está oculta para el desarrollador y las cosas parecen "simplemente funcionar".
- Servicios del sistema . Los servicios del sistema son componentes modulares enfocados, como el Administrador de ventanas, el Servicio de búsqueda o el Administrador de notificaciones. La funcionalidad expuesta por las API del marco de la aplicación se comunica con los servicios del sistema para acceder al hardware subyacente. Android incluye dos grupos de servicios: sistema (como Window Manager y Notification Manager) y medios (servicios involucrados en la reproducción y grabación de medios).
- Capa de abstracción de hardware (HAL) . Una HAL define una interfaz estándar para que la implementen los proveedores de hardware, lo que permite que Android sea independiente de las implementaciones de controladores de nivel inferior. El uso de una HAL le permite implementar la funcionalidad sin afectar o modificar el sistema de nivel superior. Las implementaciones de HAL se empaquetan en módulos y el sistema Android las carga en el momento adecuado. Para obtener más información, consulte Capa de abstracción de hardware (HAL) .
- Núcleo de Linux . El desarrollo de sus controladores de dispositivo es similar al desarrollo de un controlador de dispositivo típico de Linux. Android usa una versión del kernel de Linux con algunas adiciones especiales, como Low Memory Killer (un sistema de administración de memoria que es más agresivo para preservar la memoria), wake locks (un servicio del sistema
PowerManager
), el controlador Binder IPC y otras características importantes para una plataforma integrada móvil. Estas adiciones son principalmente para la funcionalidad del sistema y no afectan el desarrollo del controlador. Puede usar cualquier versión del kernel siempre que admita las funciones requeridas (como el controlador de carpeta). Sin embargo, recomendamos usar la última versión del kernel de Android. Para obtener más información, consulte Creación de kernels .
Lenguaje de definición de interfaz HAL (AIDL/HIDL)
Android 8.0 rediseñó el marco del sistema operativo Android (en un proyecto conocido como Treble ) para que sea más fácil, rápido y menos costoso para los fabricantes actualizar los dispositivos a una nueva versión de Android. En esta nueva arquitectura, el lenguaje de definición de interfaz HAL (HIDL, pronunciado "hide-l") especifica la interfaz entre una HAL y sus usuarios, lo que permite reemplazar el marco de Android sin reconstruir las HAL. En Android 10, las funciones de HIDL se incorporaron a AIDL. Desde entonces, HIDL está en desuso y solo lo utilizan los subsistemas que aún no se han convertido a AIDL.
Treble separa la implementación del proveedor (software de nivel inferior específico del dispositivo escrito por fabricantes de silicio) del marco del sistema operativo Android a través de una nueva interfaz de proveedor. Los proveedores o fabricantes de SOC construyen HAL una vez y los colocan en una partición /vendor
en el dispositivo; el marco, en su propia partición, se puede reemplazar con una actualización inalámbrica (OTA) sin volver a compilar las HAL.
La diferencia entre la arquitectura heredada de Android y la arquitectura actual basada en IDL está en el uso de la interfaz del proveedor:
- En Android 7.x y versiones anteriores, no existe una interfaz de proveedor formal, por lo que los fabricantes de dispositivos deben actualizar gran parte del código de Android para mover un dispositivo a una versión más nueva de Android:
Figura 2. Entorno de actualización heredado de Android - En Android 8.0 y versiones posteriores, una nueva interfaz de proveedor estable brinda acceso a las partes específicas del hardware de Android, por lo que los fabricantes de dispositivos pueden ofrecer nuevas versiones de Android simplemente actualizando el marco del sistema operativo Android, sin necesidad de trabajo adicional por parte de los fabricantes de silicio:
Figura 3. Entorno actual de actualización de Android
Todos los dispositivos nuevos que se lancen con Android 8.0 y superior pueden aprovechar la nueva arquitectura. Para garantizar la compatibilidad futura de las implementaciones del proveedor, la interfaz del proveedor es validada por Vendor Test Suite (VTS) , que es análogo al Compatibility Test Suite (CTS) . Puede usar VTS para automatizar las pruebas de kernel de SO y HAL en arquitecturas de Android heredadas y actuales.
Recursos de arquitectura
Para obtener detalles sobre la arquitectura de Android, consulte las siguientes secciones:
- Tipos HAL . Describe las HAL encuadernadas, de transferencia, del mismo proceso (SP) y heredadas.
- AIDL . Documentación sobre AIDL, ya sea de uso general o como interfaz HAL.
- HIDL (General) . Contiene información general sobre la interfaz entre una HAL y sus usuarios.
- HIDL (C++) . Contiene detalles para crear implementaciones C++ de interfaces HIDL.
- HIDL (Java) . Contiene detalles sobre la interfaz Java para interfaces HIDL.
- Almacén de configuración HAL . Describe las API para acceder a los elementos de configuración de solo lectura que se utilizan para configurar el marco de trabajo de Android.
- Superposiciones de árbol de dispositivos . Proporciona detalles sobre el uso de superposiciones de árbol de dispositivos (DTO) en Android.
- Kit de desarrollo nativo del proveedor (VNDK) . Describe el conjunto de bibliotecas exclusivas de proveedores para implementar HAL de proveedores.
- Objeto de interfaz de proveedor (VINTF) . Describe los objetos que agregan información relevante sobre un dispositivo y hacen que esa información esté disponible a través de una API consultable.
- SELinux para Android 8.0 . Detalles de cambios y personalizaciones de SELinux.
Además de los recursos de este sitio, los miembros del equipo de Treble publicaron Treble: actualizaciones rápidas de software mediante la creación de un equilibrio en un ecosistema de software activo de partes interesadas distribuidas globalmente . El documento es gratuito para los miembros de ACM y los no miembros pueden comprar o leer el resumen.