1 模块化实现(module+TheRouter)
本套模块化方案实现来源于公司的业务需求,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。
既然是模块化开发,必然要考虑到各个module的开发,调试,迭代拓展及维护,module之间不仅需要做到业务代码隔离,还需要方便的跳转(路由引导模块),方便的传递数据(包括大容量的数据),能够独立编译调。最后,各个module,完成之后,一起打包到主APP即可。
2 本套模块化方案实现基于货拉拉开源的TheRouter实现,特点有
- 支持module单独作为Application编译调试
- 支持module在debug和release状态下对Application的调用方法完全一致,
- 支持动态注入路由
- 支持注解方式注入路由
- 支持module之间传大容量的数据
- 路由引导模块:自动生成module之间的跳转调用方法
- moduleEventBus:实现module之间通信
3 项目代码主体架构设计
app: 一个空壳,本身不实现任何业务逻辑,最终打包成完整的release APK
moduleshop:实现shop相关的业务逻辑,可单独编译成APK
moduleuser:实现user相关的业务逻辑,可单独编译成APK,和其它module通过router通信
routerguidercore:为各个module生成自动调用的方法
moduleEventBus:实现module之间通信
4 代码实现方案
4.1 module的apllication实现
我们希望实现以下功能
module能单独作为Application编译
module有自己的Apllication,并在里面初始化一些第三方SDK服务
module在debug和release状态下,业务层代码对application方法调用完全一样
module在release状态下,能够调用主App的application
4.1.1 首先gradle配置如下配置
def isDebug = rootProject.ext.isDebugType
if (isDebug) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
这样,在开发时,是一个application,在发布时,是一个library。处于debug状态时,通过 ./gradlew :moduleuser:assemble
(mac)命令即可编译打包。