2016-03-20 2 views
0

Я пытаюсь подключить конструктор вложенного класса с помощью Xposed, но я получаю исключение ClassNotFoundException для вложенного класса (SettingsAdapter). Однако во вложенном классе есть другой метод, который не вызывает затруднений. Что-то не так, что я делаю с вызовом конструктора?Xposed Hook Constructor in Nested Class

Это вызов конструктора:

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

- это вложенный класс static? Также: пожалуйста, отформатируйте разделы кода в своем вопросе. – 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