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