VirtualXposed icon indicating copy to clipboard operation
VirtualXposed copied to clipboard

无法hook带可变参数的方法

Open liuhangb opened this issue 4 years ago • 0 comments

反馈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

补充

(别的需要描述的内容)

写完之后,请自己再读一遍自己写的,如果你自己都读不懂,就不用说修复了

liuhangb avatar Jan 04 '21 10:01 liuhangb