[轉]Android應用安裝包apk文件的反編譯與重編譯、重簽名

背景介紹:最近在作Robotium自動化測試,使用到solo.takeScreenshot()函數以在測試過程當中截圖,但此函數須要被測試APP具備<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />權限。在只有被測試APP的apk文件的狀況下,修改apk文件後綴名爲zip,解壓縮後,修改AndroidManifest.xml文件,刪除META-INF文件夾,重壓縮爲apk文件後,再簽名就能夠了。
可是!本文捨近求遠,藉機對apk文件進行反編譯與重編譯、重簽名,來修改源代碼中的AndroidManifest.xml文件。本文這麼作的目的,就是想熟悉一下反編譯、重編譯和重簽名的過程android

1.請下載反編譯、重編譯工具Apktool
https://code.google.com/p/android-apktool/downloads/list下載apktool須要依賴的jar和apktool腳本文件。以windows用戶爲例,下載前兩個文件:
windows


2.將下載的兩個壓縮包解壓後,獲得三個文件,放入某文件夾。例如:app


3.將cmd定位至apktool.bat所在文件夾中,輸入apktool.bat將出現全部的參數解釋。函數

4.咱們先來進行反編譯apk的過程:
在命令行中輸入apktool.bat d -f <apk文件路徑/apk文件> <目標文件夾>
參數解釋 d:decompile,進行反編譯
-f:強制清空目標文件夾內已存在的內容
例如:工具


5.進入生成的文件夾,assets和res文件夾中都已經生成了app用到的xml和素材
lib文件夾裏包含了交叉編譯庫
smali文件夾裏包含了反編譯出的smali文件
而AndroidManifest.xml正是咱們須要修改的東西(爲何要修改它?見背景介紹)測試

這裏順便解釋一下odex文件和dex文件。
dex文件:Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,並不是Java的字節碼而是Dalvik字節碼,16進制機器指令。
odex文件:將dex文件依據具體機型而優化,造成的optimized dex文件,提升軟件運行速度,減小軟件運行時對RAM的佔用。
smali文件:將dex文件變爲可讀易懂的代碼形式,反編譯出文件的通常格式。優化

6.往AndroidManifest.xml裏面加入<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />ui

7.開始重編譯吧。在命令行中輸入apktool.bat b <反編譯出的文件夾>
參數解釋:b:build,重編譯
例如:google


8.進入目標文件夾,新生成了build文件夾和dist文件夾
build文件夾裏包含了重編譯生成apk文件所產生的過渡文件,包括dex文件,資源文件等
dist文件夾則包含了重編譯生成的apk文件.net

9.這時候生成的apk文件還沒法直接安裝到手機上。不然,會出現INSTALL_PARSE_FAILED_NO_CERTIFICATES錯誤:




    原文連接:http://www.jianshu.com/p/37f6e5b50aaa

    相關文章
    相關標籤/搜索