Android 中Odex文件生成与合并apk

 合并odex和 少dex的apk 为完整的apk文件

   1. 下载 http://smali.googlecode.com/files/smali-1.2.5.jar 和 http://smali.googlecode.com/files/baksmali-1.2.5.jar 

实际上我喜欢用最新的,菜鸟有福了:http://code.google.com/p/smali/downloads/list

   2 .  通过odex生成class文件

          java -jar baksmali-1.2.2.jar -x devdiv.odex

         执行完上面这行命令后,会生成一个out 文件夹里面是devdiv.odex的class文件。出现问题,根据提示可以从rom的 /system/framework core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。

把system/framework的文件全部复制即可,省的看的眼睛痛;另外,devdiv.odex改成你的odex文件名即可。

这时,蛋疼的事情来了:

UNEXPECTED TOP-LEVEL EXCEPTION:
org.jf.dexlib.Util.ExceptionWithContext: regCount does not match the number of a
rguments of the method
        at org.jf.dexlib.Util.ExceptionWithContext.withContext(ExceptionWithCont
ext.java:54)
        at org.jf.dexlib.Code.InstructionIterator.IterateInstructions(Instructio
nIterator.java:92)
        at org.jf.dexlib.CodeItem.readItem(CodeItem.java:154)
        at org.jf.dexlib.Item.readFrom(Item.java:76)
        at org.jf.dexlib.OffsettedSection.readItems(OffsettedSection.java:48)
        at org.jf.dexlib.Section.readFrom(Section.java:143)
        at org.jf.dexlib.DexFile.<init>(DexFile.java:431)
        at org.jf.baksmali.main.main(main.java:265)
Caused by: java.lang.RuntimeException: regCount does not match the number of arg
uments of the method
        at org.jf.dexlib.Code.Format.Instruction3rc.checkItem(Instruction3rc.jav
a:129)
        at org.jf.dexlib.Code.Format.Instruction3rc.<init>(Instruction3rc.java:7
9)
        at org.jf.dexlib.Code.Format.Instruction3rc.<init>(Instruction3rc.java:4
4)
        at org.jf.dexlib.Code.Format.Instruction3rc$Factory.makeInstruction(Inst
ruction3rc.java:145)
        at org.jf.dexlib.Code.InstructionIterator.IterateInstructions(Instructio
nIterator.java:84)
        ... 6 more
Error occured at code address 0
code_item @0x325a8

不要慌,我已经解决了,哈哈,看招:

java -jar baksmali-1.3.2.jar -a 13  -x pim.odex

恩,加个--api-level就ok了,具体原因上google讨论里面找!


  3. 通过class生成classes.dex 文件。

        java -Xmx512M -jar smali-1.3.2.jar out -o classes.dex

  4. 将classes.dex放到apk文件

        因为apk是zip的mime编码类型,使用winzip或winrar直接拖入到apk改名为zip的压缩包中即可。

  5. 不要忘记了签名,使用jdk中的arsigner和keytool打包重新签名即可。



另外有个工具可以直接用(转载)

经过一段时间的摸索和查找资料,合并apkodex 为完整的apk安装文件能够成功实现,有JY也想学习,我就分享一下。
需要几个准备工作:
1.安装java,这个自己去网上下载,这里不给地址了;
2.下载工具,这里我给个工具包 tools(其实也是我在坛子里找的,对分享者表示感谢),解压缩后使用;解压后有这些文件:
1.JPG 
3.把想合并的apkodex放在解压后的tools文件夹下面;
4.要把该apkodex 文件所在的MOD 里的五个文件同时放在tools文件夹下面,者五个文件是:core.jarext.jarservices.jarframework.jarandroid.policy.jar;如果MOD里有这五个文件的odex文件,只需要五个文件的odex文件就可以了(多谢 释放 提醒)。其实在你把odex文件拖到deodex后,如果文件不全,会有错误提示缺少那个文件的。
5.下载签名软件

-------------------------------------------------分割线----------------------------------------------------------------------

前面的准备工作做好之后就可以开始主要的操作了(以123.apk123.odex为例):
1.123.odex拖放到deodex.cmd上面去,出现下面的窗口后,按任意键结束,此时会在tools文件夹下生成一个123文件夹;1.JPG 
2.123文件夹拖放到odex.cmd,出现下面的窗口后,按任意键结束,此时会在tools\123文件夹生成classes.dex
2.JPG 
3.用好压工具打开123.apk,不要解压缩,将得到的classes.dex拖进去;
3.JPG 
4.保险期间,将加入了classes.dex123.apk重新签名;

5.把上一步的123.apk放到 签名 文件夹下面,双击Sign.bat,等待片刻会生成123-signed.apk,这个就是可以安装的apk文件了,拿去安装使用吧!4.JPG 

现在2.2和2.3系统已经很多了,想合并2.2或2.3系统的文件的TX也有,原来上传的工具之支持2.1的文件,现在更新其中的smali和baksmali为1.2.6版,能够支持2.2和2.3了,附件加压后把文件名的“-1.2.6”删去,即文件名为smali和baksmali后替换原来tools文件夹内的文件就可以了,其他文件不用替换,操作过程依旧!

在操作过程中可能会出现如下错误:

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)

需要下载最新的smali 和baksmali 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值