18/04/2013
Aunque utilizar Eclipse+ADT sea prácticamente un estándar da facto en el desarrollo Android, cada vez son más lo programadores que se decantan por otras alternativas como IntelliJ. Si trabajamos en una app en un equipo de trabajo, utilizar Maven en lugar de trabajar directamente con Eclipse tiene dos grandes ventajas:
- Cada programador puede elegir su entorno de desarrollo pero todos usarán las mismas dependencias.
- Se pueden automatizar tareas desde la línea de comandos. Esto permitiría, por ejemplo, definir tareas en Jenkins o Bamboo para aplicaciones Android.
A continuación se muestra como ejemplo para que sirva de plantilla el pom que he creado para mi demo Android Dashboad UI y que incluye como dependencia la popular ActionBarSherlock lo que ha obligado a incluir en el pom el repositorio con la misma. Un par de observaciones:
- Es imprescindible usar Maven 3 debido a los plugins utilizados. Este pom NO FUNCIONA con Maven 2.
- Tenemos que tener descargado en el SDK la librería de compatibilidad porque es usada por la ActionBar Sherlock.
Lo más destacable del pom es que hay que indicar dónde está instalada la SDK de Android así como la versión de la API con la que se hará la compilación.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.danielme.blog.demo</groupId> <artifactId>Dashboard-UI</artifactId> <version>1.0</version> <packaging>apk</packaging> <name>DashboardUI</name> <description>DashboardUI Demo</description> <inceptionYear>2013</inceptionYear> <licenses> <license> <name>GNU GENERAL PUBLIC LICENSE, Version 3.0</name> <url>http://www.gnu.org/licenses/gpl.html</url> </license> </licenses> <scm> <url>https://github.com/danielme-com/Android-Dashboard-Ui-Demo</url> </scm> <organization> <name>danielme.com</name> <url>http://danielme.com</url> </organization> <developers> <developer> <id>danielme.com</id> <name>Daniel Medina</name> <email>danielme_com@yahoo.com</email> <roles> <role>designer</role> <role>developer</role> </roles> </developer> </developers> <properties> <!-- directorio en el que está instalado la sdk de Android --> <android.sdk>/home/danideveloper/android/android-sdk-linux</android.sdk> <!-- API de android con la que se compila --> <sdk.version>17</sdk.version> <java.version>1.6</java.version> </properties> <!-- repositorio para las famosas librerias de Jake Wharton --> <repositories> <repository> <id>jakewharton</id> <url>http://r.jakewharton.com/maven/release/</url> </repository> </repositories> <build> <sourceDirectory>src</sourceDirectory> <pluginManagement> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.1.1</version> <extensions>true</extensions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.4.0</version> <configuration> <sdk> <path>${android.sdk}</path> <platform>${sdk.version}</platform> </sdk> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>4.1.1.4</version> <scope>provided</scope> </dependency> <!-- dependencia para ActionBar Sherlock --> <dependency> <groupId>com.actionbarsherlock</groupId> <artifactId>actionbarsherlock</artifactId> <version>4.2.0</version> <type>apklib</type> </dependency> </dependencies> </project>
Los comando básicos que usaremos son:
- mvn clean package : crea el .apk (sin firmar) en el subdirectorio target del proyecto.
- mvn android:deploy : instala la aplicación en todos los AVD y/o dispositivos físicos activos. Si no hay ninguno da error. Tened en cuenta que la aplicación simplemente queda instalada pero no se ejecuta tal y como sucede cuando la lanzamos desde Eclipse.
gracias por el consejo. A lo mejor me animo a probarlo de nuevo
yo intenté usar maven+android hace tiempo (un año mas o menos) pero con malos resultados, no hay (o había entonces) una buena integración Eclipse+Android+Maven.
No compilaban los proyectos o lo hacían pero no funcionaban. Era un dolor y abandoné.
Lo que si he leido por ahí algún desarrollador que lo utiliza con IntelliJ y que en ese caso funciona muy bien.
Para Eclipse se necesita el plugin de Maven y un conector para Android que nunca conseguí instalar, al menos en Linux y Helios.