領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多在《Spring Android and Maven (Part 1)》中,我介紹瞭如何使用Maven從命令列構建Android應用程式。在這篇文章中,我將向您展示如何從Eclipse IDE使用Maven依賴管理來構建Android應用程式。該應用程式還將展示本週釋出的Spring Android 1.0.0.M2中的最新功能。
Maven Android Plugin允許您使用Maven構建Android應用程式並從中受益於依賴管理。Google的Android Development Tools (ADT) 外掛允許您在Eclipse IDE中開發和構建Android應用程式。要在Eclipse中實現Maven依賴管理,需要Maven Integration for Android Development Tools外掛,該外掛集成了m2eclipse、ADT外掛和Maven Android Plugin。這篇文章將向您展示如何安裝此外掛,並使用它在Eclipse IDE中實現基於Maven的依賴管理。
本文使用的每個元件的具體版本如下所列
在構建或編譯任何程式碼之前,我們需要安裝和配置所需的Eclipse外掛。在Part 1中,我討論了安裝Android SDK,所以假設您已經完成了。但是,如果您還沒有安裝,則需要繼續安裝。此外,您還需要已經安裝了Eclipse 3.5或更高版本。在本例中,我使用的是基於Eclipse 3.6.1的SpringSource Tool Suite 2.5.2。
需要安裝三個Eclipse外掛:ADT Plugin for Eclipse、Maven Integration for Eclipse以及Maven Integration for Android Development Tools。您有兩種選擇來安裝這些外掛:要麼使用Eclipse Marketplace Client,要麼手動安裝每個外掛。
根據您的Eclipse版本,您可能已經安裝了Eclipse Marketplace Client。Marketplace Client將簡化外掛的安裝,因為它將傳遞性地包含任何必需的外掛。


除了使用Marketplace Client之外,還可以手動安裝每個外掛。如果您從Marketplace安裝了外掛,則可以跳到“示例Android應用程式”部分。對於每個外掛,在Eclipse的Help選單中,選擇Install New Software...,然後單擊Add...按鈕。
第一步是安裝ADT(Android Developer Tools)外掛。這是Google提供的官方外掛,用於開發Android應用程式。如果您已經安裝了ADT外掛,請透過從Eclipse的Help選單執行Check for Updates來驗證您是否具有最新版本。


注意:如果您在ADT安裝過程中遇到任何問題,Android網站可以提供更多資訊。
下一步是安裝m2eclipse外掛。STS 2.5.2附帶此外掛。但是,如果您使用的是早期版本,或者已經安裝了該外掛,則需要驗證您是否擁有最新版本。Maven Integration for Android Development Tools需要0.12.0或更高版本。

我們還需要安裝一個外掛,這個外掛將所有這些功能整合在一起。設定好Android SDK並在Eclipse中配置好ADT外掛後,安裝Maven Integration for Android Development Tools外掛。

現在我們已經安裝並配置了所有必需的外掛,可以開始使用示例Android應用程式來測試我們的設定了。我們將使用為Part 1部落格文章建立的示例應用程式,但該示例應用程式已更新為執行在最新的Android平臺SDK 2.3.1 API Level 9上。如果您沒有安裝此SDK平臺,則需要在構建示例程式碼之前進行安裝。
執行以下命令來克隆Spring Mobile samples儲存庫。
$ git clone git://git.springsource.org/spring-mobile/samples.git spring-mobile-samples
如果git://URL不可訪問,您可能需要嘗試samples儲存庫的備用URL。
$ git clone http://http.git.springsource.org/spring-mobile/samples.git spring-mobile-samples
在Eclipse中開啟原始碼之前,請導航到spring-android-showcase/client專案目錄,並驗證專案是否可以使用Android Maven Plugin成功構建。
$ mvn clean install
假設專案已成功從命令列構建,我們就可以在Eclipse中開啟該專案了。


示例專案現在已載入到Eclipse中。您首先會注意到Package Explorer中專案上的一個大紅色“X”,這表示它目前無法構建。由於我們尚未為該專案配置Maven,因此這是預期的行為。
要啟用Maven依賴管理,請右鍵單擊Package Explorer中的spring-android-showcase-client,然後從上下文選單中選擇Maven -> Enable Dependency Management。
示例專案已包含以下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完成專案構建,您現在應該會在Package Explorer視窗中看到Maven Dependencies類路徑容器。
有幾點需要注意。首先,您可能會看到專案中有一個bin資料夾。您可以從Java Build Path屬性(如下所示)中看到預設的輸出資料夾是Target資料夾。因此,可以安全地刪除bin資料夾。
其次,您可能還會注意到專案中添加了一個JRE System Library類路徑容器。由於我們正在構建一個利用Android JVM的Android應用程式,因此您應該不需要引用JRE。如果您在Eclipse中使用ADT建立了新的Android應用程式,您會知道它不會為JRE新增類路徑容器。我已經與Maven Integration for Android Development Tools的開發人員Ricardo Gladwell討論過此事,他建立了一個ticket來研究這個問題。我已經從示例專案中刪除了JRE,沒有明顯的負面影響。但您可能需要關注該問題以獲取更多資訊。
要執行示例應用程式,只需在Package Explorer中選擇spring-android-showcase-client,然後單擊Run按鈕。示例客戶端中的Maven POM檔案配置為查詢名為“9”的Android Virtual Device (AVD)。如前所述,samples專案已更新為執行在Android Platform SDK 2.3.1上。您需要為此平臺配置一個AVD才能執行samples。
第一次執行應用程式時,您應該會在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、Android Development Tools (ADT) Plugin for Eclipse、Maven Android Plugin、Maven Integration for Android Development Tools外掛以及Maven Integration for Eclipse (m2eclipse)外掛。其中涉及許多元件,但一旦所有設定都配置好,就可以輕鬆地構建和部署到Android模擬器。如果您在Android應用程式中使用第三方庫,則應考慮使用這些工具來幫助管理這些依賴項。