3

我对 xposed 开发很陌生,我被困住了:

我挂钩一个方法,检查一些东西,然后我想决定是用 just 替换它return true;还是让它运行。但我还没有找到设置条件来替换HookedMethod(..)

我知道我可以在 afterHookedMethod 或 beforeHookedMethod 中设置返回值,但这并不妨碍该方法运行。

这是我的简短示例:

private static boolean flag;

...

findAndHookMethod(Activity.class, "onKeyDown", int.class, KeyEvent.class, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        //check some stuff here and set flag = true or flag = false
    }

    protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
        //this methode should only be called if the flag is true
        return true;
    }
};

有什么想法/建议吗?提前致谢!

4

1 回答 1

4

XC_MethodHook您可以使用和简单地实现您想要的beforeHookedMethod(..)

param.setResult(..)如果调用或param.setThrowable(..)in ,将不会执行您挂钩的原始方法beforeHookedMethod(..)

不难猜测 是在原始方法之前/之后执行的。您可以使用“之前”方法来评估/操作方法调用的参数(通过 param.args),甚至阻止对原始方法的调用(发送您自己的结果)。 https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

我检查了XC_MethodReplacement的源代码,它确认了我在这个答案开头所做的陈述。它在内部扩展了 XC_methodHook 并使用以下实现:

    protected final void beforeHookedMethod(MethodHookParam param) throws Throwable {
        try {
            Object result = replaceHookedMethod(param);
            param.setResult(result);
        } catch (Throwable t) {
            param.setThrowable(t);
        }
    }

因此,您可以简单地检查 beforeHookedMethod 中的条件,并在要替换方法时设置结果。

于 2016-06-29T15:21:12.777 回答