组件化初识
为什么使用组件化
对于Android插件化与组件化,都各有千秋,我之所以选择模组件化,完全因为插件化有点流氓了,各种热插拔,完全不把用户当人,埋了点,想给你什么功能就给你什么功能(其实插件对于开发者维护成本更高,搭建成本也就更高,所以还是先学习组件化)
组件化的优点
加快业务迭代速度,各个业务模块组件更加独立,不再出现业务耦合情况;
稳定的公共模块采用依赖库方式,提供给各个业务线使用,减少重复开发和维护工作量;
迭代频繁的业务模块采用组件方式,各业务研发可以互不干扰、提升协作效率,并控制产品质量;
为新业务随时集成提供了基础,所有业务可上可下,灵活多变;
降低团队成员熟悉项目的成本,降低项目的维护难度;
封装
项目架构
因为项目使用的是kotlin进行开发,所以uirouter和widegt、dblib需要依赖baselib,widegt是控件库,可以统一开发app开发中的view,需要用到资源文件,所以需要依赖res库。commonlib是基础库,集成uirouter、widegt、dblib。放一些base文件、联网封装、以及utils(原谅我uml图不会画)
2. 配置config.gradle
1. 在项目中新建config.gradle
2. 配置变量
ext{ isBuildApp = false //false:作为Lib组件存在, true:作为application存在 }
业务库gradle配置
配置lib与Application的转化
manifest的依赖,因为lib与Application所使用的manifest不同,需要区分对待
//lib与Application的转化if (rootProject.ext.isBuildApp) { apply plugin: 'com.android.application'} else { apply plugin: 'com.android.library'} //配置不同的manifest sourceSets { main { if (rootProject.ext.isBuildApp) { manifest.srcFile 'src/main/debug/AndroidManifest.xml' } else { manifest.srcFile 'src/main/release/AndroidManifest.xml' } } }
app的gradle配置
if (rootProject.ext.isBuildApp) { implementation project(':commonlib') } else { implementation project(':text') }
路由搭建:
因为业务库之间相互依赖关系不大,界面调整时需要使用路由,在这里我选择ARouter(阿里出品,必属精品)。当然不使用路由也可以,去配置scheme的方式启动也可以,但是这种容易出问题。因此使用uirouter进行路由表的维护。使用ARouter的注意事项,每一个业务库和app都要去依赖arouter-compiler,否则无法在该库中生成路由表。
使用
在basemodule进行修改,新建app与业务库,依赖业务库就可以。每个业务库独立开发,不相互影响,不会出现mvp、mvc、mvvm架构冲突,想怎么写就怎么写。需要依赖的第三方就放在commonlib中,大家都可以使用
使用时注意事项
application
网上有反射和使用baseApp两种方式,我这里使用的是baseApp这种方式,使用时只需要配置到Application中的manif就行
组件开发和打包
开发组件时只用让isBuildApp = true,就可以让组件独立运行,打relese包时需要让isBuildApp = false
FileProvider
现在7.0新出的FileProvider问题相信大家都可以理解了,很多时候都需要用到,因此只要我将它放在了commonlib中,在项目中使用时需要修改该authorities就可以了。
config.gradle配置
config.gradle不仅可以配置参数,还可以统一配置android和依赖,依赖放在这里可以方便我们去查看维护,很方便
共同学习,写下你的评论
评论加载中...
作者其他优质文章