Closed wjy000 closed 7 years ago
暂时没有办法,VirtualHook中hook插件的加载是在Application创建结束之后,hook不到attachBaseContext()
和onCreate()
大神,这个真的非常重要,我想做个操作虚拟化app的hook 插件.所以必须获得Application对象. 既然不能通过hook的方法获得Application,那能不能从va上面下手呢?我刚接触你项目几天,也一直研究了几天,对va和yahfa也不太了解,麻烦你指导一下
可以在VirtualApp基础上添加你的需求,VClientImpl()
中可以拿到Application对象
但是我直接调用VClientImpl().get() 获得的对象是被重写new了的,和加载的时候不是同一个,可以说的具体一点吗?谢谢
VClientImpl
中的mInitialApplication
是Application对象,具体阅读VirtualApp源码
找到一个完美的解决方案了,在hookInfo里面写一个Application静态变量,再加载插件的时候利用反射给这个变量赋值,当然任何数据都能通过这个方法进行赋值,给后来人一个参考吧,下面是代码 public void doHookDefault (ClassLoader patchClassLoader, ClassLoader originClassLoader, Application application) { try { Class<?> hookInfoClass = Class.forName("zpp.wjy.xvirtual.patch.HookInfo", true, patchClassLoader);
hookInfoClass.getMethod("init", Application.class).invoke(hookInfoClass.newInstance(), application);
String[] hookItemNames = (String[]) hookInfoClass.getField("hookItemNames").get(null);
for (String hookItemName : hookItemNames)
{
doHookItemDefault_xv(patchClassLoader, hookItemName, originClassLoader);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
大神,早上好 如题,麻烦解答一下,非常感谢