由于之前開發(fā)的計費app做好后一時大意,沒有做版本控制,剛好遇上固態(tài)硬盤悲劇了(買了才幾個月,就掛掉了。SanDisk那邊二話不說就幫我換個新的過來,估計是維修的成本太高,懶得修了)。還好,主管那有一份我發(fā)給他的試用版app,只能用這個app來反編譯獲取代碼再做版本控制了。
前前后后一共用了三款反編譯工具(dex2jar、enjarify、jadx)。其中dex2jar和enjarify(google出品),對我來說效果都一般,比較多錯誤,要么就是變量名搞得模棱兩可,要么就是方法體添加了許多不必要的代碼,資源引用也幫我全部轉(zhuǎn)成了int了。jadx雖然也有部分資源引用變成了int,但其小巧,簡單易用,代碼完整性最好,最讓我滿意。
apk反編譯一般分兩部分:
- .dex文件反編譯成jar(用jadx)
- xml文件反編譯(用apktool)
jadx反編譯dex文件
- 把需要反編譯的apk更改后綴名為.zip,解壓縮獲取classes.dex
- clone https://github.com/skylot/jadx.git 或者下載https://github.com/skylot/jadx的zip文件到本機,解壓縮
- 直接運行bin文件夾里面的jadx-gui.bat,打開加載第一步獲取到的classes.dex,就完成了反編譯
(也可以把bin目錄設置為系統(tǒng)環(huán)境變量Path,進入命令行運行 jadx -d out classes.dex,jadx會在當前目錄生成一個out文件夾,里面就是反編譯到的java文件)
apktool反編譯獲取xml資源文件
- 把以下代碼保存成apktool.bat文件
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
- 到https://bitbucket.org/iBotPeaches/apktool/downloads下載apktool_x.x.x.jar文件
- 確保把上面兩個文件放在同一目錄下,并把該目錄添加到系統(tǒng)環(huán)境變量Path中
- cmd中執(zhí)行 apktool d -f “apk路徑” -o “文件保存路徑” 即可獲得該apk下所有的xml資源文件
ok,搞掂!!!