转载自: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