现在大一点的app都有多个dex文件,如果用xposed去hook非默认dex文件的类就会发生ClassNotFoundError,要解决这个问题,我们需要拿到对应dex文件的上下文环境。
android在加载dex文件后会创建一个application类,然后会调用attach方法,attach方法的参数就是上下文context,而且attach方法是final方法,不会因为被覆盖而hook不到,拿到这个context就可以获取对应的classload,然后可以顺利hook到multidex的类
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
ClassLoader cl = ((Context)param.args[0]).getClassLoader();
Class<?> hookclass = null;
try {
hookclass = cl.loadClass("xxx.xxx.xxx");
} catch (Exception e) {
Log.e("jyy", "寻找xxx.xxx.xxx报错", e);
return;
}
Log.i("jyy", "寻找xxx.xxx.xxx成功");
XposedHelpers.findAndHookMethod(hookclass, "xxx", new XC_MethodHook(){
//进行hook操作
});
}
});