我对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;
}
};
任何想法/建议? 提前谢谢!
答案 0 :(得分:3)
您可以使用XC_MethodHook
和beforeHookedMethod(..)
:
如果您在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中的条件,如果要替换方法,则设置结果。