使用 Android Studio 开发 Web 程序 - 设定

2016-11-05  本文已影响578人  _WZ_

设定共用库

接续前一篇文章,虽然源代码编写已大致满足工作上的需求,但是还有一项未来潜在性的需求要确认是否能够达成。目前在开发设计上的主流是面向对象编程,面向对象编程的基本精神是提高重用性,也就是在设计时要让源代码尽可能地异中求同。所以在不断地重构之下就会形成很多共用的 Class,共用的 Class 集合起来就会形成一个共用的 Package 来让不同的源代码项目来引用。

在 Android Studio 中项目文件结构的概念和 Eclipse 不太一样,Eclipse 可以在同一个 Workspace 里加入各种不同类型的源代码项目,并透过 Working Set 来做项目档的管理。在 Android Studio 里,Project 可类比成 Eclipse 的 Workspace、Module 则可类比成 Eclipse 的 Project。Android Studio 的 Project 虽然有像是 Working Set 的 Group 功能,但是以 Android Studio 的项目结构来看,似乎不太适合套用 Eclipse 的 Workspace 模式来管理,比较偏向一个项目开启一个 IDE 的 Instance。

如果要配合 Android Studio 源代码项目结构的特性来架构程序,就会形成一个问题是:跨项目共用的库文件夹结构如何规划?严格地来说,这不应该是一个问题,既然是要被跨项目使用,在被产品项目引用之前,就应该是处于经过测试、编译好的状态,需要使用的开发人员只要取得 Binary 档就行了。

只是现实和理想毕竟有差距,在库的初期大多是透过各个产品项目来累积经验,利用重构的手法把可以共用的部份抽取出来单独地放在库的项目里。在这种情况下,很多的设计思考是不周全的,所以需要在后续的产品项目中来发掘问题、持续地修正。

这时候,如果引用的是 Binary 文件在调试上就不是那么地直接,使用原始码来开发会是一项可预见的需求。要引用原始码势必就会需要把不在目前 Android 项目文件夹下的 Module 包含进来。

所以为了这个问题,在阅读了 JetBrains 的说明文件后,试了以下几个 Android Studio 上的功能:
【File -> New -> Import Module...】
【File -> Project Structure... -> Modules -> Add】
【Gradle Tool Window -> Attach Gradle project】
但不知道是不是 IntelliJ IDEA 和 Gradle 项目整合性还不够完整的关系,都会出现一些显示不如预期或没有反应的情况。唯一比较满意的是透过【Project Structure】的 Menu 功能,在汇入 Module 时选择已经有与 IDE 连结所产生的 *.iml 文件,而不是选择 Gradle 的 build.gradle。只可惜这项功能在 Android 类型的项目里,【Project Structure】的画面被调整过了,没有办法使用。

于是就退而求其次,改为手动编辑 Gradle Root Project 下的 settings.gradle。在 settings.gradle 里增加以下内容,其中 utils 是 IDE 里 Module 的名称,必须要是一个 Gradle 的 Project。new File 里的参数是 Gradle Project 所在的路径,可以是绝对路径,或是相对于 settings.gradle 所在的路径。

include ':utils'
project(':utils').projectDir = new File('../shared/utils')

以上的范例在实体的路径中会呈现以下示范的结构:

WebProject
├── build.gradle
├── settings.gradle
├── web-module
│   ├── build.gradle
│   └── src
│       ├── main
│       └── test
├── common-module
│   ├── build.gradle
│   └── src
│       ├── main
│       └── test
shared
└── utils
    ├── build.gradle
    └── src
        ├── main
        └── test

修改好了之后,按下 Toolbar 上的 Sync Project with Gradle Files 图示,在 Project Tool Window 就可以看到在原本树状结构第一阶只有 Root Project 一项,更新后多了一个平行的 utils 项目。

接下来就可以新增 Gradle Project 间的依存关系,原本应该可以透过【Project Structure】的 Menu 功能来修改,但是在 “以汇入方式产生的纯 Web 项目” 的情况下,无法将新增的 Depedencies 资讯反映回 Module 所对应的 build.gradle,应该是 IDE 的功能不正常造成的。这会使 CI 系统与开发时的建置结果出现不一致的情况,所以保险的作法还是手动编辑 build.gradle,要增加的内容可以参考以下的范例:

dependencies {
    compile project(':utils')
}

如果要参照的函式库只是使用在测试的目的上,则 compile 可以更换为 testCompile。

到目前为止,共用函式库的问题已经有了一个明确的解决方案,接下来将会进入到下一个研究主题:调试

上一篇下一篇

猜你喜欢

热点阅读