Android Substrate是如何工作的?

3
在Android世界中,有两个流行的注入/劫持/钩子框架:Xposed和Android Substrate。
Xposed的机制在一个开发教程中有描述。
Android Substrate的作者在FAQ中比较了这两个框架,并在此处进行了比较,但他没有说它是如何工作的。
我只是想知道:
Android Substrate是如何工作的?
2个回答

3

1
尽管这两个框架之间存在许多相似之处,但钩取进程的实际实现有所不同,因此您可以同时运行这两个框架。然而,我认为 Substrate 相对于 XPosed 的最大优势在于 XPosed 删除了 Java 安全模型,而 Substrate 则保留了它,并且具有等待类加载完成后再挂钩方法的能力,正如 @xmllmx 在关于“正交性”的回答中所描述的一样。
为了让这变得更加容易,Xposed 提供了一组常见用例的助手:你可以在 VM 启动时、Zygote 接管时、特定包被加载时或命令行应用程序执行时挂钩。你需要知道其中哪个要使用,但仍不清楚如何挂钩通过动态运行时创建的类加载器加载的类(例如针对下载代码)。
相比之下,Substrate 则摒弃了所有这些东西,因为它提供了 MS.hookClassLoad API,允许您等待任何时间从任何类加载器中加载特定类。这使您能够以较少受到更改的方式编写挂钩,比较少出现简单错误,并且不受目标应用程序的开发者决定如何加载其程序代码的限制。
总之,在我看来,这两个框架非常相似,并且都是实现同一目标的可行选择。唯一重要的衡量因素是它们发布之间的时间跨度。XPosed已经存在了很长时间,并经过了试验和测试,在XPosed发布和Cydia Substrate for Android发布之间的中间时间内得到了验证。Jay Freeman(Saurik)公开承认这一点。
尽管如此,Cydia Substrate是XPosed的一个强大而极具可行性的替代品。此外,您不必仅限于为其中一个框架开发,因为(如先前提到的)这两个框架可以在设备上安装而不会产生冲突,因此为两者开发或仅尝试均不会妨碍您使用当前安装的XPosed模块、包或扩展程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接