(二)组件治理之依赖层级分析

1、为什么要分析依赖层级

在组件化模式的开发架构下,组件依赖是海量的,比如我们的壳工程下面的依赖就有上千个,但他们之间的引用关系是不知道的,在业务开发过程中,对于其他业务组件的调用,我们约定以 api 方式对外提供能力,以便实现组件的迭代与升级。 但总会出现一些不合规的情况,某些业务组件直接依赖了其他业务的实现组件来触发能力,在壳工程下,由于是全依赖编译,这类问题是无法发现的,但一到业务组件新需求开发时,一些实现模块的类与方法早在上个版本就删除了,导致调用的地方就会出现类、方法等找不到的问题。

2、分析依赖层级带来的好处

分析依赖层级可以提前检查出哪些组件有不合规的引用情况,并且,在整个层级上可以看到哪块业务组件使用的频率高,哪些组件在调用自己的业务组件,以便在改造自己业务组件时提前预估影响面

3、如何分析依赖层级

  • 方案一:通过依赖 pom 分析

在业务开发过程中, 我们会将需要的子依赖添加到 dependencies 中,在发布组件时,可以将子依赖也打入 pom,这时,就可以通过分析组件 pom 来拿到依赖关系。

缺点:

pom 虽然可以拿到依赖关系,但他并不是很准确,比如在 dependencies 加入了依赖,代码里并没引用该依赖的代码,但依然会被打入 pom,并且,如果大家的 pom 中都有业务子依赖的话,就会造成各种版本混乱,甚至会出现覆盖掉壳工程的 release 组件版本,出现不可预知的错误,一般我们组件的 pom 都不带上子依赖,以壳工程的组件版本为准。

  • 方案二:通过字节码分析

通过字节码分析组件的 class 文件引用情况,如果有引导到外部的类、字段、方法等,就记录他们之间的依赖关系。 该方案的优点通过字节码分析出来的引用是真实引用。

4、字节码分析效果图

以下是通过字节码插件分析 group 为 androidx.activity 依赖的引用关系:

5、组件引用边界处理

在上面我们有提到业务组件依赖了其他业务的实现模块,这种能不能在业务开发阶段就发现呢?组件是无状态的,又怎么知道他是实现模块呢? 其实,我们可以通过在 META-INF 添加一个以组件 group 命名的文件,里面标明了组件是否是对外导出,效果如下:

然后我们在 upload 打包组件插件中检索所有的子依赖,如果 exported 为 false 的话就会打包失败并提醒。

总结:

后面章节会讲解插件分析实现的原理,并且能自动生成 plantUML 文件

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui