Android 6.0 系统apk导出后,没有 java 代码 ,dex 文件(odex 转 dex)
作者:互联网
使用场景:
在系统开发中,我们经常会需要对系统中的 apk 的代码进行反编译学习的情况,而在6.0的系统中发现,对系统 apk 解压后,只有资源文件,没有java源代码,后来仔细对照之后,发现 java 源代码是在 oat 文件夹中的 odex 文件中(如下图所示,以SystemUI为例):
操作步骤:
遇到这种情况 , 我们就需要将 odex 转换为 dex 文件了,方法如下(如果不想麻烦可留言直接找我要完整包,或关注公众号回复 odex):
1.下载 baksmali 和 smali 的 jar 包 和 文件,路径 :http://code.google.com/p/smali/downloads/list (需要翻墙),https://bitbucket.org/JesusFreke/smali/downloads/ (无需翻墙)
2.将下载下来的 jar 包 和 文件 放在同一个文件夹下,然后将系统的 framework 文件夹导出,也放到这个文件夹下 , 将 framework 中的 boot.oat 文件单独拷出来,也放到这个文件夹目录下,跟 framework 文件夹同级(原因见下面的扩展内容);
2.odex 转 smali ,将 odex 文件 放在 步骤 2 中创建的文件夹下 , 然后打开命令窗口 , 定位到这个文件夹 , 输入命令如下:
java -jar baksmali-2.4.0.jar x SystemUI.odex -d framework (如果不行,可尝试增加 disassemble 和 disassemble 命令)
命令执行完成后,会发现在这个文件夹下多了一个 out 文件夹,这个里面存放的就是转换之后的 smali 文件了 ;
3.smali 转 dex ,接下来继续在命令窗口中输入如下命令 :
java -jar smali-2.4.0.jar a out -o classes.dex
命令执行完成之后,会生成一个 classes.dex 文件,这个就是我们平常开发的 apk 中的 dex 文件了 , 可以用平常的方法来查看其中的源码了;
扩展:
在我自己的操作过程中遇到了两个问题,如下:
1.一开始在网上搜到了如下命令,结果出错,从出现的提示中可以看出,是因为命令 -x 不对, 于是打开 baksmali 文件查看 ,发现其中是用的是 x , 于是换成 x ,问题解决。
2.接下来再执行命令,发现如下错误 , 提示没有找到 boot.oat 文件 ,于是在 framework 中找到这个文件 ,然后放到 framework 同一级目录下(也就是上面 步骤2 中创建的文件夹下面 ),再次执行命令,无报错,问题解决。
标签:dex,文件,java,odex,jar,文件夹,smali 来源: https://blog.csdn.net/u013474571/article/details/109801032