java Xpose中的findAndHookMethod代码是错误的。帮助!!(无此类方法错误)

big*_*naa 0 java xposed

挂钩目标:ButtonClickCount(int a)

如果下面的代码

public int ButtonClickCount()
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

使用下面的挂钩代码成功。

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",

            new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    XposedBridge.log("before");
                }

                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XposedBridge.log("after");
                    param.setResult(10000);
                }
            }

    );
}
Run Code Online (Sandbox Code Playgroud)

但是,如果 ButtonClickCount 方法接收参数值,则会引发 NoSuchMethodError。

public int ButtonClickCount(int a)
{
    return a++;
}
Run Code Online (Sandbox Code Playgroud)

这是 findAndHookMethod 中的错误,我不知道要在代码中添加什么。

big*_*naa 5

我解决了。

示例代码1

public int ButtonClickCount() {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            new XC_MethodHook() 
Run Code Online (Sandbox Code Playgroud)

示例代码2

public int ButtonClickCount(int a) {
    return a++;
}
Run Code Online (Sandbox Code Playgroud)

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            int.class,
            new XC_MethodHook() 
Run Code Online (Sandbox Code Playgroud)

示例代码3

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView((int) R.layout.activity_main);
    this.btn = (Button) findViewById(R.id.btn);
    this.up = (TextView) findViewById(R.id.up);
    this.btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
Run Code Online (Sandbox Code Playgroud)

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            Bundle.class,
            new XC_MethodHook() 
Run Code Online (Sandbox Code Playgroud)

从上面的示例代码中可以看出,如果您要挂钩一个不带参数值的方法,您可以简单地输入类名、类加载器、方法名、对象。

但是,如果您从要挂钩的方法收到一个名为 int a 的 int 参数值 a,如示例代码 2 所示,则必须在 findAndHookMethod 中添加 int.class。如果您不添加它,您将在 Xposed 应用程序中看到 NoSuchMethodError。

如果您尝试像示例代码 3 中那样挂钩 onCreate 方法,则 onCreate 方法将采用 Bundle 类型的参数。所以,你需要在findAndHookMethod中添加Bundle.class。

该文档帮助我解决了这个问题。 https://api.xposed.info/reference/de/robv/android/xposed/XposedHelpers.html#findAndHookMethod(java.lang.String,%20java.lang.ClassLoader,%20java.lang.String,%20java.lang 。目的...)

如果这不起作用,请检查您的 Android Studio 版本。就我而言,我从版本 3.6.2 降级到版本 2.3.2,然后运行它。

我希望我的解决方案可以帮助某人。