【问题标题】:How does Android Substrate work?Android Substrate 是如何工作的?
【发布时间】:2014-12-10 02:28:20
【问题描述】:
在 Android 世界中,有两种流行的注入/劫持/挂钩框架:
Xposed 和 Android 基板
a development tutorial 中描述了 Xposed 的机制。
Android Substrate的作者比较了in FAQ和here这两个框架,但没有说明它是如何工作的。
我只是想知道:
Android Substrate 是如何工作的?
【问题讨论】:
标签:
java
android
hook
code-injection
cydia-substrate
【解决方案2】:
虽然这两个框架之间有很大的相似之处,但挂钩进程等的实际实现差异足以让您能够让两个框架并行运行。
然而,我可以看到 Substrate 优于 XPosed 的最大好处是,XPosed 删除了 Java 安全模型,而 Substrate 保留了它,并且能够在挂钩之前等待类加载方法如以下来自@xmllmx 关于“Orthogonality”的回答中所述;
为了使这更容易,Xposed 为常见用例提供了一组帮助程序:您可以在 VM 启动、Zygote 控制、加载特定包或执行命令行应用程序时挂钩。您需要知道要使用其中的哪一个,目前还不清楚如何挂钩通过动态运行时创建的类加载器加载的类(例如针对下载的代码)。
Substrate 消除了所有这些,这要归功于 MS.hookClassLoad,它提供的 API 允许您随时等待从任何类加载器加载特定类。这允许您以一种不易更改的方式编写钩子,不易出现简单错误,并且不受目标应用程序开发人员决定加载程序代码的方式的限制。
总之,无论如何,在我看来,这两个框架在实现相同目标方面都是非常相似且可行的选择。将它们分开的唯一主要权衡因素是每个发布时间之间的时间刻度。 XPosed 已经存在了很长时间,并且在 XPosed 发布和 Android 版 Cydia Substrate 之间的过渡期经过了反复试验和测试,Jay Freeman (Saurik) openly acknowledges
不管怎样,Cydia Substrate 是 XPosed 的强大且极其可行的替代品。此外,您不必仅限于为其中一个框架进行开发,因为(如前所述)这两个框架都可以安装在您的设备上而不会发生冲突,因此为两者开发或简单地尝试它绝不会阻碍避免使用当前安装的 XPosed 模块、包或扩展。