在网上找解决方案时,看到了看雪论坛一位大佬的文章,传送门:https://bbs.pediy.com/thread-215039.htm
大佬的文章写得比较长,比较细,我简要总结了下解决方案,如下:
1.利用类加载器,以你要加载的类的包名字符串作为参数,加载安卓app的自定义类;
例如:
final Class<?> ArgClass= XposedHelpers.findClass("aqcxbom.xposedhooktarget.ArgClass", loadPackageParam.classLoader);
2.将该加载后的类作为参数传递,即可;
全部实现代码如下:
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
//判断包名是否一致
if (loadPackageParam.packageName.equals(mStrPackageName)) {
LOGI("found target: " + loadPackageParam.packageName);
final Class<?> ArgClass= XposedHelpers.findClass("aqcxbom.xposedhooktarget.ArgClass", loadPackageParam.classLoader);
final Class<?> ArrayList= XposedHelpers.findClass("java.util.ArrayList", loadPackageParam.classLoader);
final Class<?> Map= XposedHelpers.findClass("java.util.Map", loadPackageParam.classLoader);
//包名一致时查找是否有匹配参数的类及函数
XposedHelpers.findAndHookMethod(mStrClassPath, //类路径
loadPackageParam.classLoader, //ClassLoader
mStrMethodName, //目标函数名
"[[Ljava.lang.String;", //参数1
Map, //参数2
Map, //参数3
Map, //参数4
ArrayList, //参数5
ArrayList, //参数6
ArgClass, //参数7
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param); //这个函数会在被hook的函数执行前执行
LOGI("beforeHook");
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);//这个函数会在被hook的函数执行后执行
LOGI("afterHooke param: ");
}
});
}
}
}