Desarrollo en Android

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:

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".

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.

android create project \
--target 1 \
--name HolaMundo \
--path holaMundo \
--activity Hola \
--package es.acsblog

En este caso es principalmente modificar el fichero "src/acs/hola/Hola.java" para que nos muestre un texto en pantalla.

holaMundo$ ant debug
Buildfile: build.xml
    [setup] Project Target: Android 1.6
...
     [echo] Debug Package: bin/HolaMundo-debug.apk

adb install proyectos/holaMundo/bin/HolaMundo-debug.apk

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 stripped

Para 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.

Introducción de NDK

JNI en Android

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.

DesarrolloAndroid (last edited 2010-07-25 20:57:24 by AlvaroDelCastillo)