Android JDC
Android JDC
net/publication/302112967
CITATIONS READS
0 26,092
1 author:
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Jorge Domínguez Chávez on 07 May 2016.
Presentación
Este trabajo tiene como objetivo presentar el funcionamiento y las posibilidades que ofrece
el sistema operativo Android en el desarrollo de sus aplicaciones con Java.
Comenzamos por un enfoque analítico de las características básicas de Android hasta llegar
a la realización de una aplicación que ejemplos de sus funciones principales. Además, pretendemos
estimular a aquellas personas interesadas a investigar sobre la programación para móviles.
Por medio de ejemplos prácticos revisamos las características más importantes del API de
Android, aplicado a smartphones o tablets, a su vez utilizamos el lenguaje Java, y herramientas de
desarrollo como Eclipse y el simulador, empleadas para crear rápidamente aplicaciones Android, así
como la aplicación de las distintas APIs disponibles a tal efecto.
El trabajo pretende mostrar, de una manera didáctica, el uso y potencial de esta plataforma
de desarrollo. Por esta razón, se dedica a describir los pasos necesarios para que un usuario con poca
experiencia sea capaz de desarrollar sus propias aplicaciones Android.
Mediante el marco de trabajo que proporcionan las plataformas se crea nuevo software y
que éste se ejecute sobre ellas. Ver Figura 1.
Comúnmente, las plataformas son mencionadas con las API (funciones y métodos que
ofrece una biblioteca para ser utilizada por otro software como una capa de abstracción). Una
plataforma software está formada por un conjunto completo de API. Por lo general, estas plataformas
son dependientes de los sistemas operativos aunque existen otras que no lo son.
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.
Lo que se conoce como plataforma Java, antes Plataforma Java 2, abarca una serie de
tecnologías basada en varios conceptos:
• Un lenguaje de programación para codificar aplicaciones.
• Un conjunto de librerías que facilitan el trabajo a los programadores. Las principales API de
Java se dividen en 3 grandes bloques:
◦ Java SE: Edición Estándar (Standard Edition), antes J2SE. Dirigida a aplicaciones de
escritorio, applets, …
◦ Java EE: Edición Empresa (Enterprise Edition), antes J2EE. Enfocada en dispositivos de
consumo, con recursos limitados.
◦ Java ME: Edición Micro (Micro Edition), antes J2ME. Útil para aplicaciones empresariales
(web, distribuidas).
• Unas herramientas (JDK) para generar las aplicaciones a partir del código fuente.
2 SUN significa Stanford University.
• Una máquina virtual para ejecutar una aplicación en cualquier computador (JVM).
Es, la portabilidad, lo que define a Java como tecnología: ejecutar una misma aplicación
en cualquier parte, en cualquier sistema operativo Windows, Linux, Mac, Unix, un teléfono móvil, un
navegador o ¡hasta un reproductor de Blu-ray!!
Esto es una cantidad increíble de equipos diferentes, ¿cómo consigue Java ser portable? El
secreto está en la máquina virtual. Ver figura 2.
Por supuesto, para ejecutar un programa java en un computador hace falta instalar
previamente una máquina virtual.
Orientado a objetos
La programación orientada a objetos (OO), se refiere a un método de programación y al
diseño del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es diseñar el
software de forma que los distintos tipos de datos que usen estén unidos a sus operaciones. Así, los
datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. Un objeto puede
verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). El principio
es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una
estructura de datos implica un cambio en el código que opera sobre los mismos, o viceversa. Esta
separación en objetos coherentes e independientes ofrece una base estable para el diseño de un sistema
software. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar, mejorando
como consecuencia su calidad y reduciendo el número de proyectos fallidos.
Sintaxis
La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de éste, que
combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java fue construido
desde el principio para ser orientado a objetos. Todo en Java es un objeto (con excepciones), y todo
reside en alguna clase (una clase es un prototipo a partir del cual se crean varios objetos).
3 Java Specification Request (JSR), las cuales son documentos formales que describen las especificaciones y tecnologías
propuestas para que sean añadidas a la plataforma Java.
una metodología para la amplia comunicación de oportunidades de reutilización. Algunas comunidades
de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores
para diseminar la información sobre el uso y versatilidad de objetos reutilizables y bibliotecas de
objetos.
¿Qué es Android?
Android es una plataforma de software y un sistema operativo para dispositivos móviles
basada en un núcleo4 de Linux, desarrollada por Google y más tarde por Open Handset Alliance. En
esta plataforma, los desarrolladores escriben código en Java a ejecutar en móviles mediante las librerías
Java desarrolladas por Google. También, pueden escribir aplicaciones en otros lenguajes, como C, C++,
Objetive C, para luego ser compiladas en código nativo ARM5 y ejecutarlas, aunque este proceso de
desarrollo no está soportado oficialmente por Google. La mayor parte de la plataforma de Android está
disponible bajo licencia de software libre de Apache y otras licencias de código abierto.
La principal finalidad desde el punto de vista del desarrollador es: Obtener el máximo
partido de la plataforma, que la aplicación sea portable, fácil de ejecutar y reutilizable, y que tenga
facilidad para integrar todo tipo de programas con las aplicaciones Web de Google. Google buscaba
competir en el segmento de los teléfonos inteligentes para posicionar sus servicios de búsqueda.
Breve Historia
En Julio de 2005, Google adquirió Android, Inc, una pequeña compañía emergente de
California. En esos momentos, la compañía se dedicaba a la creación de software para teléfonos
móviles. Una vez en Google, el equipo desarrolló un SO basado en Linux para dispositivos móviles.
Más adelante, Google adaptó su buscador y sus aplicaciones para su uso en móviles.
En septiembre del 2007, Google tenía varias patentes de aplicaciones sobre el área de la
telefonía móvil. El 5 de noviembre del mismo año, se anunció la fundación de Open Handset Alliance
al mismo tiempo que la creación de la plataforma Android. En Noviembre del 2007 es lanzado por
primera vez Android Software Development Kit, y casi un año después (Agosto 2008) aparece Android
0.9 SDK en versión beta. Pasado un mes Google lanza la versión Android 1.0 (Release 1). Open
Handset Alliance está formada por un consorcio de 34 compañías de hardware, software y
comunicaciones, entre las cuales se incluyen Google, HTC, Intel, Samsung y Motorola entre otras,
dedicadas a investigar estándares abiertos para dispositivos móviles, liberaron en 2008 su sistema
operativo Android. Su núcleo estaba basado en Linux y utilizaba muchos otros proyectos código
abierto como SQLite o Webkit.
Figura 3: T-Mobile
G1 (Dream)
Características de Android
• Amplia variedad de diseños (VGA, librerías de gráficos 2D y 3D…).
• Navegador Web.
• Las aplicaciones escritas en Java pueden ser compiladas y ejecutadas en la máquina virtual de
Dalvik, la cual es una especializada máquina virtual diseñada para uso en dispositivos móviles.
• Soporte de formatos (MPEG-4, H.264, MP3, AAC, OGG, AMR, JPEG, PNG, GIF).
• Soporte para hardware adicional (cámaras de video, pantallas táctiles, GPS, acelerómetros…).
La figura 4 representa la pila de la arquitectura Android desde la cima que es el nivel de las
aplicaciones, hasta la base del Hardware:
• Aplicaciones: cualquier tipo de aplicación Android. Es la capa que utiliza el usuario.
◦ Sobre el entorno de ejecución Android Runtime (o conocido por sus siglas ART).
Dalvik
Dalvik es la máquina virtual que ejecuta las aplicaciones Android. Pero no es una máquina
virtual Java. Es un software que simula ser una computadora, y que puede ejecutar programas y
órdenes cómo si fuese una computadora. Dalvik está dentro de nuestro dispositivo móvil, por lo que es
un equipo virtual dentro de otro.
6 NDK (Native Development Kit) facilita a los desarrolladores reutilizar código escrito en C/C++ introduciéndolo en las
aplicaciones a través de JNI (Java Native Interface).
Figura 5: Dalvik caché.
Las herramientas de Google compilan código Java en bytecode. Hasta aquí se comporta
como cualquier otro kit de desarrollo Java. Sin embargo, el bytecode, a su vez, es transformado en el
formato binario propio de la máquina Dalvik: .dex. La máquina virtual Dalvik tiene grandes diferencias
con HotSpot. Está optimizada para utilizar baja memoria (esto es posible a que es una máquina basada
en registros y no en pila) y está diseñada para ejecutar cada aplicación aislada una máquina virtual
diferente.
ART sólo está presente en Android 4.4 KitKat, así que de momento sólo en los Nexus 5 (
u Otros dispositivos que hayan instalado una ROM basada en AOSP con Android 4.4, pero aún muy
inestables) y en los próximos días el resto de los Nexus 7, Nexus 4 y 10. Más tarde y como viene
siendo habitual, Samsung y HTC serán los primeros fabricantes también en actualizar.
La máquina virtual Dalvik levantó suspicacias de Sun Microsystems por no utilizar una
plataforma Java estándar como era ME, SE o JavaFX. Los bytecodes de un programa Android no son
compatibles con el Java de las especificaciones, lo cual contribuye -según Sun- a la fragmentación del
mercado.
Como sabemos, las apps de Android se distribuyen en el formato .apk. Un apk contiene
clases de Java compiladas en un formato de bytecode conocido como DEX. El formato DEX es
independiente de arquitectura de procesador, por lo que para ser ejecutado necesita traducirse a “código
máquina” nativo para el procesador de nuestro dispositivo.
Con el compilador JIT de Dalvik, cada que iniciamos una app, la máquina virtual
dinámicamente traduce una parte del bytecode DEX a código máquina. Conforme continúa la ejecución
de la app, se compila más bytecode y se almacena en memoria cache. Es por ello que se dice que la app
está siendo compilada “justo a tiempo” conforme la usamos. En el caso de ART, las apps se compilan
desde que se instalan en el dispositivo, y ya se deja instalado el código máquina listo para ejecutarse y
sin necesidad de mayor compilación.
La gran mayoría de las apps para Dalvik deben funcionar en ART sin problema. Sin
embargo, hay algunas casos donde sí es mejor ajustar tu código para asegurar que tu app funcione bien
en ART.
Una práctica relativamente común en Android apps hasta ahora es que en el código se
incluyan llamadas explícitas al recolector de basura por medio de System.gc(). Típicamente esto se
hace para evitar ocurrencias de GC_FOR_ALLOC (cuando el sistema se queda sin memoria y llama de
manera forzada al recolector de basura en un momento que puede no ser el ideal). En ART, debido a las
mejoras en el sistema de recolección de basura, ya no será necesario estar haciendo llamadas explícitas
a System.gc().
Desde el código de tu app detectas si se está ejecutando sobre Dalvik o ART, checando el
valor deSystem.getProperty(“java.vm.version”). Si el valor es 2.0.0 o mayor, entonces la app se está
ejecutando en ART.
Figura 6: Vida de una APK.
ART es más estricto que Dalvik en la verificación de código. El código producido con el
SDK de Android no debería tener problema, pero sí puede ser que herramientas terceras generen código
que ART no acepte. Por ejemplo, esto podría ser el caso con herramientas para ofuscación de código.
Los proveedores terceros están ajustando sus herramientas para asegurar que sean compatibles con
ART así que la recomendación en ese sentido es actualizar tus herramientas a la versión más reciente.
Un aspecto positivo es que será más fácil rastrear errores de tipo NullPointerException, ya
que ART dará información sobre cuál fue el método que el código intentó acceder.
Bytecode
En programación en general, el bytecode es el resultado de realizar el trabajo de procesar el
código fuente (el código programado) y optimizarlo. Como resultado, se obtiene el archivo llamado
bytecode. El cual es portable entre arquitecturas. La máquina virtual es la encargada compilar, en
tiempo de ejecución, a código máquina del sistema donde se despliega. Lo que resulta más rápido que
realizar todo el trabajo desde el código fuente, pues se ha realizado de antemano el trabajo.
A continuación, explicamos los pasos de la figura 7, por herramienta utilizada, las cuales
encontramos como ejecutables en la carpeta de SDK de Android y se usa el compilador de Java. Este
proceso es automático:
• aapt (Herramienta de empaquetado de activos Android, The Android Asset Packaging Tool):
Compila el archivo “AndroidManiest.xml” y los archivos XML de las Activities. Además,
genera el archivo “R.java” para referenciar los recursos desde el código Java.
• Aidl (Lenguaje para definir interfaces Android, Android Interface Definition Language):
Convierte los interfaces “.aidl” (interfaces para comunicar servicios mediante la comunicación
entre procesos, IPC) en interfaces Java.
• Compilador Java: toma el código Java, incluidos los archivos “R.java”, los interfaces de“.aidl”
y los compila en archivos “.class”.
• dex: Convierte los archivos “.class” en archivos bytecode DEX. Además, cualquier biblioteca
importada, así como otros archivos “.class” incluidos son convertidos a archivos DEX,
incluyendo las clases de nuestro código en un único archivo DEX. Para optimizar el espacio, los
Strings duplicados y otras constantes repetidas se introducen una única vez en el archivo DEX.
• dexopt: Sólo se aplica si se ejecuta en el emulador desde Android Studio. Convierte el archivo
DEX al archivo compilado ODEX mediante una compilación AOT (Ahead Of Time, Antes de
Tiempo) para que funcione única y exclusivamente en el emulador. En este caso, ODEX no se
empaqueta dentro del APK, sino que adjunta al APK.
• apkbuilder: imágenes, vídeos, y otros que no se compilan, junto con los archivos DEX, son
empaquetados en el archivo APK.
• Jarsigner: Firmamos el archivos APK con una clave de desarrollo (debug) o de lanzamiento
(release). El archivo APK resultante ya se puede instalar en cualquier dispositivo Android.
• Zipalign: Si el archivo APK se ha firmado con la clave de lanzamiento (release), el archivo se
debe alinear (la alineación de la estructura de datos consiste en desplazar los bits un múltiplo
del tamaño de la palabra que pueda controlar el procesador, y rellenar lo que falte; en Android
normalmente son 4 bytes). El archivo APK alineado resultante aumenta el rendimiento del
sistema de memoria debido a la forma en que el procesador gestiona la memoria en un
dispositivo.
Archivo APK
El archivo APK contiene el resultado del anterior proceso. Los archivos son:
• DEX: contiene los archivos Java, como nuestros archivos Java o el R.java
Falta el archivo ELF para ART, que no se ha obtenido en el anterior proceso. La conversión
de un archivo DEX a un archivo ELF se realiza mediante la herramienta “dex2oat”. Ésta herramienta
se encuentra dentro del sistema operativo Android. En cuanto instalemos el archivo APK en el sistema
operativo Android, la herramienta “dex2oat” toma el archivo DEX y crea el archivo ELF.
Dalvik aplica la herramienta “dexopt” sobre las partes del archivo DEX que se estén
usando, para generar el archivo ODEX en el momento de la ejecución por la máquina virtual Dalvik.
• Sé intercambia el orden de los bits según el formato Endianness, de cómo se almacenan los
datos y la arquitectura con la que funciona el procesador (es decir, de cómo se almacenen los
datos en big-endian que es el orden natural, little-endian que es del menos relevante al más
relevante, y middle-endian que es el soporte para los dos formatos anteriores).
• Sé crean estructuras de datos simples.
• Sé enlazan las funciones de las bibliotecas inline (se insertan una copia del código fuente de la
función en la sección del código donde sea llamada).
• Los objetos de clases vacías serán cortocircuitadas (short-circuited, referido en programación a
que no se evaluará si no es necesario).
• Si trabajamos con ART, cuando se instala la aplicación se genera el archivo ELF desde el DEX.
• Si trabajamos con Dalvik, puede crearse el archivo ODEX al instalarse, aunque no será
completo.
Una curiosidad que seguro que has notado cuando se actualiza tu dispositivo Android. Al
terminar la actualización se tienen que actualizar las aplicaciones instaladas. Esta actualización es la
compilación de los bytecodes DEX dentro de tu dispositivo.
Supongamos que tienes un móvil con una aplicación. De esta aplicación sólo está el
bytecode DEX dentro del archivo APK. Cuando presionas el icono para ejecutar la aplicación por
primera vez, se realiza la compilación de la aplicación en tu dispositivo por la máquina virtual Dalvik,
lo que convierte el bytecode a código máquina (archivo ODEX). Luego, el código es entendido por el
Hardware. En este momento podemos decir que la aplicación funciona.
Evidentemente este proceso de compilación JIT consume tiempo ; por lo que no se compila
cada vez que se ejecuta el mismo programa. Sino que se compila el bytecode DEX y se cachea el
código máquina resultante en el archivo archivo ODEX. En siguientes ejecuciones de la misma
aplicación se reutiliza el código ya cacheado del archivo ODEX.
La herramienta “dexopt” genera archivos ODEX desde archivos DEX en los siguientes
casos (La letra precedente a la descripción corresponde en la figura 9 con la letra de cada aplicación):
Los archivos ODEX tienen un nombre derivado de la ruta donde se encuentra el archivo
DEX. Sólo tiene permiso para leer –pero no modificar o eliminar- los archivos DEX tanto de nuestra
aplicación como de otras. Las aplicaciones sólo tienen permiso para acceder a su archivo ODEX.
La creación ODEX desde DEX, en los casos donde “Dalvik compila con JIT el archivo
ODEX” y “el instalador de aplicaciones genera el archivo ODEX”, sigue los siguientes pasos:
3º El archivo se asigna a memoria para acceder a ella fácilmente y se ajusta para el sistema
operativo. Incluye el intercambio de bytes, la reordenación de bytes, comprobaciones estructurales
básicas (como asegurar que los offsets y los índices de los archivos estén dentro de rangos válidos), sin
cambiar nada significativo del archivo DEX.
• Para instancias de campos get/put, remplaza el índice del campo por un byte offset. También,
fusiona las variante boolean / byte / char / short en una sola forma de 32 bits.
• Remplaza las llamadas de alto volumen, como String.length(), con remplazos en línea (inline).
Salta la llamada a métodos sobrecargados, directamente se intercambia desde el intérprete a la
implementación nativa.
• Elimina los métodos vacíos.
• Si la superclase (en herencia es la clase padre) pertenece a un archivo DEX diferente, y el otro
DEX con la clase padre se actualiza, habrá que asegurar que nuestros índices y offsets se
actualicen también.
• Al utilizar sólo memoria RAM se puede paginar (Dalvik usa memoria Caché no paginable).
Como añadido, ART mantiene la retro-compatibilidad con Dalvik al utilizar sus mismos
bytecode “.dex”. Pero ART no utiliza “.odex”, los sustituye por los ejecutables “ELF”.
Seguro que habrás visto que las palabras “Odex” y “Deodex” se parecen al archivo ODEX.
Como vimos anteriormente, ODEX es el bytecode que optimiza el inicio de las aplicaciones para cada
dispositivo (es el DEX optimizado para la máquina virtual Dalvik).
He utilizado “Deodex” como verbo, pues es la acción. Tenemos tipos de acciones con la
conversión de los bytecode:
• Odex (Odexar): Es lo que ya vimos (lo “normal”), lo que se hace al crear desde el archivo DEX
el archivo ODEX mediante la herramienta “dexopt”.
• Deodex (Deodexar): Implica elegir un archivo APK, buscar su archivo ODEX en la memoria
caché, e introducirlo dentro de dicho APK. Esto agiliza la programación, al modificar los
archivos APK sin preocuparse de que el ODEX no esté actualizado por estar en la memoria
caché; asegurando así la integridad de la aplicación. Puede “deodexarse” toda una ROM entera,
lo que implica la “deodexación” de todos sus archivos APK instalados.
Por tanto, para trabajar con ROM cocinadas es mejor que hayan sido “Deodexadas”.
Android y Java son dos plataformas diferentes que comparten lenguaje, así como las
bibliotecas básicas de programación.
En cualquier caso, hoy más que nunca, este lenguaje de programación sigue presente en
prácticamente todos los entornos, desde el escritorio, a la web y a los dispositivos móviles, en
cualquiera de sus variantes.
Introducción a Android
Hoy, los teléfonos inteligentes o smartphone son dispositivos multiuso. Buscamos
información, jugar, navegamos por Internet, pasamos el rato en las redes sociales o trabajar se han
convertido en tareas habituales para quienes han hecho del teléfono inteligente uno de sus compañeros
preferidos. Llegar a este nuevo tipo de consumidores desde la pantalla del smartphone con nuevas
formas de comunicación es todo un desafío -y un caudal de oportunidades- para las marcas. Este es un
tiempo único para el mundo de los celulares, en particular de los teléfonos inteligentes (Smartphones).
Este tipo de dispositivos nunca han sido tan populares. El sistema operativo Android ha expandido su
mercado no solamente a este tipo de teléfonos, sino también a tabletas y televisores.
Con más de medio millón de aplicaciones para Android publicadas en Google Play, es un
hecho que este es un gran momento para participar de este mercado y de la creación de aplicaciones
Android para un mercado en crecimiento.
En este curso estudiamos cómo desarrollar aplicaciones para el sistema operativo Android
utilizando el lenguaje de programación Java, por lo que un conocimiento básico de este lenguaje es
necesario para poder crear de manera exitosa estas aplicaciones.
Arquitectura de Android
la figura 11 muestra la estructura de este sistema operativo y cada una de las partes que lo
conforman.
Anteriormente los programadores de bajo nivel con lenguajes como C o C++ requerían
entender las características del Hardware sobre el que programaban, ya sea de un dispositivo en
específico o un conjunto de dispositivos del mismo fabricante. Además el programador, en muchas
ocasiones, estaba obligado a aprender ciertas APIs del fabricante para poder desarrollar sus
aplicaciones, generando un código muy complejo de mantener y desarrollar, y en muchas ocasiones las
aplicaciones ya no se les daba continuidad.
La diversidad de fabricantes de dispositivos móviles conlleva como reto contar con una
plataforma estándar, código de fuente abierta (open source), robusta, segura, entre otras características
para el desarrollo de una aplicaciones móviles. Dichas aplicaciones deben poder ser ejecutadas en
cualquier dispositivo móvil o tableta sin tener que volver a programar para un fabricante en específico.
Con la popularidad de Java y su Máquina Virtual (JVM) sabemos que es posible abstraer
los detalles del hardware para el dispositivo que estamos desarrollando, y así el programador es libre de
crear el programa una vez y ejecutarlo sobre cualquier dispositivo que tenga una JVM.
Con esto en mente, y con la experiencia previa de los dispositivos móviles, se creó el
sistema operativo Android.
Dalvik es la máquina virtual que utiliza la plataforma para dispositivos móviles Android.
Dalvik ha sido diseñada por Dan Bornstein con contribuciones de otros ingenieros de Google.
DVM sacrifica la portabilidad que caracteriza a Java para poder crear aplicaciones con un
mejor rendimiento y menor consumo de energía, estas dos características son extremadamente
importantes en dispositivos móviles, debido a que la capacidad de las baterías en estos dispositivos es
limitada.
DVM está optimizada para requerir poca memoria y está diseñada para permitir ejecutar
varias instancias de la máquina virtual simultáneamente, delegando en el sistema operativo subyacente
el soporte de aislamiento de procesos, gestión de memoria e hilos.
A menudo Dalvik es nombrada como una máquina virtual Java, pero esto no es
estrictamente correcto, ya que el bytecode con el que opera no es Java bytecode. Sin embargo, la
herramienta dx incluida en el SDK de Android transforma los archivos Class de Java compilados por
un compilador Java al formato de archivos Dex.
El nombre de Dalvik fue elegido por Bornstein en honor a Dalvik, un pueblo de Eyjajorour,
Islandia, donde vivieron antepasados suyos. En la última versión del sistema operativo Android
(Lollipop), Dalvik fue sustituida por ART.
Android explota los recursos del dispositivo móvil sin las restricciones que normalmente
encontramos con otros sistemas operativos móviles como iOS de Apple o Windows Phone de
Microsoft. Android ofrece nuevas posibilidades debido a que su ambiente de desarrollo está basado en
software libre, desde el Kernel basado en Linux, hasta las API’s para el desarrollo de las aplicaciones.
El hardware es accesible a cualquier aplicación Android a través de una serie de API’s que son
ejecutadas en la máquina virtual.
En Android tanto las aplicaciones de terceros como las aplicaciones nativas son
desarrolladas utilizando la misma API y son ejecutadas en el mismo ambiente de ejecución. De esta
manera el usuario final es libre de reemplazar cualquier aplicación Nativa con aplicaciones de terceros,
ofreciendo una flexibilidad y libertad única a los usuarios de dispositivos móviles que cuentan con la
plataforma Android.
Android Inc. fue adquirida por Google en 2005, y se comenzó el desarrollo del primer
sistema operativo libre para ser utilizado por defecto en los teléfonos móviles, y se ha extendido al día
de hoy a tablets, televisores y muchos tipos de dispositivos más. Una de las principales ventajas de
Android, es que se diseño con el objetivo de que las aplicaciones pudieran interactuar entre ellas,
permitiendo reutilizar realmente los servicios, datos e interfaces (UI).
La versión 2.3 significó una mejora en todos los servicios ya disponibles, tales como el uso
de la cámara, conectividad WiFi, soporte OpenGL ES 2.0, mejoras en el respaldo de datos y
aplicaciones, video chat, entre muchas mejoras que hacen al día de hoy esta versión sea la más utilizada
en los teléfonos.
La versión 3.0 se enfocó en los dispositivos Tablets, con soporte para pantallas más
grandes. Se introdujo el concepto de fragmentos, así como capacidades similares a las aplicaciones de
escritorio, tales como Action Bar, Drag-and-drop, mejoras en los widgets home-screen, así como más
controles IU y layouts para el soporte de estos nuevos dispositivos.
La versión 4.0 surgió para unificar las versión 2.x y 3.x para permitir un único desarrollo
para teléfonos y tablets. Esta unificación permite aprovechar las nuevas características que estaban
disponibles sólo para las tabletas, e incrementar la experiencia de usuario en los teléfonos con versión
4.0
Debido a que la versión Android 2.3.x está instalada en una gran cantidad teléfonos, es
necesario considerar cual será la versión mínima que soportaremos para el desarrollo de nuestras
aplicaciones. Por ello, en este curso nos enfocaremos en aprender muchas de las características que
aplican a la mayoría de las versiones, y estudiaremos las más relevantes de la versión 4 de Android.
Características
Uno de los mayores éxitos de Android radica en su API de desarrollo. Android crea
aplicaciones que son parte del dispositivo como lo es cualquier aplicación nativa ya instalada (out-of-
the-box). A continuación mencionaremos algunas de las características más importantes del API de
Android:
• Acceso a Hardware, incluyendo Cámara, GPS y Sensores: Android incluye API’s que
simplifican el desarrollo sin importar el hardware sobre el que se está trabajando. Esto asegura
que no necesitamos crear implementaciones específicas para distintos dispositivos, así que
podemos crear aplicaciones que deben trabajar según lo esperado en cualquier dispositivo que
tenga una versión compatible de Android.
• Transferencia de Datos con WiFi, BlueTooth y NFC: Android ofrece soporte muy completo para
transferir datos entre dispositivos, incluyendo Bluetooth, Wi-Fi y Android Beam. Estas
tecnologías permiten compartir datos entre dispositivos, dependiendo del hardware disponible
en el dispositivo utilizado.
• Mapas y Geolocalización: El manejo de mapas embebido con el que cuenta Android crea
aplicaciones que de manera programática pueden manipular los mapas de Google Maps.
Además, la integración de un GPS y los servicios de localización de Google para determinar la
ubicación actual del dispositivo, permite combinar posicionamiento con mapas.
• Servicios en Segundo Plano (Background Services): Android soporta aplicaciones y servicios
diseñados para ser ejecutados en segundo plano, mientras nuestra aplicación no está activa,
debido a que solamente una aplicación puede estar visible a la vez.
• Base de Datos SQLite: El almacenamiento y la recuperación de información de manera rápida y
eficiente es básica para dispositivos con capacidad limitada. Android utiliza SQLite para
cumplir con este objetivo. Nuestras aplicaciones pueden aprovechar esta base de datos
relacional para almacenar y recuperar información de manera segura y eficiente.
• Compartición de Datos y Comunicación entre Aplicaciones: Android incluye técnicas para
compartir información entre las distintas aplicaciones, tales como: Intents y Content Providers.
• Soporte para gráficos 2D y 3D: Android provee librerías gráficas para dibujos 2D y 3D con
OpenGL. Además, Android provee soporte para imágenes, video, audio, incluyendo video en
formato mpeg4 y h.264.
• Optimización de Memoria y Administración de Procesos: Android utiliza su propia máquina
virtual para la administración de la memoria. Android asegura que una aplicación responda en
un tiempo determinado, de lo contrario la detiene y la puede eliminar en caso de ser necesario,
con el objetivo de liberar recursos. De esta manera Android controla el ciclo de vida de las
aplicaciones en un ambiente enfocado en hacer más eficiente el uso de memoria de los
dispositivos.
Conclusiones
Sabemos que existen muchas plataformas para desarrollos móviles, como Apple iOS,
Windows Phone, BlackBerry, Palm, Java Micro Edition, Linux Mobile (LiMo),Firefox OS, entre otros.
Sólo Android presenta características que lo hacen diferente. Es el primero que combina en una misma
solución las siguientes cualidades:
• Plataforma realmente abierta.
• Portabilidad asegurada.
Android ofrece una forma sencilla y novedosa de implementar potentes aplicaciones para
diferentes tipos de dispositivos.
Referencias Bibliográficas
Web oficial para desarrolladores Android
http://developer.android.com/index.html
Comunidad de desarrolladores I (proyectos open source)
http://www.codeproject.com/
Comunidad de desarrolladores II
http://stackoverflow.com/
http://www.sgoliver.net/
http://politube.upv.es
http://www.youtube.com/user/0utKast/videos?view=0
Android. Guía para desarrolladores. W. Frank Ableson, Robi Sen y Chris King.