Android Rom定製與修改學習(二)
由於ROM內部自帶APP的APK檔案都已經進行了ODEX化,需要對ROM內部自帶APP進行深度修改,必須對ODEX進行反編譯,另外對APK檔案直接解壓得到的XML檔案也是不能修改的,因此對APK檔案也需要進行合適的解包。
- 1、APK檔案解打包
- 2、Odex檔案反編譯
1、APK檔案解打包
對APK解打包主要採用apktool工具,同樣的,最好下載最新版使用,目前實測2.2.2版本解包android6.0的自帶APK沒有問題,之前使用2.2.0版本無法解包,將apktool放到bin目錄,首先需要轉到framework資料夾執行以下命令:
sudo apktool if framework.res.apk
(所有.jar工具都使用bash進行了二次打包,前置了java -jar命令)
將會生成/home/xxxx/.local/share/apktool/framework/1.apk檔案,此檔案為解包依賴檔案,在解包rom自帶app時需要先更新此檔案。
之後轉到APK所在目錄執行如下命令:
sudo apktool d xxx.apk
如果發生錯誤請首先檢視檔案和資料夾許可權是否有進行合理設定,因為apktool會在該目錄下生成一個同名資料夾,裡面包含有APK檔案內含的大部分檔案,此時即可對xml和res檔案進行修改,修改完成後需要重新打包,執行命令:
sudo apktool b xxx
xxx為資料夾名稱,所有命令帶上使用root許可權避免許可權不夠問題,另外apktool官方文件提到64位系統執行該工具需要32位庫的支援,需要提前安裝。
2、Odex解打包
Odex化的APK資料夾中包含有oat資料夾,裡面存有Odex檔案,為軟體java原始碼編譯而成,使用baksmali和smali工具對其進行反編譯:
baksmali x xxx.odex
在odex資料夾會生成out資料夾,裡面包含有Dalvik虛擬機器使用的smali檔案,看起來比較吃力,可以對其進行進一步轉換,生成dex檔案:
smali a out
使用dex2jar工具進行轉換:
dex2jar out
會在當前資料夾生成jar檔案,之後就可以用jd-gui檢視:
jd-gui out.jar
同時可另存為zip檔案包,裡面就是所有的.java檔案,即可編輯的原始碼了,修改且編譯後的dex檔案可使用dexopt-wrappe轉換為odex檔案。