Maven开发Android指南

http://reymont.iteye.com/blog/1750843

Maven开发Android指南 1 简介

学习Maven的使用已经3年了,从开始对 Maven有些盲目的崇拜,到现在真正去使用、去理解。《Maven开发Android指南》将记录学习中的心得体会,分享给大家。

 

文章翻译自《Maven: The Complete Reference》第14章

 

 

Maven开发Android指南 1 简介

 

Maven开发Android指南 2 配置android-maven-plugin

 

Maven开发Android指南 3 使用Android Maven Archetypes 创建新项目

 

Maven开发Android指南 4 与Eclipse整合(m2e-android )

 

Maven开发Android指南 5 调试

 

 

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于便携设备,如智能手机平板电脑。2005年由Google收购注资,并组建开放手机联盟开发改良随后,逐渐扩展到平板电脑及其他领域上。Android的中间层基本上用Java 实现,采用Dalvik JAVA虚拟机。在运行时,将Java字节码转换为Dalvik 虚拟机可以识别的.dex文件。JAVA是默认的开发语言,API是基于JAVA。

 

 

大多数情况下,开发Android应用使用基于Eclipse的Android Development Toolkit ADT也可以使用Apache Ant来代替IDE的编译工作。Android Maven Plugin则可以利用Apache Maven提供的功能,使开发团队完成编译,部署和发布Android应用,还可以使用Maven强大的特性,如依赖管理,报表,代码分析等等。

 

 

名词解释:

开放手机联盟:开放手机联盟(Open Handset Alliance)是美国Google公司与2007年11月5日宣布组建的一个全球性的联盟组织。这一联盟将会支持Google可能发布的手机操作系统或者应用软件,共同开发名为Android的开放源代码移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。

 

Java字节码(Java bytecode):Java bytecode is the form of instructions that the Java virtual machine executes. Each bytecode opcode is one byte in length, although some require parameters, resulting in some multi-byte instructions. Not all of the possible 256 opcodes are used. 51 are reserved for future use. Beyond that, Sun Microsystems, the original developer of the Java platform, has set aside three values to be permanently unimplemented

 

opcode:In computer science, an opcode (operation code) is the portion of a machine language instruction that specifies the operation to be performed. Their specification and format are laid out in the instruction set architecture of the processor in question (which may be a general CPU or a more specialized processing unit). Apart from the opcode itself, an instruction normally also has one or more specifiers for operands (i.e. data) on which the operation should act, although some operations may have implicit operands, or none at all. There are instruction sets with nearly uniform fields for opcode and operand specifiers, as well as others (the x86 architecture for instance) with a more complicated, varied length structure

Android NDK:The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can be helpful so you can reuse existing code libraries written in these languages, but most apps do not need the Android NDK.

 

参考:

Android:   http://baike.baidu.com/view/1241829.htm

JAVA:        http://baike.baidu.com/view/374952.htm

http://en.wikipedia.org/wiki/Java_bytecode

http://en.wikipedia.org/wiki/Opcode

http://developer.android.com/tools/sdk/ndk/index.html


在尝试开发或编译Android应用之前,你需要安装和配置JDK,Android SDK,Maven。

 

必备条件:

JDK 1.6+。

Android SDK (r17 or later) 支持所有版本的开发。http://developer.android.com/sdk/index.html

Maven 3.0.3+。http://maven.apache.org/download.html

 

配置步骤:

JDK:

JDK的安装配置不在本文介绍,可参考http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jdk-installation-windows.html

 

在CMD中键入java -version。测试是否安装成功:

java version "1.6.0_22"

Java(TM) SE Runtime Environment (build 1.6.0_22-b04)

 

Maven For Windows:

 

假定下载Maven后,解压到目录c:\Program Files\apache-maven-3.0.3。

使用Windows控制面板配置环境变量(可参照JDK配置):

配置M2_HOME:M2_HOME=c:\Program Files\apache-maven-3.0.3+

配置PATH:PATH=%PATH%;%M2_HOME%\bin+ …

 

在CMD中键入mvn -v。测试是否安装成功:

Apache Maven 3.0.4 (r1232337; 2012-01-17 16:44:56+0800)

Maven home: C:\Program Files\apache-maven-3.0.3\bin\..

Java version: 1.6.0_22, vendor: Sun Microsystems Inc.

Java home: C:\Program Files\Java\jdk1.6.0_22\jre

Default locale: zh_CN, platform encoding: GBK

OS name: "windows xp", version: "5.1", arch: "x86", family: "windows"

 

Android SDK For Windows:

 

在Android官网(Android Developer web site)下载SDK。

 

假定下载Android后,解压到目录D:\android\android-sdk-windows

使用Windows控制面板配置环境变量(可参照JDK配置):

配置ANDROID_HOMEANDROID_HOME=D:\android\android-sdk-windows

配置PATH:PATH=%PATH%;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

 

参考:

http://code.google.com/p/maven-android-plugin/wiki/GettingStarted

http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jdk-installation-windows.html

http://www.sonatype.com/books/mvnref-book/reference/installation-sect-maven-install.html#installation-sect-windows

http://www.sonatype.com/books/mvnref-book/reference/installation-sect-test-install.html

http://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-config-build.html

http://developer.android.com/sdk/exploring.html

在看完Maven开发Android指南 2 配置android-maven-plugin后,有人会疑惑怎么没有讲android-maven-plugin。这是Maven的特性之一,不需要手工下载plugin,配置pom.xml文件,只要是Maven Central 中有的,maven会自动下载对应的插件。

 

创建项目分两种:手工创建和使用Maven Archetypes

 

手工创建:

 

使用android提供的工具创建项目:

http://developer.android.com/tools/projects/projects-cmdline.html

 

android create project \

--target <target_ID> \

--name <your_project_name> \

--path path/to/your/project \

--activity <your_activity_name> \

--package <your_package_namespace>

 

Maven Archetypes:

 

开始一个新的项目可以使用Maven Archetype Plugin来创建项目的基本构架。有很多Android Maven Archetypes。如 android-with-test-archetype:创建包含测试代码的Android工程;android-release-archetype创建包含发布功能的Android工程。

 

本例中将使用android-quickstart这个Maven Archetype Plugin。在Maven Central中搜索android-quickstart查询Latest Version,目前最新的是1.0.8,在-DarchetypeVersion=1.0.8

 

archetypeArtifactId:Maven Archetype Plugin的ID

archetypeGroupId:Maven Archetype Plugin的类别

archetypeVersion:Maven Archetype Plugin的版本号

groupId:工程的类别(可以理解为JAVA包名)

artifactId:工程的ID(可以理解为工程的名称)

 

mvn archetype:generate -DarchetypeArtifactId=android-quickstart -DarchetypeGroupId=de.akquinet.android.archetypes -DarchetypeVersion=1.0.8   -DgroupId=com.study.android -DartifactId=HelloMavenAndroid

 

Generating project in Interactive mode

 

一路回车就可以创建HelloMavenAndroid工程

 

在HelloMavenAndroid文件内,打开pom.xml

<?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.study.android</groupId>

    <artifactId>HelloMavenAndroid</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>apk</packaging>

    <name>HelloMavenAndroid</name>

 

    <properties>

        <platform.version> 2.3.3

            </platform.version>

    </properties>

 

    <dependencies>

        <dependency>

            <groupId>com.google.android</groupId>

            <artifactId>android</artifactId>

            <version>${platform.version}</version>

            <scope>provided</scope>

        </dependency>

    </dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>com.jayway.maven.plugins.android.generation2</groupId>

                <artifactId>android-maven-plugin</artifactId>

                <version>3.1.1</version>

                <configuration>

                    <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>

                    <assetsDirectory>${project.basedir}/assets</assetsDirectory>

                    <resourceDirectory>${project.basedir}/res</resourceDirectory>

                    <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>

                    <sdk>

                        <platform>10</platform>

                    </sdk>

                                        <undeployBeforeDeploy>true</undeployBeforeDeploy>

                </configuration>

                <extensions>true</extensions>

            </plugin>

 

            <plugin>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>2.3.2</version>

                <configuration>

                    <source>1.6</source>

                    <target>1.6</target>

                </configuration>

            </plugin>

        </plugins>

    </build>

</project>

 

在这个pom.xml文件中高亮部分,分别是:

打包的类型:apk

使用Android平台:2.3.3(指向properties.platform.version)

配置Android Maven Plugin:3.1.1

 

一般的JAVA工程打包的类型是jar或者是war,而android工程打包的类型是apk。在执行中,告诉Android Maven Plugin生成的文件类型是apk。Android Maven Plugin会负责调用Android SDK将JAVA字节码转换成Dalvik 虚拟机识别的内容。在配置plugin中,Android Maven Plugin必须声明这是扩展的插件(<extensions>true</extensions>)。平台的版本和平台号码需要对应,<version>2.3.3</version>和<platform>10</platform>,可以在API Level找到对应的关系。

 

依赖的Android平台可以在Maven Central查询到。在依赖中声明<scope>provided</scope>是很有必要的。意思是告诉Maven在打包是不用将Android SDK提供的jar打包到应用中。

 

创建AVD:

 

参考:详解如何创建和使用AVD

请注意在Target栏位选择:Android 2.3.3 – API Level 10

 

 

 

运行:

 

使用AVD Manager.exe创建好AVD,并Start后,

进入HelloMavenAndroid,输入maven命令,最后在模拟器中看到Hello HelloMavenAndroid

 

cd HelloMavenAndroid

mvn android:emulator-start

mvn clean package android:deploy android:run

 

名词解释:

Maven Archetype Plugin:The Archetype Plugin allows the user to create a Maven project from an existing template called an archetype.

 

 

 

参考:

http://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-helloandroidexample.html

http://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-archetype.html

http://code.google.com/p/maven-android-plugin/wiki/GettingStarted

http://developer.android.com/tools/projects/projects-cmdline.html

http://maven.apache.org/archetype/maven-archetype-plugin/

http://blog.csdn.net/yaowj2/article/details/6794129

http://search.maven.org/

http://www.jizhuomi.com/android/environment/269.html

 

Android官方开发团队致力于为Ecilpse插件提供可靠的支持,而android-maven-plugin致力于将Maven,Android和Eclipse串联在一起。

 

m2e-android是一个 Maven Integration for Eclipse (m2e) plug-in,为Android Developer Tools (ADT) Maven Android Plugin添加Maven支持,为ADT提供Maven依赖管理的特性。

 

安装m2e-android需要Eclipse Indigo or Juno (低版本的Eclispe未提供Eclipse Marketplace)

 

Help -> Eclipse Marketplace... 输入 "android m2e".点击Install(包含了Android Development Toolkit Maven for Eclipse m2e plug-in)。




创建项目:

如果是已经使用《Maven开发Android指南 3 使用Android Maven Archetypes 创建新项目》的方法创建项目,直接使用Eclipse Import:File->Maven->Existing Maven Projects

 

也可以使用m2e-android利用Maven Android archetypes创建新的项目:


 


直接Next


选择All Catalogs,Filter输入de.akquinet.android.archetypes


在Group Id、Artifact Id和Package输入名称


创建完后,可能有错。


右键Properties查看,提示为缺少src/test/java文件夹。


在工程目录下新建对应文件夹。


参照《Maven开发Android指南 3 使用Android Maven Archetypes 创建新项目》章节创建AVD后,可以使用Eclipse直接运行Android了。


当然也可以采用命令行:

mvn android:emulator-start
mvn clean package android:deploy
android:run



参考:

http://rgladwell.github.com/m2e-android/

http://code.google.com/p/maven-android-plugin/wiki/EclipseIntegration

对于一个使用Maven的Android应用,调试看起来是个大问题,没有"Debug as Android application"怎么办?总不能一直用logcat(Log.v(TAG,…)吧。

 

如果阅读了《Maven开发Android指南 4 与Eclipse整合(m2e-android )》,那么这就不是问题了。

 

m2e-android很智能的将 Android Developer Tools (ADT)和 Maven Android Plugin结合在一起,细心的读者可以看到,左上角项目图标上面有一个M和A,分别代表着Maven和Android。

 

正如上篇提到到的,可以"Run as Android application",那么当然可以"Debug as Android application"

 

 

 

但是还是有些读者不满足,就是不喜欢"Debug as Android application",那么DDMS将是你的选择。(需要安装m2e-android)

 

通过命令部署Android应用

cd HelloM2EAndroid

mvn android:emulator-start

mvn clean package android:deploy

 

打开Eclipse中的DDMS,选择对应的应用,点击绿色的小甲壳虫,它将会帮你抓住所有断点。

 

 

 

 

 

 

 

 

名词解释:

logcat是Android中一个命令行工具,可以用于得到程序的log信息。

The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of circular buffers, which then can be viewed and filtered by the logcat command. You can use logcat from an ADB shell to view the log messages

DDMS的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。

Android ships with a debugging tool called the Dalvik Debug Monitor Server (DDMS), which provides port-forwarding services, screen capture on the device, thread and heap information on the device, logcat, process, and radio state information, incoming call and SMS spoofing, location data spoofing, and more

 

参考:

http://code.google.com/p/maven-android-plugin/wiki/Debug

http://baike.baidu.com/view/4504801.htm

http://baike.baidu.com/view/2688850.htm

http://developer.android.com/tools/help/logcat.html

http://developer.android.com/tools/debugging/ddms.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值