Android里Odex和Deodex的含义

一句话: odex文件是为了加速程序的运行,但是制作custom rom的时候,会麻烦一点;所以就有了deodex的机制出来,把odex文件重新塞回到APK里面去。

优化好了的话,两个的速度应该没啥明显差别。

What do “Odex” and “Deodex” mean? The All Inclusive Explanation

by Jim Farmer on 
tagged 

Show of hands, how many of you reading this have been browsing forums looking for ROMs only to come across a term completely foreign. Hey, it’s OK, I’ve been there too. In particular, the terms Odex and Deodex notoriously cause budding Android modders’ eyes to glaze over. So, what are they talking about?

To better understand deodex, you first need to know about odex.

Stock Android implements an odex file structure, with odex meaning “optimized” dalvik executable file. As your likely aware, Android apps on your device are packaged as .apkfiles. That all being said, what this means is that for pretty much all of your apks there is a corresponding odex file. This goes for the framework files in .jar format as well.

For instance, on this non-rooted Galaxy Nexus you’ll find

system/app/Phone.apk

as well as

system/app/Phone.odex

But what exactly are these odex files?
Well, when the Android OS needs to run your apps or utilize framework components, it has to parse (read/interpret) the compressed data stored in the .apk and/or .jar files. Having an odex file structure expedites this process by utilizing another file, the .odex file, which includes only the most critical data in an uncompressed format so the Android OS can quickly interpret that important information before parsing through the rest of the data held within the compressed .apks and .jars. Therefore, not all of the components of an app or framework are present in one file in an odexed sile system. I’ll elaborate on why I stress that in a moment. The goal of this scheme is to boot up faster,  and generally load applications more quickly and smoother.

Ok so what is deodex?
The odexed file structure works well as an optimization tool, except for in the case of theming. Odexed apps and frameworks present a unique problem to those wanting to theme because the aspect they want to theme is broken up into two files. Typically theming involves swapping out images for home made ones, however this is simply impossible in an Odexed environment. The solution is to DeOdex the file system and reunite all of the uncompressed critical data of an app or framework back into the compressed .apk or .jar file

On this rooted Galaxy Nexus running a custom ROM we see

system/app/Phone.apk

but no longer the corresponding .odex file. The reassembled files become classes.dex

So which should you run?
The fact of the matter is DeOdexing is really only useful for theming. It won’t speed up your phone any.Technically it should slow it down, but in reality the difference is unnoticeable. In my experience, all custom ROMs come pre-DeOdexed, and they also zipalign your apps at boot. Zipaliging is the process of reorganizing the manner in which the .apk is packaged to optimize it for being parsed faster by the Android OS. The funny thing is, it is comparable if not better than the odex file structure, so you get the best of both worlds; a themed ROM and the speed of an optimized file structure. So really the only considerable difference lies in theming capability, and that’s where the choice is yours.

Print Friendly

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>