2012-03-06 144 views

回答

15

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

什么是ODEX文件?

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

+0

如果我希望我的应用程序具有相同的功能(应用程序在odex中运行而不是APK),该怎么做? – user1253435 2012-03-07 00:32:32

+0

你应该得到一个减号!达尔维克不会优化启动时间。代码在编译器中从高级语言到更低级别进行了优化,只是在这种情况下,dalvik的代码几乎是对机器代码的转换。这就是为什么你可以用C++创建应用程序的原因,而不仅仅是来自java。 – cox 2014-04-05 12:50:03

65

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,这是一个很好的主意,以最大限度地为用户安装的应用程序的内部存储空间,以ODEX双方你的框架JAR文件和应用程序的股票。如果你想主题,那么只需deodex - >应用你的主题 - > reodex - >发布。

要真正deodex,使用小型和baksmali:

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

+0

你能分享一下我们如何重新编译apk文件吗? – Basher51 2014-08-07 13:51:31

0

ART

艺术,.odex文件包含:

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

根据文档: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似乎工作,并给予一些有意义的反汇编(但也有一些垃圾分区NS)。