oat文件中非编译方法的目的是什么?

时间:2018-01-09 07:10:16

标签: android dalvik android-runtime

我正在尝试分析oat格式以了解android应用程序加载器的工作原理。 我认为Android应用程序在Android运行时(ART)中都被编译为本机代码作为oat文件。

然而,我发现oat文件中有原始的dex文件,燕麦类头中也有非编译方法。

此外,oat类头中有一个类型字段告诉 编译了多少部分方法。 此类型字段的存在意味着可以存在未编译的方法 在燕麦文件中。

这是描述类型字段的图 这是Paul Sabanal在2014年黑帽会议上透露的。

The type field of oat class header

以下是我的oatdump在Android 6.0中显示oat文件的内容

Compiled method in oat file

Non-compiled method in oat file

您可以看到未编译的方法没有任何本机方法偏移字段。

我找不到任何关于燕麦文件的官方文件。

总结一下,问题是

  • 为什么oat文件中有非编译方法?
  • 如何在Android Runtime期间执行非编译方法?
  • 为什么编译时不能通过dextooat编译非编译方法?
  • 有没有简单的例子无法编译成本机代码?

提前感谢您的回答。

0 个答案:

没有答案