sábado, 23 de noviembre de 2013

Capitulo 1. Arquitectura Android (I)

Si entramos a analizar el sistema operativo Android, se trata de un entorno de aplicaciones móviles desarrollado a partir de un kernel de Linux destinado para ser utilizado en plataformas móviles. Pero aunque se trata de un núcleo de Linux y por lo tanto se encuentra desarrollado en C/C++, las aplicaciones para Android se desarrollan en Java junto con XML para la definición de las interfaces.


Una de las principales características de Android es que es independiente del hardware, es decir, Android provee acceso al hardware de los terminales móviles independientemente del fabricante, modelo, etc. El sistema operativo oculta el hardware de los dispositivos, por lo tanto se accede de la misma forma al GPS, la cámara o cualquier otro hardware de un terminal de Samsung que de un terminal de HTC o cualquier otro fabricante.
Para poder realizar los accesos al hardware de manera transparente, se tiene una serie de drivers con controladores para cada uno de los distintos dispositivos hardware. Esta capa de drivers también está considerada dentro del núcleo de Android. Por encima de esta capa se encuentran el resto de componentes que iremos explicando a continuación. La siguiente imagen extraída del libro Android 2 Application Developement de Reto Meier, libro altamente recomendable y que puede ser encontrado aquí nos da una información visual muy clarificadora sobre como está distribuido el sistema Android. 
 Vamos a realizar un repaso sobre cada una de las librerías que forman el sistema operativo Android.
  1. Hardware: como podemos observar, el hadware, es decir, tablets, móviles, etc, se encuentran en la parte inferior de la arquitectura Android. Estos dispositivos móviles irán a menudo equipados con sensores de todo tipo: GPS, acelerómetro, compás y brújula, conexiones via WiFi, 3G, Bluetooth, procesador con capacidades de cómputo avanzadas, varios gigas de memoria RAM y muchas otras capacidades. Cómo hemos comentado, Android es capaz de abstraerse de la plataforma e interactuar con cualquier tipo de hardware.
  2. Kernel Linux: en el corazón de Android podemos encontrar un kernel de Linux 2.6. Este corazón se encarga de la gestión de la memoria, de la ejecución de procesos, de la gestión de la red, etc. Resumiendo, de las operaciones propias de cualquier sistema operativo. Además provee la capa de abstracción sobre el hardware, posibilitando que el acceso a los sensores y componentes hardware sea siempre igual independientemente del terminal donde se emplea. Esto permite que Android esté ampliamente instalado en multitud de dispositivos y con características variadas.
  3. Librerías: la capa que podemos encontrar encima del kernel está formada por una serie de librerías escritas en C y C++. Las librerías más importantes que podemos encontrar en este nivel son:  
    • Surface manager: se encarga de la gestión de los displays de los terminales móviles, de representar la información en pantalla. 
    • Gráficos 2D y 3D: mediante estas librerías se pueden gestionar gráficos 2D y 3D así como librerías para gestión de gráficos tipo SGL u OpenGL. 
    • SQLite: se trata de la base de datos soportada por defecto en Android. Aun no siendo tan conocido por el público en general como SQL Server o MySQL, está ampliamente extendido. Por ejemplo, es usado en sistemas como el navegador Firefox, Skype, almacenamiento de información en ordenadores MAC, el antivirus McAfee y otras muchas aplicaciones. 
    • Media: posee librerías nativas para la reproducción de componentes de audio y vídeo. Algunos de los codecs soportados por defecto son: AAC, H.264, H.263, MP3 and Mpeg-4.
    • SSL and Webkit: empleadas en la gestión del navegador web y de la seguridad en Internet.
  4. Runtime Android: Al mismo nivel que las librerías se encuentra el Runtime de Android. Este elemento está formado por dos componentes, de un lado la Dalvik Virtual Machine y de otro lado las librerías Java de Android. 
    • Dalvik Virtual Machine: se trata de la versión creada por Google y destinada a ser empleada en dispositivos móviles de la máquina virtual de Java. Cualquier aplicación que escribamos para Android será programada en Java e interpretada por esta máquina virtual. Con esto se añade otra capa de independencia a los programadores de aplicaciones con respecto al hardware ya que será la máquina virtual la encargada de lidiar con ellos.
    • Librerías Android: son como las librerías .class de Java pero programadas con el fin de ser más eficientes y rápidas. Se trata de las clases que van a ser empleadas por nuestras aplicaciones con las funcionalidades básicas de Java.
  5. Framework: Se trata de la capa a la que acceden nuestras aplicaciones y a donde se harán las llamadas. Con este framework se consigue reutilizar muchos de los componentes que ya están creados, ofreciendo a los usuarios una funcionalidad predefinida que puede ser mostrada de una u otra manera en función de las características de la aplicación desarrollada. A continuación comentamos cada uno de los componentes del framework 
    • Activity manager: controla el ciclo de vida de las aplicaciones, es decir, cuando se tiene que cerrar una aplicación que está en segundo plano y como se vuelve a éstas. En Android, por regla general, las aplicaciones no se cierran por el usuario sino que el Activity Manager se encarga de su gestión. 
    • Content providers: mediante estos componentes se encapsulas objetos que tienen que ser compartidos entre aplicaciones como por ejemplo la agenda o los contactos. 
    • View: empleado para construir las interfaces de nuestras aplicaciones, es decir, cada una de las ventanas que muestra la información de nuestras aplicaciones. 
    • Notification manager: mecanismo que se emplea para notificar a los usuarios cada uno de los eventos que suceden. A modo de ejemplo, estos eventos puede ser: llegada de mensajes, notificaciones de la agenda, etc 
    • Resource manager: se puede considerar como un “resource” a todos aquellos componentes que acompañan a una aplicación pero no son código. Son gestionados mediante este componente. 
    • Location manager: sirve para entregar, de forma fácil, a las aplicaciones que generemos la localización de los dispositivos.
  6. Aplicaciones y widget: Por último, en la capa superior de la pila de Android se encuentran las aplicaciones que generaremos, las aplicaciones que lleva Android predefinidas y las aplicaciones de terceros. Además podemos encontrar también widgets, se trata de pequeñas aplicaciones que muestran pequeñas cantidades de información en la pantalla principal del teléfono. La principal diferencia entre las aplicaciones y los widgets es que las primeras están pensadas para ser empleadas utilizando toda la pantalla mientras que los widgets se instalan en la pantalla principal del teléfono y muestran información en una parte de la pantalla sin tener que acceder a ellos. Algunos de los widgets más habituales muestran información sobre el estado de la batería, la hora, el tiempo, etc. 

Una vez que tenemos clara la arquitectura de Android, vamos a continuar explicando como se instala el entorno necesario para programar nuestras propias aplicaciones tanto en Windows como en Linux.

Aquí te paso algunas fuentes de información que pueden ser de tu interés.
  • Android 2 Application Developement de Reto Meier, libro altamente recomendable y que puede ser encontrado aquí 
  • Una versión más moderna del mismo libro se puede encontrar aquí.
  • Imagen de la Wikipedia aquí
 
LIBRO RECOMENDADO PARA APRENDER ANDROID

Uno de los libros fundamientales y que recomiendo para aprender Android y llegar a hacer aplicaciones profesionales es: Android 2 Application Developement de Reto Meier




No hay comentarios :

Publicar un comentario