Google 發布了正式版的 Android Studio,并宣示 Android Studio 成為了官方的開發工具。官方網站上也建議使用 Eclipse 搭配 ADT 的開發人員要移轉至 Android Studio,這代表著 Google 要讓 Android Studio 代替 Eclipse 成為開發 Android App 的主流 IDE。所以,要把手上的 Android App 項目移到 Android Studio 上開發是遲早的事,但這也衍生出了一個問題,就是其他非 Android 平臺的項目怎么辦?畢竟一個進階一點的 App 通常都是需要有 Server 端的服務做搭配,再復雜一點可能還會有 Library 類型的項目是 App 與 Server 項目所共用的。為了使未來開發的工作可以順暢的進行,看來花點時間搜集資料和研究是免不了的了!
開始進行研究之前還是要先訂個方向,不然茫茫網海還真不知要從何開始。既然主題是 “研究 Android Studio 是否可以取代原本在 Eclipse 上進行的 Web 開發工作”,如果要讓開發的工作可以有效率、有質量的進行,那 Android Studio 就必須要可以滿足以下幾個開發上的工作需求:
所以接下來就針對這幾項議題來進行研究和了解。
源代碼編寫
使用 Eclipse 這個老牌的 IDE 透過 Plugin 的支援,在同一個 Workspace 里就可以包山包海,同時進行多種不同類型的源代碼項目開發。當然 Google 選擇 IntelliJ IDEA 而不是 Eclipse 做為官方開發工具的基礎是有他的道理。IntelliJ IDEA 也是個受歡迎的 IDE,要像 Eclipse 可以包山包海同樣沒什么問題,只不過要付錢升級到 Ultimate Edition 才行。而 Google 看來是沒這么佛心會替廣大的 Android App 開發人員支付這筆費用,因為 Android Studio 是基于 Community Edition 擴充而來的。
看了一下 JetBrains 官網上 IntelliJ IDEA 的版本比較表,一些基本有關軟體質量的功能,例如:Unit Testing、Code Coverage、Issue Tracking、Git、GitHub,在 Community Edition 里就已經內建,是個好消息。但很不幸的 Java EE 不在 Community Edition 的支援范圍內,也就是不提供與 Web 開發相關的功能整合。
單就目前的資料來看,最糟的情況大概就是利用 Eclipse Project Interoperability 的功能在 Android Studio 及 Eclipse 這二個 IDE 間切換了。只是不知道能不能同時間用二個 IDE 開啟同一個項目,并且跨 IDE 進行調試的作業...?再者,如果只是專注在 Android App 的開發上,二個 IDE 的切換也許勉強可以接受。然而,行動裝置的平臺不是只有 Android 一種,為了不同的市場,跨平臺開發是一定會有的情境。iOS 要用 Xcode、Windows Phone 要用 Visual Studio,光是這些 IDE 快速鍵的使用就夠讓人混亂的了,更遑論每一種 IDE 都有自己的文件管理及操作邏輯,所以當然是在撰寫源代碼時能少一種是一種。
好在,以 IntelliJ IDEA Community Edition 為基礎的 Android Studio 雖然不支援 Java EE,但基本的 Java 開發,也就是在 Java 源代碼的編寫所提供的整合性是內建的,而且不比 Eclipse 遜色。同時 Android Studio 對于 Gradle 這個新興的自動化建置工具有很高的整合度。像是 Gradle 的項目類型可使用 Android Studio 匯入即可,已不再需要使用 Gradle 的 IDEA Plugin 來產生 File Based 的項目檔。Build Script 里套用的 Plugin 所提供的 Task 也可以在 IDE 中列出清單,再透過清單來執行指定的 Task,不一定要在 Terminal 中輸入指令。
就 “開發 Web 后臺來提供 App 服務” 的這項需求,Google 也有在 Android Studio 內建了一個 Web 項目的范本,叫 Google Cloud Module。只是和微軟的 Visual Studio 一樣,想要把所有的開發都綁在自家的平臺上。Visual Studio 提供的云端項目范本是綁定 Azure,而 Android Studio 則是專為自家云端平臺 App Engine 所客制化的。
其實有了 Gradle 這項工具,在使用 Build Script 預設內容的情況下,只要依照 Gradle 內定的文件夾結構來放置 Java 相關文件,就可以順利完成源代碼的建置,并且使用 IDE 的功能來執行。Google Cloud Module 這個范本所產生的文件夾結構其實和一般開發 Java Web 項目的結構相同,只是 Build Script 已預先設定好和 App Engine 有關的 Dependencies 及 Plugin。
以標準的 Java Web 項目來說,Gradle 內定文件夾結構如以下所示:
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
如果對 Gradle 很熟悉的話,可以先新增 Google Cloud Module 后再自行修改 Build Script,以省去建立文件夾結構的麻煩。因為 Android Studio 預設建立新項目時都是以 Android 平臺相關的應用程序為主,如果要在 Android Studio 里建立一個純 Web 的項目,以目前測試的版本就只能先在 IDE 外產生好 build.gradle 和必要的文件夾結構后,再以匯入的方式進行。匯入時 Android Studio 會將 Gradle 的項目資訊與 IDE 資訊連結起來,以便在 IDE 中進行各項開發上的工作,所以會產生額外的文件夾與文件。
當所建立的 Gradle Project 不是 Single Project,而是像上方文件夾結構所示的 Multi-Project Build,建議事先在 IDE 外部編輯好 settings.gradle,以利 IDE 可以正確解析項目的結構。在 settings.gradle 編輯完成后,可按下 Toolbar 上的 Sync Project with Gradle Files 圖示,以確認 Project Tool Window 有讀取最后的結果。
settings.gradle 內容示范如下:
include ':web-module', ':common-module'
以 RESTful 類型的后臺程序開發來說,這樣的功能及整合性已經達成進行源代碼編寫工作的低標了。但如果要牽涉到網頁輸出的部份,像是:JavaScript、CSS 的撰寫就真的要 Ultimate Edition 才有提供,或是試試看這個小工具。
在研究 Gradle 所使用的 Groovy 語言時有一些想法,有興趣的人可以參考一下。
接下來將會進入到下一個研究主題:設定共用庫。