video: https://www.bilibili.com/video/BV1KT4y1E7Q7?from=search&seid=16580040802900307721
web:https://www.jianshu.com/u/d0c911043d96
code:https://github.com/jiayuliang1314/PluginAsm.git
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现8
1.基本的asm操作
找到类,位置,插入代码
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现7
app/build/generated/intermediates/transforms/auto-register
1.transform任务需要做产物传递,啥事产物就是transform的翻译就是转化,你转化完了要交回给其他transform任务比如dextransform 和proguardtransform ,他们分别是jar转dex的任务和混淆任务
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现6
1.ASMPlugin找到差异
2.
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现5
1. 找到需要插入的类 和需要被插入的类
ScanClassVisitor
首先 我们通过ClassReader把整个class文件读取到内存,然后声明了一个ClassWriter用于代码写入,
然后自定义了一个ScanClassVisitor类访问器来访问类里面的所有元素,包括属性和方法
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现4
1.扫描jar包所有class文件,jar 用完close
gradlew assembleDebug --stacktrace
2.目录里面的class也遍历出来
3.过滤掉比如安卓自带的androdx里面的,META-INF这些都是jar包的签名文件 保证安全和监听jar包变化的
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现3
1.自定义一个transform任务 实现jar包和目录扫描
/build.gradle的配置信息AppExtension
def android = project.extensions.getByType(AppExtension)
def transform =new RegisterTransform(project)
android.registerTransform(transform)
2.遍历jar
遍历文件夹 intermediates\javac\debug\classes
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现2
插件步骤
1.删除多余目录
2.建立groovy目录
3.我们建立一个Plugin插件的基本文件必须是groovy文件
4.我们忘了一部 需要配置一下插件的buildgradle 我们直接去AutoRegister复制一份,定义了一个uploadArchives的Task 定义之后我们可以在gradle侧边栏找到他,我们编辑完之后点击uploadArchives这个任务
5.配置信息
插件调试
0.断点加好
1.一个remote调试器 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
这里vmoptions的这个暂停要加y就是yes,suspend=y
2.将remote加到一个任务,点debug
3.将remote也点debug
安卓Gradle插件开发-ASM字节码修改-AutoRegister实现1
1.gradle插件开发
2.gradle插件调试
3.gradle Transform任务的执行方式
4.ASM字节码修改