id = "jadx"
name = "JADX"
homepage = "https://github.com/skylot/jadx"
description = "Dex to Java decompiler"
executables = ["jadx"]
[dotfiles]
paths = [
"[configHome]/jadx/cli.json",
"~/Library/Application Support/io.github.Skylot.Jadx/cli.json",
"%APPDATA%/skylot/jadx/config/cli.json",
]
secret = []
[commands]
format = 1
label = "Decompile to Java"
description = "Decompile an APK, dex, jar or similar file into Java sources. Plugin options and the less common code-generation switches are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = true, short_bundles = false }
[[commands.source]]
id = "help"
kind = "help"
url = "https://github.com/skylot/jadx/blob/master/README.md"
revision = "README usage"
evidence = """
jadx[-gui] [command] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .apks, .jadx.kts)
-d, --output-dir - output directory
-r, --no-res - do not decode resources
-s, --no-src - do not decompile source code
-j, --threads-count - processing threads count, default: half of CPU threads
--single-class - decompile a single class, full name, raw or alias
-e, --export-gradle - save as gradle project (set '--export-gradle-type' to 'auto')
-m, --decompilation-mode - code output mode:
'auto' - trying best options (default)
'restructure' - restore code structure (normal java code)
'simple' - simplified instructions (linear, with goto's)
'fallback' - raw instructions without modifications
--show-bad-code - show inconsistent code (incorrectly decompiled)
--no-imports - disable use of imports, always write entire package name
--escape-unicode - escape non latin characters in strings (with \\u)
--deobf - activate deobfuscation
-v, --verbose - verbose output (set --log-level to DEBUG)
-q, --quiet - turn off output (set --log-level to QUIET)
--version - print jadx version
"""
[[commands.field]]
id = "input"
label = "Input file"
type = "path"
path = { kind = "file", role = "input" }
position = 0
sources = ["help"]
[[commands.field]]
id = "output_dir"
label = "Output directory"
type = "path"
path = { kind = "directory", role = "output" }
option = ["--output-dir", "-d"]
sources = ["help"]
[[commands.field]]
id = "no_res"
label = "Skip resources"
type = "boolean"
option = ["--no-res", "-r"]
sources = ["help"]
[[commands.field]]
id = "no_src"
label = "Skip source code"
type = "boolean"
option = ["--no-src", "-s"]
sources = ["help"]
[[commands.field]]
id = "export_gradle"
label = "Export as Gradle project"
type = "boolean"
option = ["--export-gradle", "-e"]
sources = ["help"]
[[commands.field]]
id = "deobf"
label = "Deobfuscate"
type = "boolean"
option = ["--deobf"]
sources = ["help"]
[[commands.field]]
id = "mode"
label = "Decompilation mode"
type = "enum"
option = ["--decompilation-mode", "-m"]
choices = [
{ value = "auto", label = "Auto" },
{ value = "restructure", label = "Restructure" },
{ value = "simple", label = "Simple" },
{ value = "fallback", label = "Fallback" },
]
sources = ["help"]
[[commands.field]]
id = "threads"
label = "Threads"
type = "integer"
option = ["--threads-count", "-j"]
sources = ["help"]
[[commands.field]]
id = "single_class"
label = "Single class"
type = "string"
option = ["--single-class"]
sources = ["help"]
[[commands.field]]
id = "show_bad_code"
label = "Show bad code"
type = "boolean"
option = ["--show-bad-code"]
sources = ["help"]
[[commands.field]]
id = "no_imports"
label = "No imports"
type = "boolean"
option = ["--no-imports"]
sources = ["help"]
[[commands.field]]
id = "escape_unicode"
label = "Escape unicode"
type = "boolean"
option = ["--escape-unicode"]
sources = ["help"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "boolean"
option = ["--verbose", "-v"]
sources = ["help"]
[[commands.field]]
id = "quiet"
label = "Quiet"
type = "boolean"
option = ["--quiet", "-q"]
sources = ["help"]
[[commands.task]]
id = "decompile"
label = "Decompile"
fields = ["input", "output_dir", "deobf", "no_res"]
required = ["input", "output_dir"]
[[commands.task]]
id = "gradle"
label = "Export Gradle project"
set = { export_gradle = [true] }
lock = ["export_gradle"]
fields = ["input", "output_dir", "export_gradle", "deobf"]
required = ["input", "output_dir"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["input", "output_dir", "no_res", "no_src", "export_gradle", "deobf"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["mode", "threads", "single_class", "show_bad_code", "no_imports", "escape_unicode", "verbose", "quiet"]