Xposed: как подключить метод, который находится в динамически загружаемом файле dex?
У меня есть две проблемы с Xposed Framework:
- Если метод, который я хочу подключить, находится в динамически загруженном dex, что означает, что dex загружается DexClassLoader или PathClassLoader на ходу, Xposed генерирует исключение ClassNotFound. Так как же подключить метод в таком файле dex?
- Если метод, который я хочу подключить, имеет пользовательские параметры типа, такие как
findAndHookMethod("com.XXX.XXX.XXX", lpparam.classLoader, "getXXX", CustomType.class, new XC_MethodHook() {
Eclipse дает мне сообщение об ошибке "CustomType не может быть разрешен". Так как это исправить? Должен ли я преобразовать dex в банку и поместить его в buildpath моего проекта?
Фон: я пытаюсь создать модуль Xposed для подключения метода в другом приложении.
1 ответ
Для #2 используйте отражение, чтобы получить объект Class для нужного параметра. Платформа Xposed предоставляет удобный вспомогательный метод для этого:
Class classCustomType = XposedHelpers.findClass("com.package.name.CustomType", lpparam.classLoader);
findAndHookMethod("com.XXX.XXX.XXX", lpparam.classLoader, "getXXX", classCustomType, new XC_MethodHook() {
//hook the method
});