from:http://bbs.hiapk.com/thread-1151284-1-1.html
1.安裝java,這個自己去網上下載,這里不給地址了;
2.下載工具,這里我給個工具包 tools(其實也是我在壇子里找的,對分享者表示感謝),解壓縮后使用;解壓后有這些文件:
<ignore_js_op>
3.把想合並的apk和odex放在解壓后的tools文件夾下面;
4.要把該apk和odex 文件所在的MOD 里的五個文件同時放在tools文件夾下面,者五個文件是:core.jar、ext.jar、services.jar、framework.jar、android.policy.jar;如果MOD里有這五個文件的odex文件,只需要五個文件的odex文件就可以了(多謝 釋放 提醒)。其實在你把odex文件拖到deodex后,如果文件不全,會有錯誤提示缺少那個文件的。
5.下載簽名軟件。
-------------------------------------------------分割線----------------------------------------------------------------------
前面的准備工作做好之后就可以開始主要的操作了(以123.apk和123.odex為例):
1.將123.odex拖放到deodex.cmd上面去,出現下面的窗口后,按任意鍵結束,此時會在tools文件夾下生成一個123文件夾;<ignore_js_op>
2.將123文件夾拖放到odex.cmd,出現下面的窗口后,按任意鍵結束,此時會在tools\123文件夾生成classes.dex;
<ignore_js_op>
3.用好壓工具打開123.apk,不要解壓縮,將得到的classes.dex拖進去;
<ignore_js_op>
4.保險期間,將加入了classes.dex的123.apk重新簽名;
5.把上一步的123.apk放到 簽名 文件夾下面,雙擊Sign.bat,等待片刻會生成123-signed.apk,這個就是可以安裝的apk文件了,拿去安裝使用吧!<ignore_js_op>
***************************分割線*********************************************
所有步驟就是這些了,教程終於完成了,自己實踐的步驟,下面你懂得……
所用到的tools和簽名工具在壇子都有,搜索一下,應該能找到,要不改天補上……
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
現在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無法正常編譯。