LinuxCommandLibrary

jadx

Decompile Android DEX and APK files

TLDR

Decompile a Dex file into a directory

$ jadx [path/to/file]
copy

Decompile a Dex file into a specific directory
$ jadx [[-d|--output-dir]] [path/to/directory] [path/to/file]
copy

SYNOPSIS

jadx [options] <apk|dex|aar|jar|class|kt|smali>...

PARAMETERS

-h, --help
    show this help message

-v, --version
    print version info

-r
    use raw names, do not deobfuscate

--deobf
    deobfuscate code

--deobf-min <len>
    min length of name, default 3

--deobf-max <len>
    max length of name, default 64

--deobf-file <file>
    load class names from file

--deobf-res
    deobfuscate resource file names

-d <dir>
    output directory

-p <package>
    output package

-e <entry>
    output entry class

-s <sources>
    sources directory

-j <threads>
    threads num, default cpu cores

--show-bad-code
    show bad code in method

--cfg
    save method cfg dot files

--xml
    save xml files with class info

--log-level <level>
    log level: trace|debug|info|warn|error|off

-Xmx<size>
    max memory size, e.g. -Xmx2048m

--fs-case-sensitive
    case sensitive file system

--no-restart
    do not restart if crash happened

DESCRIPTION

JADX is a powerful command-line tool for decompiling Android DEX bytecode, APK, AAR, JAR, and other files back into readable Java source code. Primarily used for reverse engineering Android applications, security analysis, and understanding obfuscated apps.

It excels at reconstructing original source code with high accuracy, supporting large projects and complex class hierarchies. Key features include automatic deobfuscation, multi-threading for speed, export of control flow graphs (CFG) as DOT files, XML class info output, and handling of bad code sections. The tool processes files in parallel using CPU cores by default and allows customization of memory usage.

On Linux, JADX requires Java 8+ and is often installed via package managers like Snap or built from source. Output is organized into packages mirroring the app structure, with resources optionally deobfuscated. While highly effective, results may require manual tweaks for heavily obfuscated or ProGuard-optimized code.

CAVEATS

Requires Java 8+; large APKs need high memory (-Xmx); obfuscated code may decompile imperfectly; no official manpage, use --help.

INSTALLATION

Ubuntu/Debian: snap install jadx; Arch: pacman -S jadx; or build: ./gradlew dist from https://github.com/skylot/jadx.

GUI ALTERNATIVE

Launch jadx-gui for interactive decompilation and browsing.

BASIC EXAMPLE

jadx -d output/ app.apk
Decompiles APK to output/ directory with sources.

HISTORY

Developed by Skylot (Pavel Sikun) starting 2015 on GitHub. First public release 0.6 in 2016; version 1.0 in 2019. Actively maintained with 10k+ stars, focusing on accuracy and performance for Android reverse engineering.

SEE ALSO

apktool(1), unzip(1), jar(1), objdump(1)

Copied to clipboard