Google 發(fā)布了正式版的 Android Studio,并宣示 Android Studio 成為了官方的開發(fā)工具。官方網(wǎng)站上也建議使用 Eclipse 搭配 ADT 的開發(fā)人員要移轉(zhuǎn)至 Android Studio,這代表著 Google 要讓 Android Studio 代替 Eclipse 成為開發(fā) Android App 的主流 IDE。所以,要把手上的 Android App 項(xiàng)目移到 Android Studio 上開發(fā)是遲早的事,但這也衍生出了一個(gè)問題,就是其他非 Android 平臺(tái)的項(xiàng)目怎么辦?畢竟一個(gè)進(jìn)階一點(diǎn)的 App 通常都是需要有 Server 端的服務(wù)做搭配,再?gòu)?fù)雜一點(diǎn)可能還會(huì)有 Library 類型的項(xiàng)目是 App 與 Server 項(xiàng)目所共用的。為了使未來開發(fā)的工作可以順暢的進(jìn)行,看來花點(diǎn)時(shí)間搜集資料和研究是免不了的了!
開始進(jìn)行研究之前還是要先訂個(gè)方向,不然茫茫網(wǎng)海還真不知要從何開始。既然主題是 “研究 Android Studio 是否可以取代原本在 Eclipse 上進(jìn)行的 Web 開發(fā)工作”,如果要讓開發(fā)的工作可以有效率、有質(zhì)量的進(jìn)行,那 Android Studio 就必須要可以滿足以下幾個(gè)開發(fā)上的工作需求:
- 源代碼編寫
- 設(shè)定共用庫(kù)
- 調(diào)試
- 測(cè)試
所以接下來就針對(duì)這幾項(xiàng)議題來進(jìn)行研究和了解。
源代碼編寫
使用 Eclipse 這個(gè)老牌的 IDE 透過 Plugin 的支援,在同一個(gè) Workspace 里就可以包山包海,同時(shí)進(jìn)行多種不同類型的源代碼項(xiàng)目開發(fā)。當(dāng)然 Google 選擇 IntelliJ IDEA 而不是 Eclipse 做為官方開發(fā)工具的基礎(chǔ)是有他的道理。IntelliJ IDEA 也是個(gè)受歡迎的 IDE,要像 Eclipse 可以包山包海同樣沒什么問題,只不過要付錢升級(jí)到 Ultimate Edition 才行。而 Google 看來是沒這么佛心會(huì)替廣大的 Android App 開發(fā)人員支付這筆費(fèi)用,因?yàn)?Android Studio 是基于 Community Edition 擴(kuò)充而來的。
看了一下 JetBrains 官網(wǎng)上 IntelliJ IDEA 的版本比較表,一些基本有關(guān)軟體質(zhì)量的功能,例如:Unit Testing、Code Coverage、Issue Tracking、Git、GitHub,在 Community Edition 里就已經(jīng)內(nèi)建,是個(gè)好消息。但很不幸的 Java EE 不在 Community Edition 的支援范圍內(nèi),也就是不提供與 Web 開發(fā)相關(guān)的功能整合。
單就目前的資料來看,最糟的情況大概就是利用 Eclipse Project Interoperability 的功能在 Android Studio 及 Eclipse 這二個(gè) IDE 間切換了。只是不知道能不能同時(shí)間用二個(gè) IDE 開啟同一個(gè)項(xiàng)目,并且跨 IDE 進(jìn)行調(diào)試的作業(yè)...?再者,如果只是專注在 Android App 的開發(fā)上,二個(gè) IDE 的切換也許勉強(qiáng)可以接受。然而,行動(dòng)裝置的平臺(tái)不是只有 Android 一種,為了不同的市場(chǎng),跨平臺(tái)開發(fā)是一定會(huì)有的情境。iOS 要用 Xcode、Windows Phone 要用 Visual Studio,光是這些 IDE 快速鍵的使用就夠讓人混亂的了,更遑論每一種 IDE 都有自己的文件管理及操作邏輯,所以當(dāng)然是在撰寫源代碼時(shí)能少一種是一種。
好在,以 IntelliJ IDEA Community Edition 為基礎(chǔ)的 Android Studio 雖然不支援 Java EE,但基本的 Java 開發(fā),也就是在 Java 源代碼的編寫所提供的整合性是內(nèi)建的,而且不比 Eclipse 遜色。同時(shí) Android Studio 對(duì)于 Gradle 這個(gè)新興的自動(dòng)化建置工具有很高的整合度。像是 Gradle 的項(xiàng)目類型可使用 Android Studio 匯入即可,已不再需要使用 Gradle 的 IDEA Plugin 來產(chǎn)生 File Based 的項(xiàng)目檔。Build Script 里套用的 Plugin 所提供的 Task 也可以在 IDE 中列出清單,再透過清單來執(zhí)行指定的 Task,不一定要在 Terminal 中輸入指令。

就 “開發(fā) Web 后臺(tái)來提供 App 服務(wù)” 的這項(xiàng)需求,Google 也有在 Android Studio 內(nèi)建了一個(gè) Web 項(xiàng)目的范本,叫 Google Cloud Module。只是和微軟的 Visual Studio 一樣,想要把所有的開發(fā)都綁在自家的平臺(tái)上。Visual Studio 提供的云端項(xiàng)目范本是綁定 Azure,而 Android Studio 則是專為自家云端平臺(tái) App Engine 所客制化的。
其實(shí)有了 Gradle 這項(xiàng)工具,在使用 Build Script 預(yù)設(shè)內(nèi)容的情況下,只要依照 Gradle 內(nèi)定的文件夾結(jié)構(gòu)來放置 Java 相關(guān)文件,就可以順利完成源代碼的建置,并且使用 IDE 的功能來執(zhí)行。Google Cloud Module 這個(gè)范本所產(chǎn)生的文件夾結(jié)構(gòu)其實(shí)和一般開發(fā) Java Web 項(xiàng)目的結(jié)構(gòu)相同,只是 Build Script 已預(yù)先設(shè)定好和 App Engine 有關(guān)的 Dependencies 及 Plugin。
以標(biāo)準(zhǔn)的 Java Web 項(xiàng)目來說,Gradle 內(nèi)定文件夾結(jié)構(gòu)如以下所示:
WebProject
├── build.gradle
├── settings.gradle
├── web-module
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── ...
│ │ └── webapp
│ │ ├── WEB-INF
│ │ │ └── web.xml
│ │ ├── css
│ │ └── jsp
│ └── test
│ └── java
│ └── ...
│ └── test
└── common-module
├── build.gradle
└── src
├── main
│ └── java
│ └── ...
└── test
└── java
└── ...
└── test
如果對(duì) Gradle 很熟悉的話,可以先新增 Google Cloud Module 后再自行修改 Build Script,以省去建立文件夾結(jié)構(gòu)的麻煩。因?yàn)?Android Studio 預(yù)設(shè)建立新項(xiàng)目時(shí)都是以 Android 平臺(tái)相關(guān)的應(yīng)用程序?yàn)橹?,如果要?Android Studio 里建立一個(gè)純 Web 的項(xiàng)目,以目前測(cè)試的版本就只能先在 IDE 外產(chǎn)生好 build.gradle 和必要的文件夾結(jié)構(gòu)后,再以匯入的方式進(jìn)行。匯入時(shí) Android Studio 會(huì)將 Gradle 的項(xiàng)目資訊與 IDE 資訊連結(jié)起來,以便在 IDE 中進(jìn)行各項(xiàng)開發(fā)上的工作,所以會(huì)產(chǎn)生額外的文件夾與文件。
當(dāng)所建立的 Gradle Project 不是 Single Project,而是像上方文件夾結(jié)構(gòu)所示的 Multi-Project Build,建議事先在 IDE 外部編輯好 settings.gradle,以利 IDE 可以正確解析項(xiàng)目的結(jié)構(gòu)。在 settings.gradle 編輯完成后,可按下 Toolbar 上的 Sync Project with Gradle Files 圖示,以確認(rèn) Project Tool Window 有讀取最后的結(jié)果。
settings.gradle 內(nèi)容示范如下:
include ':web-module', ':common-module'
以 RESTful 類型的后臺(tái)程序開發(fā)來說,這樣的功能及整合性已經(jīng)達(dá)成進(jìn)行源代碼編寫工作的低標(biāo)了。但如果要牽涉到網(wǎng)頁(yè)輸出的部份,像是:JavaScript、CSS 的撰寫就真的要 Ultimate Edition 才有提供,或是試試看這個(gè)小工具。
在研究 Gradle 所使用的 Groovy 語(yǔ)言時(shí)有一些想法,有興趣的人可以參考一下。
接下來將會(huì)進(jìn)入到下一個(gè)研究主題:設(shè)定共用庫(kù)。