When I was looking for a solution online, I saw an article from a big guy on Kanxue Forum, the portal: https://bbs.pediy.com/thread-215039.htm
The article written by the big guy is relatively long and detailed. I briefly summarized the solution as follows:
1. Use the class loader to load the custom class of the Android app with the package name string of the class you want to load as a parameter;
E.g:
final Class<?> ArgClass= XposedHelpers.findClass("aqcxbom.xposedhooktarget.ArgClass", loadPackageParam.classLoader);
2. Pass the loaded class as a parameter, that's it;
The entire implementation code is as follows:
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: ");
}
});
}
}
}