抢先一步
VMware 提供培训和认证,助您快速提升。
了解更多在 Spring Android 和 Maven(第一部分) 中,我描述了如何使用 Maven 从命令行构建 Android 应用程序。在这篇文章中,我将向您展示如何在 Eclipse IDE 中使用 Maven 依赖项管理构建 Android 应用程序。该应用程序还将展示 Spring Android 1.0.0.M2 中的最新功能,该功能本周发布。
Maven Android 插件允许您使用 Maven 构建 Android 应用程序并受益于依赖项管理。Google 的 Android 开发工具 (ADT) 插件允许您在 Eclipse IDE 中开发和构建 Android 应用程序。为了在 Eclipse 中获得 Maven 依赖项管理,需要 Android 开发工具的 Maven 集成 插件,该插件集成了 m2eclipse、ADT 插件和 Maven Android 插件。这篇文章将向您展示如何安装此插件并使用它在 Eclipse IDE 中实现基于 Maven 的依赖项管理。
本文中使用的每个组件的具体版本列在下面
在构建或编译任何代码之前,我们需要安装和配置所需的 Eclipse 插件。在 <a href="第一部分 中,我讨论了安装 Android SDK,因此我假设您已经这样做了。但是,如果您还没有,则需要在继续之前安装它。此外,您还需要已经安装了 Eclipse 3.5 或更高版本。在本例中,我使用的是基于 Eclipse 3.6.1 的 SpringSource Tool Suite 2.5.2。
需要安装三个 Eclipse 插件,即 Eclipse 的 ADT 插件、Eclipse 的 Maven 集成和 Android 开发工具的 Maven 集成。您可以使用两种方法安装这些插件,要么使用 Eclipse Marketplace 客户端,要么手动安装每个插件。
根据您的 Eclipse 版本,您可能已经安装了 Eclipse Marketplace 客户端。Marketplace 客户端将简化插件安装,因为它将传递包含任何必需的插件。
使用 Marketplace 客户端的替代方法是手动安装每个插件。如果您从 Marketplace 安装了插件,则可以跳到示例 Android 应用程序部分。对于每个插件,从 Eclipse **帮助** 菜单中,选择 **安装新软件...** 并单击 **添加...** 按钮。
第一步是安装 Eclipse 的 ADT(Android 开发工具)插件。这是 Google 提供的用于开发 Android 应用程序的官方插件。如果您已经安装了 ADT 插件,则通过从 Eclipse **帮助** 菜单运行 **检查更新** 来验证您是否拥有最新版本。
注意:如果您在 ADT 安装方面遇到任何问题,Android 网站 可以提供其他信息。
下一步是安装 m2eclipse 插件。STS 2.5.2 附带此插件。但是,如果您有以前的版本,或者如果您已经安装了插件,则需要验证您是否拥有最新版本。Android 开发工具的 Maven 集成需要 0.12.0 或更高版本。
我们还有一个插件需要安装,这就是将所有这些功能整合在一起的插件。在您设置了 Android SDK 并配置了 Eclipse 中的 ADT 插件后,安装 Android 开发工具的 Maven 集成 插件。
现在我们已经安装并配置了所有必要的插件,我们准备使用示例 Android 应用程序来试用我们的设置。我们将使用为第一部分博文创建的相同示例应用程序,但是示例应用程序已更新为在最新的 Android 平台 SDK 2.3.1 API 级别 9 上运行。如果您没有安装此 SDK 平台,则需要在构建示例代码之前安装它。
运行以下命令以克隆 Spring Mobile 示例存储库。
$ git clone git://git.springsource.org/spring-mobile/samples.git spring-mobile-samples
如果 git:// URL 无法访问,您可能需要尝试示例存储库的备用 URL。
$ git clone http://http.git.springsource.org/spring-mobile/samples.git spring-mobile-samples
在 Eclipse 中打开源代码之前,导航到 spring-android-showcase/client 项目目录并验证项目是否使用 Android Maven 插件构建。
$ mvn clean install
假设项目已从命令行成功构建,我们准备在 Eclipse 中打开该项目。
现在,示例项目已加载到 Eclipse 中。您会注意到的第一件事是包资源管理器中项目上方的红色大“X”,这表示它当前无法构建。由于我们尚未为此项目配置 Maven,因此这是预期的行为。
要启用 Maven 依赖项管理,请右键单击 **包资源管理器** 中的 spring-android-showcase-client,然后从上下文菜单中选择 **Maven -> 启用依赖项管理**。
示例项目已包含以下 Maven POM 文件。如果您项目中没有现有的 POM,Eclipse 会提示您创建一个。请注意 **build** 部分中 maven-android-plugin 和 maven-compiler plugin 的使用。
<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>org.springframework.android</groupId>
<artifactId>spring-android-showcase-client</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
<packaging>apk</packaging>
<name>spring-android-showcase-client</name>
<url>http://www.springsource.org</url>
<organization>
<name>SpringSource</name>
<url>http://www.springsource.org</url>
</organization>
<properties>
<android-platform>9</android-platform>
<android-emulator>9</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.3.1</android-version>
<spring-android-version>1.0.0.M2</spring-android-version>
<jackson-version>1.7.2</jackson-version>
<simple-version>2.4.1</simple-version>
<android-rome-version>1.0.0-r2</android-rome-version>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>maven-android-plugin</artifactId>
<version>${maven-android-plugin-version}</version>
<configuration>
<sdk>
<platform>${android-platform}</platform>
</sdk>
<emulator>
<avd>${android-emulator}</avd>
</emulator>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${android-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>${spring-android-version}</version>
</dependency>
<dependency>
<!-- Using Jackson for JSON marshaling -->
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<!-- Using Simple for XML marshaling -->
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>${simple-version}</version>
<exclusions>
<exclusion>
<artifactId>stax</artifactId>
<groupId>stax</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!-- Using ROME for RSS and ATOM feeds -->
<groupId>com.google.code.android-rome-feed-reader</groupId>
<artifactId>android-rome-feed-reader</artifactId>
<version>${android-rome-version}</version>
</dependency>
</dependencies>
<repositories>
<!-- For developing with Android ROME Feed Reader -->
<repository>
<id>android-rome-feed-reader-repository</id>
<name>Android ROME Feed Reader Repository</name>
<url>https://android-rome-feed-reader.googlecode.com/svn/maven2/releases</url>
</repository>
<!-- 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>
</project>
Maven 现在将更新所需的依赖项,Eclipse 应该会成功构建项目。Eclipse 完成项目构建后,您现在应该会在 **包资源管理器** 窗口中看到 Maven 依赖项 类路径容器。
需要注意两点。首先,您可能会看到项目中有一个 bin 文件夹。您可以从 **Java 构建路径** 属性(如下)中看到,默认输出文件夹是 Target 文件夹。因此,可以安全地删除 bin 文件夹。
其次,您可能还会注意到添加了一个 JRE 系统库 类路径容器到项目中。由于我们正在构建一个使用 Android JVM 的 Android 应用程序,因此您不需要引用 JRE。如果您在 Eclipse 中使用 ADT 创建了一个新的 Android 应用程序,您就会知道它不会为 JRE 添加类路径容器。我已经与 Android 开发工具的 Maven 集成开发人员 Ricardo Gladwell 讨论了这个问题,他创建了一个 工单 来研究这个问题。我已经从示例项目中删除了 JRE,没有任何明显的负面影响。但是您可能需要关注该问题以获取更多信息。
要运行示例应用程序,只需在 **包资源管理器** 中选择 spring-android-showcase-client,然后单击 **运行** 按钮。示例客户端中的 Maven POM 文件配置为查找名为“9”的 Android 虚拟设备 (AVD)。如前所述,示例项目已更新为在 Android 平台 SDK 2.3.1 上运行。您需要为此平台配置一个 AVD 才能运行示例。
第一次运行应用程序时,您应该在 Eclipse 控制台中看到类似以下内容
[2011-02-08 14:00:49 - spring-android-showcase-client] ------------------------------
[2011-02-08 14:00:49 - spring-android-showcase-client] Android Launch!
[2011-02-08 14:00:49 - spring-android-showcase-client] adb is running normally.
[2011-02-08 14:00:49 - spring-android-showcase-client] Performing org.springframework.android.showcase.MainActivity activity launch
[2011-02-08 14:00:49 - spring-android-showcase-client] Automatic Target Mode: launching new emulator with compatible AVD '9'
[2011-02-08 14:00:49 - spring-android-showcase-client] Launching a new emulator with Virtual Device '9'
[2011-02-08 14:00:50 - Emulator] 2011-02-08 14:00:50.936 emulator[5951:903] Warning once: This application, or a library it uses, is using NSQuickDrawView, which has been deprecated. Apps should cease use of QuickDraw and move to Quartz.
[2011-02-08 14:00:50 - spring-android-showcase-client] New emulator found: emulator-5554
[2011-02-08 14:00:50 - spring-android-showcase-client] Waiting for HOME ('android.process.acore') to be launched...
[2011-02-08 14:01:21 - spring-android-showcase-client] HOME is up on device 'emulator-5554'
[2011-02-08 14:01:21 - spring-android-showcase-client] Uploading spring-android-showcase-client.apk onto device 'emulator-5554'
[2011-02-08 14:01:23 - spring-android-showcase-client] Installing spring-android-showcase-client.apk...
[2011-02-08 14:01:50 - spring-android-showcase-client] Success!
[2011-02-08 14:01:50 - spring-android-showcase-client] Starting activity org.springframework.android.showcase.MainActivity on device emulator-5554
[2011-02-08 14:01:52 - spring-android-showcase-client] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=org.springframework.android.showcase/.MainActivity }
AVD 将启动并显示锁定屏幕。将绿色锁从左向右滑动以“打开”Android 设备。打开后,应用程序现在应该显示
在本篇文章中,我们回顾了如何在 Eclipse 中构建一个利用 Maven 依赖管理的 Android 示例应用程序。为此,我们使用了 Eclipse、Eclipse 的 Android 开发工具 (ADT) 插件、Maven Android 插件、Android 开发工具的 Maven 集成插件以及 Eclipse 的 Maven 集成 (m2eclipse) 插件。虽然涉及到很多组件,但一旦你配置好所有内容,就可以轻松地构建并部署到 Android 模拟器。如果你在 Android 应用程序中使用第三方库,则应考虑使用这些工具来帮助管理这些依赖项。