En esta página vamos a analizar un poco las carácterísticas de la Arquitectura Android... Si tenes conocimientos de Sistemas Operativos, de seguro vas a poder asimilar toda la información espontáneamente, de lo contrario no te preocupes... vas a entender de todas maneras en un menor o mayor grado... lo importante es que ya no serás indifirente a la información aquí dada, y eso es mucho.
Introducción.
Para empezar con el desarrollo de aplicaciones en Android es importante conocer cómo está
estructurado este sistema operativo. A esto le llamamos arquitectura y en el
caso de Android está formada por varias capas que facilitan al desarrollador la
creación de aplicaciones. Además, esta distribución permite acceder a las capas
más bajas mediante el uso de librerías para que así el desarrollador no
tenga que programar a bajo nivel las funcionalidades necesarias para que una
aplicación haga uso de los componentes de hardware de los teléfonos.
Cada una de las capas utiliza
elementos de la capa inferior para realizar sus funciones, es por ello que a
este tipo de arquitectura se le conoce también como pila. Para
entender mejor, a continuación cito el diagrama de la arquitectura de
Android
tomada del sitio oficial de Android developers:
Explicamos ahora cada una de las capas iniciando de abajo
hacia arriba.
Kernel de Linux. Como dijimos en el artículo ¿Qué es Android?, el núcleo del sistema
operativo Android está basado en el kernel de Linux versión 2.6, similar al que
puede incluir cualquier distribución de Linux, como Ubuntu, solo que adaptado a
las características del hardware en el que se ejecutará
Android, es decir, para
dispositivos móviles.
El núcleo actúa como una capa
de abstracción entre el hardware y el resto de las capas de la arquitectura. El
desarrollador no accede directamente a esta capa, sino que debe utilizar las
librerías disponibles en capas superiores. De esta forma también nos evitamos
el hecho de quebrarnos la cabeza para conocer las características precisas de
cada teléfono. Si necesitamos hacer uso de la cámara, el sistema operativo se
encarga de utilizar la que incluya el teléfono, sea cual sea. Para cada
elemento de hardware del teléfono existe un controlador (o driver)
dentro del kernel que permite utilizarlo desde el software.
El kernel también se encarga
de gestionar los diferentes recursos del teléfono (energía, memoria, etc.) y
del sistema operativo en sí: procesos, elementos de comunicación (networking),
etc.
Librerías. La siguiente capa que se sitúa justo
sobre el kernel la componen las bibliotecas nativas de
Android, también
llamadas librerías. Están escritas en C o C++ y compiladas para la arquitectura
hardware específica del teléfono. Estas normalmente están hechas por el
fabricante, quien también se encarga de instalarlas en el dispositivo antes de
ponerlo a la venta. El objetivo de las librerías es proporcionar funcionalidad
a las aplicaciones para tareas que se repiten con frecuencia, evitando tener
que codificarlas cada vez y garantizando que se llevan a cabo de la forma “más
eficiente”.
Entre las librerías incluidas
habitualmente encontramos OpenGL (motor gráfico), Bibliotecas multimedia
(formatos de audio, imagen y video), Webkit (navegador), SSL (cifrado de
comunicaciones), FreeType (fuentes de texto), SQLite (base de datos), entre
otras.
Entorno de ejecución. Como podemos apreciar en
el diagrama, el entorno de ejecución de
Android
no se considera una capa en sí
mismo, dado que también está formado por librerías. Aquí encontramos las
librerías con la funcionalidades habituales de Java así como otras específicas
de
Android.
El componente principal del
entorno de ejecución de
Android es la máquina virtual Dalvik.Las
aplicaciones se codifican en Java y son compiladas en un formato
específico para que esta máquina virtual las ejecute. La ventaja de esto es que
las aplicaciones se compilan una única vez y de esta forma estarán listas para
distribuirse con la total garantía de que podrán ejecutarse en cualquier
dispositivo
Android
que disponga de la versión mínima del sistema operativo que
requiera la aplicación.
Cabe aclarar que Dalvik es una
variación de la máquina virtual de Java, por lo que no es compatible
con el bytecode Java. Java se usa únicamente como lenguaje de programación,
y los ejecutables que se generan con el SDK de
Android
tienen la extensión .dex
que es específico para Dalvik, y por ello no podemos correr aplicaciones Java
en
Android
ni viceversa.
Framework de aplicaciones. La siguiente capa
está formada por todas las clases y servicios que utilizan directamente
las aplicaciones para realizar sus funciones. La mayoría de los componentes de
esta capa son librerías Java que acceden a los recursos de las capas anteriores
a través de la máquina virtual Dalvik. Siguiendo el diagrama encontramos:
- 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 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: Inicio (Home) o lanzador
(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.
Como podemos ver,
Android
nos
proporciona un entorno sumamente poderoso para que podamos programar
aplicaciones que hagan cualquier cosa. Nada dentro de
Android
es inaccesible y
podemos jugar siempre con las aplicaciones de nuestro teléfono para optimizar cualquier
tarea.
El potencial de
Android
se
sitúa en el control total que se le da al usuario para que haga de su teléfono
un dispositivo a su medida.
La información brindada aquí fue escrita por Ángel J. Vico, autor del blog La Columna 80.