Android快速组件化方案

本篇文章主要分享一个android快速组件化的方案,在当前的开发中,进行组件化开发能够很大程度的解耦,并且在业务逻辑的分工上更为明确,了解组件化开发势在必行。

在传统的开发上,我们往往在android studio中工程结构是这样的:

一个主module( app ),在app根据业务或者功能划分各个不同的包:packageA、packageB...在这样的单工程结构下,当代码越来越多的时候代码耦合度不免会越来越高,从而增加了单个业务维护的成本,同时对单处的修改需要整个工程编译。

而在组件化开发下,不仅可以避免这些问题,在项目的结构下也会清楚很多:

                           ---------组件A

app(主工程)-------------组件B

                           ---------组件C

.......

主工程依赖了各个不同功能的组件,主工程在使用它们时只需要调用暴露出来的接口就行,每个组件可以单独进行开发,比如组件A对应业务A,当程序员A对业务A进行开发时就可以去掉其他不必要的组件的依赖单独进行业务A的开发,也就是说每个组件单独开发,互不影响,也没有耦合。

一、如何让组件A单独运行,单独开发

当我们新建一个项目时,点开app目录下的build.gradle,其中第一行是:


然后我们添加一个测试组件化的module并依赖进来,依次点击file--->new---->new module,选择android library,取名为componentlib,点击finish。添加进来之后,打开componentlib下的build.gradle,查看第一行:


所以每个moudle下build.gradle文件的第一行内容决定了该module是可运行的主module还是被依赖的子module(也就是组件,我们说的组件A其实对应的就是mouduleA),那么当我们做componentlib的单独开发时也就是修改这一行的内容,但是不能每次都去手动改吧,而且当一个子module变成主module时势必也需要改变一些其他的内容(比如需要依赖其他的module等等),这些每次都手改实在也太麻烦了,其实对于整个工程来说,根目录下的gradle.properties内的内容是一个公共的引用,所以我们在这里定义一个值用来判断是集成开发还是组件单独开发:


isModule表示是否作为组件依赖,当isModule = true时,componentlib是一个app引用的组件;当isModule=false的时候,componentlib是单独运行的组件开发module。点开componentlib下的build.gradle再做如下修改:

最后把app下build.gradle中对componentlib的依赖去掉,修改完之后需要先点一下右上角的Sync Now,同步完毕之后工程中已经有两个可运行的module了:


在结构中app和componentlib的标识已经一致了。

二、manifest合并问题

但此时componentlib还不能真正的运行起来,试着去运行一下componentlib,android studio会提醒你没有默认的启动Activity,那么这里又有一个问题了,假设在componentlib下我添加了一个组件单独开发时用于测试业务A的ActivityB,这个Activity的启动标志和app中启动Activity是冲突的,如何解决呢,这里我们可以准备两份manifest文件,一份是集成开发下的,一份是组件单独运行的,我在componentlib下建立了一个module文件放置新的manifest文件,位置是src/main/module/AndroidManifest.xml:


然后点开componentlib/build.gradle,在android代码块中添加如下代码:


这里简单介绍下sourceSets这个关键字,在sourceSets中可以选择编译文件的位置或者是不编译哪些文件,在上面的图中,首先判断了是否是作为组件集成,是的话manifest用正常生成的,同时不编译我们自己添加的manifest文件(exclude表示不编译);如果不是则编译我们自己添加的manifest文件。

那么在module/manifest内我们就可以这么写:


同步之后并运行,可以发现componentlib已经可以跑起来了,现在工程中确实有两个可以运行的module:

这样子对于componentlib的业务就可以单独开发了,单独管理了。

三、其他问题

当我们采取组件化开发时会依次新建module,那这里就有配置的问题,每次都去修改build.gradle很麻烦,我们可以在根目录下的build.gradle文件里统一配置,在末尾加上:


在module/build.gradle中就可以这样引用:


第三方库的依赖也是一样的:

使用:

在各个组件开发完毕,集成开发的时候可能会有依赖冲突,这里可以用我们之前说的exclude关键字去重:

最后一个问题是各个module也就是各个组件之间的通讯,在开发过程中moduleA和moduleB对应两个业务,他们各自都依赖了一些公共的module(比如网络netwoirlib、工具toollib)但是互相彼此没有依赖,假设有一个业务场景是moduleA中的页面需要调到moduleB页面,这里就需要使用路由,这里主要说明路由使用的原因,推荐使用阿里的路由框架Arouter,地址:

GitHub - alibaba/ARouter: An android router middleware that help app navigating to activities and custom services.

大家可以了解其用法,对于Arouter,我的另一篇文章有简略分析Android 使用阿里ARouter页面跳转浅析 - 简书


这里分享了一个最简单基本的组件化方案,要把组件化玩的好还是要在开发中去具体实践,感谢您的阅读。

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

推荐阅读更多精彩内容