解决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操作 }); } });