手把手教你將odex轉dex
android 開發中經常需要解決一些相容性問題,通常情況下我們會把對應的系統預裝的app拉出來,逆其結構看其有何端倪。過程中,我們會發現,有一些rom ,/system/app 目錄下是以xxx.odex的檔案形式存在,那麼odex 是什麼呢?
odex是Optimized dex的縮寫,也就是優化後的dex檔案。odex檔案依賴系統中已經編譯好的系統模組,一般是/system/framwork目錄下的jar 包,目的也是為了提高Dalvik虛擬機器的執行速度,可以說從class 到dex是針對android 平臺的一種通用優化,odex是dex 檔案在不同手機rom在做的特殊優化。對此有興趣的朋友可以閱讀 鄧凡平老師的
文章的主要內容就是介紹下如何將odex 轉成dex 。
1、工欲善其事必先利其器,配置好jar 環境後,到bitbucket.org上下載 smali-xxx.jar、baksmali-xxx.jar、baksmali、smali四個檔案,並放到本地目錄test。
2、將odex轉smali
將對應的odex檔案也一同拷貝到test目錄,/system/framwork 中的jar 包拷貝到test/framwork目錄,執行如下命令:
java -jar baksmali-xxx.jar -x test.odex -d framework
3、將smali轉dex
java -jar smali-xxx.jar out -o test.dex
-o,–output the directory where the disassembled files will be placed. Default is out.
-d,–bootclasspath-dir the base folder to look for the bootclasspath files in.
-v,–version prints the version then exits
-x,–deodex deodex the given odex file.
因為odex的優化是依賴於特定os的,所以使用baksmali時,依然需要Android系統的庫檔案,如果缺少framwork裡面的jar包,會導致解析失敗 。網上也有朋友將這些命令列整合一個bat ,可以參考 android APK提取內建軟體odex轉dex 。