odex 是 Optimized dex 的缩写,是优化后的dex文件,通过将 apk 中的 dex 文件进行 odex 优化,可以提升程序的启动速度,同时减小空间的占用odex 文件依赖系统中已经编译好的系统模块,一般是 /system/framwork 目录下的 jar 包,目的也是为了提高虚拟机的运行速度,可以说从 class 到 dex 是针对 Android 平台的一种通用优化,odex 是 dex 文件在不同手机上做的特殊优化。低版本的android系统是没有odex的,有了这个odex调试系统的各种jar包很麻烦,所以如果要调试系统的各种jar包,可以把这个去掉,可以在BoardConfig.mk中添加
WITH_DEXPREOPT := false
为了反编译 odex 我们需要准备以下工具:
baksmali和smali
baksmali-xxx.jar 将 odex 转换为 smali 文件
smali-xxx.jar 将 smali 文件打包成 dex 文件
我试了比较高版本的baksmali,发现不能使用,出现了下面的错误
在网上找了半天,找不到原因,后来把版本换成baksmali-2.1.3.jar,没出现上面的错误了,但是出现了这个
意思是:找不到 /system/framework/core.jar ,这个 jar 是在 /system/framework/arm/boot.oat 中,当然 boot.oat 不只包含 core.jar ,还有 framework.jar ,core-libart.jar 等一系列 jar所以我们将命令改变一下,记得将boot.oat 从系统导出来。
java -jar baksmali-2.1.3.jar -x KSTFactoryTest_Aging.odex -d framework/arm/ -c framework/arm/boot.oat
成功后会出现一个out目录,然后用smali-2.1.3将out目录重新打包
java -jar smali-2.1.3.jar out -o classes.dex
这样就成功的将odex文件转换成dex文件。然后将dex文件直接复制到apk中
将这个app重新签名,就可以使用了。这是在8.0之前的系统,在这之后新增了vdex,没有发现可以反编译的方法。
baksmali和smali下载:https://pan.baidu.com/s/1Pxc2THFHaWAtX2R-JFb3hw
提取码:pxnq
链接:https://pan.baidu.com/s/1r8M_zhVJWuxAjRVGiG5G3w
提取码:r5jr