组件化知识点记录

andorid项目组件化过程中需要了解的各项知识点记录


期望的组件架构(基础款)

  • 第一层:App Module(壳工程,用来集成所有业务组件)
  • 第二层:所有业务Module
  • 第三层:Common Module
  • 第四层:基础Module(image/network/log/util…)

组件依赖关系是上层依赖下层,修改频率是上层高于下层

application和library之间的动态切换

可以打成aar集中调试,发布组件的arr包 到公司的maven仓库,然后在壳工程中就使用implemention依赖就可以了,或打成apk独立调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//build.gradle
if(is_Module.toBoolean()){
apply plugin: 'com.android.application'
}else{
apply plugin: 'com.android.library'
}


//build.gradle (某个业务module)
android {
...
defaultConfig {
...
if (s_Module.toBoolean()) {
applicationId "com.hfy.componentlearning.cart"
}
...
}

sourceSets {
main {
if (s_Module.toBoolean()) {
manifest.srcFile 'src/main/moduleManifest/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
...
}

各模块统一依赖

最直接的处理方式是,统一gradle文件,也就是所有的组件统一使用一个,除了一些特殊的依赖之外,其他的都放在统一的文件之中

可以参考此项目:
https://github.com/stewForAni/KotlinBox-WanAndroid

组件之间跳转与交互

ARouter:https://github.com/alibaba/ARouter

  • 可以跳转
  • 跳转拦截(登录检查)
  • 依赖注入IProvider,暴露服务,具体查看github(组件之间数据共享或者功能调用,逻辑可以写在一个中间层),也可参考:https://juejin.cn/post/6881116198889586701#heading-18
  • 获取Fragment
  • 等等……

组件之间资源命名

1
2
3
4
5
android {
....
resourcePrefix "module_xxx"
....
}

组件监听Application onCreate回调

使用AppLifeCycle插件
https://github.com/hufeiyang/Android-AppLifecycleMgr

参考文章:
https://juejin.cn/post/7142297951023415332
https://github.com/AbnerMing888/AndroidAssembly