2010年6月11日 星期五

由odex檔生成classes.dex

有時候,某些應用並不太常用,放在ROM裏面占空間挺可惜的,不如把它變成一個單獨的APK安裝包,想用的時候再裝來的更方便些。這種時候,就需要把優化成APK檔和Odex檔組成的程式重新合併起來。
需要用到的工具是smali,一個開源的java處理軟體

http://code.google.com/p/smali/downloads/list

下載裏面的baksmalismalijar檔到工作目錄,把ROM裏面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex5個檔也放在同一目錄(也可以放在別的目錄,通過設置BOOTCLASSPATH指定,默認就是當前目錄)。

我們以teeter為例子,ROM裏面拿出來的可能是2個檔,teeter.apk + teeter.odex
第一步,分解odex文件:
java -jar baksmali-1.2.1.jar -x teeter.odex
如果沒其他問題,會在工作目錄生成一個out的目錄,裏面是分解出來的一些檔,我們在此不深究這些檔的作用。

第二部,把分解得到的檔變成classes.dex
java -Xmx512M -jar smali-1.2.1.jar out -o classes.dex
這樣,我們就得到了一個有用的classes.dex檔,用WinZip或者WinRAR打開teeter.apk檔,把這個classes.dex放進去,最後再用signapk把最新得到的這個包含classes.dexapk重新簽署一下,就生成一個可以安裝的單獨APK程式了。

就這麼簡單。