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 语言时有一些想法,有兴趣的人可以参考一下。
接下来将会进入到下一个研究主题:设定共用库。