文字版无声-安卓Gradle插件开发-ASM字节码修改-AutoRegister实现-笔记

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字节码修改

你可能感兴趣的:(文字版无声-安卓Gradle插件开发-ASM字节码修改-AutoRegister实现-笔记)