转载自:http://askcuix.appspot.com/2011/03/5/android-development-with-maven.html
在学习android的过程中,总是会不断的去构建项目并部署到模拟器上测试,千篇一律的操作让人有点烦躁,程序员总是有些懒惰的,平时的java项目中,我们一般都比较喜欢用maven来构建项目,为何不让android开发也能享受到这种自动化构建的好处呢,因此尝试将maven引入android开发中来。
Android应用运行在Dalvik虚拟机上,Dalvik虚拟机执行.dex格式的文件,因此构建工具需要先通过java编译器将源文件编译成class文件,然后再转换为.dex格式。对于android应用所依赖到的android.jar已经在maven仓库中有了,但这仅仅是API的stub实现而已,所有类中的方法都会抛出runtime exception,因为android应用是运行在设备上的,使用的是运行环境中的库,maven仅通过这个jar包进行编译而已。
先通过eclipse来建立一个android项目-androidMaven,这里不再赘述如何建立android项目,这不是本文的重点。
设置环境变量。新建一个ANDROID_HOME变量指向你的android sdk的目录,并将tools及platform-tools目录添加进PATH中。在mac下可将这些环境变量写在.bash_profile中:
export ANDROID_HOME=/Users/Chris/DevTools/android-sdk-mac_86
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
在之前创建的android项目的根目录下新建一个pom.xml,
下面是完整的pom文件:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chris.android</groupId>
<artifactId>android-maven-showcase</artifactId>
<version>1.0</version>
<packaging>apk</packaging>
<name>android-maven-showcase</name>
<properties>
<android-platform>8</android-platform>
<android-emulator>avd_dev</android-emulator>
<maven-android-plugin-version>2.8.4</maven-android-plugin-version>
<maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
<android-version>2.2.1</android-version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${android-version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>maven-android-plugin</artifactId>
<version>${maven-android-plugin-version}</version>
<configuration>
<sdk>
<path>${env.ANDROID_HOME}</path>
<platform>${android-platform}</platform>
</sdk>
<emulator>
<avd>${android-emulator}</avd>
</emulator>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
Android应用是apk格式的文件,所以要指定打包的格式为apk:<packaging>apk</packaging>。
这里讲讲maven-android_plugin,我这里使用的android版本是2.2.1,对应的level就是8。<platform>的值就是所使用的sdk的level,它对应android sdk目录中的platforms/android-*目录。<path>的默认值就是ANDROID_HOME环境变量,这里也可以hardcode一个绝对路径。要在模拟器中运行应用,就需要定义一个AVD Manager,<emulator>下的<avd>元素就对应你的AVD Manager名字。这里只是些最基本的配置,要想了解更多的关于maven-android-plugin的信息可参考http://maven-android-plugin-m2site.googlecode.com/svn/plugin-info.html。
要编译android应用就需要将目标平台的jar包含在pom中,就像之前提及到的,仅仅作为编译使用,所以我们将这个dependency的scope设成provided。
现在我们就可以测试一下这个helloworld级别的应用了。
首先在命令行中build这个应用。
mvn clean install
然后启动模拟器,maven将会尝试启动配置在pom.xml中的AVD,因此pom中的avd的名字一定要和实际的avd相同。
mvn android:emulator-start
最后,我们将应用部署到模拟器上。
mvn android:deploy
在运行应用前,我们可以打开android的log viewer,这对我们调试应用是很有帮助的。
adb logcat
好了,现在我们就已经用maven完成了一个android应用从build到deploy的过程了。maven-android-plugin还可以对应用进行签名,并与test和debug有很好的集成,可以参考开发者的wiki: http://code.google.com/p/maven-android-plugin/wiki/Documentation。