在jadx出現之前,我一般是使用apktooldex2jar這兩個Android反編譯工具。這兩個工具也有不同的側重點,如果只是想拿到apk里的一些圖片或其他資源或是查看一下布局的layout文件,直接使用apktool -d xxx.apk即可。如果是要查看一下代碼實現,就使用d2j-dex2jar.sh反編譯一下apk然后使用jd-gui工具查看反編譯后的.jar文件。

apktool+dex2jar+jd-gui一直是一個比較流行的Android反編譯組合。 在使用過jadx之后覺得jadx相比上面的組合具有如下兩個優點: * 可以直接反編譯出.java文件 * 查看源碼時直接顯示資源名稱,而不是像jd-gui里顯示的資源ID

安裝jadx

編譯安裝

  1. git clone https://github.com/skylot/jadx.git
  2. cd jadx
  3. ./gradlew dist

然后將build/jadx/bin加入到環境變量。

直接下載安裝

使用jadx

jadx也有GUI,直接雙擊bin目錄下的jadx-gui,然后選擇要反編譯的apk即可,運行效果如下。

jadx_guijadx_gui如果要保存源碼,選擇File->Save ALL即可保存文件,然后就可以導入Android Studio等IDE中。 我們也可以直接使用命令行反編譯apk文件:

 

  1. jadx -d out classes.dex #直接輸出.java文件到out目錄
  2. jadx-gui classes.dex #使用gui打開

在反編譯較大的apk時,如果遇到jadx-jui卡頓和假死的情況,可適當優化jvm相關參數, 我直接在~/.bash_profile中加上了如下語句:

  1. export JVM_ARGS="-Xmx4096m -XX:MaxPermSize=1024m"