使用相同架构的其他设备上的OAT文件是否相同?

Are the OAT files on other devices using the same architecture the same?

其他使用相同架构的设备上的OAT文件是否相同? 如果不一样,你能告诉我为什么吗?谢谢。

还有一个问题,ODEX文件在其他使用相同架构的设备上是否相同

很可能不会。燕麦文件在很大程度上取决于编译它的设备框架。 dex 文件使用的任何框架 classes 的任何差异都可能导致 oat 文件不同。

odex的情况也是一样,我比较熟悉,可以举个更具体的例子。

在 odex 文件中进行的具体优化之一是针对虚方法调用,将要调用的方法的详细信息(class、名称、参数、return 类型)替换为要调用的方法的简单 vtable 索引。

class 的 vtable 布局当然取决于 class 中定义的所有虚拟方法。因此,例如,有一个 class A 通常有 5 个虚拟方法,但其中一个 OEM 添加了第 6 个方法(例如,可能是一个受保护的 "helper" 方法,无论如何),那么就有可能更改所有其他方法的 vtable 索引,这意味着引用 class 的任何 odex 文件在两个设备之间可能会有所不同。