Androidjdc Trabajo
Androidjdc Trabajo
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.
Una plataforma informática es un sistema que sirve como base para hacer funcionar
determinados módulos de hardware o de software con los que es compatible. Dicho sistema
está definido por un estándar alrededor del cual se determina una arquitectura de hardware
y una plataforma de software (incluyendo entornos de aplicaciones). Al definir plataformas
se establecen los tipos de arquitectura, sistema operativo, lenguaje de programación o
interfaz de usuario compatibles.
Una plataforma de desarrollo es el entorno de software común en el cual se desenvuelve la
programación de un grupo definido de aplicaciones. Comúnmente se encuentra relacionada
directamente a un sistema operativo; sin embargo, es posible encontrarla ligada a una familia
de lenguajes de programación o a una interfaz de programación de aplicaciones API 1.
También funciona como sistema plataforma o multiusuario.
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.
Plataforma de Desarrollo Java
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C+
+.
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.
Tradicionalmente, los dispositivos móviles no han tenido, ni tienen tanta potencia como
los
computadores Pc o Laptops. Por ello, se creó una versión de Java con librerías limitadas
denominada Java ME, diferenciándola de Java SE, que es la versión completa.
Orientado a objetos
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).
¿Qué es Android?
Breve Historia
Figura 3:
TMobile G1
(Dream)
Características de Android
• Navegador Web.
Ver
figura 4.
◦ Sobre el entorno de ejecución Android Runtime (o conocido por sus siglas ART).
• Servicios del Sistema Android: Casi todas las funcionalidades en el API del
Framework se comunicarán con algún servicio (Service) del sistema para acceder al
hardware implicado. Cada servicio se divide en componentes enfocados en
funcionalidades. Los servicios se agrupan en:
◦ System: Incluye gestores de ventanas, de notificaciones, etc.
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.
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
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
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é 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.
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.
Se verifican y optimizan las clases del archivo DEX cargando las clases en la
máquina virtual y ejecutándolas. En caso de que algo falle, no se verifica ni optimiza.
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:
• 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.
• Al utilizar sólo memoria RAM se puede paginar (Dalvik usa memoria Caché no paginable).
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).
Por tanto, para trabajar con ROM cocinadas es mejor que hayan sido “Deodexadas”.
¿Qué es Java exactamente: un lenguaje, una máquina virtual, …? ¿Es Java libre? ¿Dónde
entra Android en todo esto? ¿Android es Java? ¿Funciona una aplicación Java tal cual en
Android?
¿Android es libre?
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.
sea el sistema operativo de varios tipos de dispositivos más.
Se muestra la estructura de este sistema operativo y cada una de las partes que lo
conforman.
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 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.
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
Conclusiones
• Portabilidad asegurada.
Referencias Bibliográficas
Android
Comunidad de desarrolladores I (proyectos open
source) http://www.codeproject.com/
Comunidad de
desarrolladores II
http://stackoverflow.com/
Curso de programación
Android
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.