android组件化掘金,Android组件化demo实现以及遇坑分享

前言

前段时间看到最近一直很火的Android组件化然后就自己撸了一个demo,期间遇到了不少问题以及坑,在此记录一下,具体可以看项目源码。

组件化无非就是将我们App项目下的几个模块在com.android.application与com.android.library之间切换。如下图:分为modulelib(类库模块,一些基本工具类),modulemain(入口模块),moduleone(模块1),moduletwo(模块2),而App只是担当一个空壳工程。

743714f37abe8b74ada851780f5baaec.png

1:新建一个Android项目,但是这个App只是一个空壳工程

f5a1d7e54796ef81a0faf5f6cc936d76.png

2:接下来就是创建这几个module了,先都是以Android Library就行,然后就是在每个module的build.gradle下面修改

63451af7cb6c1366aa1e57ba2c06cb44.png

注意以为mudulelib只是作为一个根据库,所以不需要改,然后就是isModule从何而来,就是在整个项目的gradle.properties

5171c07b94eda5af5e964d72a936cb69.png

3:App项目App以及各个module之间的一来关系:

首先modulelib是负责引用一些第三方类库以及一些基本代码的负责和一些工具类

982fa458fc592ccf5b8a84507d86d06a.png

App:

89338c2114c911f3c37822a1826943a6.png

就是说当设置isModule=true的话各个模块处理modulelib都可以独立运行测试,也就是可以交给多人分开开发,最后只需要设置false就可以合并

各个模块的module:a87f33fe92348db30819862be55eab75.png

在这里需要注意,modulelib的引用类库我们使用的是api,而不是implementation,因为implementation只能在本module有效,但是你去到如App那里就无效了;有一些类库引用是只有的比如butterknife:

implementation'com.jakewharton:butterknife:8.8.1'

annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'

implementation我们需要在modulelib里面,但是annotationProcessor却需要在各个module里面都要写上。

4:项目App怎么以modulemain为入口:

这里注意我们的App下面的minifest是没有activity的

0803bdd5d3b6a57e202070c5f711a48c.png

而在modulemain的minifest下面有一个声明作为launcher的activity

e87df8793c99eb73500f503148880c83.png

这个程序已启动就会运行modulemain下面的MainActivity了。

5:各个module之间的交互怎么处理呢,比如一些activity的跳转,还有不同欧冠module之间获取fragment,这个上面也应该看到我是用的阿里的ARouter路由了,用法也很简单,官方链接:https://github.com/alibaba/ARouter。

如上面所说,在modulelib引用api'com.alibaba:arouter-api:1.3.1',然后在各个module下面annotationProcessor'com.alibaba:arouter-compiler:1.1.4'

然后在各个模块的build.gradle下的defaultConfig下添加

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName :project.getName() ]

}

}

复制代码

这个官方文档有说明的。

然后就是使用了,在module需要跳转的activity或是需要获取的fragment设置8c518c960b8a8635f061095aa4337d8a.png

接下来就是跳转了,

9f292935a5a65c67b481c08c592d0cff.png

至于fragment也是一样,

ae32f3686d75fa2b055c52594c237f07.png

以及fragment的获取

0d7f71968e31006f274b557d1168aa55.png

6:在module里面的资源id在switch,case无法使用:

ad76d101d0268eee650ff300605bb1ea.png

可以使用if,else代替

796d6c9506b6cdda8157ffe774008cfb.png

7:butterknife的使用问题

相信很多人都会用到butterknife注解,但是在module使用bb utterknife也会有坑,

如上面所说,在modulelib引用api'com.jakewharton:butterknife:8.5.1',然后在各个module下面annotationProcessor'com.jakewharton:butterknife-compiler:8.5.1'

在butterknife官方文档也有说明,如果是在module里面使用的话还要在各个module添加

applyplugin:'com.jakewharton.butterknife'

当然modulelib不需要,但是当你使用butterknife最新版8.8.1的时候就会因为这个报错,我也是在这里搞了很久马波的,原来是butterknife最新版不兼容的问题吧应该,只需要调低版本就好了,我这里是用了8.5.1

module使用butterknife还有一个R资源的问题,就是你butterknife注解使用的资源不能用R,而是要用butterknife提供的R2来寻找资源

4107bc0f6f26a8bf4f2152d42a56b956.png

c7b22d71b4978eee4db64f20eeb88948.png

8:之前说了每个module在设置isModule=true之后就可以单独运行调试了,那这个的monifest也需要有两套吧,

59057c964fea8e10ed5a99d84a9c6512.png

资源文件:

a01c5682e2ab7b1b4ce2c9259acdfe1c.png

再来看看内容对比

00b1a01d2b2aa34d1e95eafcd780b5d0.png

02646863ba0a39804dbd994f3e674f5b.png

剩下就撸码吧。

完~

作者:TenzLiu

原文链接:https://www.jianshu.com/p/416ca689ebc2

阅读更多

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值