Crear tareas de automatización para aplicaciones Android con Ant, Maven o Gradle

Básicamente se usan scripts de automatización de tareas cuando necesitas configurar un gran número de taréas para el despliegue de tus aplicaciones y hacer las pruebas de tu proyecto en dispositivos Android.

Cuando es el momento de automatizar tus despliegues?
– Cuando ya estas en una dinámica de trabajo con un equipo de desarrolladores, y que se esta usando repositorios en Subversion, GIT o Mercurial. Por ejemplo puedes incluir automáticamente el número de revisión junto a cada uno de tus APK, o integrar directamente en alguna clase Java.
– Cuando manejas librerías externas en tu aplicación, que puedan provenir de otros de tus proyectos.
– Cuando queres hacer unit testing para cada despliegue .
– Cuando es necesario hacer una limpieza de tus archivos generados para evitar problemas y realizar pruebas exitosas.

Ant en Android

El primer paso para la automatización de tus proyectos es utilizar Ant.

Porque Ant?
– porque si usas Eclipse IDE, Ant ya viene directamente incluido.
– porque es fácil de manejar la sintaxis de XML.

Debes saber que el propio SDK de Android ya viene con un comando que permite crear fácilmente tu archivo XML de configuración, simplemente lanzas este comando desde la carpeta de tu proyecto:

$ android update project --path .

Ahora, en el directorio de tu proyecto tendras un build.xml, y el archivo local.properties se actualiza. Este template de Build.xml se encuentra en tu SDK de Android en esta ruta: $ANDROID_HOME/tools/lib/build.template

Antes de ejecutar Ant necesitas incluir la carpeta tools en tu PATH. Debes hacer un echo de $PATH para ver si estan bien presentes las carpetas del SDK tools y platform-tools para el ADT.

Si es asi, ahora ya podes probar tu build.xml. lanzando simplemente=

$ ant

Si tenes un BUILD FAILED. no se olvide de poner este parametro: sdk.dir=[ubicacion-de-mi-android-sdk] en el archivo project.properties, se borra el build.xml y se vuelve a lanzar el commando “android update project –path .”.

O desde la ventana de Ant en Eclipse, podes hacer click en Run y ver el mismo resultado. Si necesitas hacer un release de tus APKs firmados, simplemente podes agregar un build.properties incluyendo tu Key Store y tu Key Alias para que ant firme automáticamente tu APK compilada.

key.store=keystore
Key.alias=www.androidda.com
$ ant release

Con ant podras usar los comandos siguiente: clean, debug, release, instrument, test, emma, install, installd, installr, installi, installt o uninstall.

Existe un muy bueno articulo para saber más de las cosas que pueden ser implementadas con Ant en AndroidEngineer.com

Automatizaciones con Maven

Maven es mucho mas flexible que Ant. En el caso de Maven se usan plugins en lugar de importar cada vez el build.xml en cada uno de tus proyectos. Maven es también una sintaxis en XML, llamada POM ( Project Object Model ).

La gran diferencia con Ant, donde tus scripts son casi siempre iguales, es que Maven agiliza mucho el cambio de targets para cada uno de tus proyectos.

No hay nada más simple que instalar Maven en Linux: busca el package Maven en tus repositiorios APT o desde Brew si estas con Mac.

$ sudo apt-get install maven

Chequea la version, que sea la ultima 3.0.5 o 3.0.4

$ mvn -version

Si lo vas a usar dentro de tu proyecto en Eclipse hay que instalar tambien el plugin m2eclipse. Se instala con Software update agregando la sigiuente url:

http://m2eclipse.sonatype.org/sites/m2e

Primero se instala el plugin m2eclipse y tambien este otro: “m2e – Extensions Development Support (Optional)”, para ver este último se deselecciona la opción “Group Items by Category” y se selecciona los dos plugins.

Con Estos dos plugins, vas a tener el total control de tus dependencias a través de Maven, y vas a poder ejecutarlo desde una opciones que se activan haciendo click botón derecho sobre tu proyecto.

Para empezar se necesita crear un archivo pom.xml en tu proyecto Android, lo podes hacer usando el plugin de m2eclipse en eclipse busca la opción “convert to Maven”. Ahora tenes que agregar unos tags para que Maven compile correctamente tu proyecto con el Android SDK. Aqui esta un ejemplo de pom.xml.

Primero necesitas agregar la variable de entorno ANDROID_HOME en Eclipse para que el plugin pueda reconocer el sdk de Android.

environment_variables_maven

Luego podes lanzar el comando siguiente desde el directorio de tu proyecto. No te olvides de poner el pom.xml que vendría a remplazar el build.xml de ant.

$ mvn clean package

Para compilar el apk lanzamos:

$ mvn clean install

Este ultimo acción permite al compilador generar el apk pero tambien todas las clases que se necesitan para compilar su proyecto, todas las clases y el apk se encuentran en la carpeta “target”.

Si quieres hacer un deploy desde Maven hacia tu dispositivo conectado, es facil con maven usa este comando:

$ mvn android:deploy

Para ejecutar el proyecto con el emulador:

$ mvn android:emulator-start

Dejo un proyecto de ejemplo con Maven: TestMaven

Mas información aquí y si lo quieren usar en eclipse les recomiendo instalar este conector de Maven para desarrolladores Android m2e-android.

Guia del Plugin: http://maven-android-plugin-m2site.googlecode.com/svn/plugin-info.html

Automatizaciones con Gradle

Con Gradle, ya no se usa ningun XML de configuración sino que se usa Groovy.

¿Qué permite hacer Groovy? Agilizar la escritura de scripts de automatizacion: ya no se escribe en XML sino con llaves al estilo JSON. Gradle permite descargar todas las dependencias, sin tener que buscar los Jars y agregarlos a mano.

La instalación: Tenemos que buscar Gradle en nuestros repositorios APT en Linux. En Mac nos toca instalar desde Brew. Se requiere Maven para poder importar las dependencias del build.

Para hacer un deployment en Android con gradle, tenemos que buscar tambien un plugin propio para Android, encontré este gradle-android-plugin.

Aqui esta un ejemplo de build script con gradle.

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'org.gradle.api.plugins:gradle-android-plugin:1.1.0'
  }
}

apply plugin: 'android'

repositories {
    mavenCentral()
}

// Sets the package version
version = "x.y.z"

// Signing configuration, valid for all builds (1)
androidSignAndAlign {
    keyStore = "path/to/my/keystore"
    keyAlias = "my-key-alias"
    keyStorePassword = "mystorepass"
    keyAliasPassword = "myaliaspass"
}

// Configure the filtering of resources with properties from the Gradle's project scope (2)
processResources {
  expand (project.properties)
}

// Configure a dedicated debug build (3)
task configureDebug << {
  jar.classifier = "debug"
}

// Configure a dedicated release build (4)
task configureRelease << {
  proguard.enabled = true
}

El comando para llamar el build script es simplemente:

$ gradle

Pero también tiene sus variantes con tareas como instalación y Instrumentación:

$gradle clean andInstall :test-proj:andInstr

El plugin trae las siguientes tareas:

:androidProcessResources [Genera los R.java de los archivos resources xml]
:androidPackage [Genera APK]
:androidInstall [Instala el Debug APK en un dispositivo conectado]
:androidInstrumentationTests [Corre una test suite en un dispositivo conectado]
:proguard [ejecuta las clases y los jars cón proguard]

Para más información sobre gradle con Android, el wiki de Gradle.

[UPDATE] Google pronto va a retirar Ant de su sdk y cambiarlo por Gradle en su Build System.

papachan

papachan

Consultor IT y desarollador Java de aplicaciones Móviles sobre la plataforma Android, actualmente reside en Bogota Colombia. Con una experiencia en desarrollo internet de +10 años, se ha involucrado como desarollador senior en varias empresas de desarrollos y servicios en Internet. Ahora es desarrollador Android en Tappsi.co
papachan
papachan

About papachan

Consultor IT y desarollador Java de aplicaciones Móviles sobre la plataforma Android, actualmente reside en Bogota Colombia. Con una experiencia en desarrollo internet de +10 años, se ha involucrado como desarollador senior en varias empresas de desarrollos y servicios en Internet. Ahora es desarrollador Android en Tappsi.co
This entry was posted in Android. Bookmark the permalink.

3 Respuestas a “Crear tareas de automatización para aplicaciones Android con Ant, Maven o Gradle”

  1. […] metodologías. En general se recomienda usar un Simple Build Tool,  Proguard y por supuesto Ant para poder ejecutar tu proyecto desde un IDE como […]

  2. Adele Roach dice:

    Para aquellos que no lo sepan Maven es una herramienta de construcción automática de proyectos tal como lo puede ser ant (del que ya hicimos una guía hace tiempo) , pero con una gran ventaja, el manejo automático de las dependencias. No es necesaria la descarga de las librerías, lo único que hay que hacer es especificarlas en el fichero pom.xml de configuración y maven se encargará de descargar las dependencias al repositorio local; y como no, también descargará las dependencias transitivas.

  3. Braulio dice:

    Hola
    Buena información, me ha sido muy util.
    Tengo una duda, esto (ant o maven o grandle) me permitirá seleccionar las clases que quiero compilar?
    Es que me interesa tener dos clases que se llamen igual, pero que hagan cosas distintas para poder elegir entre una o la otra al momento de generar mi aplicación o si eso no fuera posible crear dos clases distintas y poder elegir si las incluyo al proyecto en el momento de generarlo.
    Si se pudiera podrian hacer un tutorial de eso me serviria mucho.
    Gracias.

Deja un comentario

  • Facebook AndroidCol