模块化最重要的三个方面:
1.模块拆分:公用model sdk、公用资源module、去model化(map、json)
2.模块间通信:路由、ResultReceiver、ioc服务、aidl、广播 3.模块间库的依赖:aar级联依赖、aar对第三方的依赖传递、私有或者公有maven仓库、本地仓库;仓库比aar的好处是有版本号,各个项目可以根据需要随意引用
Android 模块化实践
1.结构图:给出了理想状况和实际状况下的结构图
2.模块拆分:要把每个模块看成独立的app、最小作用域、命名规范:资源文件最好加上模块名prefix, resourcePrefix "module1_"
3.模块间通信:业务模块之间通过路由、ioc服务实现通信,减少相互依赖,降低耦合性。
Android组件化之通信(多模块,多进程)
1.结构图:结构图演变过程
2.模块间通信:模块间单进程-LocalRouter, 模块多进程采用AIDL-WiderRouter;数据格式是json、url; 模块与模块之间只暴露对外开放的Action,通过注册Action和查找Action来进行通信,可以通过apt方式自动注册
Android 组件化开发实践
1.结构图:在gradle.properties中定义IsBuildMudle=false,release模式下是false,debug模式下true
2.模块拆分:
3.模块间通信:隐式启动、通过类名跳转、Scheme跳转
Android组件化之模块解耦和通信
1.结构图:
2.模块拆分:粒度从大到小
3.模块间通信:apt+动态代理的方式跨组件api调用 开源项目https://github.com/xiaoxiaogogo/Qiaoba
Android组件化方案
这个篇文章讲的比较简单,但是比较实用,尤其是把所有的第三方放依赖全放在commonlib中,比较粗暴实用
1.结构图: 2.模块拆分:
3.模块间通信:
综合网上的实现思路和我们的现状,给出以下方案供大家参考:
1.放弃aar依赖,aar层级依赖比较繁琐,每个module里面都要引入位置;aar会丢失依赖的第三方库,虽然可以 写脚本控制或者网上也有现成的插件,但还是比较繁琐。
2.用私有maven仓库,maven库就像引入第三方库一样,有版本控制
3.每个业务module或者功能module根据需要引入库,不再把对外暴露的接口耦合到component。
参考文章:
Android导出aar时嵌套引用的那些坑
Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库