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");
}
});
其中方法 getAudioFile
和 getTrackNumber
在抽象中声明 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怎么做。
我试图在抽象 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");
}
});
其中方法 getAudioFile
和 getTrackNumber
在抽象中声明 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怎么做。