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

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

做者:TenzLiu
原文连接:https://www.jianshu.com/p/416ca689ebc2java

前言

前段时间看到最近一直很火的Android组件化而后就本身撸了一个demo,期间遇到了很多问题以及坑,在此记录一下,具体能够看项目源码。android

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


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

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

 

注意觉得mudulelib只是做为一个根据库,因此不须要改,而后就是isModule从何而来,就是在整个项目的gradle.propertiesgithub


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

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


 

App:api


 

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

各个模块的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
image.png

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


 

这个程序已启动就会运行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设置

 


 

接下来就是跳转了,


 

至于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/416ca689ebc2

阅读更多

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

屏幕适配全方位解析

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

个人Android重构之旅:插件化篇

相信本身,没有作不到的,只有想不到的

在这里得到的不单单是技术!

image