Android 的 ROM 中有很多 odex 檔案,相對於APK中的dex檔案而言這個odex有什麼作用呢? 如果你仔細觀察會發現檔案名稱時一一對應的,同時那些對應的apk檔案中沒有dex檔案。這樣做可以使其廠商保證一定的反盜版,因為沒有沒有dex檔案的apk是無法正常安裝的,而廠商直接將odex和不完整的apk檔案放到手機rom固化到/system/bin中可以讓一般使用者無法正常匯出使用
可能想到的是合并odex和apk變成apk中包含dex檔案的,這樣合并後最終apk檔案安裝在/data/中,而rom存放在 /system/app中,所以最終導致了使用者可裝在Android手機中的軟體會變少,佔用系統空間。
一、APK產生 odex 檔案方法
編譯開源GIT上的build/tools/dexpreopt/dexopt-wrapper這個,使用dexopt-wrapper即可,操作步驟
將dexopt-wrapper放到/data/local目錄中,使用adb shell執行linux命令列,使用cd命令進入/data/local目錄,
cd /data/local
./dexopt-wrapper android123.apk android123.odex
二、合并odex和 少dex的apk 為完整的 apk檔案
1. 下載 http://smali.googlecode.com/files/smali-1.2.2.jar 和 http://smali.googlecode.com/files/baksmali-1.2.2.jar,既然是需要盜版,還需要odex所在rom中的一些引用類,一般在 /system/framework 目錄中
2 . 通過odex產生class檔案
java -jar baksmali-1.2.2.jar -x android123.odex
執行完上面這行命令後,會產生一個out 檔案夾裡面是android123.odex的class檔案。出現問題,根據提示可以從rom的 /system/framework 中的**.jar放到pc上的java環境變數中一起產生。
3. 通過class產生classes.dex 檔案。
java -Xmx512M -jar smali-1.2.2.jar out -o classes.dex
4. 將classes.dex放到apk檔案
因為apk是zip的mime編碼類別型,使用winzip或winrar直接拖入到apk改名為zip的壓縮包中即可。
5. 不要忘記了簽名,使用jdk中的arsigner和keytool打包重新簽名即可。
備忘:
本文轉載自:http://www.in189.com/viewthread.php?tid=61167&page=1