简单介绍
我们都知道 gradle 打包过程由一系列的 task 组成,我们可以通过自定义Gradle Tansform 在编译期间做一些操作。比如可以在编译期间更改生成的 Apk 内容,如资源检查、dex 插桩。
实现步骤
两种方式,一种是要发布到 maven 仓库,这样其他项目也可以使用改插件;另一种本地的一个项目,接下来看看本地的这种实现。
需求:实现项目中每个类前面插入一个字符串属性
- 创建一个Groovy模块
- 创建一个GatherPlugin
- 创建一个GatherTransform
- 修改字节码(如:插入字符串)
创建一个名为 buildSrc 的子项目,在这个子项目中编写插件代码,buildSrc 是 Gradle 插件的默认目录,会把这个目录下的插件自动添加到当前项目中去,我们可以在别的子项目中直接使用。
1 | ├── buildSrc |
build.gradle 内容如下:
1 | apply plugin: 'groovy' |
然后在 src/main/groovy 目录下创建自定义的 Plugin 并注册 Tansform
1 |
|
看下 Tansform 的实现
1 | package pub.hanks.buildsrc |
最后在项目中添加插件的引用
1 | apply plugin: pub.hanks.buildsrc.WarningPlugin |
参考文章
Gradle Transform API :直接修改 class 文件
字节码增强技术探索
文章来自: https://hanks.pub