Robotium + ant

Standard

Robotium es una librería para automatizar tests de “caja-negra” en Android.

https://code.google.com/p/robotium/

Tendremos dos proyectos: el proyecto main y el proyecto test.

Primero desde el proyecto principal y desde la consola de comandos ejecutamos el comando:

android update main-project-name -p .

para crear el archivo build.xml. A continuación desde la carpeta del proyecto de test ejecutamos el comando:

android update test-project-name -p . -m PATH_TO_MAIN_PROJECT

donde después de -m debemos colocar la ruta al proyecto principal, por ejemplo: “../NotePad”, ruta que se verá reflejada en el archivo ant.properties y que en caso de querer integrar las pruebas con jenkins deberemos modificar en el servidor para que busque la ruta correcta en él.

Para evitar el error: java.lang.NoClassDefFoundError: com.jayway.android.robotium.solo.Solo debemos crear una carpeta libs en el proyecto de test y colocar ahí el jar de robotium-solo.jar

Una vez tengamos todo esto preparado podemos conectar un teléfono y ejecutar desde el proyecto de test: “ant debug install test” y ver como se ejecutan las pruebas en el teléfono.

Para ver la integración con jenkins, ver el artículo:

http://dnlkntt.wordpress.com/2012/08/02/robotium-jenkins-and-ant/

Advertisements

Jenkins + Ant + GIT + Android App con dependencias

Standard

Nuestro objetivo es compilar de manera automática un proyecto Android desde Jenkins usando Ant para ello.

Para montar un entorno de integración continua con Jenkins he seguido los siguientes pasos:

1) Desplegar el archivo .war de jenkins http://jenkins-ci.org/ en un contenedor de aplicaciones Apache Tomcat. Para ello simplemente guardas el .war en la carpeta WebApps del Tomcat y lo arrancas mediante el comando startup.sh desde la consola de comandos de Windows.

2) Accedes al dashboard de jenkins accediendo a la url: http://myserver:8080/jenkins; donde myserver es el servidor donde se arranca el tomcat o localhost en el caso que sea tu propia máquina.

3) Como vamos a usar Git como control de versiones en nuestro repositorio necesitamos añadirle el plugin de Git a Jenkins: Administrar Jenkins / Administrar Plugins / Pestaña: Todos los plugins/ Filtrar por Git y seleccionar Jenkins Git Plugin y Jenkins Git client plugin

Para hacer un build de manera automática con Ant en nuestro proyecto Android debemos hacer lo siguiente:

1) Desde la consola de comandos de Windows y desde la carpeta Workspace donde se encuentre nuestro proyecto Android.

android update project -p [nombreProyecto]

Una vez hecho esto, desde la consola de comandos dentro de la carpeta de nuestro proyecto ya podríamos ejecutar comandos como ant debug, ant clean, ant release. En nuestro proyecto Android tendremos local.properties (que dependerá de cada máquina) y build.xml con los targets.

2) Si nuestro proyecto Android tiene dependencias, como puede ser la librería ActionBarSherlock (algo habitual en muchos proyectos Android) debemos repetir el primer paso para esta librería para que la construcción del proyecto principal funcione.

Suponiendo que tenemos tanto el proyecto principal como el proyecto librería en un repositorio con Git (GitLab por ejemplo), para permitir la construcción automática con Jenkins:

1) En el dashboard de Jenkins: Administrar Jenkins / Configurar Sistema / Dentro de GitPlugin poner un nombre y email con permisos en el repositorio y con una clave pública generada en la máquina de trabajo (Para más información buscar generar key gitlab).

2) Volviendo al dashboard: Nueva Tarea/Proyecto de estilo Libre/ Configurar el origen del código fuente: Git -> añadir el repositorio de GitLab donde se encuentre el código de la librería-dependencía, en este caso (estilo: git@git.server.com:nombreLibrería) y en ejecutar -> Ejecutar ant / destinos: clean (por ej). Y ya podríamos construir la librería.

3) Para que funcione nuestro proyecto principal debemos cambiar en el repositorio el fichero local.properties y añadir la línea:

android.library.reference.1=../../NombreLiberíaDependiente/workspace; por ej:
android.library.reference.1=../../ActionBarLib/workspace

este fichero debe quedar así siempre en el repositorio, así que para que no sea sobrescrito este fichero se deberá quedar fuera de las sincronizaciones futuras (metiéndole en gitignore por ej.)

Nota: los paths absolutos no me han funcionado bien, como: C:\\Users\…\.jenkins\jobs\ActionBarLib\workspace (que en realidad es lo mismo que el relativo señalado)

4) Repetir el paso 2 pero en este caso para el proyecto principal. Si en el destino de ant ponemos: release, ya podríamos pulsar Construir ahora y hacer un build satisfactorio 🙂

Buena Ola!