jaop
Introduction: Jaop is a gradle plugin base on javassist for android aop
Tags:
javassist-gradle plugin-jaop 是一个基于 javassist 和 asm 的 gradle aop 插件,可以在特定的方法调用处或方法体内 编程
javassist 做简单的代码插入,asm 做操作数栈分析和字节码的转录
不会新增任何方法,秒杀 aspectj
兼容性更好
不支持 instant run
配置
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0' // 需要 1.5 及以上的 plugin
classpath 'jaop.gradle.plugin:gradle-plugin:1.0.4'
}
apply plugin: 'jaop'
用法
@Jaop //配置文件的开关
public class JaopDemo {
@After("demo.jaop.sample.MainActivity.onCreate") // hook 掉 onCreate 方法的方法体
public void replace1(MethodBodyHook hook) {
Button button = (Button) ((Activity) hook.getTarget()).findViewById(R.id.button);
button.setText("text replace by jaop");
}
@Replace("android.widget.Toast.makeText") // hook Toast makeText 方法的调用处, 替换 toast 的文本
public void replace2(MethodCallHook hook) {
Object[] args = hook.getArgs();
hook.setResult(Toast.makeText((Context)args[0], "hook toast", Toast.LENGTH_LONG)); // 设置返回值
}
}
详情请看 sample