What’s New

jadx

Developer Tools

jadx release notes.

Latest v1.5.6 · by jadxWebsiteskylot/jadx

Changelog

v1.5.6

1.5.6

Added
  • Graph views, code pane sync, and more
  • Collapse single-child directory chains in resource tree
  • Handle pasted file lists in file chooser
  • Show simple message box for file exceptions
  • Allow to create input category node even if no matching files found
  • New module/library for work with call graphs
  • Add mimetype for desktop file
  • Open single loaded class after load
  • Add copy reference to context menu
Changed
  • Use queue instead of recursion for type updates
Fixed
  • Insert generic casts for variable assigned from fields with known types
  • Handle Kotlin 1.9+ $ENTRIES pattern in enum restoration
  • Remove useless PHI for duplicate moves
  • Support enum restore for constructor without args
  • Handle null bounds in WindowLocation to prevent NPE on dialog dispose
  • Stop type inference on exception to prevent endless loop
Security
  • Reject absolute or path to CWD for zip entries
  • Sanitize all string values for gradle scripts on export
  • Add missing escaping on summary page
Main features and fixes

Security fixes:

  • Reject absolute or path to CWD for zip entries
  • Sanitize all string values for gradle scripts on export
  • Add missing escaping on summary page

Core:

  • Use queue instead of recursion for type updates

GUI:

  • Graph views, code pane sync, and more (PR #2784)
  • Collapse single-child directory chains in resource tree (PR #2866)
  • Handle pasted file lists in file chooser (PR #2876)
  • Show simple message box for file exceptions (#2659)

API:

  • Allow to create input category node even if no matching files found (#2806)
  • New module/library for work with call graphs (#2890)
All changes
Features
  • [core] Graph views, code pane sync, and more (PR #2784)
  • [core] Use queue instead of recursion for type updates
  • [core] New module/library for work with call graphs (#2890)
  • [gui] Add mimetype for desktop file
  • [gui] Open single loaded class after load
  • [gui] Add "copy reference" to context menu (PR #2863)
  • [gui] Collapse single-child directory chains in resource tree (PR #2866)
  • [gui] Handle pasted file lists in file chooser (PR #2876)
  • [gui] Show simple message box for file exceptions (#2659)
Bug Fixes
  • [core] Insert generic casts for variable assigned from fields with known types (#2776)
  • [core] Handle Kotlin 1.9+ $ENTRIES pattern in enum restoration (PR #2814)
  • [core] Remove useless PHI for duplicate moves (#2813)
  • [core] Support enum restore for constructor without args (#2821)
  • [core] Handle null bounds in WindowLocation to prevent NPE on dialog dispose (PR #2826)
  • [core] Stop type inference on exception (prevent endless loop)
  • [core] Resolve class/package name conflicts on case-insensitive filesystems (PR #2828)
  • [core] Use correct property for OS arch checks (#2830)
  • [core] Use correct args copy/replace in wrapped insns (#2835)
  • [core] Resolve minor decompilation issues (#2835)
  • [core] Remove result in wrapped insntructions (#2835)
  • [core] Limit ternary wrap to one level (#2844)
  • [core] Disable ternary mod for duplicated blocks (#2844)
  • [core] Harden XML parser in FileTypeDetector against XML bomb DoS (PR #2851)
  • [core] Improve handler path check for regions
  • [core] Limit 'if' region out block to current scope (#2791)
  • [core] Build correct file path for class from default package (#2854)
  • [core] Cover more situations for SwitchOverString (PR #2860)
  • [core] Workaround for duplicated variables names index increment (#2868)
  • [core] Resolve duplicated error attr in fallback codegen, allow to set whole attr list at once (#2842)
  • [core] Keep all dimensions for anewarray of an array element type (PR #2887)
  • [core] ImmutableList.lastIndexOf skipping index 0 (PR #2898)
  • [api] Allow to create input category node even if no matching files found (#2806)
  • [build] Set *nix executable permissions on start scripts (PR #2838)
  • [cli] In 'progress' log mode show issues from input plugins (#2803)
  • [gui] Update usage file data version (was changed in PR #2784)
  • [gui] Resolve possible NPE during project data loading (#2794)
  • [gui] Stop token process on NULL token in JadxTokenMaker (#2798)
  • [gui] Use UI thread for scroll in code (#2798)
  • [gui] Make the Split view checkbox correctly toggle between both modes (PR #2801)
  • [gui] Use UI thread for refreshStackFrameList in debugger view (PR #2807)
  • [gui] Use UI thread for adding logcat messages (#2811)
  • [gui] Update zh_CN translation (PR #2812)
  • [gui] Update zh_tw translation (PR #2818)
  • [gui] Move scripts leftover code, save tree state on script run
  • [gui] Resolve "launchScriptPath" is null
  • [gui] Localize code cache mode labels (PR #2825)
  • [gui] Use localized label for code cache preferences
  • [gui] Add file end line feed for exported code (PR #2836)
  • [gui] NullPointerException when changing line wrap mode (PR #2843)
  • [gui] Ensure all fonts are 'composite' (#2856)
  • [gui] Improve code tabs, sync and related code
  • [gui] Improve dot graph viewer, CFG generation simplified
  • [gui] Fix token type error leading to disables right-click context menu rename button (PR #2897)
  • [gui] Verify files and show fix actions, save project inputs hash on load (#2659)
  • [gui] Add missing escaping on summary page
  • [gui] Workaround for CJK support in bundled fonts (#2856)
  • [quark] Change from 'virtualenv' to 'venv' (PR #2879)
  • [res] Use safe number parsing for android manifest, refactor params object (#2857)
  • [script] Update imports in example scripts (#2795)
  • [xapk] Support files in sub-dirs in xapk (#2834)
New Contributors

Full Changelog: https://github.com/skylot/jadx/compare/v1.5.5...v1.5.6

Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.5.5

1.5.5

Changed
  • Insert generic casts for variable assigned from fields with known types
Fixed
  • Code area was updated from wrong thread causing many exception report popups, UI freezes and high CPU usage
  • Resolve possible NPE during project data loading
  • Stop token process on NULL token in JadxTokenMaker
  • Make the Split view checkbox correctly toggle between both modes
Major bug fixed
  • Code area was updated from wrong thread causing many exception report popups, UI freezes and high CPU usage (#2798)
Other Bug Fixes
  • [gui] Resolve possible NPE during project data loading (#2794)
  • [gui] Stop token process on NULL token in JadxTokenMaker (#2798)
  • [gui] Make the Split view checkbox correctly toggle between both modes (PR #2801)
  • [core] Insert generic casts for variable assigned from fields with known types (#2776)

Full Changelog: https://github.com/skylot/jadx/compare/v1.5.4...v1.5.5

Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.5.4

1.5.4

Added
  • Implement config file load and save in CLI
  • Add option for UI zoom factor in GUI
  • Allow to change limit for type inference updates
  • Support '.apks' files
  • Allow to use '.zip' as plugin artifact with jars inside
Changed
  • Change fonts size with UI zoom, use FlatLaf fonts bundle
  • Use FontUtils.getCompositeFont() that supports CJK
  • Select better class from duplicates
  • Report plugin exceptions to plugin github project
  • Scripting plugin now external and not included in release bundle
Fixed
  • Avoid false positive throws
  • Resolve race condition in task executor
  • Add missing field code annotation for enum fields in switch-case
  • Resolve rename of inner class using full name
  • Catch all exceptions in type update
  • More file extensions added for file type detection
  • Improve decoding errors handling
  • Handle OutOfMemoryError to correctly halt processing
  • Detect more for-each loops and prevent issues with missing generics types
Main features

CLI:

  • Implement config file load and save (#1731)

GUI:

  • Change fonts size with UI zoom, use FlatLaf fonts bundle
  • Use FontUtils.getCompositeFont() that supports CJK (PR #2751)

Plugins:

  • Scripting plugin now external and not included in release bundle. Check jadx-script-kotlin for installation details.
  • Support '.apks' files (PR #2647)
  • Allow to use .zip as plugin artifact (with jars inside)
  • Report plugin exceptions to plugin github project
All changes
Features
  • [core] Allow to change limit for type inference updates (PR #2629)
  • [core] Support '.apks' files (PR #2647)
  • [core] Select better class from duplicates (#2701)(PR #2702)
  • [cli] Implement config file load and save (#1731)
  • [gui] Add option for UI zoom factor (#2720)
  • [gui] Change fonts size with UI zoom, use FlatLaf fonts bundle
  • [gui] Report plugin exceptions to plugin github project
  • [plugins] Allow to use .zip as plugin artifact (with jars inside)
Bug Fixes
  • [core] Minor fixes for type update limit option (#2629)
  • [core] Avoid false positive throws (PR #2636)(#2475)
  • [core] Resolve race condition in task executor
  • [core] Add missing field code annotation for enum fields in switch-case
  • [core] Resolve rename of inner class using full name (#1997)
  • [core] Catch all exceptions in type update (#2668)
  • [core] More file extensions added for file type detection (PR #2670)
  • [core] Enhancements for abnormal situations (PR #2679)
  • [core] Improve decoding errors handling (#2676)
  • [core] Handle OutOfMemoryError to correctly halt processing (#2676)
  • [core] Detect more for-each loops (also prevent issues with missing generics types) (PR #2689)
  • [core] Keep generics while applying debug info (#2687)
  • [core] Respect arg offset for type var mapping on invoke (PR #2698)
  • [core] Extract common switch break, remove unreachable (#2697)
  • [core] Improve common 'break' extract checks (#2697)
  • [core] Correctly handle variable in ternary transform
  • [core] Support 'break' extract for nested 'if' (#2697)
  • [core] Refactor and improve class duplicates removal (#2701)
  • [core] Resolve edge cases for select best classes from duplicates (#2701)
  • [core] Prevent endless loop in region maker on dead code with loops (#2715)
  • [core] Add missing level info for jadx code comments (#2737)
  • [core] Keep wide upcast for arith instructions (#2730)
  • [core] Improve codegen methods for custom decompilation mode
  • [core] Speed up file path security checks (PR #2745)
  • [core] Terminate type inference on first stack overflow (#2744)
  • [core] Add more checks to better find handler's end (PR #2749)
  • [core] Avoid more false positive throws (PR #2752)
  • [core] Improve switch over string restore (#2359)
  • [aab-input] Correct check for '.aab' file (PR #2646)
  • [cli] Distinguish JadxCLI error code (PR #2734)
  • [dex-input] Use length in header for checksum, fix error in Dex v41 (PR #2711)
  • [gui] Handle syntax parsing errors during search (#2669)
  • [gui] Use simple token maker as default to avoid parsing error (#2669)
  • [gui] Update Chinese localization for various menu items (PR #2673)
  • [gui] Split loading and UI update for code area (#2682)
  • [gui] Rework background executor to reduce delay for short tasks
  • [gui] Prevent unlimited recursion in text search (#2685) (PR #2694)
  • [gui] Use correct threads for code from close and reload actions (#2684)
  • [gui] In comment dialog insert new line at current caret position (#2706)
  • [gui] Resolve exception in search dialog on project reload (#2714)
  • [gui] Resolve NPE with smali breakpoint (#2717) (PR #2718)
  • [gui] Do not enforce new nodes method for backward compatibility
  • [gui] Don't init already loaded plugins while collecting options (#2727)
  • [gui] Use FontUtils.getCompositeFont() that supports CJK (PR #2751)
  • [gui] Load class code before resolving jump position to get corrent value
  • [gui] Fix illegal ':' character in path when exporting resources.arsc/res
  • [gui] Use resource short name when exporting a folder via context menu
  • [gui] Use new resource class for files in arsc (#2771)
  • [gui] Limit tabs title length, fix tooltips (#2771)
  • [gui] Go to main activity and application class when class name was renamed by deobfuscator (PR #2779)
  • [java-input] Support Java modified UTF-8 strings (PR #2654)
  • [java-input] Fix dup2_x1 stack to regs conversion for wide types (#2755)
  • [kotlin-metadata] Upgrade to kotlin 2.2 metadata library (PR #2655)
  • [plugins] Improve errors handling and reporting (#2597)
  • [plugins] Reduce plugins-list update checks
  • [plugins] Use class with correct fields for plugins list entry
  • [res] As workaround use INVALID_STRING_PLACEHOLDER when string offset is is negative (#2729)(PR #2739)
  • [res] Prevent problems arising by parsing duplicate resource entries from resources.arsc (#2775)(PR #2777)
  • [res] Back to the old correct resource ID calculation (PR #2788)
  • [smali-input] Use synced list for threaded processing, improve inner classes handling
  • [xapk] Use stream copy to prevent OOM on large files (#2619) (PR #2719)
  • [zip] Check uncompressed size exceeds the maximum value of an integer (PR #2773)

Full Changelog: https://github.com/skylot/jadx/compare/v1.5.3...v1.5.4

New Contributors
v1.5.3

1.5.3

Added
  • Enhance AAB parsing
  • Add new search options to search in text or binary resources
  • Allow view and edit input smali files
Changed
  • Use compileSdkVersion from manifest, update AGP to 8.10.1, and other improvements
Fixed
  • Correct loading for plain text XML files
  • Correct hex format for negative numbers
  • Use 'dev.dirs' JNI implementation only on x86-64
  • Use proper newlines when generating CFG
  • Improve memory usage in jadx-cli
  • Add missing '-XX:+IgnoreUnrecognizedVMOptions' JVM flag
  • Workaround for wrap layout repaint issue in search dialog
  • Remove duplicate class of Frida snippet
  • Use var instead let for class variable in Frida script
  • Prevent IndexOutOfBoundsException in MethodSearchProvider
  • Disable debugger action if project not loaded
  • Minor UI fixes
  • Resolve NPE on code area close
  • Fix NullPointerException in copyAllSearchResults
  • Various tabs related fixes
  • Allow to load zip with duplicate names in entries
Features
  • [aab] Enhance AAB parsing (PR #2557)
  • [gui] New search options to search in text or binary resources (PR #2526)
  • [gui] Allow view and edit input smali files
  • [export] Use compileSdkVersion from manifest, update AGP to 8.10.1, other improvements (PR #2528)
Bug Fixes
  • Correct loading for plain text XML files (PR #2537)
  • Correct hex format for negative numbers (#2531)
  • Use 'dev.dirs' JNI implementation only on x86-64 (#2578)
  • Use proper newlines when generating CFG (PR #2592)
  • [cli] Improve memory usage in jadx-cli (#2524)
  • [cli] Add missing '-XX:+IgnoreUnrecognizedVMOptions' JVM flag (#2554)
  • [gui] Workaround for wrap layout repaint issue in search dialog (PR #2521)
  • [gui] Remove duplicate class of Frida snippet (PR #2525)
  • [gui] Use var instead let for class variable in Frida script (PR #2527)
  • [gui] Prevent IndexOutOfBoundsException in MethodSearchProvider (PR #2542)
  • [gui] Disable debugger action if project not loaded (#2547)
  • [gui] Minor UI fixes (PR #2549)
  • [gui] Resolve NPE on code area close
  • [gui] Fix NullPointerException in copyAllSearchResults (#2580) (PR #2581)
  • [gui] Various tabs related fixes (PR #2595)
  • [zip] Allow to load zip with duplicate names in entries
  • [gui] Improve menu icon, such as 'Select in Tree' and 'Go to AndroidManifest.xml' buttons (PR #2543)
  • [export] Disable targetSDKVersion checks in AndroidStudio (PR #2533)
  • [export] Add missing ExpiringTargetSdkVersion in #2533 (PR #2538)

Full Changelog: https://github.com/skylot/jadx/compare/v1.5.2...v1.5.3

New Contributors
Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.5.2

1.5.2

Added
  • Custom zip reader implementation to fight tampering
  • Gradle export templates supporting android app, android lib, and simple java
  • Initial support for DEX v41
  • Export dialog with options in GUI
  • Tree structure usage search in GUI
  • Dynamic code editor theme from UI theme in GUI
  • Preview Tab Feature in GUI
  • New HexViewer in GUI
  • APKM support in Plugins
  • Parse and use Kotlin SourceDebugExtension with SMAP for rename classes and packages
  • Unload method to JadxPlugin API
  • Method to add popup menu entry for tree nodes in API
  • Method to get jadx-gui icons by name in API
  • Method to open usage dialog in API
  • Replace constants in annotations of method arguments
  • Generate missing throws declarations and validate exceptions
  • WebP image preview support in GUI
  • Script rename feature in GUI
  • Confirm dialog when removing script in GUI
  • Support for APK Signature Scheme v3.1 signers in GUI
Main features

Core:

  • Custom zip reader implementation to fight tampering
  • Add gradle export templates, support android app/lib and simple java
  • Initial support for DEX v41 (#2128)

GUI:

  • Add export dialog with options (PR #2378)
  • A tree structure usage search (PR #2498)
  • Add dynamic code editor theme from UI theme (PR #2471)
  • Add Preview Tab Feature (PR #2474)
  • New HexViewer (PR #2469)

Plugins:

  • Add APKM support (PR #2379)
  • Parse and use Kotlin SourceDebugExtension with SMAP for rename classes and packages (PR #2389)

API:

  • Add 'unload' method to JadxPlugin (#2463)
  • Method to add popup menu entry for tree nodes (#2412)
  • Add method to get jadx-gui icons by name
  • Add method to open usage dialog
All changes
Features
  • Replace constants in annotations of method arguments (PR #2358)
  • Add APKM support (PR #2379)
  • Parse and use Kotlin SourceDebugExtension with SMAP for rename classes and packages (PR #2389)
  • Custom zip reader implementation to fight tampering
  • Add gradle export templates, support android app/lib and simple java
  • Generate missing throws declarations, validate exceptions (#2441) (PR #2475)
  • Move variable name apply from codegen to new pass (#2422)
  • Use parallel jobs to delete files in directory (#2436)
  • [api] Add 'unload' method to JadxPlugin (#2463)
  • [dex-input] Initial support for DEX v41 (#2128)
  • [gradle] Handle non-final res ids for AGP >8.0.0 (PR #2362)
  • [gui] Add webp image preview support (PR #2372)
  • [gui] Add script rename feature (PR #2374)
  • [gui] Added confirm dialog when removing script (PR #2375)
  • [gui] Add export dialog with options (PR #2378)
  • [gui] Add button to install desktop file directly from jadx-gui (PR #2404)
  • [gui] Tabs UI improvements (PR #2419)
  • [gui] Support APK Signature Scheme v3.1 signers (PR #2452)
  • [gui] Add dynamic code editor theme from UI theme (PR #2471)
  • [gui] Allow to set code area theme with custom code (#2471)
  • [gui] Add Preview Tab Feature (PR #2474)
  • [gui] Add "Copy All" button to Search dialog (PR #2480)
  • [gui] New HexViewer (PR #2469)
  • [gui] Added support view and open more resource files (PR #2483)
  • [gui] Added feature to close all left tabs (#1390) (PR #2484)
  • [gui] Added dialog for select methods for generate frida class snippet (PR #2487)
  • [gui] A tree structure usage search (PR #2498)
  • [gui] Notify user if code has non-displayable character with current font (PR #2490)
  • [gui] Add option to disable the tooltip that pops up on hover (PR #2505)
  • [gui] Use list component for recent projects on start page (PR #2513)
  • [plugins] Add method to get jadx-gui icons by name
  • [plugins] Add method to open usage dialog
  • [plugins] New API method to add popup menu entry for tree nodes (#2412)
  • [res] Use file headers to detect extension for obfuscated resources (PR #2495)
  • [tools] Improve tool for sync and update I18N lines (PR #2494)
  • [zip] Provide direct InputStream of ZIP entries (PR #2509)
Bug Fixes
  • Disable usage of JDK Unsafe class in GSON (#2341)
  • Additional checks for default switch case exit (#2351)
  • Check respectBytecodeAccModifiers in MarkMethodsForInline (PR #2361)
  • Inner class parent is wrong when name formatted as Class$method$xxx (PR #2364)
  • Inline anonymous class wrongly handles field as Classname.this (PR #2367)
  • Remove wrapped flag for inlined instruction (#2363)
  • Better package-info support (PR #2369)
  • Force type var short form as a key in generic resolve mapping (#2370)
  • Resolve incorrect var ref validation and remove (#2381)
  • Allow to inline methods with ternary instructions (#2380)
  • Show all methods for 'simple' and 'fallback' decompilation modes
  • IfRegionMaker find the wrong outBlock (PR #2385)
  • Improve rename using source class name (#2397)
  • Use fork of directories library with JNI implemetation for Windows (#2401)
  • Do not replace constant fields which still used in code (#2414)
  • Unload attributes map if empty (#2433)
  • Do not reopen zip file on every resource decode
  • Improve BlockSet class, use it in more places
  • Deduplicate blocks to help 'complex if' restructure (#2445)
  • Scan annotations in usage collector visitor (#2435)
  • Ignore external and invalid class names in signature (#2459)(PR #2460)
  • Collect usage info in generic types
  • Check and report invalid magic in '.dex' files (#2473)
  • Process synthetic resource inner classes using common method (#2482)
  • For static synchronized methods remove top synchronized block (#2493)
  • Wrap MethodThrowsVisitor insns processing in try/catch (#2441)
  • Lazily create dirs in default file getter implementation
  • Use wrap layout for options in search dialog, add size limit option
  • Use resource table file name as prefix in sub files (#2373)
  • Add arsc file name prefix only in jadx-gui (#2373)
  • [cli] Concat new lines in plugin description
  • [gui] Resolve ignored mouse actions (#2360)
  • [gui] Text on popup action change if need update comment & fixes default size on comment diallog (PR #2376)
  • [gui] Improve detection of multi line method comments for update
  • [gui] Add missing sync in clean task at search dialog close (#2363)
  • [gui] Update Messages_zh_CN.properties (PR #2387)
  • [gui] Improve expand tree (speed up and duplicate entries removal) (#2399)
  • [gui] Workaround to force class decompilation in loading task (#2400)
  • [gui] Improve JNode caching (#2400)
  • [gui] New implementation for tree state save/load (#2399)
  • [gui] Set minimum size for comment dialog (#2405)
  • [gui] Skip window pos saving if not changed
  • [gui] Don't ask to save blank project
  • [gui] Save current caret position and add it to tab code jump event (#2409)
  • [gui] Correct class init method actions and highlight (#2412)
  • [gui] Minor action names and icons adjustments (#2419)
  • [gui] Allow file and directory have same name in tree (#2420)
  • [gui] Update Messages_de_DE.properties (PR #2410)
  • [gui] Improve accessibility of preferences dialog (#2445)
  • [gui] Apply log level as early as possible
  • [gui] Update zh_TW translation (PR #2448)
  • [gui] Flatten packages view: non-leaf packages with classes were not visible in the sources tree (PR #2450)
  • [gui] Xposed snippet argument types corrected (PR #2454) (#2458)
  • [gui] Properly handle excluded classes in code search (#2432)
  • [gui] Update Messages_zh_CN.properties (PR #2470)
  • [gui] Add missing annotations color for dynamic theme (#2471)
  • [gui] Improved preview tab behaviors (PR #2477)
  • [gui] Improve apk signature loading speed (PR #2481)
  • [gui] Restore tree state after renaming (PR #2486)
  • [gui] Update resource.arsc nodes after opened tab with resource ids (PR #2489)
  • [gui] Using actual tree in usage tree dialog (PR #2503)
  • [gui] Fix rename package behaviors (PR #2500)
  • [gui] Improve colors in usage tree, some UI fixes (PR #2506)
  • [gui] Minor improved search dialog & small refactor for search fields (PR #2510)
  • [gui] Validate hex address in GotoAddressDialog (PR #2512)
  • [gui] Validate extensions list in file dialog (PR #2515)
  • [gui] Lazy load hex viewer content
  • [gui] Redirect plugins menu action to show plugins settings page
  • [gui] Prevent UI thread freeze on plugin install/uninstall
  • [plugins] Use release from asset if differ from release name with GitHub resolver
  • [res] Allow jumping backwards to an already processed position (PR #2344)
  • [res] Handle null values in android manifest parsing (#2392)
  • [res] Ignore reserved value in type chunk (PR #2403)
  • [res] Chunk parsing was aborted too early for unordered entries (PR #2444)
  • [res] Improve resource table and config decoding (#2420)
  • [res] Fix decode xml attributes value (PR #2492)
  • [smali-input] Improve error report for smali assemble (#2411)
  • [xapk] New implementation to reduce zip unpack and fix NPE (#2501)

Full Changelog: https://github.com/skylot/jadx/compare/v1.5.1...v1.5.2

New Contributors
Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.5.1

1.5.1

Added
  • Support restore of switch over string
  • Add automatic patching for semi-corrupted APKs
  • Support new fields in resource decoding
  • Pin tabs in GUI
  • Quick Tabs in GUI
  • Limit search to a package in GUI
  • Add button to go to Application class in GUI
  • Export resource/class/package in GUI
  • Smali code folding in GUI
  • Move AAB support to separate plugin
  • Allow to change config and cache dirs with env vars
  • Support inner class construction with outer instance
  • Add option to always use source file name as class name alias
  • Allow to disable installed plugins
  • Give ability to plugins to edit blocks before locking
  • Add JadxArgs property to adjust xml security checks
  • Allow to get method code via API
  • Add option to disable plugins in CLI
  • Allow to check for unstable releases in GUI
  • Add button to go to Android Manifest in GUI
Main features

Core:

  • Support restore of switch over string
  • Adding automatic patching for semi-corrupted APKs (PR #2298)
  • Resource decoding support new fields

GUI:

  • Pin tabs (PR #2230)
  • Quick Tabs (PR #2241)
  • Limit search to a package (PR #2284)
  • Add button to go to Application class (#2208)(PR #2213)
  • Export resource/class/package (PR #2228)
  • Smali code folding (PR #2233)
All changes
Features
  • Move AAB support to separate plugin (PR #2165)

  • Allow to change config and cache dirs with env vars (#2159)

  • Support inner class contruction with outer instance (#2253)

  • Add the option to always use source file name as class name alias (PR #2287)

  • Support restore of switch over string (basic case)(#2288)

  • Adding automatic patching for semi-corrupted APKs (PR #2298)

  • Improve better name algorithm (PR #2299)

  • Allow to disable installed plugins (#2277)

  • Give ability to plugins to edit blocks before locking (PR #2336)

  • Add method to update all blocks related info in method (#2335)

  • [api] Add JadxArgs property to adjust xml security checks (#2291)

  • [api] Allow to get method code (#2305)

  • [cli] Add option to disable plugins (#2277)

  • [gui] Allow to check for unstable releases (PR #2200)

  • [gui] Add button to go to Application class (#2208)(PR #2213)

  • [gui] Export resource/class/package (PR #2228)

  • [gui] Pin tabs (PR #2230)

  • [gui] Smali code folding (PR #2233)

  • [gui] Quick Tabs Overhaul (PR #2241)

  • [gui] Limit search to a package (PR #2284)

  • [gui] Add button to go to Android Manifest (PR #2296)

  • [gui] Create Frida hooking snippet for all methods in the class (PR #2328)

  • [java-input] Support StackMapTable to get stack info for unvisited jumps (#2271)

  • [plugins] Get a main window reference as JFrame

  • [plugins] Get config and cache dirs for plugins

  • [plugins] Allow to set minimum required jadx version in plugin info (#2314)

  • [res] Improve error message for unsupported ResTable flags (PR #2266)

  • [res] Support 16-bit entry offsets (PR #2269)

  • [res] Support compact resource entries (#2268)

  • [res] Support grammar inflection flag in res config (#2270)

  • [res] Improve resource names (PR #2316)

Bug Fixes
  • Config dir was used instead cache dir

  • Improve exception handlers checks (#2086)

  • Make detailed var info deterministic (PR #2231)

  • Improve checking if methods are inline for FixAccessModifiers (PR #2235)

  • Don't rerun SSA transform in ConstructorVisitor (#2236)

  • Workaround to make method inline deterministic (#1089)

  • Improve inlining synthetic accessors (PR #2243)

  • Use correct approach to get prev block on path (#2239)

  • Handle quick return on branched constructor (#2240)

  • Improve switch out search in loop (#2246)

  • Improve checking of access modifiers for classes (PR #2251)

  • Improve checking of access modifiers for methods (PR #2252)

  • Improve try/catch temp edges injection (#2247)

  • Improve checking of access modifiers (PR #2255)

  • Improve 'continue' insertion for switch in loop (#2249)

  • Check if debug info offset is invalid (#1653)

  • Additional checks for class signature (#2272)

  • Do not add custom passes for fallback and simple modes (#2276)

  • Protect class deps from loading in different decompilation mode

  • Improve condition branch checks in loops (#2274)

  • Use type from new-instance if differ from constructor call (#2285)

  • Ignore debug lines hints if numbers was adjusted for method

  • Don't add same 'loaded from:' comment for inner classes

  • Improve switch out block search if all method exits are inside (#2264)

  • Improve checks for restore new filled array (#2289)

  • Use temp dir env var only in apps

  • Update reserved keywords (PR #2301)

  • Replace patched zip early in input files (#2302)

  • Add missing null check in codegen for classes generated by jadx

  • Clear temp root dir instead delete (#2312)

  • Fix default branch position in switch-over-string (PR #2331)

  • Prevent endless loop in pre header insertion mod (#2300)

  • Unwrap consts in switch-over-string (PR #2332)

  • Improve negation condition checks for switch over string (#2333)

  • Support "fall-through to default" case in switch-over-string (PR #2338)

  • Insert new filled array insn before first usage (#2340)

  • Fix primitive-to-primitive conversions (PR #2326)

  • [deobf] Update TLDs (PR#2320)

  • [gui] Show correct content of binary resources in hex view (#2160) (PR #2166)

  • [gui] Support filtering files with multiple extensions in file dialog (PR #2185)

  • [gui] Update Messages_zh_CN.properties (PR #2203, PR #2319)

  • [gui] Update russian translation (PR #2209)

  • [gui] Fix Xposed args code generation (PR #2212)

  • [gui] Horizontal scrolling in Linux (PR #2229)

  • [gui] Show folding actions in code popup menu (#2234)

  • [gui] Add VM flags to fix UI ghosting (#2225)

  • [gui] Trim trailing spaces in input files (#2244)

  • [gui] Trim also leading spaces in paths from file dialog (#2244)

  • [gui] Use correct translation in rename dialog (#2254)

  • [gui] Quick Tabs Optimization (PR #2242)

  • [gui] Merge full class name tokens for constructors (#2261)

  • [gui] Prevent UI stuck on class load (#2259)

  • [gui] Minor fixes for code jumps

  • [gui] Resolve old objects reference leak in TabsController

  • [gui] Prevent old refs leak in shortcuts controller

  • [gui] Send select tab event before code jump (#2292)

  • [gui] Update check fixed to match current artifact naming

  • [gui] Improve plugins preferences group

  • [gui] In settings row reduce space between description and value

  • [gui] Use another implementation for font dialog (#2310)

  • [gui] Load plugins settings in temp context without UI (#2206)

  • [gui] Use correct section filter in plugins list

  • [gui] Correct tabs filter in "Close others" tab action (#2330)

  • [launch4j] Do not overwrite Java heap configuration from applicationDefaultJvmArgs (PR #2218)

  • [mappings] Try to prevent mapping file reset on export exception, refactor and fix code to avoid NPE (#2220)(#2226)

  • [quark] Fix automated installation and check exit code of executed external commands (#2119)(PR #2216)

  • [res] Prevent duplication of ARSC entries (#2263)

  • [res] Don't rename resource entries when useRawResName = true (PR #2306)

  • [res] Update Android attrs to API 35 (PR #2318)

  • [smali-input] Compile one smali file at a time to avoid 64k limit (#2158)

  • [xml] Allow for non-standard attributes sizes and avoid index exceptions when decoding some strings (PR #2210)

  • [xml] AXML/Manifest parsing improvements (PR #2211)

New Contributors
Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.5.0

1.5.0

Added
  • Support for scripting using Kotlin
  • Support for external plugins
  • Hex-viewer for binary asset files in Jadx GUI
  • Go to main activity action in Jadx GUI
  • Support for XApk files
  • Allow to move class to another package
  • Support jsr/ret opcodes for java-input
  • Custom shortcuts configuration in Jadx GUI
  • Tabs drag and drop reorder support in Jadx GUI
Changed
  • Improved code cache with ability to use common directory and view/delete existing caches in preferences
  • Jadx GUI configuration moved into plain json files in system config directory
  • Parse and use Kotlin metadata for renames
  • Java 11+ is now required
Main features
  • Added support for:
    • Scripting, uses Kotlin, check short guide
    • External plugins, guide Both features in preview state, API is stable but limited (especially in UI customizations)
  • Jadx GUI:
    • Improved code cache, allow use common directory, view/delete exist caches in preferences
    • jadx-gui configuration moved into plain json files in system config directory
    • Allow to set custom shortcuts
    • Tabs drag and drop reorder support
    • Hex-viewer for binary asset files
    • Add 'go to main activity' action
  • Other:
    • Java 11+ is required now
    • Parse and use Kotlin metadata for renames
    • Add support for XApk files
    • Allow to move class to another package
    • Support jsr/ret opcodes (java-input)
  • A lot of bug fixes ... and regressions :rofl:

Full Changelog: https://github.com/skylot/jadx/compare/v1.4.7...v1.5.0

Download files:

For system JRE the latest version is always preferred, Java 11+ is required, download at oracle.com

v1.4.7

1.4.7

Added
  • Inline lambdas by instance field
  • Allow to load classes using input stream or byte array in jadx-input plugin
Fixed
  • Restore missing type parameter declarations
  • Filter invalid chars in app name for gradle export
  • Correct args shift for instance invoke-custom
  • Additional checks to forbid inline of null consts
  • Use strict patterns for synthetic methods inline
  • Resolve manifest decoding error Expected strings start
  • Handle RES_TABLE_TYPE_OVERLAY
  • Parsing of sparse RES_TABLE_TYPE_TYPE and RES_TABLE_TYPE_STAGED_ALIAS chunks
  • Resolve int hex attributes
  • Resolve custom attributes
  • Resolve declare-styleable attributes
  • Set empty parent for styles without a parent, remove duplicated code
  • Use parent attribute only for styles
  • Search constant fields usage in all classes
  • Redirect jump from search for inlined classes
  • Show skipped resources count during search
  • Process UI updates in correct thread
  • Make enum CLI arguments match documented format
Features
  • [core] Inline lambdas by instance field (#1800)
  • [plugins] Allow to load classes using input stream or byte array in jadx-input plugin (#1457)
Bug Fixes
  • [core] Restore missing type parameter declarations (#1800)
  • [core] Filter invalid chars in app name for gradle export (PR #1813)
  • [core] Correct args shift for instance invoke-custom (#1816)
  • [core] Additional checks to forbid inline of null consts (#1828)
  • [core] Use strict patterns for synthetic methods inline (#1829)
  • [res] Resolve manifest decoding error Expected strings start (#1797)(PR #1798)
  • [res] Handle RES_TABLE_TYPE_OVERLAY (#1748) (PR #1804)
  • [res] Parsing of sparse RES_TABLE_TYPE_TYPE and RES_TABLE_TYPE_STAGED_ALIAS chunks (#1806 #1803)(PR #1807)
  • [res] Resolve int hex attributes
  • [res] Resolve custom attributes
  • [res] Resolve declare-styleable atrributes
  • [res] Set empty parent for styles without a parent, remove duplicated code
  • [xml] Use parent attribute only for styles (PR #1815)
  • [gui] Search constant fields usage in all classes (#1801)
  • [gui] Redirect jump from search for inlined classes
  • [gui] Show skipped resources count during search (#1808)
  • [gui] Update Messages_zh_CN.properties (PR #1811)
  • [debugger] Process UI updates in correct thread (#1796)
  • [cli] Make enum CLI arguments match documented format (PR #1787)

Full Changelog: https://github.com/skylot/jadx/compare/v1.4.6...v1.4.7

Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.4.6

1.4.6

Added
  • Support polymorphic invoke
  • Add alternative file open dialog
  • Add native libs info to summary
  • Add Russian Translation
  • Add keyboard shortcut ctrl+w to close tab
Fixed
  • Check full signature for search method override
  • Escape special characters in AAB resources
  • Allow altMetafactory method in lambda call site
  • Resolve JavaNode caching issues
  • Output unknown invoke-custom as polymorphic call
  • Process manifest before other resources
  • Disable shell folders in file open dialog
  • Correct html disabling in search results
  • Try to handle exception in RSTA.getPreferredSize()
  • Show all code sources in summary (remove dex filter)
  • Change callMethodName of constructors in Frida action
  • Add template for constructor and void methods to Frida snippet
  • Hi-dpi main window initial size
  • Correct html render in comments search results
  • Resolve exception in smali method writer
Features
  • [core] Support polymorphic invoke (#384)(#1777)
  • [gui] Add alternative file open dialog (#1709)
  • [gui] Add native libs info to summary (#1717)
  • [gui] Add Russian Translation (PR #1744)
  • [gui] Added keyboard shortcut ctrl+w to close tab (#1765)(PR #1766)
Bug Fixes
  • [core] Check full signature for search method override (#1743)
  • [core] Escape special characters in AAB resources (PR #1747)
  • [core] Allow altMetafactory method in lambda call site (#1760)
  • [core] Resolve JavaNode caching issues (#1775)
  • [core] Output unknown invoke-custom as polymorphic call (#1760)
  • [core] Process manifest before other resources (#1740)
  • [gui] Disable shell folders in file open dialog (#1709)
  • [gui] Correct html disabling in search results
  • [gui] Try to handle exception in RSTA.getPreferredSize() (#1712)
  • [gui] Show all code sources in summary (remove dex filter) (#1716)
  • [gui] Change callMethodName of constructors in Frida action (#1714)(PR #1715)
  • [gui] Add template for constructor and void methods to Frida snippet (#1714)
  • [gui] Hi-dpi main window initial size (#1728)(PR #1729)
  • [gui] Correct html render in comments search results
  • [gui] Resolve exception in smali method writer (#1739)(PR #1745)
  • [gui] Improve smali disasm method param write (#1739)
  • [gui] Make bytecode output closer to smali (#1739)
  • [gui] Quick fix for duplicate/overlapping logcat windows (#1752)(PR #1761)
  • [gui] Allow html in JVariable to render renaming of variables correctly (#1769)(PR #1770)
  • [gui] Print the renamed function name in a frida snippet log (#1772)(PR #1773)
  • [gui] Split tabs loading to prevent ui dead lock
New Contributors

Full Changelog: https://github.com/skylot/jadx/compare/v1.4.5...v1.4.6

Download files:

For system JRE the latest version is always preferred, download at oracle.com

v1.4.5

1.4.5

Added
  • Add option for search results count per page in GUI
  • Add logcat output to debugger
Changed
  • Update Korean translation in GUI
  • Update pt-BR translation in GUI
  • Update zh-TW translation in GUI
  • Update zh_CN translation in GUI
Fixed
  • Don't rename bridged overridden methods
  • Don't mark constructor for inline if anonymous class inline is disabled
  • Handle possible concurrent exception in method codegen
  • Correct fix for all use places of incompatible primitives
  • Improve logging messages for zip security errors
  • Improve ternary inline and resolve more enum cases
  • Restore enum class with custom code in static init
  • Handle empty block at end of else-if chain
  • Implement parsing RES_TABLE_TYPE_LIBRARY chunks in resource parser
  • Migrate debugger to fixed jdwp library fork
  • Fix multi-threading issue in GUI DebugController
  • Disable HTML rendering in labels if not needed in GUI
Features
  • [gui] Option for search results count per page (#1652)
  • [debugger] Add logcat output (#1411)(PR #1666)
Bug Fixes
  • Don't rename bridged overridden methods (#1672)
  • Don't mark constructor for inline if anonymous class inline is disabled (#1680)
  • Handle possible concurrent exception in method codegen (#1685)
  • Correct fix for all use places of incompatible primitives (#1688)
  • Improve logging messages for zip security errors (#750)(PR #1698)
  • Improve ternary inline, resolve more enum cases (#1686)
  • Restore enum class with custom code in static init (#1699)
  • Handle empty block at end of else-if chain (#1674)
  • [res] Implemented parsing RES_TABLE_TYPE_LIBRARY chunks (#1663)(PR #1664)
  • [debugger] Migrate to fixed jdwp library fork (#1471)
  • [gui] Multi-threading issue in DebugController fixed (#1701) (PR #1702)
  • [gui] Disable HTML rendering in labels if not needed
  • [gui] Update Korean translation (PR #1650)
  • [gui] Update pt-BR translation (PR #1655)
  • [gui] Update zh-TW translation (PR #1694)
  • [gui] Update zh_CN translation (PR #1700)

Full Changelog: https://github.com/skylot/jadx/compare/v1.4.4...v1.4.5

Download files description:
  • jadx-gui-1.4.5-with-jre-win.zip - jadx-gui with bundled JRE
  • jadx-gui-1.4.5-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
  • jadx-1.4.5.zip - cross-platform cli and gui bundle (system JRE must be installed)

For system JRE the latest version is always preferred, download at oracle.com