Android中的ODEX文件是什么?

use*_*435 74 android virtual-machine dalvik android-source

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

Nat*_*ong 77

博客文章大多是正确的,但并不完整.要完全了解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


the*_*ega 19

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

什么是ODEX文件?

在Android文件系统中,应用程序包含扩展名为.apk的包.这些应用程序包或APK包含某些.odex文件,其假定的功能是节省空间.这些"odex"文件实际上是在启动之前优化的应用程序部分的集合.这样做会加快启动过程,因为它会预加载部分应用程序.另一方面,它也使黑客攻击这些应用程序变得困难,因为编码的一部分在执行之前已经被提取到另一个位置.

  • 您确定“APK 包含某些 .odex 文件”吗?! (2认同)

Cir*_*四事件 6

艺术

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

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

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

file /data/app/com.android.appname-*/oat/arm64/base.odex
Run Code Online (Sandbox Code Playgroud)

它说:

base.odex: ELF shared object, 64-bit LSB arm64, stripped
Run Code Online (Sandbox Code Playgroud)

并且aarch64-linux-gnu-objdump -d base.odex似乎可以工作并进行一些有意义的拆卸(但也有一些垃圾部分)。