是否存在xposed方法替换的条件replaceHookedMethod?

时间:2016-06-29 13:39:18

标签: java android xposed-framework xposed

我对xposed开发很新,我被困了:

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

我知道我可以在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;
    }
};

任何想法/建议? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用XC_MethodHookbeforeHookedMethod(..)

轻松实现您的目标

如果您在param.setResult(..)中拨打param.setThrowable(..)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中的条件,如果要替换方法,则设置结果。

相关问题