在玩弄 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下启动应用的详细流程是什么?
我希望有人可以为我解决这个问题。非常感谢。