我试图在抽象类中调用私有方法。我用过:
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();
}
我做错了什么?
提前致谢
答案 0 :(得分:0)
快速浏览一下Xposed Helpers,可能是因为你试图调用方法的对象是子类而XposedHelpers.callMethod似乎不允许invoking private methods from superclasses。
在挂钩“getTrackNumber”时尝试记录“this”对象类名,您可以尝试使用反射自己调用它。
答案 1 :(得分:0)
您无法通过Xposed挂钩抽象方法。如果要挂钩抽象方法,则需要在类中挂钩该方法,从而扩展该抽象类。接口相同的情况。您需要在实现该接口的类中挂钩方法。 此外,如果要调用私有方法,则需要通过反射设置它。只是谷歌如何做到这一点。