Jadx
Android開發(/學習)有時候需要用到反編譯工具,Window上有很多工具,而Mac上則不多,這裡稍微介紹一下Mac上可用的反編譯工具Jadx.
準備
clone 倉庫,編譯
mkdir jadx
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist #這個需要稍微等待一下
開始反編譯
等完畢後,可以開始了,我就介紹個最簡單最常用的用法
- 把apk改成zip
- 解壓zip擷取class.dex檔案
- 将class.dex檔案放到jadx目錄下
cd build/jadx/
bin/jadx -d out class.dex # 反編譯後放入out檔案夾下(如果out不存在它會自動建立)
#or
bin/jadx-gui class.dex # 會反編譯,并且使用gui打開

效果圖
OK,就這樣,後續還可以配置環境變量,更加友善.
引子
承接我的上一篇文章Android ClassyShark vs ApkTool,感謝讀者@weishu的提醒,jadx是我遺漏的一個非常好用的android反編譯gui工具。下面就來介紹下jadx工具。
首先給出jadx的github位址
使用方式
其實github上已經給出了很詳細的使用說明。但是作者這裡形式性地解讀下吧(- -|)。
1.安裝
依次運作以下指令:
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
主要是拉下來jadx的git主工程,然後跑對應的gradle task。之後會生成運作腳本,大概就是多出了這個目錄
jadx腳本目錄
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,那麼這裡繼續用淘寶apk,便于三者的橫向比較。
bin/jadx-gui taobao.apk
當然如果你不喜歡使用指令行外加找檔案路徑,你可以直接輕按兩下下圖腳本檔案即可
jadx-gui腳本檔案
會彈出以下界面,對應選中你想反編譯的.dex, .apk, .jar or .class即可(可以看到支援的格式還是很豐富的,贊)。
選中taobao.apk
選中淘寶apk,并且反編譯完成後,結果如下:
反編譯taobao.apk結果
可以看到結果中即反編譯了資源檔案和源碼,這個效果對比,apktool+dex2jar+jd-gui這三個工具集來說操作簡便了太多。
結果橫向對比(classyshark,apktool+dex2jar+jd-gui)
主要就是來對比下反編譯後源碼的可讀性。同樣選用com.taobao.allspark包下的AllsparkLoader來進行對比,用jadx反編譯後的結果為:
AllsparkLoader反編譯結果
我們可以看到可讀性非常高,要是去掉混淆的影響,已經很接近源碼了!!!(細心的讀者可以發現該gui還包含了一部分編譯器的功能,很實用)
另外幾個很贊的功能介紹
1.支援全局class查詢
全局class查詢
2.支援全局text查詢
全局text查詢
3.支援導出gradle工程(你可以用as直接看反編譯的工程了)
導出gradle工程
那麼我們最終看看在as中打開導出工程後的結果:
as中打開導出工程
很贊對不對
Android反編譯工具jadx的簡單操作使用
Android上面的反編譯工具很多,我個人比較喜歡jadx,操作簡單,界面簡潔。
下載下傳jadx并解壓,點選“bin”目錄下面的“jadx-gui.bat”檔案,出現下圖所示的界面
選中要反編譯的apk檔案後,界面變成下圖所示
任意點開一個類,我們就可以看到該類的源代碼了
有的類的變量和方法名都變成了a,b,c,d。。。,如下圖所示
這是由于Android工程進行了代碼混淆
總結
看了以上之後,我們就來說下jadx對比classyshark和(apktool+dex2jar+jd-gui工具集)的優劣勢吧。
優點:
1.操作友善快捷,一步到位
2.有較為完善的gui界面,帶有較多實用功能
3.反編譯代碼可讀性高
缺點:
1.沒有classyshark類似的方法總數統計以及圖形化分布界面
2.對比apktool直接反編譯出來的資源檔案有相應的缺失(這個有心的童鞋可以自己嘗試下,這裡就不給截圖了)
總體來說jadx還是你反編譯工具的最佳選擇,當然有些時候可能還是需要你去配合使用,畢竟現在看來三者還是各有優劣的。