Android组件化demo实现以及遇坑分享

首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo

前言

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

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

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

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

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

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

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

App:

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

各个模块的module:

在这里需要注意,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的

image.png

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

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

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

如上面所说,在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设置

接下来就是跳转了,

至于fragment也是一样,

以及fragment的获取

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

可以使用if,else代替

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来寻找资源

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

资源文件:

再来看看内容对比

剩下就撸码吧。

完~

作者:TenzLiu
链接:https://www.jianshu.com/p/416...

阅读更多

2018年Android面试题含答案--适合中高级(下)

屏幕适配全方位解析

kotlin学习笔记-异常好玩的list集合总结

我的Android重构之旅:插件化篇

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

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

image


终端研发部
一条执着于技术+职场经验之路,从人工智能,Android,FFmpeg音视频解码,前端开发及微信小程序,同时覆...
1.2k 声望
74 粉丝
0 条评论
推荐阅读
Github重磅教程!从0到1,边学边实战!
据我所知,刚开始入门编程的都止步开始和选择,可选的很多,java,Python,前端,golang等等,如果没有好的选择可以和于小二来说话。如果没有什么好的选择,我建议你去学习java吧

爱编码的coder阅读 1.1k

封面图
程序员英语学习指南
动机为什么程序员要学习英语?工作:我们每天接触的代码都是英文的、包括很多技术文档也是英文的学习:最新最前沿的技术最开始都是只有English版本就业:学好英语让你的就业范围扩大到全球,而不只限于国内目标读...

九旬7阅读 689

安卓逆向之破解某成人APP播放次数限制
某成人水果APP非VIP用户存在播放次数限制,每天只能播放3次。超过3次需要购买VIP。 由于过于贫穷,于是抽空,对其安卓APP进行了逆向分析,最终成功破解了其播放次数限制。

悖论3阅读 1.4k评论 3

封面图
这一次,解决Flutter Dialog的各种痛点!
4.0版本做了重大调整,迁移请参照: SmartDialog 3.x 迁移 4.0本文内容已更新,文中内容及其代码皆为4.0用法前言Q:你一生中闻过最臭的东西,是什么?A:我那早已腐烂的梦。兄弟萌!!!我又来了!这次,我能自信...

小呆呆6661阅读 3.5k

封面图
网易云音乐开源全链路埋点方案-曙光埋点(dawn)
网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不...

云音乐技术团队2阅读 396

封面图
uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现
如果想要做一个app的话,可以有很多种选择方案,uni-app是其中的一个性价比高一些(坑多一些)的方案。本文记录一下,uni-app打安卓包以后,需要检查并下载更新,且显示进度条的功能。

水冗水孚2阅读 787

Flutter 让你的Dialog脱胎换骨吧!(Attach,Dialog,Loading,Toast)
4.0版本做了重大调整,迁移请参照: SmartDialog 3.x 迁移 4.0本文内容已更新,文中内容及其代码皆为4.0用法前言Q:你一生中闻过最臭的东西,是什么?A:我那早已腐烂的梦。兄弟萌!!!我又来了!这次,我能自信...

小呆呆6662阅读 2.4k

封面图
1.2k 声望
74 粉丝
宣传栏