由于之前開發(fā)的計(jì)費(fèi)app做好后一時(shí)大意,沒(méi)有做版本控制,剛好遇上固態(tài)硬盤悲劇了(買了才幾個(gè)月,就掛掉了。SanDisk那邊二話不說(shuō)就幫我換個(gè)新的過(guò)來(lái),估計(jì)是維修的成本太高,懶得修了)。還好,主管那有一份我發(fā)給他的試用版app,只能用這個(gè)app來(lái)反編譯獲取代碼再做版本控制了。
前前后后一共用了三款反編譯工具(dex2jar、enjarify、jadx)。其中dex2jar和enjarify(google出品),對(duì)我來(lái)說(shuō)效果都一般,比較多錯(cuò)誤,要么就是變量名搞得模棱兩可,要么就是方法體添加了許多不必要的代碼,資源引用也幫我全部轉(zhuǎn)成了int了。jadx雖然也有部分資源引用變成了int,但其小巧,簡(jiǎn)單易用,代碼完整性最好,最讓我滿意。
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文件到本機(jī),解壓縮
- 直接運(yùn)行bin文件夾里面的jadx-gui.bat,打開加載第一步獲取到的classes.dex,就完成了反編譯
(也可以把bin目錄設(shè)置為系統(tǒng)環(huán)境變量Path,進(jìn)入命令行運(yùn)行 jadx -d out classes.dex,jadx會(huì)在當(dāng)前目錄生成一個(gè)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文件
- 確保把上面兩個(gè)文件放在同一目錄下,并把該目錄添加到系統(tǒng)環(huán)境變量Path中
- cmd中執(zhí)行 apktool d -f “apk路徑” -o “文件保存路徑” 即可獲得該apk下所有的xml資源文件
ok,搞掂?。?!