SISTEMA OPERATIVO ANDROID - Marco teórico
Introducción
Desde que en 1983 apareció el primer teléfono móvil (el Motorola DynaTAC) hasta el día de hoy la telefonía móvil ha cambiado mucho. El móvil ha pasado de ser una simple herramienta para hacer llamadas, a sofisticados dispositivos informatizados que incorporan cámara fotográfica, agenda, acceso a Internet, reproducción de video e incluso GPS y reproductor mp3, entre otros, y cada día nos sorprenden nuevas tecnologías que se van introduciendo como por ejemplo la Realidad Aumentada. Y es que el desarrollo tanto de hardware como de software para móviles se hace día a día más interesante, puesto que es un mercado que a pesar de tener una cantidad de usuarios antes nunca conocida (en el 2010 se habla de más de 5000 millones de móviles para 6500 millones de personas en el mundo) sigue en auge. Los motivos son la propagación de la cobertura, el abaratamiento de los dispositivos y el cambio de la sociedad tanto como el del modo de comunicación. Como dispositivo informático, el teléfono móvil requiere un sistema operativo. Algunos de esos sistemas son iPhone OS, Windows Mobile, Symbian, MeeGo, BlackBerry OS y Android.
Android es un sistema operativo para dispositivos móviles basado en un núcleo (kernel) de Linux, de código abierto, que permite programar aplicaciones de una forma muy sencilla en un lenguaje de programación muy conocido como es Java, proporcionando todas las interfaces necesarias para acceder a las funciones del teléfono (como el GPS, llamadas, agenda, etc.).
Esta sencillez, junto a la existencia de herramientas de programación gratuitas, hace que una de las cosas más importantes de este sistema operativo sea la cantidad de aplicaciones disponibles, que extienden casi sin límites la experiencia del usuario.
La estructura de este sistema operativo se compone de aplicaciones orientadas a objetos que se ejecutan en un framework Java a través de una máquina virtual (Dalvik, la cual fue especialmente preparada teniendo en cuenta la duración de las baterías y las limitaciones de memoria) con compilación en tiempo de ejecución.
En octubre de 2003 se crea Android Inc, en Palo Alto, California. La empresa se formó con el objetivo de “desarrollar dispositivos móviles inteligentes que sean más conscientes de la ubicación y preferencias de sus propietarios” según palabras de Andy Rubin, uno de sus creadores. En julio de 2005, Google compra Android Inc. y entonces empezaron a trascender rumores acerca de que Google estaba planeando construir su propio teléfono móvil libre y hasta gratis, enfocándose en ganancias de publicidad en las búsquedas de las personas para mover un poco el statu quo del mercado móvil. Obviamente, esos rumores de un móvil gratis fueron falsos pero al final Android resultó ser algo mucho más interesante y revolucionario: un sistema operativo móvil open source propulsado nada más y nada menos que por Google. Android se inició oficialmente el día 22 de octubre de 2008 en Estados Unidos, cuando fue lanzado el primer teléfono con Android a bordo, el G1 de T-Mobile, que tenía un procesador a 528Mhz, 256MB de ROM y 192MB de RAM, su pantalla era de 3,2 pulgadas y 320×480 píxeles, cámara de 3,2 MegaPíxeles, teclado QWERTY completo de 5 filas, trackball, Bluetooth 2.0, Wi-Fi 802.11 b/g, GPS, todo ello en unas medidas de 117.7×55.7×17.1mm y un peso de 158 gramos.
Versiones
El historial de versiones del sistema operativo Android se inició con el lanzamiento de Android beta en noviembre del 2007. La primera versión comercial, Android 1.0, fue lanzada en septiembre del 2008. Las versiones de Android reciben el nombre de postres en inglés. En cada versión el postre elegido empieza por una letra distinta siguiendo un orden alfabético.
Android ha visto numerosas actualizaciones desde su liberación inicial. Estas actualizaciones al sistema operativo base típicamente arreglan bugs (fallos) y agregan nuevas funciones.
| Versión | Nombre | Fecha de lanzamiento | Versión de Linux |
| beta | - | 5 de noviembre de 2007 | |
| 1.0 | Apple Pie | 23 de septiembre de 2008 | |
| 1.1 | Banana Bread | 9 de febrero de 2009 | |
| 1.5 | Cup Cake | 30 de abril de 2009 | 2.6.27 |
| 1.6 | Donut | 15 de septiembre de 2009 | 2.6.29 |
| 2.0 | Eclair | 26 de octubre de 2009 | 2.6.29 |
| 2.2 | Froyo | 20 de mayo de 2010 | 2.6.32 |
| 2.3 | Gingerbread | 6 de diciembre de 2010 | 2.6.35 |
| 3.0 | Honeycomb | 22 de febrero de 2011 | 2.6.36 |
| 4.0 | Ice Cream Sandwich | 19 de octubre de 2011 | 3.0.1 |
| 4.1 | Jelly Bean | 9 de julio de 2012 | 3.0.31 |
| 4.4 | KitKat | 31 de octubre de 2013 | |
| 5.0 | Lollipop | 3 de noviembre de 2014 | |
| 6.0 | Marshmallow | 5 de octubre de 2015 |
Uno de los problemas más grandes a los que se enfrenta cualquier desarrollador de aplicaciones para Android es la fragmentación, provocada por las diferentes versiones de Android y la gran variedad de dispositivos que se pueden encontrar en cuanto a procesadores, resoluciones de pantalla, etc., lo que implica dedicarle un mayor tiempo a la creación y desarrollo de aplicaciones. La siguiente tabla está basada en el número de dispositivos con Android que han tenido acceso a Google Play, durante el mes de febrero de 2013. Se observa que casi la mitad de los dispositivos que circulan poseen la versión 2.3 (Gingerbread) seguido por la versión 4.0 (Ice Cream Sandwich) con casi el 30%.
| Versión | Nombre | API | Distribución |
| 1.6 | Donut | 4 | 0.2% |
| 2.1 | Eclair | 7 | 2.2% |
| 2.2 | Froyo | 8 | 8.1% |
| 2.3 - 2.3.2 | Gingerbread | 9 | 0.2% |
| 2.3.3 - 2.3.7 | Gingerbread | 10 | 45.4% |
| 3.1 | Honeycomb | 12 | 0.3% |
| 3.2 | Honeycomb | 13 | 1.0% |
| 4.0.3 - 4.0.4 | Ice Cream Sandwich | 15 | 29.0% |
| 4.1 | Jelly Bean | 16 | 12.2% |
| 4.2 | Jelly Bean | 17 | 1.4% |
Arquitectura
La arquitectura interna de la plataforma Android, está básicamente formada por 4 componentes: aplicaciones, armazón de aplicaciones, librerías y kernel de linux, como se muestra en la siguiente gráfica:
– Aplicaciones
Este nivel contiene, tanto las incluidas por defecto de Android (cliente email, gestor de SMS, navegador, contactos y Market Android) como aquellas que el usuario vaya añadiendo posteriormente, ya sean de terceras empresas o de su propio desarrollo. Todas estas aplicaciones utilizan los servicios, las API y librerías de los niveles anteriores.
Aquí está también la aplicación principal del sistema: Inicio (Home), también llamada a veces lanzador (launcher), porque es la que permite ejecutar otras aplicaciones proporcionando la lista de aplicaciones instaladas y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso pequeñas aplicaciones incrustadas o widgets, que son también aplicaciones de esta capa.
Lo principal a tener en cuenta de esta arquitectura es que todas las aplicaciones, ya sean las nativas de Android, las que proporciona Google, las que incluye de serie el fabricante del teléfono o las que instala después el usuario utilizan el mismo marco de aplicación para acceder a los servicios que proporciona el sistema operativo. Esto implica dos cosas: que se pueden crear aplicaciones que usen los mismos recursos que usan las aplicaciones nativas (nada está reservado o inaccesible) y que es posible reemplazar cualquiera de las aplicaciones del teléfono por otra de nuestra elección. Este es el verdadero potencial de Android y lo que lo diferencia de su competencia: control total por parte del usuario del software que se ejecuta en su teléfono.
– Marco (framework) de aplicaciones
Representa fundamentalmente el conjunto de herramientas de desarrollo de cualquier aplicación. Toda aplicación que se desarrolle para Android, ya sean las propias del dispositivo, las desarrolladas por Google o terceras compañías, o incluso las que el propio usuario cree, utilizan el mismo conjunto de API y el mismo "framework", representado por este nivel.
Entre las API más importantes ubicadas aquí, se pueden encontrar las siguientes:
• Administrador de actividades (Activity Manager): conjunto de API’s que gestiona el ciclo de vida de las aplicaciones y la propia pila de actividades (una actividad o Activity se puede definir como una ventana que se muestra una sobre otra en la pantalla del dispositivo Android).
• Administrador de ventanas (Window Manager): gestiona las ventanas de las aplicaciones, creando superficies que pueden ser rellenadas por Activitys.
• Administrador de telefonía (Telephone Manager): incluye todas las API’s vinculadas a las funcionalidades propias del teléfono (llamadas, mensajes, etc.).
• Proveedor de contenidos (Content Provider): permite a cualquier aplicación compartir sus datos con las demás aplicaciones de Android. Por ejemplo, gracias a esta API la información de contactos, agenda, mensajes, etc. será accesible para otras aplicaciones.
• Vistas del sistema (View System): proporciona un gran número de elementos para poder construir interfaces de usuario (GUI), como listas, mosaicos, botones, casillas de verificación (check-boxes), tamaño de ventanas, control de las interfaces mediante teclado, etc. Incluye también algunas vistas estándar para las funcionalidades más frecuentes.
• Administrador de recursos (Resource Manager): proporciona acceso a todos los elementos propios de una aplicación que se incluyen directamente en el código: cadenas de texto traducidas a diferentes idiomas, imágenes, sonidos e incluso disposiciones de las vistas dentro de una actividad (layouts). Permite gestionar esos elementos fuera del código de la aplicación y proporcionar diferentes versiones en función del idioma del dispositivo o la resolución de pantalla que tenga, por ejemplo.
• Administrador de paquetes (Package Manager): las aplicaciones Android se distribuyen en paquetes (archivos .apk) que contienen tanto los archivos .dex como todos los recursos y archivos adicionales que necesite la aplicación, para facilitar su descarga e instalación. Esta biblioteca permite obtener información sobre los paquetes actualmente instalados en el dispositivo Android, además de gestionar la instalación de nuevos paquetes.
• Administrador de ubicaciones (Location Manager): posibilita a las aplicaciones la obtención de información de localización y posicionamiento y trabajar con mapas.
• Administrador de notificaciones (Notification Manager): Mediante éste, las aplicaciones, usando un mismo formato, comunican al usuario eventos que ocurran durante su ejecución: una llamada entrante, un mensaje recibido, conexión Wi-Fi disponible, ubicación en un punto determinado, etc. Si llevan asociada alguna acción, en Android denominada Intent, (por ejemplo, atender una llamada recibida) ésta se activa mediante un simple clic.
• Administrador de sensores (Sensor Manager): permite gestionar todos los sensores hardware disponibles en el dispositivo Android: acelerómetro, giroscopio, sensor de luminosidad, sensor de campo magnético, brújula, sensor de presión, sensor de proximidad, sensor de temperatura, etc.
– Librerías
La siguiente capa se corresponde con las librerías utilizadas por Android. Éstas han sido escritas utilizando C/C++ y proporcionan a Android la mayor parte de sus capacidades más características. Junto al núcleo basado en Linux, estas librerías constituyen el corazón de Android.
Entre las librerías más importantes ubicadas aquí, se pueden encontrar las siguientes:
• Libc: también conocida como “biblioteca estándar de C”, es una recopilación de archivos cabecera y bibliotecas con rutinas que implementan operaciones comunes, tales como las de entrada y salida o el manejo de cadenas.
• Surface Manager: Es la encargada de componer los diferentes elementos de navegación de pantalla. Gestiona también las ventanas pertenecientes a las distintas aplicaciones activas en cada momento.
• OpenGL/SL y SGL: Representan las librerías gráficas y, por tanto, sustentan la capacidad gráfica de Android. OpenGL/SL maneja gráficos en 3D y permite utilizar, en caso de que esté disponible en el propio dispositivo móvil, el hardware encargado de proporcionar gráficos 3D. Por otro lado, SGL proporciona gráficos en 2D, por lo que será la librería más habitualmente utilizada por la mayoría de las aplicaciones. Una característica importante de la capacidad gráfica de Android es que es posible desarrollar aplicaciones que combinen gráficos en 3D y 2D.
• Media Libraries: Proporciona todos los códecs necesarios para el contenido multimedia soportado en Android (video, audio, imágenes estáticas y animadas, etc.).
• FreeType: Permite trabajar de forma rápida y sencilla con distintos tipos de fuentes.
• SSL: Posibilita la utilización de dicho protocolo para establecer comunicaciones seguras.
• SQLite: Creación y gestión de bases de datos relacionales.
• WebKit: Provee un motor para las aplicaciones de tipo navegador y forma el núcleo del actual navegador incluido por defecto en la plataforma Android.
– Entorno de ejecución (Android Runtime)
Se sitúa al mismo nivel que las librerías de Android. Aunque se apoya en las bibliotecas mencionadas anteriormente, no se lo considera una capa en sí mismo, dado que también está formado por bibliotecas. En concreto, las bibliotecas esenciales de Android, que incluyen la mayoría de la funcionalidad de las bibliotecas habituales de Java así como otras específicas de Android. Lo constituyen las Core Libraries, que son librerías con multitud de clases Java y la máquina virtual Dalvik.
Las aplicaciones Android se ejecutan cada una en su propia instancia de la máquina virtual Dalvik, (una aplicación, un proceso, una instancia de Dalvik) evitando así interferencias entre ellas, y tienen acceso a todas las bibliotecas mencionadas antes y, a través de ellas, al hardware y al resto de recursos gestionados por el kernel.
– – Máquina Virtual Dalvik (DalvikVM):
Dalvik es el nombre de la máquina virtual que utiliza Android, la cual está basada en registros. Fue diseñada y escrita por "Dan Bornstein" y algunos otros ingenieros de Google. En ella podemos encontrar una gran diferencia con respecto a la máquina virtual Java (JVM), ya que la máquina virtual de Google no está basada en una pila. Este nombre fue elegido por Bornstein en honor a Dalvík, un pueblo de pescadores de Eyjafjörður (Islandia), donde vivieron algunos de sus antepasados.
DalvikVM es un intérprete que sólo ejecuta los archivos ejecutables con formato .dex (Dalvik Executable). Este formato está optimizado para el almacenamiento eficiente de la memoria, lo cual se consigue delegando en el kernel la gestión de hilos (multithreading), de memoria y de procesos.
La herramienta "dx" incluida en el SDK de Android permite transformar las clases compiladas (.class) por un compilador de lenguaje Java en formato .dex.
La DalvikVM también ha sido optimizada para correr múltiples instancias con muy baja huella.
Entre las principales diferencias con la máquina virtual de java tenemos las siguientes:
• En primer lugar, la máquina virtual de Dalvik toma los archivos generados por las clases Java y los combina en uno o más archivos ejecutables Dalvik (. dex), los cuales a su vez son comprimidos en un sólo archivo .apk (Android Package) en el dispositivo. De esta forma, reutiliza la información duplicada por múltiples archivos .class, reduciendo así la necesidad de espacio (sin comprimir) a la mitad de lo que ocuparía un archivo .jar.
• En segundo lugar, Google ha mejorado la recolección de basura en la máquina virtual de Dalvik, pero ha preferido omitir el just-in-time (JIT). La empresa justifica esta elección diciendo que muchas de las bibliotecas centrales de Android, incluyendo las bibliotecas de gráficos, están implementadas en C y C++. Del mismo modo, Android proporciona una biblioteca de C optimizada para acceder a la base de datos SQLite, pero esta biblioteca está encapsulada en un nivel superior del API de Java. Dado que la mayoría del código del núcleo se encuentra en C y C++, Google argumentó que el impacto de la compilación JIT no sería significativo.
• Por último, la máquina virtual de Dalvik utiliza un tipo diferente de montaje para la generación del código, en el que se utilizan los registros como las unidades primarias de almacenamiento de datos en lugar de la pila. Hay que señalar que el código ejecutable final de Android, como resultado de la máquina virtual de Dalvik, no se basa en el bytecode de Java, sino que se basa en los archivos .dex. Esto significa que no se puede ejecutar directamente el bytecode de Java, sino que hay que comenzar con los archivos .class de Java y luego convertirlos en archivos .dex.
– – Core Libraries:
También llamadas “Dalvik Libraries”, están formadas por un conjunto de librerías base para ofrecer funcionalidad elemental y de bajo nivel. Están escritas en C/C++. Se dividen en dos categorías:
• DalvikVM Specific Libraries: permiten solicitar o modificar información específica de la máquina virtual. El código que utiliza estas clases sólo es portable a través de sistemas basados en Dalvik. Los paquetes específicos DalvikVM incluyen dalvik.annotation, dalvik.bytecode y dalvik.system.
• Java programming language interoperability libraries: esta biblioteca proporciona un entorno familiar para programadores Java. Gran parte de la implementación de este código proviene de Apache Harmony. A veces se debe cambiar el código Harmony para que sea más adecuado a las limitaciones de CPU y memoria. Para delinear cambios específicos en Dalvik, se utilizan las palabras reservadas android-added para insertar nuevo código y android-changed para modificar código existente.
private static final long serialVersionUID = 1122892189L; // BEGIN android-added /** array sin elementos */ private static final Object[] emptyArray = new Object[0]; // END android-added private transient int firstIndex;Algunos de los paquetes que se incluyen en esta categoría son: java.lang, java.io, java.math, java.net, java.util, java.text, java.sql, etc.
– Kernel de Linux
Android utiliza el núcleo de Linux 2.6 como una capa de abstracción para el hardware disponible en los dispositivos móviles. Esta capa contiene los drivers necesarios para que cualquier componente hardware pueda ser utilizado mediante las llamadas correspondientes. Siempre que un fabricante incluye un nuevo elemento de hardware, lo primero que debe realizar para que pueda ser utilizado desde Android es crear las librerías de control o drivers necesarios dentro de este kernel de Linux embebido en el propio Android.
A través de este núcleo, Android aprovecha las ventajas de seguridad, gestión de memoria, procesos y de comunicaciones que ofrece Linux.
– Google Play Store
Google Play Store o sólo Google Play (antes llamado Android Market) es una tienda de software en línea desarrollada por Google para los dispositivos Android. También está preinstalada como aplicación en la mayoría de los dispositivos Android y permite a los usuarios buscar y descargar aplicaciones publicadas por desarrolladores terceros alojadas en el sitio.
Para los desarrolladores Google ofrece un servicio abierto para subir aplicaciones a través de tres pasos: registrarse como comerciante, subir y describir su contenido y luego publicarlo. Para registrarse como desarrollador y poder subir aplicaciones hay que pagar una cuota de registro (US$ 25,00) con tarjeta de crédito.
La dirección URL del sitio es https://play.google.com/store.