前言
下载代码-----》码云下载
下载代码-----》github下载
本篇是Android最新的依赖架构设计,gradle版本要8.0以上,代码实现基于8.5.1。好多年开发过程中,我们碰到config.gradle,buildSrc,composing builds等依赖编译管理,目的在对引入库依赖可以统一版本,做到组件化(业务拆分可单独编译),模块化(功能库拆分解耦复用),单独编译测试业务组件打包apk。
直接说这次Catalogs依赖构建带来什么好处,gradle8后完全可用kotlin进行脚本kts的编写,gradle脚本直接用kotlin写,版本统一依赖。以简化插件代码方式插入各个库的build.gradle,精简写法,自由限制引入库。一次写完业务库后,就不需要再改代码也可以独立运行apk。
依赖构建目的
- 统一修改相关sdk依赖的版本号
- 统一 自动添加Library/module的依赖库,不需要写太多重复的脚本代码
- 依赖结构清晰,coreLib包括所有功能模块,apkBuild包括所有独立编译的业务组件,不需要修改代码去达到独立编译apk,容易出错
- 组件间可自由通信,这里没用外部sdk,因为组件通信 其实就是接口数据的回调,要明白后其实写法很简单,就少了类似Arouter的IProvider的拦截等,可关注coreLib/bridge
- 各个组件可完成内部的Application创建时的sdk初始化,统一监听所有Activity的生命周期,埋点逻辑等,关注ModuleInitDelegate
- 现阶段比Groovy的编译期构建耗时少,多少大项目打包几分钟的o(╥﹏╥)o
下为项目目录架构
构建的插件库
整个catalogs的重要逻辑在buildSrc插件库,但是不需要在其他module显示式的引入buildSrc,这是跟之前composingbuild的很大不同,更简单,内部实现插件代码类DefaultGradlePlugin.kt,只要库的build.gradle显示的引入该类就完成所有脚本代码的复用。苦groovy的升级语法很久了,用kotlin有多爽,不需要每次升级就不能执行task,各种报错。Dependencies类用函数的方式拆分和聚合相关的依赖库,升级版本号巨简单。
独立编译apk
大项目有上几十个libs,module几十个,单单把这些library的名字显示一屏幕都不够,所有我对他们在外包了文件夹coreLib和apkBuild,创建module时依然右键根项目,再拖动module到文件夹,然后去修改 settings.gradle文件对应的include路径。代码里除了壳app,还有业务组件登录apk-login,工具组件 apk-tools,有3个可独立编译,因为apk-login创建后移动过路径,那么点击run configuration删除错误路径的就行。
关注点
这里用的滴滴的路由库,阿里的Arouter早就停止维护了,组件化很重要就是路由库,不能因为gradle的升级就无法使用,这里滴滴一直更新我用着两年都没啥问题。
里面很多依赖库都是很新的版本号,我在外网github比较多,国内的开发者基本都是低版本代码跑到底,最近360插件库更新支持7.4了,很久没更o(╥﹏╥)o,真的是3年不开张,开张吃3年。
最后
本文总结了Catalogs的Android依赖管理方式,提供源码自行学习,有好的意见提出来,我也是不停地总结探索,找适合自己的开发模式,我不太喜欢依赖注入和牛油刀,全是注解,把布局文件都打乱了。
码云下载
github下载