Android ART - 在/ dalvik-cache /?

时间:2015-11-19 10:49:21

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

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

根据我的理解,如果设备使用ART(Android> = 5.0),应用程序将从编译的燕麦文件开始(/ data / dalvik-cache / arm64 /)。

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

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

的输出

enter image description here

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

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

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

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

1 个答案:

答案 0 :(得分:3)

基于@Paschalis的评论,我在这里调查,燕麦文件确实是在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&amp; arm-Emulator)不再适用。

odex文件在/data/app/<APP>/oat/<ARCHITECTURE>/文件夹中作为'base.odex`

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

我仍然没有找到有效的参考资料,它基于实验和观察