领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我们最近宣布了Spring Android 的 M1 版本,并且随着该版本的发布,出现了一些关于如何构建利用 Spring Android Rest Template 和 Spring Android Commons Logging 库的 Android 应用程序的问题。Google 提供了多种编译 Android 应用程序的方法,包括 SDK 命令行工具和 Eclipse 的 ADT(Android Development Tools)插件。不幸的是,这两种方法都不包含集成的依赖项管理支持。
作为 Java 开发人员,我们已经习惯了欣赏 Maven 和 Gradle 等工具来管理外部依赖项。虽然传统的 Java 应用程序运行在 JVM 上,但 Android 应用程序运行在 Dalvik 虚拟机上。Dalvik VM 执行 Dalvik Executable (.dex) 格式的文件。它运行由 Java 语言编译器编译后转换为 .dex 格式的类。如果构建工具想要能够编译具有依赖项的兼容 Android 应用程序,则需要支持此过程。
基本上有两种将外部库包含到 Android 应用程序中的选项。第一种是手动将 jar 文件复制到项目中的 libs 目录,并在 Eclipse 中更新类路径。这是最简单的解决方案,也是 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 编译器插件,请将 SDK 平台设置为所需的级别。在此示例中,它设置为 9,对应于 Android 版本 2.3.1。模拟器 avd 值是您在 AVD 管理器中定义的 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 伪影已通过 Android for Maven 项目的努力构建并发布到 Maven 存储库。Google 禁止将官方 Android jar 上传到 Maven,因此,第三方 Android for Maven 项目被启动,以提供一个 API 兼容的 Android 伪影,可以上传到 Maven 存储库。现在,Maven 存储库中提供了每个主要 Android 版本的伪影。然而,这些不是功能性的,只提供 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>
包含快照和里程碑构建的存储库,以便在您的应用程序中使用 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 SDK 是开发 Android 应用程序所必需的。如前所述,Google 提供了用于构建 Android 应用程序的命令行工具和 Eclipse 插件,但您不限于这些选项。其他 IDE 也支持构建 Android 应用。Maven Android 插件利用 Android SDK 命令行工具来编译应用程序并将其部署到模拟器,因此无需单独的 IDE 设置或配置。
您可以在 Android 网站上找到 下载和安装 Android SDK 的说明。请注意,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 虚拟设备 (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 库进行构建。在 第 2 部分博客文章中,我将介绍在 Eclipse 中使用 Maven Integration for Android Development Tools 插件和 ADT (Android Developer Tools) Eclipse 插件进行 Android 开发。m2eclipse 和 ADT 插件都不支持使用 Maven 依赖项构建 Android 应用程序。Maven Integration for Android Development Tools 插件提供了与 Maven Android 插件的桥梁,从而在 Eclipse 中为 Android 项目启用 Maven 依赖项管理。如果您更喜欢使用 Eclipse 进行开发,我将在 下一篇文章中讨论如何使用这些插件。
Maven:完全参考手册中的 Android 章包含了关于 Android Maven 插件的大量有价值的信息。