領先一步
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 外掛的大量有價值的資訊。