Para el desarrollo de aplicaciones para Android es básico conocer la arquitectura del sistema es decir, como está estructurado el sistema operativo.
La arquitectura de Android está formada por varias capas que facilitan el desarrollo de aplicaciones. Esta distribución permite acceder a las capas más bajas utilizando librerías para que el desarrollador no tenga que programar a bajo nivel las funcionalidades para hacer uso de los componentes hardware de los teléfonos.
Este tipo de arquitectura permite a cada capa utilizar elementos de la capa inferior para realizar sus funciones, el siguiente diagrama muestra la arquitectura Android:
Ahora explicare cada una de las capas, desde la más baja hasta la más alta:
- Kernel Linux: El núcleo del SO Android está basado en el kernel de Linux v2.6 para los servicios del núcleo del sistema como la seguridad, la gestión de memoria, gestión de procesos, la pila de red y el modelo de controlador. Parecido a cualquier distribución de Linux pero adaptada a las características hardware de los dispositivos móviles en las se ejecuta Android. Actúa como una capa de abstracción entre el hardware y el resto de las capas de la arquitectura. Esto quiere decir que el desarrollador no accede directamente a esta capa, debemos utilizar las librerías disponibles de las capas superiores.
- Librerías: Esta capa se sitúa justo sobre el kernel y esta compuesta por las bibliotecas nativas de Android. Android incluye un conjunto de librerías utilizadas por diversos componentes del sistema, estas funcionalidades están accesibles para los desarrolladores a través del framework de aplicaciones Android. A continuación resumo algunas de las bibliotecas del núcleo:
- System C library: una implementación BSD e la libreria del sistema C estándar (libc) ajustada para dispositivos basados en Linux.
- Media Libraries: basadas en PacketVideo's OpenCORE: la libreria soporta reproducción y grabación de los formatos más populares, como archivos de imágenes estáticas, incluyendo MPEG4, H.264, MP3, AAC, AMR, JPG y PNG.
- Surface Manager: administra los accesos al subsistema de la pantalla.
- LibWebCore: un motor de navegador web.
- SGL: motor para gráficos 2D.
- 3D libraries: una implementación basada en la APIs OpenGL ES1.0.
- FreeType: representación de bitmaps y vectores fuente.
- SQLite: un motor de base de datos relacional potente y ligero disponible para todas las aplicaciones.
- Entorno de ejecución: En el diagrama no se considera como una capa en sí mismo, ya que también está formado por librerías. Está compuesta por las librerías con las funcionalidades habituales de Java en conjunto con otras específicas de Android. La máquina virtual Dalvik es el componente principal del entorno de ejecución Android, las aplicaciones se codifican en Java y son compiladas con un formato especifico para esta máquina virtual los ejecute. Dalvik es una variación de la máquina virtual de Java, por lo que no es compatible con el bytcode de Java. Java es usado únicamente como el lenguaje de programación y los ejecutables se generan con el SDK de Android y tienen su propia extensión específica para Dalvik.
- Framework de aplicaciones: Esta capa esta formada por todas las clases y servicios que utilizan directamente las aplicaciones para realizar sus funciones. La gran mayoría de los componentes de esta capa son librerías Java que acceden a los recursos de las capas inferiores a través de la máquina virtual Dalvik. El framework de aplicaciones está compuesto por:
- Activity Manager: Se encarga de administrar la pila de actividades de nuestra aplicación así como su ciclo de vida.
- Windows Manager: Se encarga de organizar lo que se mostrará en pantalla. Básicamente crea las superficies en la pantalla que posteriormente pasarán a ser ocupadas por las actividades.
- Content Provider: Esta librería es muy interesante porque crea una capa que encapsula los datos que se compartirán entre aplicaciones para tener control sobre cómo se accede a la información.
- Views: En Android, las vistas los elementos que nos ayudarán a construir las interfaces de usuario: botones, cuadros de texto, listas y hasta elementos más avanzados como un navegador web o un visor de Google Maps.
- Notification Manager: Engloba los servicios para notificar al usuario cuando algo requiera su atención mostrando alertas en la barra de estado. Un dato importante es que esta biblioteca también permite jugar con sonidos, activar el vibrador o utilizar los LEDs del teléfono en caso de tenerlos.
- Package Manager: Esta biblioteca permite obtener información sobre los paquetes instalados en el dispositivo Android, además de gestionar la instalación de nuevos paquetes. Con paquete nos referimos a la forma en que se distribuyen las aplicaciones Android, estos contienen el archivo .apk, que a su vez incluyen los archivos .dex con todos los recursos y archivos adicionales que necesite la aplicación, para facilitar su descarga e instalación.
- Telephony Manager: Con esta librería podremos realizar llamadas o enviar y recibir SMS/MMS, aunque no permite reemplazar o eliminar la actividad que se muestra cuando una llamada está en curso.
- Resource Manager: Con esta librería podremos gestionar todos los elementos que forman parte de la aplicación y que están fuera del código, es decir, cadenas de texto traducidas a diferentes idiomas, imágenes, sonidos o layouts. En un post relacionado a la estructura de un proyecto Android veremos esto más a fondo.
- Location Manager: Permite determinar la posición geográfica del dispositivo Android mediante GPS o redes disponibles y trabajar con mapas.
- Sensor Manager: Nos permite manipular los elementos de hardware del teléfono como el acelerómetro, giroscopio, sensor de luminosidad, sensor de campo magnético, brújula, sensor de presión, sensor de proximidad, sensor de temperatura, etc.
- Cámara: Con esta librería podemos hacer uso de la(s) cámara(s) del dispositivo para tomar fotografías o para grabar vídeo.
- Multimedia: Permiten reproducir y visualizar audio, vídeo e imágenes en el dispositivo.
- Aplicaciones. En la última capa, la más alta se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las que no, las nativas (programadas en C o C++) y las administradas (programadas en Java), las que vienen preinstaladas en el dispositivo y aquellas que el usuario ha instalado. En esta capa encontramos también la aplicación principal del sistema: Home o launcher, porque es la que permite ejecutar otras aplicaciones mediante una lista y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso widgets, que son también aplicaciones de esta capa.
Con todo esto podemos llegar a la conclusión de que Android nos proporciona un entorno sumamente poderoso para que podamos desarrollar aplicaciones para realizar cualquier funcionalidad. Nada dentro de Android es inaccesible y podemos “trastear” siempre con las aplicaciones de nuestro móvil para optimizar cualquier tarea.
El potencial de Android está basado en el control total que se la da al usuario para que haga con su móvil un dispositivo a su medida.
No hay comentarios:
Publicar un comentario