【问题标题】:Android ART - Usage of .oat file in /dalvik-cache/?Android ART - 在 /dalvik-cache/ 中使用 .oat 文件?
【发布时间】:2015-11-19 10:49:21
【问题描述】:

在玩弄 Android ART 和在应用安装过程中创建的“本机”代码文件 .oat/.elf 时,我确实注意到了一些奇怪的地方。

据我了解,如果设备使用 ART (Android >= 5.0),则应用将从编译后的 oat 文件 (/data/dalvik-cache/arm64/) 开始。

这就是为什么我在检查应用程序的已用 fd 时并没有在那里找到文件时有点惊讶的原因。那里只列出了普通的 apk (/data/app//base.apk)。

检查我的“ls -l /proc/PID/fd”的输出

所以我想也许它只是没有在那里列出。所以我确实通过使用 dex2oat 工具编译另一个 classes.dex 自己交换了该应用程序的 oat 文件。

因此,即使在更改文件后,应用程序也可以正常启动,而不会出现任何奇怪的消息或错误(也在 logcat 中)。

对此有何解释? Android在ART下启动应用的详细流程是什么?

我希望有人可以为我解决这个问题。非常感谢。

【问题讨论】:

  • 如果你打印maps文件的输出,你可以看到base.odex是内存映射的!

标签: android native-code file-access android-runtime


【解决方案1】:

根据@Paschalis 评论,我在这里进行了调查,oat 文件确实是在 Android 5.0 设备(模拟器)上映射的内存:

a6af4000-a6af9000 r--p 00000000 1f:01 7366 /data/dalvik-cache/x86/data@app@my.app.works-1@base.apk@classes.dex

检查方式:

cat /proc/<PID>/maps | grep dex

遗憾的是,Android 6.0 设备(Nexus 5 和 arm-Emulator)不再适用。

odex 文件位于 /data/app/<APP>/oat/<ARCHITECTURE>/ 文件夹中,名称为“base.odex”

/data/app/app.app.works-1/oat/arm/base.odex

我还没有找到有效的参考,它是基于实验和观察

【讨论】:

  • 谢谢,很好,我也有同样的.odex文件问题,当我上传apk之后,我在游戏控制台中看到了这个问题的崩溃日志,那么如何解决它,跨度>
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多