VirtualXposed
VirtualXposed copied to clipboard
无法hook带可变参数的方法
反馈BUG之前,先issue里面搜看看有没有别人已经反馈过,重复的不予处理!!
问题描述
无法hook带可变参数的方法
复现步骤
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
test(null);
}
public static void test(String... params) {
Log.d("run test======");
}
}
public class Main implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals(BuildConfig.APPLICATION_ID)) {
return;
}
XposedHelpers.findAndHookMethod(ContextWrapper.class, "attachBaseContext", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("attachBaseContext");
Context context=(Context) param.args[0];
lpparam.classLoader = context.getClassLoader();
_handleLoadPackage(lpparam);
}
});
}
private void _handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundException {
hook_method(MainActivity.class.getCanonicalName(),lpparam.classLoader,"test", String[].class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
String stackTraceString = Log.getStackTraceString(new Throwable());
XposedBridge.log("MainActivity test afterHookedMethod=========" + stackTraceString);
}
}
);
}
private void hook_method(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback) {
try {
XposedHelpers.findAndHookMethod(className, classLoader, methodName, parameterTypesAndCallback);
} catch (Exception e) {
XposedBridge.log(e);
}
}
}
环境
机型:Pixel2 系统版本:10 ROM版本:10 Xposed 插件以及插件版本:82 VirtualXposed版本:0.20.2
补充
(别的需要描述的内容)
写完之后,请自己再读一遍自己写的,如果你自己都读不懂,就不用说修复了