实现 android.build.tools 7.2 接口提供三种 gradle 插件源码

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 ,判断哪些资源值定义了多份,根据资源目录位置分类报错

项目地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值