Qué es Android

[Fuente: http://developer.android.com/guide/basics/what-is-android.html]

Android es una pila de software para dispositivos moviles que incluye un sistema operativo , aplicaciones de middleware y aplicaciones de sistema. El Android SDK proporciona las herramientas y los APIs necesarios para empezar a desarrollar aplicaciones en la plataforma Android utilizando el lenguaje de programación Java.

Características que proporciona Android

  • Framework de aplicaciones que habilita la reutilización y el reemplazo de componentes.
  • Máquina virtual Dalvik optimizada para dispositivos móviles.
  • Navegador integrado basado en el motor open source WebKit
  • Gráficos optimizados soportados por una libreria de gráficos 2D personalizada; gráficos 3D basados en OpenGL ES 1.0 (aceleración hardware opcional)
  • SQLite para almacenamiento estructurado de datos
  • Soporte multimedia para formatos comunes de audio, video e imágenes (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
  • Telefonía GSM (dependiente del hardware)
  • Bluetooth, EDGE, 3G y WiFi (dependiente del hardware)
  • Camara , GPS, brújula y acelerómetro (dependiente del hardware)
  • Entorno de desarrollo “Rich” lo cual incluye un emulator de dispositivos, herramientas de depuración , perfilado de memoria y rendimiente y un plugin para Eclipse IDE.

Arquitectura Android

El siguiente diagrama muestra los componentes principales del sistema operativo Android. Cada sección se describe más abajo:

Android System Architecture

Aplicaciones

Android viene con un conjunto de aplicaciones core que incluye un cliente de email , un programa de SMS , calendario, mapas, navegador, contactos y otros. Todas las aplicaciones se escriben utilizando el lenguaje de programación Java.

Framework de aplicaciones

Proporcionando una plataforma de desarrollo abierta, Android ofrece a los programadores la capacidad de hacer aplicaciones ricas e innovadoras. Los programadores son libres de sacarle partido al hardware del dispositivo, información de ubicación, servicios que se estén ejecutando en segundo plano, configurar alarmas, añadir notificaciones a la barra de estado y mucho, mucho más.

Los programadores tienen acceso completo al mismo API que utilizan las aplicaciones del sistema. La arquitectura de aplicaciones estaá diseñada para simplificar la reutilización de componentes; cualquier aplicación puede publicar sus capacidades y cualquier otra aplicación puede entonces hacer uso de estas capacidades (sujeto eso si a las restricciones de seguridad  forzadas por el framework). Este mismo mecanismo permite que los componentes sean reemplazados por el usuario.

Por debajo de todas las aplicaciones hay un conjunto de servicios y sistemas, incluyendo:

  • Un conjunto de Views completo y extensible que puede ser utilizado para construir una aplicación, incluyendo listas, grids, cajas de texto, botones e incluso un navegador web integrado.
  • Content Providers que habilitan a las aplicaciones para acceder a los datos de otras aplicaciones (como por ejemplo Contactos), o para compartir sus propios datos
  • Un Resource Manager, que proporciona acceso a recursos de no-codigo tales como cadenas multiidioma, grágicos y ficheros de layout.
  • Un Notification Manager que habilita a todas las aplicaciones para mostrar alertas personalizadas en la barra de estado
  • Un Activity Manager que gestiona el ciclo de vida de las aplicaciones y proporciona un backstack común de navegación.

Librerias

Androis incluye un conjunto de librerias C/C++ utilizadas por varios componentes del sistema Android. Estas capacidades son ofrecidas a las programadores a través del Android application framework. Algunos de las core librerias son las siguientes:

  • Libreria C de sistema – una implementación derivada del BSD de la libreria estandar de C (libc), tuneada para dispositivos embebidos basados en Linux.
  • Libreria multimedia – basadas en el PacketVideo’s OpenCORE; las librerias que soportan reproducción y grabación de muchos formatos populares de audio y video, tales como archivos de imagenes estáticos, incluyendo MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG.
  • Surface Manager  – que gestiona el acceso al subsistema de la pantalla y a capas de gráficas 2D y 3D desde multiples aplicaciones.
  • LibWebCore – un motor de navegador web moderno que sirve tanto para el navegador dle Android como para el visor web embebido.
  • SGL – el motor de gráficos 2D subyacente
  • 3D librerias – una implementación basada en OpenGL ES 1.0 APIs; las librerias utilizando o aceleración 3D hardware (cuando está disponible) o el altamente optimizado rasterizador 3D software incluido.
  • FreeType – renderizado de fuentes bitmap y vectoriales.
  • SQLite – un motor de BBDD relacional potente y ligero disponible para todas las aplicaciones.

Android Runtime

Android incluye un conjunto de librerias core que proporcionan la mayoria de la funcionalidad disponible de las librerias core del lenguaje de programación Java.

Todas las aplicaciones Android se ejecutan en su propio proceso, con su propia instancia de la máquina virtual Dalvik.Dalvik ha sido escrito de forma que pueda ejecutar varias VM de forma eficiente. La Dalvik VM ejecuta ficheros en el formato ejecutable de Dalvik (.dex) que está optimizada para que consuma lo minimo de memoria posible. La VM esta basada en registros, y ejecuta clases copiladas por un compilador de Java que ha sido transformado al formato .dex por la herramienta “dx” (incluida).

La Dalvik VM esta montado sobre un kernel de Linux para la funcionalidad subyacente tal como threading y gestión de la memoria a bajo nivel.

Kernel de Linux

Android se monta encima de una versión 2.6 de Linux para los servicios core del sistema , gestión de memoria , gestión de procesos , pilas de red y modelo de drivers. El kernel también actua como una capa de abstracción entre el hardwar ey el resto de software de aplicaciones que están por encima.