-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Difference between Xposed and VirtualXposed
weishu edited this page Jun 17, 2018
·
8 revisions
虽说 VirtualXposed 也能运行Xposed插件,但是与安装在系统路径的Xposed还是有一些差别,具体如下:
- VirtualXposed 不支持修改系统的Xposed模块。如重力工具箱,面板顶栏美化等。
- 在Android 8.0以上,由于类继承层次优化(CHA)的存在,hook单一实现的接口函数可能会存在问题(无法hook到);
典型的比如 Application.attach 需要替换为 ContextWrapper.attachBaseContext(目前VXP内部,针对Application.attach的hook会自动替换为对 ContextWrapper.attachBaseContext的Hook)。 - 短函数(函数体为空,或者函数体直接return常数/函数参数的函数) 的hook不够稳定。对于这种函数,加一句Log.d("fake", "just for vxp") 即可避免。
- VirtualXposed 目前hook native函数的兼容性不如Xposed好。大量使用JNI实现的Xposed模块在特定的手机上可能运行不够稳定。详见:#39
- IXposedHookZygoteInit 接口含义发生变化;在VirtualXposed中实际为进程启动的入口,并不能hook zygote进程。
- XC_LoadPackage 中的 isFirstApplication 永远为true。
- 完全不支持资源hook。
如何判断是否运行在VirtualXposed中?
if (System.getProperty("vxp") != null) {
// running in VirtualXposed
}