现在的位置: 首页 > 综合 > 正文

关于android中odex与apk 的合并

2017年12月11日 ⁄ 综合 ⁄ 共 1403字 ⁄ 字号 评论关闭

有时候想用其他产品上的apk,或者是想XE的反编译下别人的apk来学习学习,却发现是odex+apk的组合,好纠结,于是就有了下面的方法:

 

       需要的工具:

       1 . baksmali-1.4.2.jar和 smali-1.4.2.jar

       2 . 还需要这个 apk 所在的 rom 里面的一些 jar 文件,都在 /system/framework 里面: core.jar, ext. jar, framework. jar, android.policy. jar, services. Jar (或者这些文件的.odex文件也可以)。当然,这五个是最基本的,有可能还不够,这种情况下面会讲到。最好是把你pull 出来的 这个系统的 /system/framework/目录也pull
出来,然后在里面进行操作。

 

       总共分四步:

       1 . 把下载好的  baksmali-1.4.2.jar 和 mali-1.4.2.jar,还有 rom 里面抠出来的 5 个 jar ,放到工作目录,然后 apk 和 odex 也放到一起。

       2 . 分解 odex 文件为 class 文件。

       命令: java -jar baksmali-1.4.2.jar -x <a.odex>

<a.odex> 处是你要分解的 odex 文件的名字,命令完成之后,会生成一个 out 文件夹,里面就是所有的 class文件。如果出现问题,比如什么异常,缺少包什么的,就更到 rom 里面把出错信息里面要求的包拿出来,放到当前目录下。


在这一步中,可能会出现以下问题。

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: bad magic value: 64 65 79 0a 30 33 36 00
        at org.jf.dexlib.DexFile.<init>(DexFile.java:382)
        at org.jf.baksmali.main.main(main.java:249)

解决方法: 此问题为baksmali工具版本过低,请下载最新版本的工具。


Error occured while loading boot class path files. Aborting.

解决方法: 遇到此报错的时候,请确保/system/framework/ 下的几个文件在与你要合并的odex 文件在同一个目录下。


java.lang.OutOfMemoryError: Java heap space 

解决方法:在运行命令之前加入虚拟机大小 

 java -Xms512m -Xmx512m -jar baksmali-1.4.2.jar -x <a.odex>

       3.  将 class 生成为 classes.dex 文件。

命令: java -Xmx512M -jar smali-1.2.2.jar out -o classes.dex

这一步应该不会有什么问题,然后会生成 classes.dex 文件。

       4.  把 classes.dex 放入 apk 里面,把盖子盖上。

最后这一步最简单了,用解压缩软件打开 apk ,然后把千辛万苦生成的 classes.dex 塞进去,就 ok 了。这个apk 就能用了。如果想给他重新签个名的话,去找个 Auto Sign 签名工具签署一下就行。或者想看代码的也可以看了

抱歉!评论已关闭.