Friday, 20 September 2013

Android Maven Plugin

Después de la pequeña introducción que hice aquí, les sigo comentando algunas cosas sobre android-maven-plugin
Una de las ventajas al trabajar con maven son los arquetipos (archetypes) Un arquetipo es una plantilla de proyectos definido por patrones o modelos de proyectos similares.
Usar un archetype permite una manera rápida y consistente de desarrollar, mediante el uso buenas practicas y recomendaciones.
Los archetypes que tenemos disponibles para Android usando el plugin son los siguientes (tomados de http://stand.spree.de/wiki_details_maven_archetypes):

  • ANDROID-QUICKSTART-ARCHETYPE:
    • Este arquetipo genera una aplicacion android lista para ser ejecutada en un dispositivo android (emulador o real)
  • ANDROID WITH TEST ARCHETYPE:
    • Este arquetipo genera un projecto con varios modulos:
      • un pom padre
      • un modulo conteniendo una aplicación android
      • un modulo de pruebas para la aplicación (test de integracion)
  • ANDROID-RELEASE ARCHETYPE:
    • Este arquetipo extiende al anterior, agregando el manejo de releases.
  • ANDROID-LIBRARY-QUICKSTART:
    • Este arquetipo genera una libreria android lista para ser utilizada por otro proyecto android.

Manos a la obra: Empecemos a desarrollar una aplicación android desde 0 usando android-maven-plugin :)

Requisitos:
  • Tener instalado y bien configurado ADT (variables de entorno, path, etc)
  • Tener instalado y bien configurado maven 3.0.3 (hasta donde sé había algunos problemas con 3.1)
Para el proximo ejemplo, queremos desarrollar dos proyectos:
  1. La aplicacion demo y
  2. Los tests para la aplicacion.
Para ello, vamos a utilizar el arquetipo que les mencione anteriormente: ANDROID WITH TEST ARCHETYPE
Para generar un proyecto desde 0 con maven, debemos ejecutar lo siguiente:
mvn archetype:generate -DarchetypeArtifactId=android-with-test \
  -DarchetypeGroupId=de.akquinet.android.archetypes \
  -DarchetypeVersion=1.0.11 \
  -DgroupId=com.foo.bar \
  -DartifactId=my-android-project \
  -Dpackage=com.foo.bar.android
Recuerden cambiar  los valores de groupId, artifactId y package por los de su preferencia o empresa.



Como se puede observar en las imagenes, maven nos generó el proyecto y estamos listos para trabajar. En el caso de tener algun emulador o device corriendo, podemos probar nuestra aplicacion ejecutando
mvn clean install





Labels: , , ,

Thursday, 19 September 2013

Android QA Automation Architecture

Después de haber participado de varios proyectos con JAVA y otros tantos en ANDROID, logre armar una arquitectura estable de desarrollo  usando integración continua. (tanto para apps, librerias y tests automáticos)
Lo que propongo con esta arquitectura es lo siguiente:

  • Correr los tests en diferentes versiones de android, tanto en emuladores como en dispositivos reales.
  • Para proyectos del tipo librería, guardar el jar con la info de sus dependencias. Para proyectos de aplicaciones o tests, guardar el apk, también con la info de sus dependencias. Tanto los jars como los apks son guardados en Artifactory, un repositorio de dependencias.
  • Permitir la resolución de dependencias propias y de terceros.
  • Mejora en el manejo de dependencias para evitar conflictos
  • Uso de arquetipos existentes para cumplir con estándares.

La arquitectura es masomenos así:



Click para ver mas grande
Para poder llevar a cabo estas features, implementé android-maven-plugin. Este plugin, nos brinda varias tareas definidas para trabajar. Entre ellas destaco las siguientes:
android:apk
  Creates the apk file. By default signs it with debug keystore.
  Change that by setting configuration parameter
  <sign><debug>false</debug></sign>.

android:apklib
  Creates the apklib file.
  apklib files do not generate deployable artifacts.

android:deploy
  Deploys the built apk file, or another specified apk, to a connected device.
  Automatically performed when running mvn integration-test (or mvn install) on
  a project with instrumentation tests.

android:devices
  DevicesMojo lists all attached devices and emulators found with the android
  debug bridge. It uses the same naming convention for the emulator as used in
  other places in the Android Maven Plugin and adds the status of the device in
  the list. TODO The goal is very simple and could be enhanced for better
  display, a verbose option to display and to take the android.device paramter
  into account.

android:emma
  After compiled Java classes use emma tool

android:emulator-start
  EmulatorStartMojo can start the Android Emulator with a specified Android
  Virtual Device (avd).

android:emulator-stop
  EmulatorStartMojo can stop the Android Emulator with a specified Android
  Virtual Device (avd).

android:emulator-stop-all
  EmulatorStopeAllMojo will stop all attached devices.

android:generate-sources
  Generates R.java based on resources specified by the resources configuration
  parameter. Generates java files based on aidl files.

android:lint
  LintMojo can run the lint command against the project. Implements parsing
  parameters from pom or command line arguments and sets useful defaults as
  well. Warning, if you use android.lint.enableClasspath and/or
  android.lint.enableLibraries the behavior of this goal will vary depending on
  the phase where this goal is executed. See
  android.lint.classpath/lintClassPath and android.lint.libraries/lintLibraries
  for more details.

android:pull
  Copy file or directory from all the attached (or specified) devices/emulators.

android:push
  Copy file to all the attached (or specified) devices/emulators.

Labels: , , , , ,