2016-03-20 86 views
0

我想使用Xposed钩住嵌套类的构造函数,但是我得到了嵌套类(SettingsAdapter)的ClassNotFoundException。但是,在嵌套类中还有另一种方法,它没有任何困难。我在构造函数调用中做了什么错误?嵌套类中的Xposed Hook构造函数

这是构造函数调用:

findAndHookConstructor("com.angrydoughnuts.android.alarmclock.ActivityAlarmSettings$SettingsAdapter", lpparam.classLoader, "SettingsAdapter", "android.content.Context", "java.util.List", new XC_MethodHook() { 

而这是其他工作方法的调用:提前

findAndHookMethod("com.angrydoughnuts.android.alarmclock.ActivityAlarmSettings$SettingsAdapter", lpparam.classLoader, "getView", "int", "android.view.View", "android.view.ViewGroup", new XC_MethodHook() { 

谢谢!

+0

是嵌套类的静态?另外:请在您的问题中格式化代码部分。 – F43nd1r

+0

不,嵌套类声明是'private final class SettingsAdapter extends ArrayAdapter {' – Erin

+0

@ F43nd1r对不起,再次挖掘它,但如果嵌套类是静态的,会发生什么?现在我用一个不同的钩子来解决这个问题。 – Erin

回答

0

内部类有一个隐式参数,它保存超级实例。在你的情况下,这将是对ActivityAlarmSettings的参考。

你可以试着

findAndHookConstructor("com.angrydoughnuts.android.alarmclock.ActivityAlarmSettings$SettingsAdapter", lpparam.classLoader, "com.angrydoughnuts.android.alarmclock.ActivityAlarmSettings", "android.content.Context", "java.util.List", new XC_MethodHook() { 

或只使用hookAllConstructors

顺便说一句:你到findAndHookConstructor通话似乎包括构造函数的名称。这不是预期的参数!构造函数名称始终是类名称,并且xposed不指望您传递它。

+0

删除构造函数名称并添加超级实例完美运行。非常感谢你! – Erin