引子
承接我的上一篇文章Android ClassyShark vs ApkTool,感謝讀者@weishu的提醒,jadx是我遺漏的一個非常好用的android反編譯gui工具。下面就來介紹下jadx工具。
首先給出jadx的github地址
使用方式
其實github上已經(jīng)給出了很詳細(xì)的使用說明。但是作者這里形式性地解讀下吧(- -|)。
1.安裝
依次運行以下命令:
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
主要是拉下來jadx的git主工程,然后跑對應(yīng)的gradle task。之后會生成運行腳本,大概就是多出了這個目錄

1.運行
cd build/jadx/
bin/jadx -d out lib/jadx-core-*.jar
#or
bin/jadx-gui lib/jadx-core-*.jar
以上命令是git給出的運行示例,主要就是反編譯jadx源碼的一個jar包。
由于之前文章對比classyShark 和apktool時用的是淘寶apk,那么這里繼續(xù)用淘寶apk,便于三者的橫向比較。
bin/jadx-gui taobao.apk
當(dāng)然如果你不喜歡使用命令行外加找文件路徑,你可以直接雙擊下圖腳本文件即可

會彈出以下界面,對應(yīng)選中你想反編譯的.dex, .apk, .jar or .class即可(可以看到支持的格式還是很豐富的,贊)。

選中淘寶apk,并且反編譯完成后,結(jié)果如下:

可以看到結(jié)果中即反編譯了資源文件和源碼,這個效果對比,apktool+dex2jar+jd-gui這三個工具集來說操作簡便了太多。
結(jié)果橫向?qū)Ρ龋╟lassyshark,apktool+dex2jar+jd-gui)
主要就是來對比下反編譯后源碼的可讀性。同樣選用com.taobao.allspark包下的AllsparkLoader來進行對比,用jadx反編譯后的結(jié)果為:

我們可以看到可讀性非常高,要是去掉混淆的影響,已經(jīng)很接近源碼了?。。。?xì)心的讀者可以發(fā)現(xiàn)該gui還包含了一部分編譯器的功能,很實用)
另外幾個很贊的功能介紹
1.支持全局class查詢

2.支持全局text查詢

3.支持導(dǎo)出gradle工程(你可以用as直接看反編譯的工程了)

那么我們最終看看在as中打開導(dǎo)出工程后的結(jié)果:

很贊對不對
總結(jié)
看了以上之后,我們就來說下jadx對比classyshark和(apktool+dex2jar+jd-gui工具集)的優(yōu)劣勢吧。
優(yōu)點:
1.操作方便快捷,一步到位
2.有較為完善的gui界面,帶有較多實用功能
3.反編譯代碼可讀性高
缺點:
1.沒有classyshark類似的方法總數(shù)統(tǒng)計以及圖形化分布界面
2.對比apktool直接反編譯出來的資源文件有相應(yīng)的缺失(這個有心的童鞋可以自己嘗試下,這里就不給截圖了)
總體來說jadx還是你反編譯工具的最佳選擇,當(dāng)然有些時候可能還是需要你去配合使用,畢竟現(xiàn)在看來三者還是各有優(yōu)劣的。