lunes, 19 de noviembre de 2007

¿Qué es Android?

Documento original: What is Android?

¿Qué es Android?

[Título original: What is Android?]

Android es un software stack [falta link] para dispositivos móviles, que incluye un sistema operativo, middleware [falta link] y aplicaciones de usuario final. Este lanzamiento preliminar del Android SDK provee las herramientas y las "API"s necesarias para comenzar a desarrollar aplicaciones para la plataforma Android usando el lenguage de programación Java.

Principales características

[Título original: Features]

  • Provee el Android Application Framework [falta link] que facilita la reutilización y reemplazo de componentes.

  • Incluye la Dalvik, la cual es una Virtual Machine optimizada para dispositivos móviles.

  • Disponibilidad de un browser integrado con la plataforma, el cual está basado en WebKit.

  • Capacidades gráficas mejoradas a través de librerías gráficas 2D optimizadas y gráficos 3D basados en la especificación "OpenGL ES 1.0" (la aceleración del hardware es opcional).

  • Incluye SQLite para el almacenamiento estructurado de datos.

  • Soporte para multi media y sus formatos más comunes: audio, video, and fotografías (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).

  • Soporte para telefonía GSM (dependiente del hardware).

  • Bluetooth, EDGE, 3G y WiFi (dependiente del hardware).

  • "API"s de acceso a recursos de cámaras, GPS, brújula y acelerómetro (dependiente del hardware).

  • Un entorno de desarrollo que incluye un emulador de dispositivo, herramientas para depurar, perfilador de memoria y rendimiento, y un "plugin" para Eclipse.

  • Arquitectura de Android

    [Título original: Android Architecture]

    El siguiente diagrama muestra los principales componentes del sistema operativo de Android. Cada una de las secciones es descrita en detalle a continuación del gráfico.

    Figura:http://code.google.com/android/images/system-architecture.jpg

    Aplicaciones

    [Título original: Applications]

    Android será distribuido junto a un grupo de aplicaciones que incluyen: cliente de email, programas de SMS, calendario, mapas, browser, contactos y otras interesantes aplicaciones. En adelante, utilizaré el término Core Applications [falta link] para referirme a este conjunto de applicaciones. Todas las Core Applications [falta link] fueron escritas utilizando el lenguaje de programación Java.

    Estructura de las aplicaciones

    [Título original: Application Framework]

    Los desarrolladores tienen completo acceso a las "API"s que fueron usadas para construir las Core Applications [falta link]. La Android Application Architecture [falta link] está diseñada para simplificar la reutilización de componentes, esto gracias a que cualquier aplicación puede publicar sus capacidades y entonces otras aplicaciones pueden hacer uso de aquellas capacidades (todo sujeto a restricciones de seguridad impuestas por Android). Este mecanismo permite que cualquier componente pueda ser reemplazado a voluntad del usuario.

    Subyacente a todas las aplicaciones existe un conjunto de servicios y sistemas que incluyen:

  • Un conjunto rico y extensible de vistas (View) que pueden ser usados para construir una aplicación, incluyendo listas, matrices, casillas para entrada de texto, botones e incluso un browser.

  • Varios proveedores de contenidos (Content Provider) que proveen a las aplicaciones la capacidad para accesar datos desde otras aplicaciones (tales como Contacts) o compartir sus propios datos.

  • Un administrador de recurso (Resource Manager) que provee acceso a recursos tales como información regionalizada, gráficos y archivos de diseño.

  • Un administrador de notificaciones (Notification Manager) que provee a las aplicaciones la capacidad para desplegar, en la barra de estado mensajes de alerta personalizados.

  • Un administrador de actividades (Activity Manager) que administra el ciclo de vida de las aplicaciones y proveen un mecanismo de navegación entre las aplicaciones (Navigation Backstack [falta link]).

  • Para más detalles y un vistazo rápido a una aplicación, ver Desarrollo de un sencillo editor de texto.

    Librerías

    [Título original: Libraries]

    Android incluye un conjunto de librerías escritas en C/C++, las cuales son usadas por varios componentes del sistema Android. Estas capacidades son expuestas a los desarrolladores a través del Android Application Framework [falta link]. Las principales librerías son descritas a continuación:

  • System C library: es una implementación "BSD-derived" de la "standard C system library (libc)", que ha sido mejorada para ser incrustada en dispositivos basados en Linux.

  • Media Libraries: estas librerías permiten la reproducción y grabación de/en los formatos de audio, video y fotografía más populares. Incluye: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG. Estas librerías están basadas en "PacketVideo's OpenCORE".

  • Surface Manager: administra el acceso los subsistemas de pantalla y utilización de gráficos 2D y 3D desde múltiples aplicaciones.

  • LibWebCore: es un "web browser" que potencia tanto el "Android Browser" como las Web View.

  • SGL: el motor gráfico 2D subyacente al sistema.

  • 3D libraries: es una implementación basada en las "OpenGL ES 1.0 API"s. Estas librerías pueden usar tanto el hardware 3D de aceleración (si está disponible) o el "3D rasterizer" que es incluido en Android.

  • FreeType: es el "font rasterizer" para mapas de bits y vectores.

  • SQLite: es un poderoso y liviano motor de bases de datos relacionales que está disponible para todas las aplicaciones.

  • Entorno de ejecución de Android

    [Título original: Android Runtime]

    Android incluye un conjunto de librerías que proveen muchas de las funcionalidades disponible en las librerías del lenguaje de programación Java.

    Cada aplicación Android es ejecutada dentro de su propio proceso, dentro de su propia instancia de una Dalvik Virtual Machine. Dalvik ha sido diseñada de tal forma que el dispositivo puede correr múltiples Virtual Machines de manera eficiente. La Dalvik Virtual Machine ejecuta archivos en formato Dalvik Executable (.dex), los cuales han sido optimizados para optener el menor "memory footprint". La Virtual Machine es "register-based" y ejecuta archivos de clases compilados en un compilador Java que ha sido modificado para crear archivos en formato .dex con ayuda de la herramienta dx.

    La Dalvik Virtual Machine depende del Linux Kernel para todas las subyacentes funcionalidades, tales como "threading" and "low-level memory management".

    Kernel de Linux

    [Título original: Linux Kernel]

    Android depende de Linux version 2.6 para los "core system services" tales como securidad, administración de memoria, administración de procesos, "network stack", y "driver model". El Linux Kernel también actúa como una capa de abstación entre el hardware y el resto del software stack [falta link].