class-visitor
- 参数含义: transform-config.gradle 文件中有注释每个参数
- 支持功能:处理 class 中的内容
- annotation 替换注解方法
- replaceDefine 替换方法定义
- replaceCall 替换方法调用
- riskCheck 审核风险内容检查
- 解决问题:
- 以 maven 方式提供的三方库中有 bug 编译源码费时费力
- 发布应用商店时静态调用某些方法或字符串导致审核失败
- 统一替换注解方法实现
- 实现原理:没啥复杂的,主要实现 asm visitMethod
- 替换方法定义原有方法内容如何转为 lambda 的实现方式很少用,需要摸索
- 替换方法要新生成 2 个方法,注意 mv 调用顺序
proguard-filter
- 参数含义: {原有配置,替换后的配置}
- 支持功能:过滤所有 proguard 文件中的内容
- 解决问题:
- 依赖库中配置 keep .R$* 禁止 R 文件内联包,导致体积大
- 依赖库中配置 dontoptimize 导致代码优化不生效,方法不能内联等
- 其他配置导致 assumenosideeffects 等导致 Log 不能自动删除等
- 实现原理:插入到依赖树 ProguardConfigurableTask 步骤前面,替换 configurationFiles 字段数据
check-resources
- 参数含义:
- app=true 同名资源任一定义出现在 com.android.application 则报错 (资源优先级最高是能确定最终资源值的)
- module=true 同名资源任一定义出现在 com.android.library 目录则报错
- maven=true 同名资源全部定义出现在 maven 依赖库则报错
- 支持功能:检查重复资源
- 解决问题:大型项目 app 下不引用所有必要资源,module 又特别多。导致同名 res 不确定性覆盖。
- 实现原理:插入到依赖树 MergeResources 步骤前面,找到关键方法 resourcesComputer 方法把所有 res 归并到 dataMap ,判断哪些资源值定义了多份,根据资源目录位置分类报错