2015/3/18

使用 Android Studio 開發 Web 程式 - 程式碼編寫

Google 發佈了正式版的 Android Studio,並宣示 Android Studio 成為了官方的開發工具。官方網站上也建議使用 Eclipse 搭配 ADT 的開發人員要移轉至 Android Studio,這代表著 Google 要讓 Android Studio 代替 Eclipse 成為開發 Android App 的主流 IDE。所以,要把手上的 Android App 專案移到 Android Studio 上開發是遲早的事,但這也衍生出了一個問題,就是其他非 Android 平台的專案怎麼辦?畢竟一個進階一點的 App 通常都是需要有 Server 端的服務做搭配,再複雜一點可能還會有函式庫類型的專案是 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 內容示範如下:


以 RESTful 類型的後台程式開發來說,這樣的功能及整合性已經達成進行程式碼編寫工作的低標了。但如果要牽涉到網頁輸出的部份,像是:JavaScript、CSS 的撰寫就真的要 Ultimate Edition 才有提供,或是試試看這個小工具

在研究 Gradle 所使用的 Groovy 語言時有一些想法,有興趣的人可以參考一下。

接下來將會進入到下一個研究主題:設定共用函式庫

0 意見:

張貼留言