Skip to content

Troubleshooting Q&A

skylot edited this page May 6, 2023 · 10 revisions

Table of content


Decompilation issues

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 like if, for, etc.).
Anyway, it is possible to view partially correct code by enabling option Show 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

Fallback dump is skipped for large methods, if you really want to view that dump change Code comments level (--comments-level) to debug.

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 enable Generate methods CFG graphs(--cfg) and/or more verbose fallback graph with Generate 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.

Some classes are missing

Jadx can rename or inline classes to make code correct or closer to original. If such changes are not needed, here available options:

  • uncheck Enable deobfuscation (in jadx-cli disabled by default)
  • uncheck all Rename identifiers flags (--rename-flags none in jadx-cli)
  • disable inlining: uncheck Inline anonymous classes (--no-inline-anonymous), also uncheck Inline methods (--no-inline-methods)
  • uncheck Move inner classes into parent (--no-move-inner-classes)

Out of memory problems

Possible options when Jadx is running out of RAM:

Reduce processing threads count (-j option in CLI)

Exclude not needed packages:

  • 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
  • Also, you can use right click menu in packages tree to exclude a single package or open dialog to mark all not needed packages

The more classes you exclude, the more memory you save.

Common packages you can exclude: android.support android.arch

Switch to disk code cache in jadx-gui:

Since version 1.4.0 jadx-gui have option to store decompilation result on disk.
Switch option Code cache mode to DISK (will use minimum memory).

Assign more RAM (e.g. 6GB) to Jadx:

  • Using the Jadx command-line version (Linux, Windows, ...)

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"'
  • Using the Jadx Exe version (Windows)

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.

Others

  • High CPU usage of jadx-gui in background on macOS (possible issue in JVM check issues #1000 and #1413):

    • Disable memory usage bar: View->Show memory usage bar
    • Update JRE to the latest version
  • Rendering issues in jadx-gui:

    • Try the latest java version:
      • Use release bundle with included JRE: jadx-gui-***-with-jre-win.zip
      • Or download latest JRE from oracle.com