Xposed: как подключить метод, который находится в динамически загружаемом файле dex?

У меня есть две проблемы с Xposed Framework:

  1. Если метод, который я хочу подключить, находится в динамически загруженном dex, что означает, что dex загружается DexClassLoader или PathClassLoader на ходу, Xposed генерирует исключение ClassNotFound. Так как же подключить метод в таком файле dex?
  2. Если метод, который я хочу подключить, имеет пользовательские параметры типа, такие как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
    });
Другие вопросы по тегам