合并apk和odex 为完整的apk安装文件
from:http://bbs.hiapk.com/thread-1151284-1-1.html
1.安装java,这个自己去网上下载,这里不给地址了;
2.下载工具,这里我给个工具包 tools(其实也是我在坛子里找的,对分享者表示感谢),解压缩后使用;解压后有这些文件:
<ignore_js_op>现在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文件夹内的文件就可以了,其他文件不用替换,操作过程依旧!
可能出现的问题:
1:
为了将ROM中system/app下的CertInstaller.odex反编译为CertInstaller.dex,输入命令:
“java -jar baksmali.jar -x CertInstaller.odex”
出现如下错误:
org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/core.odex
at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:2
17)
at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:161)
at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:59)
at org.jf.baksmali.main.main(main.java:274)
提示的意思是缺少“core.odex”,于是将core.odex放到当前目录,重新输入命令,还是出现同样的错误!
解决方法:在当前文件夹下新建system文件夹,并在system文件夹下建立framework文件夹,然后将
常用的一些odex放入framework文件夹下,如core.odex, ext.odex, framework.odex, android.policy.odex, services.odex(在相应ROM中system/framework/下提取,或从相应源码中out/.../system/framework/获得),
再输入命令:
java -jar baksmali.jar -d ./system/framework -x CardManager.odex
按照它的提示缺哪个就将相应的odex放入framework文件夹,直到命令成功运行不报错误,成功后会在
当前文件夹下会生成一个out文件夹
最后输入命令:
java -Xmx512M -jar smali.jar out -o classes.dex
即可生成classses.dex文件
2:NullPointExcpetion的问题
smali和baksmali的版本不对,请到
3:
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)
继续换版本,换成了1.2.6问题解决
总结一下:1.3.3可能是为4.0+准备的,所以很多的2.3.6的odex无法正常编译。