3

私はxposed開発にまったく慣れていないので、行き詰まっています:

私はメソッドをフックし、いくつかのものをチェックしてから、それを単に置き換えるreturn true;か、実行させるかを決定したいと思います。しかし、条件を replaceHookedMethod(..) に設定する可能性が見つかりませんでした

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(..)で呼び出した場合、フックした元のメソッドは実行されませんbeforeHookedMethod(..)

元のメソッドの前/後に実行されることを推測するのはそれほど難しくありません。「before」メソッドを使用して、メソッド呼び出しのパラメーターを評価/操作し (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 に答える