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

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 文件

相关推荐
烬奇小云3 小时前
认识一下Unicorn
android·python·安全·系统安全
顾北川_野15 小时前
Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
android
CYRUS STUDIO15 小时前
Android 下内联汇编,Android Studio 汇编开发
android·汇编·arm开发·android studio·arm
右手吉他15 小时前
Android ANR分析总结
android
PenguinLetsGo17 小时前
关于 Android15 GKI2407R40 导致梆梆加固软件崩溃
android·linux
杨武博19 小时前
音频格式转换
android·音视频
音视频牛哥21 小时前
Android音视频直播低延迟探究之:WLAN低延迟模式
android·音视频·实时音视频·大牛直播sdk·rtsp播放器·rtmp播放器·android rtmp
ChangYan.21 小时前
CondaError: Run ‘conda init‘ before ‘conda activate‘解决办法
android·conda
二流小码农21 小时前
鸿蒙开发:ForEach中为什么键值生成函数很重要
android·ios·harmonyos
夏非夏1 天前
Android 生成并加载PDF文件
android