【发布时间】: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