Закрытый метод вызова 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");
             }
        });

где методы getAudioFile а также getTrackNumber объявлены внутри абстрактного класса 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 ответа

Решение

Вы не можете подключить абстрактный метод через Xposed. Если вы хотите подключить абстрактный метод, вам нужно подключить метод в классе, который расширяет этот абстрактный класс. Тот же случай с интерфейсами. Вам нужно подключить метод в классе, который реализует этот интерфейс. Также, если вы хотите вызвать приватный метод, вам нужно сделать его доступным через рефлексию. Просто Google, как это сделать.

Если взглянуть на Xposed Helpers, это может быть потому, что объект, для которого вы пытаетесь вызвать метод, является подклассом, а XposedHelpers.callMethod, похоже, не позволяет вызывать закрытые методы из суперклассов.

Попробуйте записать имя класса объекта this, когда вы перехватываете getTrackNumber, и вы можете попытаться вызвать его самостоятельно, используя отражение.

Другие вопросы по тегам