Jadx

JADX Documentation Index

Source: skylot/jadx (GitHub wiki + README) Fetched: 2026-04-22 Files: 9

JADX Overview

JADX decompiles Dalvik bytecode to Java source code. It processes Android APK, DEX, AAR, AAB, XAPK, APKM, and ZIP files. Complete decompilation is not always possible — some code may fail.

Prerequisites: Java 11+ (64-bit). Build from source requires JDK 17+.


Core Capabilities

  • Decompile Dalvik bytecode to Java from APK, DEX, AAR, AAB, ZIP
  • Decode AndroidManifest.xml and resources from resources.arsc
  • Built-in deobfuscator
  • Export as Gradle project (Android app, Android library, or simple Java)
  • Output formats: java (default) or json

GUI (jadx-gui) Features

  • Syntax-highlighted decompiled code viewer
  • Jump to declaration
  • Find usage
  • Full-text search
  • Smali debugger (requires separate setup)

Installation

PlatformCommand
Arch Linuxsudo pacman -S jadx
macOSbrew install jadx
Flathubflatpak install flathub com.github.skylot.jadx
Binary zipDownload from GitHub releases, unpack, run bin/jadx or bin/jadx-gui

Build from Source

Requires JDK 17+:

1git clone https://github.com/skylot/jadx.git
2cd jadx
3./gradlew dist
4# Windows: gradlew.bat dist
5# Output: build/jadx/bin/ and build/jadx-<version>.zip

CLI Usage

jadx[-gui] [command] [options] <input files>

Supported input extensions: .apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts

Output Options

FlagDescription
-d, --output-dirOutput directory (sources + resources)
-ds, --output-dir-srcOutput directory for sources only
-dr, --output-dir-resOutput directory for resources only
-r, --no-resSkip resource decoding
-s, --no-srcSkip source decompilation
--output-formatjava (default) or json
-e, --export-gradleSave as Gradle project (sets type to auto)
--export-gradle-typeauto / android-app / android-library / simple-java
--single-classDecompile a single class by full name, raw or alias
--single-class-outputFile or dir for single-class output

Decompilation Mode (-m, --decompilation-mode)

ValueDescription
autoTry best options (default)
restructureRestore code structure (normal Java)
simpleSimplified linear instructions with goto
fallbackRaw instructions, no modifications

Threading

FlagDescription
-j, --threads-countProcessing thread count (default: 16)

Code Output Flags

FlagDescription
--show-bad-codeShow inconsistently decompiled code
--no-xml-pretty-printSkip XML prettification
--no-importsAlways write full package names
--no-debug-infoDisable debug info parsing
--add-debug-linesAdd debug line number comments
--no-inline-anonymousDisable anonymous class inlining
--no-inline-methodsDisable method inlining
--no-move-inner-classesDisable moving inner classes into parent
--no-inline-kotlin-lambdaDisable Kotlin lambda inlining
--no-finallyDon’t extract finally blocks
--no-restore-switch-over-stringDon’t restore switch-over-string
--no-replace-constsDon’t replace values with constant fields
--escape-unicodeEscape non-latin characters as \u
--respect-bytecode-access-modifiersKeep original access modifiers

Deobfuscation Options

FlagDescription
--mappings-pathMapping file or dir. Formats: Tiny, Tiny v2 (.tiny), Enigma (.mapping), Enigma dir
--mappings-moderead (default) / read-and-autosave-every-change / read-and-autosave-before-closing / ignore
--deobfActivate deobfuscation
--deobf-minRename names shorter than N (default: 3)
--deobf-maxRename names longer than N (default: 64)
--deobf-whitelistSpace-separated classes/packages to exclude from deobfuscation
--deobf-cfg-fileJADX auto-generated names mapping file (.jobf); defaults to same dir/name as input
--deobf-cfg-file-moderead (default) / read-or-save / overwrite / ignore
--deobf-res-name-sourceauto (default) / resources / code
--use-source-name-as-class-name-aliasalways / if-better / never
--source-name-repeat-limitMax uses of a source name (default: 10)
--use-kotlin-methods-for-var-namesdisable / apply (default) / apply-and-hide

Rename / Fix Options (--rename-flags)

Comma-separated values or one of the shortcuts:

ValueDescription
caseFix case sensitivity (per --fs-case-sensitive)
validRename invalid Java identifiers
printableRemove non-printable chars from identifiers
noneDisable all renames
allEnable all (default)

Display Options

FlagDescription
--integer-formatauto (default) / decimal / hexadecimal
--type-update-limitType update limit per instruction (default: 10)
--fs-case-sensitiveTreat filesystem as case-sensitive (default: false)
--cfgSave control flow graph to dot file
--raw-cfgSave raw-instruction control flow graph
--use-headers-for-detect-resource-extensionsUse file headers for resource extension detection

Logging Options

FlagDescription
--comments-levelerror / warn / info (default) / debug / user-only / none
--log-levelquiet / progress (default) / error / warn / info / debug
-v, --verboseSet log level to DEBUG
-q, --quietSet log level to QUIET

Config File Options

FlagDescription
--config <config-ref>Load config from .json file, short name (in config dir), or none to disable
--save-config <config-ref>Save current options to config file and exit
--print-filesPrint files/dirs used by jadx (config, cache, temp)
--disable-pluginsComma-separated plugin IDs to disable

Plugin System

Plugin CLI (jadx plugins)

jadx plugins [options]
FlagDescription
-i, --install <locationId>Install plugin by location ID
-j, --install-jar <path>Install plugin from JAR file
-l, --listList installed plugins
-a, --availableList available plugins from marketplace
-u, --updateUpdate installed plugins
--uninstall <pluginId>Uninstall plugin
--disable <pluginId>Disable plugin
--enable <pluginId>Enable plugin
--list-allList all plugins including bundled and dropins
--list-versions <locationId>Fetch latest versions (downloads artifacts, max 10)

Built-in Plugin Options (-P<name>=<value>)

dex-input — Load .dex and .apk files

OptionValuesDefault
dex-input.verify-checksumyes, noyes

java-convert — Convert .class, .jar, .aar to dex

OptionValuesDefault
java-convert.modedx, d8, bothboth
java-convert.d8-desugaryes, nono

kotlin-metadata — Use kotlin.Metadata annotation for code generation

OptionValuesDefault
kotlin-metadata.class-aliasyes, noyes
kotlin-metadata.method-argsyes, noyes
kotlin-metadata.fieldsyes, noyes
kotlin-metadata.companionyes, noyes
kotlin-metadata.data-classyes, noyes
kotlin-metadata.to-stringyes, noyes
kotlin-metadata.gettersyes, noyes

kotlin-smap — Use kotlin.SourceDebugExtension for class alias renaming

OptionValuesDefault
kotlin-smap.class-alias-source-dbgyes, nono

rename-mappings — Various mapping format support

OptionValuesDefault
rename-mappings.formatAUTO, TINY_FILE, TINY_2_FILE, ENIGMA_FILE, ENIGMA_DIR, PROGUARD_FILE, SRG_FILE, XSRG_FILE, JAM_FILE, CSRG_FILE, TSRG_FILE, TSRG_2_FILE, INTELLIJ_MIGRATION_MAP_FILE, RECAF_SIMPLE_FILE, JOBF_FILEAUTO
rename-mappings.invertyes, nono

smali-input — Load .smali files

OptionValuesDefault
smali-input.api-levelAndroid API level integer27

Environment Variables

VariableDescription
JADX_DISABLE_XML_SECURITYSet to true to disable all XML security checks
JADX_DISABLE_ZIP_SECURITYSet to true to disable all ZIP security checks
JADX_ZIP_MAX_ENTRIES_COUNTMax entries allowed in ZIP files (default: 100,000)
JADX_CONFIG_DIRCustom config directory (default: system)
JADX_CACHE_DIRCustom cache directory (default: system)
JADX_TMP_DIRCustom temp directory (default: system)

CLI Examples

1jadx -d out classes.dex
2jadx --rename-flags "none" classes.dex
3jadx --rename-flags "valid, printable" classes.dex
4jadx --log-level ERROR app.apk
5jadx -Pdex-input.verify-checksum=no app.apk

GUI options set via command line override the preferences dialog values.

Table of Contents

FileSummary
content/JADX-GUI-Key-bindings.mdComplete keyboard shortcut reference for JADX GUI covering file operations, code navigation, search, and editor actions.
content/jadx-gui-features-overview.mdOverview of JADX GUI interactive features including declaration jumping, usage search, Smali/Java toggling, line mode switching, and package exclusion.
content/Jadx-plugins-guide.mdComplete guide to developing, installing, and publishing jadx decompiler plugins using the JadxPlugin interface and JadxPluginContext API.
content/Jadx-scripts-guide.mdGuide to writing and running Kotlin-based jadx scripts (.jadx.kts) for automating decompilation, renaming, class inspection, and GUI integration.
content/Smali-debugger.mdReference for jadx-gui’s built-in Smali debugger, covering prerequisites, keyboard shortcuts, breakpoints, and step execution against Android processes via adb.
content/Troubleshooting-Q&A.mdTroubleshooting guide for jadx covering decompilation errors, loading failures, out-of-memory problems, and jadx-gui platform-specific issues with concrete fixes.
content/Use-jadx-as-a-library.mdGuide to embedding jadx as a Java/Kotlin library via Maven Central, covering dependency setup, the JadxDecompiler API, memory optimizations, custom directories, and snapshot builds.
content/code-formatting.mdJADX uses Spotless (Eclipse formatter) and Checkstyle via Gradle to enforce consistent code style across the codebase.