-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Troubleshooting Q&A
Jadx can't decompile 100% of code, so error can occur:
-
/* Code decompiled incorrectly, please refer to instructions dump */
In most cases, this mean that jadx can't restore code structure (correctly move instructions to blocks likeif
,for
, etc.).
Anyway, it is possible to view partially correct code by enabling optionShow inconsistent code
(--show-bad-code
in jadx-cli).
But be careful and always check this code with Smali of CFG dump (see below) -
// Method dump skipped, instructions count: ...
Fallback dump is skipped for large methods, if you really want to view that dump changeCode comments level
(--comments-level
) todebug
. -
Decompiled code is incorrect
If jadx is failed to correctly decompile - only way to check method code is to dump method control flow graph (CFG).
For that enableGenerate methods CFG graphs
(--cfg
) and/or more verbose fallback graph withGenerate RAW CFG grapths
(--raw-cfg
).
This will dump.dot
file for every decompiled method in the current working dir with your file input name.
To open/view these files, you can use one of GraphViz apps from here.
Possible options when Jadx is running out of RAM:
Before starting the decompilation open in Jadx the Preferences dialog (menu File). Open the Excluded packages editor and add packages you want to exclude from decompiling. The more classes you exclude the more you save.
Common packages you can exclude: android.support
android.arch
Edit the script bin/jadx-gui
or bin/jadx-gui.bat
(Windows) and change the maximum heap memory from 4 (-Xmx4g
) to e.g. 8 GB (-Xmx8g
) by modifying the definition of DEFAULT_JVM_OPTS
:
DEFAULT_JVM_OPTS='"-Xms128M" "-Xmx8g" "-Dawt.useSystemAAFontSettings=lcd" "-Dswing.aatext=true" "-XX:+UseG1GC"'
If you are on Windows and using jadx-gui.exe
create a text-file jadx-gui.l4j.ini
in the same directory jadx-gui.exe
is located in. For a maximum 8 GB memory/heap edit the text file and set it's content to:
-Xmx8g
If you are using a unstable version or Jadx or if you have renamed jadx-gui.exe
, you also have to adapt the .l4j.ini
file-name as well.
Example:
Jadx file-name: jadx-gui-1.1.0-b1279-2207cd7b.exe
Jadx config file name: jadx-gui-1.1.0-b1279-2207cd7b.l4j.ini.