关于虚拟机:Android中的ODEX文件是什么?

What are ODEX files in Android?

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


博客文章大多是正确的,但并不完整。要完全了解odex文件的功能,您必须了解应用程序文件(APK)的工作原理。

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

odex基本上是应用程序的classes.dex的预处理版本,可以为Dalvik执行。当应用程序被索引时,classes.dex将从APK归档中删除,并且它不会向Dalvik缓存写入任何内容。没有索引的应用程序最终会有2个classes.dex文件副本 - APK中的打包文件和Dalvik缓存中的已处理文件。由于Dalvik必须提取和处理classes.dex文件,因此首次启动也需要更长的时间。

如果您正在构建自定义ROM,那么为框架JAR文件和股票应用程序编制索引是一个非常好的主意,以便最大化用户安装的应用程序的内部存储空间。如果你想要主题,那么只需deodex - >应用你的主题 - > reodex - > release。

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

http://code.google.com/p/smali/wiki/DeodexInstructions


这篇博客文章解释了ODEX文件的内部结构:

WHAT IS AN ODEX FILE?

In Android file system, applications come in packages with the
extension .apk. These application packages, or APKs contain certain
.odex files whose supposed function is to save space. These ‘odex’
files are actually collections of parts of an application that are
optimized before booting. Doing so speeds up the boot process, as it
preloads part of an application. On the other hand, it also makes
hacking those applications difficult because a part of the coding has
already been extracted to another location before execution.


艺术

在ART中,.odex文件包含:

contains AOT compiled code for methods in the APK.

根据文档:http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure

此外,它们似乎是常规共享库,因为如果您获得任何应用程序,并检查:

1
file /data/app/com.android.appname-*/oat/arm64/base.odex

它说:

1
base.odex: ELF shared object, 64-bit LSB arm64, stripped

aarch64-linux-gnu-objdump -d base.odex似乎工作,并提供一些有意义的反汇编(但也有一些垃圾部分)。