eleme / lancet

A lightweight and fast AOP framework for Android App and SDK developers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cause: inner class in hook class com/xx/lancettest/AopLancet must be public static

Zihao-Wu opened this issue · comments

@TargetClass(value = "android.view.View",scope = Scope.SELF)
@Proxy(value = "setOnClickListener")
public void setOnClickListener(@Nullable View.OnClickListener l) {
    System.out.println("setOnClickListener:"+l+" l=");

    AopClickener a=new AopClickener() {
        @Override
        public void onClick(View v) {
            System.out.println("onClick:"+v);

        }
    };
    Origin.callVoid();
}

public static class AopClickener implements View.OnClickListener{

    @Override
    public void onClick(View v) {

    }
}

我想代理所有点击事件,可是编译一直报这个错Cause: inner class in hook class com/xx/lancettest/AopLancet must be public static,我这已经是public static class 了呀,不过就算编译通过,好像也实现不了这种效果,因为Origin.callVoid();无法传参,那还怎么实现这种功能呢,我只知道反射可以。

I got it .
public void setOnClickListener(@nullable View.OnClickListener l) {
l=new AopClickListener(l);
Origin.callVoid();
}

public static class AopClickListener implements View.OnClickListener{

    View.OnClickListener l;

    public AopClickListener(View.OnClickListener l) {
        this.l = l;
    }

    @Override
    public void onClick(View v) {
        l.onClick(v);
        System.out.println("setOnClickListener:"+v+" l="+l+" this="+this);

    }
}