Android ASM插桩的初步使用(二)
上文说到,所有的都加上了插桩,这次主要是对部分方法加个自定义的注解。
先下载git上面的项目
注解
我也没学过注解,那么直接就建一个空的注解
public @interface TestASM {
}
然后再声明个方法,加上注解。
public class MyClass {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(1000);
}
@TestASM
void ok(){
}
}
重写visitAnnotation(String descriptor, boolean visible)
再声明一个boolean值,然后在这里面判断下是不是自己定义的注解
@Override
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
System.out.println(descriptor);
if (descriptor.equals("Lcom/example/lib2/TestASM;")) {
ok = true;
}else {
ok=false;
}
return super.visitAnnotation(descriptor, visible);
}
我也不知道Lcom/example/lib2/TestASM;这个也是方法签名表得来的,我不太会 就先输出 再判断。机智!
这样,再
@Override
protected void onMethodExit(int opcode) {
if(!ok){
return;
}
......
}
@Override
protected void onMethodEnter() {
if(!ok){
return;
}
super.onMethodEnter();
......
}
就是这样,感觉挺简单的 ??可能吧。
验证下结果:
OK,还是熟悉的味道。
ASM初步使用(一)