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

更多相关文章

  1. Docker+Jenkins持续集成环境(5): android构建与apk发布
  2. Qt 笔记(记录使用Qt中遇到的一些问题)
  3. Android(安卓)Studio 新导入项目时各种报错及解决__2019.08.20
  4. zz:Android(安卓)Monkeyrunner Test
  5. Android(安卓)Fragment 申请权限 onRequestPermissionsResult 不
  6. Android(安卓)国际化 语言相关 和 打包 多渠道配置
  7. Ubuntu Linux14 64位下在Android(安卓)studio下用gradle编译Andr
  8. Android(安卓)studio3.0上运行opencv3.2.0自带人脸识别实例Demo
  9. Android(安卓)打包aar给unity3d使用 项目心得

随机推荐

  1. Android(安卓)Studio更新以及异常处理【s
  2. 在Android中如何通过点击edittext之外的
  3. Android中使用SQLiteOpenHelper对SQLite
  4. android studio下Maven管理android的库
  5. android事件薄-不能安装APK的一种原因
  6. 取代opencore的stagefright
  7. Android(安卓)几种常用关于屏幕操作的方
  8. Android(安卓)网络管理
  9. :Android完全关闭应用程序
  10. 关于Android(安卓)2.3.5 r1 锁屏问题