如果某个APP的dex有多个在安卓5,0以上ART会合成一个oat文件。那么5.0以下会存在多个dex。
所以在5.0以下hook一个某个方法,而这个方法不在主dex,而存在分包dex。此时xposed会在没有加载分包dex的时候进行回调handleLoadPackage().此时类加载器并没有加载分包里面的类 会导致 XposedHelpers.findAndHookMethod 抛出异常。
解决办法:
(大家可以以下参考文献,这里不制作车轮子)
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操作
});
}
});
参考1
参考2
参考3