我是 Java 新手,这就是我认为 XPosed 的工作原理:
- 在zygote_init之前,钩住所有的api,插入xposed_before_xxx和xposed_after_xxx方法(其中xxx是api的名字)。
- 加载模块。加载钩子类,实现它并保存在zygote的内存中。对于每个注入方法,将其添加到 xposed_before/after_xxx 的私有列表中。
- 当一个新的应用程序加载(从 zygote 派生)时,它也派生了钩子类和钩子方法。
- 当应用调用 xxx 时,它实际上是先运行 xposed_before_xxx,而后者调用其私有列表中的每个注入方法。然后调用原始的api。然后调用 xposed_after_xxx,处理自己的列表。
因此,对于每个应用程序,从 zygote 分叉后的钩子类都是单独的。因此,静态成员不共享。因为每个钩子类在应用程序中只有一个实例,静态成员的行为与非静态成员相同。我对吗?
感谢您阅读我冗长而糟糕的英语...