XPosed钩子类中的静态成员是否在进程之间共享?

时间:2015-06-13 01:53:09

标签: java android hook instance xposed-framework

我对Java更新,这就是我认为XPosed的作用:

  1. 在zygote_init之前,挂钩所有api并插入xposed_before_xxx和xposed_after_xxx方法(其中xxx是api的名称)。
  2. 加载模块。加载钩子类,实现它并将其保存在zygote的内存中。对于每种注入方法,将其添加到xposed_before / after_xxx的私有列表中。
  3. 当一个新的应用程序加载(来自zygote的分支)时,它还分叉了钩子类和钩子方法。
  4. 当应用程序调用xxx时,它实际上首先运行xposed_before_xxx,后者调用其私有列表中的每个注入方法。然后调用原始的api。然后调用xposed_after_xxx,并处理自己的列表。
  5. 因此,对于每个应用程序,钩子类是从zygote分叉后的个体。因此,不共享静态成员。因为每个钩子类在应用程序中只有一个实例,静态成员的行为与非静态成员相同。我是对的吗?

    感谢您阅读我的长篇文章英语不好......

1 个答案:

答案 0 :(得分:2)

不,静态成员不会跨进程共享。他们在应用程序中充当静态成员,而不是跨应用程序。

每个应用程序都在自己的VM上运行,因此不会在进程间共享任何内容。

同样适用于Xposed钩子,你可以为一个应用程序而不是其他应用程序挂钩一个静态方法。

即使您将模块设置为在所有应用程序上应用挂钩,这些挂钩也将是不同VM中的不同实例。