Android 的 ROM 中正常的软件都是 apk 内包含有一个 classes.dex,但也有时会没有(比如 MIUI 等),却有很多 .odex 文件,相对于 apk 中的 .dex 文件而言,这个 .odex 有什么作用呢?
首先分析一下 apk 文件的安装过程。安装 apk 包,会在 /data/app 目录复制一份安装包,在 /data/dalvik-cache 目录放一个解压出来的 classes.dex,如果有 .so 文件,还要复制到对应的文件夹。但是,如果把一个 apk 分解为 apk + odex,情况就大大不同了,这时完全可以把 apk 内的 lib 文件夹和 classes.dex 文件删掉,然后签名,配合 odex 一起使用,当然 so 文件也不能丢。所以:正常的 apk 包 = 原包 + classes.dex + so
分解后的apk 包 = 分解包 + odex + so
关于 .odex 文件
.odex 是 Android 上的应用程序 apk 中提取出来的文件,即将 apk 中的 classes.dex 文件通过 dex 优化过程将其优化生成一个 .odex 文件单独存放,原 apk 中的 classes.dex 文件可删除或保留。
这样做可以加快软件的启动速度,预先提取,减少对 RAM 的占用,因为没有 odex 的话,系统要从 apk 包中提取 dex 再运行。
odex 化
简单说,原本系统恢复出厂设置后第一次开机需要先提取 classes.dex 出来,而 odex 化就是现在你提前把它提取出来了,系统启动或者程序运行加快的原因也就在此。提取后可以把 apk 内的 .dex 删除,以达到节省空间的目的。如果不 odex,那么系统还是会自动提