领先一步
VMware 提供培训和认证,助您快速进步。
了解更多我们最近宣布了 Spring Android 的 M1 版本,随之而来的是一些关于如何构建利用 Spring Android Rest Template 和 Spring Android Commons Logging 库的 Android 应用的问题。Google 提供了几种编译 Android 应用的方法,包括 SDK 命令行工具和适用于 Eclipse 的 ADT(Android 开发工具)插件。遗憾的是,这些方法都不包含集成的依赖管理支持。
作为 Java 开发者,我们已经非常喜欢使用 Maven 和 Gradle 等工具来管理外部依赖。传统的 Java 应用运行在 JVM 上,而 Android 应用运行在 Dalvik 虚拟机上。 Dalvik VM 执行 Dalvik Executable (.dex) 格式的文件。 它运行由 Java 语言编译器编译并转换为 .dex 格式的类。 构建工具如果想要编译带有依赖项的兼容 Android 应用,就需要支持这个过程。
基本上有两种方法可以将外部库包含到您的 Android 应用中。第一种是手动将 jar 文件复制到项目中的 libs 目录,并在 Eclipse 中更新 classpath。这是最简单的解决方案,也是 ADT 插件最支持的方法。缺点是您必须手动管理依赖项。另一种方法是使用第三方插件,例如 Maven Android Plugin,它可以自动从 Maven 仓库中包含依赖项。
在这篇文章中,我将详细介绍如何使用 Android 命令行工具、Maven、Maven Android Plugin 以及 Android Maven Artifacts 来编译一个使用 Spring Android 库的示例应用,并将其部署到 Android 模拟器上。配置好 Maven 后,您可以轻松地创建构建、部署到模拟器、运行测试,并将应用打包以部署到 Android Market。在运行示例代码之前,我们首先会强调 pom.xml 中必要的配置设置。本示例中使用的组件如下所示。
本节介绍使用 Spring Android 和 Maven Android Plugin 进行开发时 pom.xml 所需的部分。
为了使用 Maven 构建 Android 应用,您需要在 pom.xml 文件中配置 Maven Android Plugin。Android 应用以 apk 文件而非 jar 文件部署到设备上。您必须在打包配置中指定这一点。
<packaging>apk</packaging>
要在构建任务中配置 Maven Android 和 Maven Compiler Plugins,请将 SDK 平台设置为所需的级别。在本例中,它被设置为 9,对应于 Android 版本 2.3.1。模拟器 avd 值是您在 AVD Manager 中定义的 AVD(Android 虚拟设备)的名称。在本例中,AVD 的名称是“9”,但 AVD 可以随您喜欢命名,只要它与您创建 AVD 时指定的名称匹配即可。这是插件构建和运行 Android 应用所需的基本配置。还可以包含其他参数以获得更多功能。
<build>
<sourceDirectory>src</sourceDirectory>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>maven-android-plugin</artifactId>
<version>2.8.4</version>
<configuration>
<sdk>
<platform>9</platform>
</sdk>
<emulator>
<avd>9</avd>
</emulator>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
通过 Android for Maven 项目的努力,Android Artifacts 已构建并发布到 Maven 仓库。Google 阻止了官方 Android jar 文件上传到 Maven,因此启动了第三方 Android for Maven 项目,以提供可上传到 Maven 仓库的 API 兼容的 Android artifact。现在,Maven 仓库中提供了每个主要 Android 版本的 artifact。但是,这些 artifact 没有实际功能,只提供了 API 的存根实现。所有类中的所有方法都会抛出运行时异常。由于 Android 应用运行在设备上,它永远不会在执行时使用这些库,但 API 兼容性允许应用像使用真实库一样进行编译。更多信息可以在此处找到。
要编译带有依赖项的 Android 应用,您需要包含您的应用所针对的 Android 版本。如前所述,我们使用级别 9,对应于版本 2.3.1。请查看Maven 仓库以获取可用版本。您必须将 android 依赖范围设置为 provided,否则 Maven 会尝试将 Android jar 库包含到您的 apk 中。
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
通过添加以下依赖项,针对 Spring Android Rest Template 的最新里程碑版本进行编译。
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>1.0.0.M2</version>
</dependency>
包含 Snapshot 和里程碑构建的仓库,以便在您的应用中使用最新的 Spring Android 库的构建或里程碑版本。
<repositories>
<!-- For testing against latest Spring snapshots -->
<repository>
<id>org.springframework.maven.snapshot</id>
<name>Spring Maven Snapshot Repository</name>
<url>http://maven.springframework.org/snapshot</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<!-- For developing against latest Spring milestones -->
<repository>
<id>org.springframework.maven.milestone</id>
<name>Spring Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
开发 Android 应用需要 Android SDK。如前所述,Google 提供了命令行工具和 Eclipse 插件用于构建 Android 应用,但您并不局限于这些选项。其他 IDE 也提供构建 Android 应用的支持。Maven Android Plugin 利用 Android SDK 命令行工具将应用编译并部署到模拟器,因此无需单独的 IDE 设置或配置。
关于下载和安装 Android SDK 的说明可以在 Android 网站上找到。请注意,Android SDK Revision 8 版本更改了一些工具的位置。除了 tools 目录外,您还必须将 platform-tools 目录添加到您的路径中。
例如,Mac 上的 .bash_profile 可能如下所示。
export ANDROID_HOME=~/android-sdk-mac_x86
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
要运行 Android 应用,您必须配置一个 Android Virtual Device (AVD)。AVD 是模拟器选项的配置。换句话说,您正在定义运行模拟器时要使用的设置。您可以保存配置并命名以便将来使用。您还可以定义多个 AVD,以便针对不同的 Android 版本或硬件配置进行测试。
示例 Android 客户端应用附带的 pom.xml 文件指定了一个名为“9”的 AVD。为了让 Maven 能够部署 Android 应用,您必须配置一个具有相同名称的 AVD。这一点尤其重要,因为所有开发人员机器都需要配置相同的 AVD,因为 pom.xml 通常会被提交到源代码管理中。
我们为 Spring Mobile 项目设置了一个示例仓库。从命令提示符运行以下命令将仓库克隆到您的本地机器。
$ git clone git://git.springsource.org/spring-mobile/samples.git spring-mobile-samples
如果您想运行示例应用的服务器组件,以查看 Android 客户端与 Spring MVC 网站之间的交互,最简单的方法是在 STS IDE 中进行。导航到 spring-android-showcase 目录。其中有两个目录,“client”用于客户端 Android 应用,“server”用于 Spring MVC 服务器应用。客户端应用向服务器发出网络请求以演示 RestTemplate 功能,因此服务器必须运行才能使客户端正常工作。
要构建客户端应用,请从命令行输入以下命令
$ mvn clean install
输入以下命令启动 Android 模拟器。Maven 会尝试启动 pom.xml 中配置名称的 AVD,这就是为什么名称需要与您创建的实际 AVD 的名称匹配的原因。
$ mvn android:emulator-start
最后,使用以下命令将应用部署到模拟器。
$ mvn android:deploy
应用会以 S2Android Showcase 的名称部署到模拟器。在运行应用之前,启动 Android 日志查看器以查看应用的活动。在开发过程中,您将花费大量时间查看 Android 日志。要查看日志,请在命令提示符处执行以下命令。
$ adb logcat
恭喜!您现在已经构建并部署了一个使用 Maven 管理依赖项的 Android 应用。
将 Maven 添加到您的 Android 开发流程中会增加额外的复杂性,但它提供了编译包含 Maven 仓库中外部依赖项的 Android 应用的能力。如果没有它,您将不得不手动下载编译和运行应用所需的依赖项。我们已经展示了使用它进行依赖管理来构建 Spring Android 库的好处。在第二部分的帖子中,我将介绍如何使用 Maven Integration for Android Development Tools 插件和 ADT (Android Developer Tools) Plugin for Eclipse 在 Eclipse 中进行 Android 开发。m2eclipse 和 ADT 插件都不支持使用 Maven 依赖项构建 Android 应用。Maven Integration for Android Development Tools 插件提供了连接 Maven Android Plugin 的桥梁,从而在 Eclipse 中为 Android 项目启用 Maven 依赖管理。如果您更喜欢在 Eclipse 中进行开发,我将在下一篇文章中讨论如何使用这些插件。
《Maven:完整参考手册》的 Android 章包含了许多关于 Android Maven Plugin 的有用信息。