android - Android 中的 ODEX 文件是什么?

标签 android virtual-machine android-source dalvik

在安装了一些android 应用程序后,我发现它会在智能手机中变为odex 文件(而不是apk)。 它是如何发生的?谁能教教我,我很感兴趣。

最佳答案

The blog article大部分是正确的,但不完整。要全面了解 odex 文件的作用,您必须了解一点应用程序文件 (APK) 的工作原理。

应用程序基本上是经过美化的 ZIP 文件。 Java 代码存储在名为 classes.dex 的文件中,该文件由 Dalvik JVM 解析,处理后的 classes.dex 文件的缓存存储在手机的 Dalvik 缓存中。

odex 基本上是应用程序 classes.dex 的预处理版本,可为 Dalvik 执行做好准备。当应用程序被 odexed 时,classes.dex 会从 APK 存档中删除,并且不会将任何内容写入 Dalvik 缓存。一个没有被 odexed 的应用程序最终会得到 2 个 classes.dex 文件的副本——一个在 APK 中打包,一个在 Dalvik 缓存中处理。由于 Dalvik 必须提取和处理 classes.dex 文件,因此第一次启动也需要更长的时间。

如果您正在构建自定义 ROM,最好同时对您的框架 JAR 文件和库存应用程序进行 odex,以便为用户安装的应用程序最大化内部存储空间。如果你想要主题,那么只需 deodex -> 应用你的主题 -> reodex -> 发布。

要实际 deodex,请使用 small 和 baksmali:

https://github.com/JesusFreke/smali/wiki/DeodexInstructions

关于android - Android 中的 ODEX 文件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593527/

相关文章:

android - 从 AppInventor 中的 API 中提取数据

android - 单击 RecyclerView 项目后打开对话框?

azure - Azure 中虚拟机的默认区域

Python套接字编程: Upload files from Client to Server

linux-kernel - AOSP Android 10 中的内核配置在哪里?

android - 如何查看核心 Android 类?

java - 我可以在前一个的 onanimationEnd 回调中启动一个 Android 动画吗?

node.js - 使用VM模块运行Node.js脚本: "ReferenceError: require is not a function"

android - 自定义 AOSP 的开发人员如何将其更改置于版本控制之下?

android - OpenCV 未定义引用