Android es una pila de software de código abierto basado en Linux creada para una variedad amplia de dispositivos y factores de forma. En la Figura 1, se muestran los componentes principales de la plataforma de Android.
![Pila de software de Android](https://developer.android.google.cn/static/guide/platform/images/android-stack_2x.png?authuser=9&hl=es)
Figura 1: Pila de software de Android
Kernel de Linux
La base de la plataforma de Android es el kernel de Linux. Por ejemplo, el tiempo de ejecución de Android (ART) se basa en el kernel de Linux para funcionalidades subyacentes, como la generación de subprocesos y la administración de memoria de bajo nivel.
El uso de un kernel de Linux permite que Android aproveche funciones de seguridad clave y que los fabricantes de dispositivos desarrollen controladores de hardware para un kernel conocido.
Capa de abstracción de hardware (HAL)
La capa de abstracción de hardware (HAL) brinda interfaces estándares que exponen las capacidades de hardware del dispositivo al marco de trabajo de la API de Java de nivel más alto. La HAL consta de varios módulos de biblioteca, cada uno de los cuales implementa una interfaz para un tipo específico de componente de hardware, como la cámara o el módulo Bluetooth. Cuando el marco de trabajo de una API realiza una llamada para acceder a hardware del dispositivo, el sistema Android carga el módulo de biblioteca para el componente de hardware en cuestión.
Tiempo de ejecución de Android
Para los dispositivos con Android 5.0 (nivel de API 21) o versiones posteriores, cada app ejecuta sus propios procesos con sus propias instancias del tiempo de ejecución de Android (ART). El ART está escrito para ejecutar varias máquinas virtuales en dispositivos con poca memoria ejecutando archivos de formato Dalvik Executable (DEX), un formato de código de bytes diseñado específicamente para Android y optimizado para un uso de memoria mínimo. Compila herramientas, como d8
, y compila fuentes de Java en código de bytes DEX que se pueden ejecutar en la plataforma de Android.
Estas son algunas de las funciones principales del ART:
- Compilación ahead-of-time (AOT) y just-in-time (JIT)
- Recolección optimizada de elementos no utilizados (GC)
- En Android 9 (nivel de API 28) y versiones posteriores, se realiza la conversión de los archivos DEX de un paquete de app a un código máquina más compacto.
- Esto mejora la compatibilidad con la depuración, el generador de perfiles de muestras dedicado, las excepciones de diagnóstico detalladas y los informes de fallos, y la capacidad de establecer puntos de control para supervisar campos específicos
Antes de Android 5.0 (nivel de API 21), Dalvik era el entorno de ejecución del sistema operativo. Si tu app se ejecuta bien en ART, también puede funcionar en Dalvik, pero es posible que no suceda lo contrario.
En Android, también se incluye un conjunto de bibliotecas de entorno de ejecución centrales que proporcionan la mayor parte de la funcionalidad del lenguaje de programación Java; se incluyen algunas funciones del lenguaje Java 8, que usa el marco de trabajo de la API de Java.
Bibliotecas C/C++ nativas
Muchos componentes y servicios centrales del sistema Android, como ART y HAL, se compilan a partir de código nativo que requiere bibliotecas nativas escritas en C y C++. La plataforma de Android proporciona APIs del framework de Java para exponer la funcionalidad de algunas de estas bibliotecas nativas a las apps. Por ejemplo, puedes acceder a OpenGL ES a través de la API de OpenGL de Java del framework de Android para agregar a tu app compatibilidad con los dibujos y la manipulación de gráficos 2D y 3D.
Si desarrollas una app que requiere C o C++, puedes usar el NDK de Android para acceder a algunas de estas bibliotecas de plataformas nativas directamente desde tu código nativo.
Framework de la API de Java
Todo el conjunto de funciones del SO Android está disponible mediante API escritas en el lenguaje Java. Estas API son los cimientos que necesitas para crear apps para Android simplificando la reutilización de componentes del sistema y servicios centrales y modulares, como los siguientes:
- Un sistema de vista enriquecido y extensible que puedes usar para compilar la IU de una app, como listas, cuadrículas, cuadros de texto, botones y hasta un navegador web integrable.
- Un administrador de recursos que brinda acceso a recursos sin código, como strings localizadas, gráficos y archivos de diseño.
- Un administrador de notificaciones que permite que todas las apps muestren alertas personalizadas en la barra de estado.
- Un administrador de actividades que administra el ciclo de vida de las apps y proporciona una pila de actividades de navegación común
- Proveedores de contenido que permiten que las apps accedan a datos de otras apps, como la app de Contactos, o compartan sus propios datos.
Los desarrolladores tienen acceso total a las mismas API del marco de trabajo que usan las apps del sistema Android.
Apps del sistema
En Android se incluye un conjunto de apps centrales para correo electrónico, mensajería SMS, calendarios, navegación en Internet y contactos, entre otros elementos. Las apps incluidas en la plataforma no tienen un estado especial entre las apps que el usuario elige instalar; Por lo tanto, una app de terceros puede convertirse en el navegador web, el sistema de mensajería SMS o, incluso, el teclado predeterminado del usuario. Se aplican algunas excepciones, como la app de Configuración del sistema.
Las apps del sistema funcionan como apps para los usuarios y proporcionan capacidades clave a las que los desarrolladores pueden acceder desde sus propias apps. Por ejemplo, si quieres que tu app entregue mensajes SMS, no necesitas compilar esa funcionalidad por tu cuenta. En su lugar, puedes invocar cualquier app de SMS que ya esté instalada para entregar un mensaje al destinatario que especifiques.