解决Xposed Hook 多dex App出现 NoSuchMethod

现在很多的app都有多个dex文件,因为单个dex文件顶多存放60000多个方法,如果代码太多的话必须拆分dex。如果用xposed去hook非默认dex文件的类就会发生ClassNotFoundError,要解决这个问题,我们需要拿到对应dex文件的上下文环境。
android在加载dex文件后会创建一个application类,然后会调用attach方法,attach方法的参数就是上下文context,而且attach方法是final方法,不会因为被覆盖而hook不到,拿到这个context就可以获取对应的classloader,然后可以顺利hook到你需要的类

 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("DEBUG", "load class error", e);
                        return;
                    }
                    Log.i("DEBUG", "load success");
                    XposedHelpers.findAndHookMethod(hookclass, "some_method",
                                  new XC_MethodHook(){
                        //TODO: 相关hook操作
                    });
                }
            });