Xposed调用私有方法不起作用

时间:2016-09-02 13:02:43

标签: hook private-methods xposed

我试图在抽象类中调用私有方法。我用过:

XposedHelpers.findAndHookMethod("com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity", lpparam.classLoader, "getTrackNumber",String.class, new XC_MethodHook(){
             @Override
             protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                 Object obj1= XposedHelpers.callMethod(param.thisObject,"getAudioFile","test");
             }
        });

方法getAudioFilegetTrackNumber在抽象类AbsTagEditorActivity

中声明

返回NoSuchMethodError:com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity#getAudioFile(java.lang.String)#bestmatch

课程SongTagEditorActivity扩展AbsTagEditorActivity

但是如果我尝试将方法getAudioFile

挂钩
XposedHelpers.findAndHookMethod("com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity", lpparam.classLoader, "getAudioFile",String.class, new XC_MethodHook() 
        {
            @Override
            protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable
            {
                XposedBridge.log("test:"+param.args[0]);
            }
        });

它有效

方法应该是这样的:

  @NonNull
  private AudioFile getAudioFile(@NonNull String paramString)
  {
      try
      {
          AudioFile localAudioFile = AudioFileIO.read(new File(paramString));
          return localAudioFile;
      } catch (Exception localException){}
      return new AudioFile();
  }
我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

快速浏览一下Xposed Helpers,可能是因为你试图调用方法的对象是子类而XposedHelpers.callMethod似乎不允许invoking private methods from superclasses

在挂钩“getTrackNumber”时尝试记录“this”对象类名,您可以尝试使用反射自己调用它。

答案 1 :(得分:0)

您无法通过Xposed挂钩抽象方法。如果要挂钩抽象方法,则需要在类中挂钩该方法,从而扩展该抽象类。接口相同的情况。您需要在实现该接口的类中挂钩方法。 此外,如果要调用私有方法,则需要通过反射设置它。只是谷歌如何做到这一点。