jadx

2025-12-10 0 486

JADX

jadx – Dex to Java decompiler

Command line and GUI tools for producing Java source code from Android Dex and Apk files

Warning

Please note that in most cases jadx can\’t decompile all 100% of the code, so errors will occur.
Check Troubleshooting guide for workarounds.

Main features:

  • decompile Dalvik bytecode to Java code from APK, dex, aar, aab and zip files
  • decode AndroidManifest.xml and other resources from resources.arsc
  • deobfuscator included

jadx-gui features:

  • view decompiled code with highlighted syntax
  • jump to declaration
  • find usage
  • full text search
  • smali debugger, check wiki page for setup and usage

Jadx-gui key bindings can be found here

See these features in action here: jadx-gui features overview

Download

  • release
    from github:
  • latest unstable build

After download unpack zip file go to bin directory and run:

  • jadxcommand line version
  • jadx-gui – UI version

On Windows run .bat files with double-click
Note: ensure you have installed Java 11 or later 64-bit version.
For Windows, you can download it from oracle.com (select x64 Installer).

Install

  • Arch Linux
    sudo pacman -S jadx
  • macOS
    brew install jadx
  • Flathub
    flatpak install flathub com.github.skylot.jadx

Use jadx as a library

You can use jadx in your java projects, check details on wiki page

Build from source

JDK 11 or higher must be installed:

git clone https://g*ith*u*b.com/skylot/jadx.git
cd jadx
./gradlew dist

(on Windows, use gradlew.bat instead of ./gradlew)

Scripts for run jadx will be placed in build/jadx/bin
and also packed to build/jadx-<version>.zip

Usage

jadx[-gui] [command] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)
commands (use \'<command> --help\' for command options):
  plugins	  - manage jadx plugins

options:
  -d, --output-dir                       - output directory
  -ds, --output-dir-src                  - output directory for sources
  -dr, --output-dir-res                  - output directory for resources
  -r, --no-res                           - do not decode resources
  -s, --no-src                           - do not decompile source code
  -j, --threads-count                    - processing threads count, default: 4
  --single-class                         - decompile a single class, full name, raw or alias
  --single-class-output                  - file or dir for write if decompile a single class
  --output-format                        - can be \'java\' or \'json\', default: java
  -e, --export-gradle                    - save as gradle project (set \'--export-gradle-type\' to \'auto\')
  --export-gradle-type                   - Gradle project template for export:
                                            \'auto\' - detect automatically
                                            \'android-app\' - Android Application (apk)
                                            \'android-library\' - Android Library (aar)
                                            \'simple-java\' - simple Java
  -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-xml-pretty-print                  - do not prettify XML
  --no-imports                           - disable use of imports, always write entire package name
  --no-debug-info                        - disable debug info parsing and processing
  --add-debug-lines                      - add comments with debug line numbers if available
  --no-inline-anonymous                  - disable anonymous classes inline
  --no-inline-methods                    - disable methods inline
  --no-move-inner-classes                - disable move inner classes into parent
  --no-inline-kotlin-lambda              - disable inline for Kotlin lambdas
  --no-finally                           - don\'t extract finally block
  --no-restore-switch-over-string        - don\'t restore switch over string
  --no-replace-consts                    - don\'t replace constant value with matching constant field
  --escape-unicode                       - escape non latin characters in strings (with \\u)
  --respect-bytecode-access-modifiers    - don\'t change original access modifiers
  --mappings-path                        - deobfuscation mappings file or directory. Allowed formats: Tiny and Tiny v2 (both \'.tiny\'), Enigma (.mapping) or Enigma directory
  --mappings-mode                        - set mode for handling the deobfuscation mapping file:
                                            \'read\' - just read, user can always save manually (default)
                                            \'read-and-autosave-every-change\' - read and autosave after every change
                                            \'read-and-autosave-before-closing\' - read and autosave before exiting the app or closing the project
                                            \'ignore\' - don\'t read or save (can be used to skip loading mapping files referenced in the project file)
  --deobf                                - activate deobfuscation
  --deobf-min                            - min length of name, renamed if shorter, default: 3
  --deobf-max                            - max length of name, renamed if longer, default: 64
  --deobf-whitelist                      - space separated list of classes (full name) and packages (ends with \'.*\') to exclude from deobfuscation, default: android.support.v4.* android.support.v7.* android.support.v4.os.* android.support.annotation.Px androidx.core.os.* androidx.annotation.Px
  --deobf-cfg-file                       - deobfuscation mappings file used for JADX auto-generated names (in the JOBF file format), default: same dir and name as input file with \'.jobf\' extension
  --deobf-cfg-file-mode                  - set mode for handling the JADX auto-generated names\' deobfuscation map file:
                                            \'read\' - read if found, don\'t save (default)
                                            \'read-or-save\' - read if found, save otherwise (don\'t overwrite)
                                            \'overwrite\' - don\'t read, always save
                                            \'ignore\' - don\'t read and don\'t save
  --deobf-res-name-source                - better name source for resources:
                                            \'auto\' - automatically select best name (default)
                                            \'resources\' - use resources names
                                            \'code\' - use R class fields names
  --use-source-name-as-class-name-alias  - use source name as class name alias:
                                            \'always\' - always use source name if it\'s available
                                            \'if-better\' - use source name if it seems better than the current one
                                            \'never\' - never use source name, even if it\'s available
  --source-name-repeat-limit             - allow using source name if it appears less than a limit number, default: 10
  --use-kotlin-methods-for-var-names     - use kotlin intrinsic methods to rename variables, values: disable, apply, apply-and-hide, default: apply
  --rename-flags                         - fix options (comma-separated list of):
                                            \'case\' - fix case sensitivity issues (according to --fs-case-sensitive option),
                                            \'valid\' - rename java identifiers to make them valid,
                                            \'printable\' - remove non-printable chars from identifiers,
                                           or single \'none\' - to disable all renames
                                           or single \'all\' - to enable all (default)
  --integer-format                       - how integers are displayed:
                                            \'auto\' - automatically select (default)
                                            \'decimal\' - use decimal
                                            \'hexadecimal\' - use hexadecimal
  --fs-case-sensitive                    - treat filesystem as case sensitive, false by default
  --cfg                                  - save methods control flow graph to dot file
  --raw-cfg                              - save methods control flow graph (use raw instructions)
  -f, --fallback                         - set \'--decompilation-mode\' to \'fallback\' (deprecated)
  --use-dx                               - use dx/d8 to convert java bytecode
  --comments-level                       - set code comments level, values: error, warn, info, debug, user-only, none, default: info
  --log-level                            - set log level, values: quiet, progress, error, warn, info, debug, default: progress
  -v, --verbose                          - verbose output (set --log-level to DEBUG)
  -q, --quiet                            - turn off output (set --log-level to QUIET)
  --disable-plugins                      - comma separated list of plugin ids to disable, default:
  --version                              - print jadx version
  -h, --help                             - print this help

Plugin options (-P<name>=<value>):
  dex-input: Load .dex and .apk files
    - dex-input.verify-checksum          - verify dex file checksum before load, values: [yes, no], default: yes
  java-convert: Convert .class, .jar and .aar files to dex
    - java-convert.mode                  - convert mode, values: [dx, d8, both], default: both
    - java-convert.d8-desugar            - use desugar in d8, values: [yes, no], default: no
  kotlin-metadata: Use kotlin.Metadata annotation for code generation
    - kotlin-metadata.class-alias        - rename class alias, values: [yes, no], default: yes
    - kotlin-metadata.method-args        - rename function arguments, values: [yes, no], default: yes
    - kotlin-metadata.fields             - rename fields, values: [yes, no], default: yes
    - kotlin-metadata.companion          - rename companion object, values: [yes, no], default: yes
    - kotlin-metadata.data-class         - add data class modifier, values: [yes, no], default: yes
    - kotlin-metadata.to-string          - rename fields using toString, values: [yes, no], default: yes
    - kotlin-metadata.getters            - rename simple getters to field names, values: [yes, no], default: yes
  kotlin-smap: Use kotlin.SourceDebugExtension annotation for rename class alias
    - kotlin-smap.class-alias-source-dbg - rename class alias from SourceDebugExtension, values: [yes, no], default: no
  rename-mappings: various mappings support
    - rename-mappings.format             - mapping format, values: [AUTO, TINY_FILE, TINY_2_FILE, ENIGMA_FILE, ENIGMA_DIR, SRG_FILE, XSRG_FILE, JAM_FILE, CSRG_FILE, TSRG_FILE, TSRG_2_FILE, PROGUARD_FILE, INTELLIJ_MIGRATION_MAP_FILE, RECAF_SIMPLE_FILE, JOBF_FILE], default: AUTO
    - rename-mappings.invert             - invert mapping on load, values: [yes, no], default: no
  smali-input: Load .smali files
    - smali-input.api-level              - Android API level, default: 27

Environment variables:
  JADX_DISABLE_XML_SECURITY - set to \'true\' to disable all security checks for XML files
  JADX_DISABLE_ZIP_SECURITY - set to \'true\' to disable all security checks for zip files
  JADX_ZIP_MAX_ENTRIES_COUNT - maximum allowed number of entries in zip files (default: 100 000)
  JADX_CONFIG_DIR - custom config directory, using system by default
  JADX_CACHE_DIR - custom cache directory, using system by default
  JADX_TMP_DIR - custom temp directory, using system by default

Examples:
  jadx -d out classes.dex
  jadx --rename-flags \"none\" classes.dex
  jadx --rename-flags \"valid, printable\" classes.dex
  jadx --log-level ERROR app.apk
  jadx -Pdex-input.verify-checksum=no app.apk

These options also work in jadx-gui running from command line and override options from preferences\’ dialog

Usage for plugins command

usage: plugins [options]
options:
  -i, --install <locationId>      - install plugin with locationId
  -j, --install-jar <path-to.jar> - install plugin from jar file
  -l, --list                      - list installed plugins
  -a, --available                 - list available plugins from jadx-plugins-list (aka marketplace)
  -u, --update                    - update installed plugins
  --uninstall <pluginId>          - uninstall plugin with pluginId
  --disable <pluginId>            - disable plugin with pluginId
  --enable <pluginId>             - enable plugin with pluginId
  --list-all                      - list all plugins including bundled and dropins
  --list-versions <locationId>    - fetch latest versions of plugin from locationId (will download all artefacts, limited to 10)
  -h, --help                      - print this help

Troubleshooting

Please check wiki page Troubleshooting Q&A

Contributing

To support this project you can:

  • Post thoughts about new features/optimizations that important to you
  • Submit decompilation issues, please read before proceed: Open issue
  • Open pull request, please follow these rules: Pull Request Process

Licensed under the Apache 2.0 License

下载源码

通过命令行克隆项目:

git clone https://github.com/skylot/jadx.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 jadx https://www.zuozi.net/33759.html

okhttp
上一篇: okhttp
dbeaver
下一篇: dbeaver
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务