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

设定共用库

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • Google 发布了正式版的 Android Studio,并宣示 Android Studio 成为了官方的开发...
    _WZ_阅读 9,726评论 0 2
  • 确实很容易迷茫。不知道从哪学起,不知道未来在哪里。但如果你一直站在原地,你就只能一直迷茫,而别人已经把你浪费在迷茫...
    歌窈窕之章阅读 249评论 0 0
  • 安妮在下午四点二十三分的时候给我发了一张照片,整张图看过去就是一片模糊的红色,,我的第一反应是:“这拍的什么东西?...
    卷毛维安阅读 4,506评论 12 112
  • 你喜欢简短的,我喜欢冗长的。 所以你的文字是精练的,我的文字则是罗嗦的。 所以你爱看的是电影,我爱看的是电视剧。 ...
    叶雅晨阅读 211评论 0 0