Xposed调用私有方法不起作用

Xposed call private method not working

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

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 在抽象中声明 class AbsTagEditorActivity

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

class 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();
  }

我做错了什么?

提前致谢

快速浏览一下 Xposed Helpers,可能是因为您尝试调用该方法的对象是一个子class 并且 XposedHelpers.callMethod 似乎不允许 invoking private methods from superclasses.

当你 hook "getTrackNumber" 时尝试记录 "this" 对象 class 名称,你可以尝试使用反射自己调用它。

您不能通过 Xposed 挂接抽象方法。如果你想挂钩一个抽象方法,你需要挂钩 class 中的方法,它扩展了那个抽象 class。与接口相同的情况。您需要挂钩实现该接口的 class 中的方法。 此外,如果您想调用私有方法,则需要将其设置为可通过反射访问。只是google怎么做。