16 de enero de 2010

Arquitectura de Android

Android es un sistema operativo diseñado por capas.

Android usa el Kernel de Linux 2.6 para comunicarse con la capa de Hardware, esto permite a Android ser compatible con muchos de los drivers creados para linux facilitando de este modo ciertos desarrollos. Permite también facilitar la creación de dispositivos de todo tipo (por ejemplo el e-Book Nook o enTourage eDGe corre un Android).

Sobre el kernel de Linux Android contiene ciertas herramientas, servicios y librerías que permiten dar más potencia al sistema (por ejemplo SQLite o OpenGL).

A la par de estas librerías y ayudandose de ellas existe la maquina virtual Dalvik que ejecuta fichero .dex empaquetados en un .apk (compresión en formato zip, similar al usado por java con los .jar); además Dalvik permite traducir las .class de JAVA a .dex usando la herramienta "dx".

Sobre estas tres capas existe un Framework que se encarga de gestionar las distintas llamadas que realicen nuestros programas.

Dada esta arquitectura un programador podría crear programas en C (por ejemplo) compilados para linux ARM (procesador usado en los moviles) que correría baja el núcleo. También podría crear un programa dex o java que corriera sobre la máquina virtual Dalvik. Por ultimo podría crear un programa que use el framework.

system-architecture

A continuación voy a explicar un poco más como funciona la principal funcionalidad usada para el desarrollo de aplicaciones en Android, que es la última capa explicada, el Framework.

Cuando creamos una aplicación podemos cuatro tipos de clases básicas distintas que podemos crear según el objetivo de estas. La arquitectura de Android define estos cuatros elementos de los que podemos heredar:

  • Activities:
    Toda clase que como consecuencia de instanciarla implique una impresión por pantalla. En un programa lector de rss sería la pantalla donde lista los elementos nuevos por ejemplo.

  • Services:
    Un servicio sería todo proceso que corre sin necesidad de usar un interfaz gráfico. Siguiendo con el ejemplo de antes un servicio sería el proceso que se encarga de ir comprobando cada X tiempo si hay o no algo nuevo en el RSS.

  • Intent:
    Es la interpretación abstracta de una acción. Semejante a un evento o interrupción. (Un click, pulsación en pantalla o pulsación de un botón)

  • Content providers & Broadcast receivers
    Este es un aspecto novedoso y jugoso de Android, bajo mi punto de vista. Está enfocado a la reutilización de código en una aplicación, por tanto una aplicación puede tener ciertos elementos que sean llamados por cuales quieran otras aplicaciones para que realice una acción.
    La diferencia entre "Content providers" y "Broadcast receivers" es que los primero trabajan sobre URIs, es decir sobre tipos de datos MIME, y los segundos trabajan a nivel de "Intent". En el ejemplo uno sería llamado cuando se encontrara el valor "application/rss+xml" y otro cuando se lanza un "Intent".


Fuentes:

http://www.dalvikvm.com/
http://developer.android.com/guide/

1 comentario: