2016-06-29 15 views
2

私はxposed発展に非常に新たなんだと私はこだわっている:置き換えられたメソッドreplaceHookedMethodの条件はありますか?

私はその後、私はちょうどreturn true;でそれを交換するか、それが実行してみましょうwheter決定したい、いくつかのものをチェックし、メソッドをフック。しかし、私は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; 
    } 
}; 

任意のアイデア/提案ですか? ありがとうございます!

答えて

3

あなたがXC_MethodHookbeforeHookedMethod(..)を使用して欲しいものを簡単な達成することができます:

あなたはbeforeHookedMethod(..)param.setResult(..)またはparam.setThrowable(..)を呼び出す場合、あなたが夢中にしている元のメソッドが実行されません。

元のメソッド の前後に実行されていると推測するのは難しくありません。 "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の状態を確認し、メソッドを置き換えたい場合は、結果を設定することができます。

+0

あなたの答えをありがとう!私はbeforeHookedMethod(...)でそれを実現できると思ったが、結果を設定するとフックされたメソッドを上書きしなかった。しかし、それは私の実装の問題だと思う、それは私がセットアップした別のテストプロジェクトで働いた – lleo