通過反編譯第三方apk,學習和借鑑他人代碼是學習Android的一個重要途徑之一。下面是我對反編譯的筆
記整理。
測試環境:windows。
使用工具:apktool(資源文件獲取,可以提取出圖片和佈局文件)
dex2jar(源碼文件獲取,將class.dex轉換成jd-gui可查看閱讀的.jar文件)
jd-gui (源碼查看,查看class.dex轉化成.jar文件)
整合包下載:反編譯工具整合包
反編譯流程:
一,反編譯得到res目錄下的圖片資源和xml文件、AndroidManifest.xml等
1、下載上面的整合包解壓得到:apktool.rar,dex2jar-0.0.9.15.zip,jd-gui-0.3.5.windows.zip。將它們
分別解壓到各自文件名的目錄下。
2、apptool.jar解壓後其目錄三個文件:aapt.exe,apktool.bat,apktool.jar。將需要解壓的apk拷貝到其
目錄下,打開命令窗口,定位到 .\apktool 目錄下執行命令:apktool.bat d -f mapp-debug.apk -o mapp
(命令中mapp-debug.apk 爲要反編譯的apk,mapp爲輸出文件夾,即:apktool.bat d -f [apk] -o [輸出文件夾])
效果如圖所示:
執行完成後查看mapp文件夾:就會發現有res文件夾,裏面有我們需要的佈局,圖片,動畫等。
二反編譯得到Java的源碼病查看源碼
1、將mapp-debug.apk的後綴名.apk 改成.rar或.zip。然後解壓到map-debug文件夾,得到我們所需的
classes.dex文件。
2、將classes.dex拷貝到 \dex2jar-0.0.9.15目錄下,執行命令:dex2jar.bat classes.dex。在其目錄下
會生成文件classes_dex2jar.jar。
3、使用jd-gui.exe取查閱classes_dex2jar.jar。
輸入dex2jar.bat classes.dex效果如下:
使用jd-gui.exe查看源碼效果圖:
三,反編譯過程種曾經遇到過的異常:
1、Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file...
這個問題的原因是apktool版本過低,過去最新的apktool.jar替換原來的。最新apktool.jar下載
2、Input file was not found or was not readable
apktool升級到2.0以上時,使用方式已經替換,格式爲:apktool.bat d -f [apk] -o [輸出文件夾]
具體參數意義可輸入apktool回車。