Android中的ODEX文件是什么?

时间:2012-03-06 23:24:09

标签: android virtual-machine android-source dalvik

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

3 个答案:

答案 0 :(得分:70)

The blog article大部分都是正确的,但并不完整。要完全了解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 - >释放。

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

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

答案 1 :(得分:17)

This Blog article解释了ODEX文件的内部结构:

  

什么是ODEX文件?

     

在Android文件系统中,应用程序包含了   扩展名.apk。这些应用程序包或APK包含某些   .odex文件,其假定的功能是节省空间。这些'odex'   文件实际上是应用程序部分的集合   在启动之前进行了优化这样做可以加快启动过程   预加载部分应用程序。另一方面,它也使   由于编码的一部分有困难,因此很难破解这些应用程序   在执行之前已经被提取到另一个位置。

答案 2 :(得分:0)

<强> ART

在ART中,.odex个文件包含:

  

包含APK中方法的AOT编译代码。

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

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

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

它说:

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

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