Desarrollo en Android
Contents
Android es la plataforma para móviles impulsada por Google con licencia libre. El objetivo aquí es contar los pasos básicos para desarrollar aplicaciones para el móvil y para ello es necesario tener claros algunos conceptos.
Dentro del Android tenemos una serie de aplicaciones con las que el usuario lleva a cabo acciones. Estas aplicaciones están formadas por componentes reutilizables desde otras aplicaciones. Los posibles componentes que una aplicación puede tener son:
- Actividades (Activity): operaciones que tienen una interfaz gráfica.
- Servicios (Service): operaciones que no tienen interfaz.
- Receptores de mensajes de difusión (Broadcast receivers)
- Proveedores de Contenidos (Content Providers)
Para activar los componentes de una aplicación se usan los Intents (mensajes). Una aplicación en ejecución puede ir llevando al usuario por diferentes actividades, que pueden estar en otras aplicaciones. Este conjunto de componentes que constituyen la experiencia del usuario se llama tarea (task).
Las actividades dentro de una tarea están organizadas en pila (stack) de forma que cuando el usuario pulsa la tecla "atrás" se vuelve a la anterior actividad dentro de la pila de la tarea.
Ciclo de vida de la actividad
Una actividad puede estar en varios estados y debemos de cubrirlos bien en nuestra implementación para que cuando se pase de un estado a otro por medio del gestor de Android, nuestra actividad se comporte de la forma esperada.
Me he tenido que enfrentar a entender bien el ciclo de vida ya que cuando se rota la pantalla, se llama de forma automática a onCreate(), y cuando la aplicación deja de estar en primer plano, a onPause(), y cuando pasa de nuevo a primer plano, a onResume(). Es importante implementar bien estos métodos para ser capaz de hacer aplicaciones robustas y con comportamientos adecuados.
Desarrollo de aplicaciones en terminal
Al aprender un nuevo entorno de desarrollo, prefiero intentar hacer todo desde el terminal ya que te hace conocer las cosas a fondo. En Android es sencillo hacerlo, aunque para ser productivos, acabaremos utilizando Eclipse. Vamos con el paso a paso de la aplicación "Hola Mundo".
- Eliges tu plataforma de desarrollo y la instalas (1.6 en este ejemplo)
Creas una máquina virtual con el emulador de android:
android create avd --target 2 --name a16.avd tools/emulator -avd a16.avd
El emulador de Android es un entorno muy real: sobre qemu se emula el hardware de android y se ejecuta el sistema operativo android tal y como se haría en un móvil. Por ello puede ser un poco lento de iniciar.
- Creas tu proyecto de desarrollo de la aplicación android. Aquí lo principal es la plataforma para la que desarrollas. Con "android list" verás todas las plataformas disponibles.
android create project \ --target 1 \ --name HolaMundo \ --path holaMundo \ --activity Hola \ --package es.acsblog
- Desarrollas la aplicación
En este caso es principalmente modificar el fichero "src/acs/hola/Hola.java" para que nos muestre un texto en pantalla.
- Compilas la aplicación en modo "debug" para compilarla y firmarla en modo pruebas
holaMundo$ ant debug
Buildfile: build.xml
[setup] Project Target: Android 1.6
...
[echo] Debug Package: bin/HolaMundo-debug.apk- La instalas en el emulador de android
adb install proyectos/holaMundo/bin/HolaMundo-debug.apk
- Ejecutas tu aplicación desde el emulador de Android
Una vez completado el proceso, para reinstalar la aplicación lo mejor es borrarla desde Android con
Instalarla en un Android real es tan sencillo como meter el paquete de la aplicación en el disco "SD" y luego instalarla. El resultado será idéntico al del emulador salvo si utilizamos el GPS u otros dispositivos que no tengamos en el emulador.
Una vez que ya sabemos el proceso de realizar una aplicación nada mejor que ver demostraciones de todas la potencia que nos ofrecen las APIs de Android. Dentro del directorio "samples/ApiDemos" encontramos una gran cantidad de actividades que nos muestran las posibilidades de la plataforma.
Para entender el flujo de las aplicaciones en android la guía de estilo para UI nos muestra la forma recomendada de hacerlo.
Es básico poder deinstalar luego las aplicaciones para las pruebas. El comando "adb uninstall" recibe el paquete que queremos desinstalar, en este caso "es.acsblog". Otra forma de borrar la aplicación es a mano con: "adb shell rm /data/app/es.acsblog.apk".
Desarrollo rápido con App Inventor
Una aplicación que podría revolucionar el desarrollo de aplicaciones en Android es App Inventor. Aún no la he podido probar pero sin duda, es algo a tener en el radar.
Desarrollo de aplicaciones nativas en C
Para poder desarrollar aplicaciones en C, estas tienen que utilizar las librerías que estarán disponibles dentro de Android y se compiladas para la arquitectura adecuada, ARM.
El compilar para ARM lo tenemos del toolchain que se descarga junto con todo el código fuente de la plataforma Android. Se usará todo el entorno de la plataforma para enlazar con esas librerías.
agcc es un script en Perl que si tenemos la plataforma Android con el toolchain, y el compilador en el PATH, será ya capaz de configurar todo para realizar la compilación cruzada.
cat hola.c
#include <stdio.h>
main() {
printf("Hola\n");
}
./agcc hola.c -o hola
file hola
hola: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not strippedPara utilizar librerías que no vienen por defecto en el script "agcc" basta con editarlo y añadir lo que haga falta.
Luego copiamos el binario generado a Android. Para poder ponerlo en el sistema de ficheros es necesario remontarlo con permisos de escritura:
mount -o rw,remount -t rootfs /
en versiones recientes (2.1)
mount -o rw,remount -t rootfs rootfs /
Para compilar con algunas librerías de Android, como libbluetooth, he tenido que copiarla del móvil ya que dentro de Cupcake no se crea. Luego para usarla:
android-sdk-linux/tools/adb pull /system/lib/libbluetooth.so . ./agcc l2cap-client.c -o l2cap-client-arm -L. -lbluetooth
NDK: Native Development Kit
Es la forma recomendada de desarrollar aplicaciones nativas en C y C++ para Android.
JNI en Android
JNI Ejemplo Se recomienda desarrollar con el NDK.
OpenGL
Para entender como funciona todo el motor gráfico de Android vamos a jugar con aplicaciones OpenGL.
Tutoriales
Ejemplos para el master
En la sesión del Master de Software Libre sobre Android se van a realizar una serie de ejemplos para aprender a desarrollar en Android. Todo se hará desde el terminal.