Jadx Changelog

What's new in Jadx 1.5.0

Apr 21, 2024
  • 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:
  • 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

New in Jadx 1.4.7 (Apr 20, 2023)

  • 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)

New in Jadx 1.4.6 (Feb 20, 2023)

  • 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 in Jadx 1.4.5 (Oct 20, 2022)

  • 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)

New in Jadx 1.4.4 (Aug 21, 2022)

  • Features:
  • [gui] Add manual search, stop and sort actions to search dialog (#1600)
  • [gui] Save project search history
  • [gui] Show start page on jadx open
  • [gui] Add Brazilian Portuguese translation (PR #1596)
  • Select better resource name (#1581)
  • Add option to disable finally block extraction (#1592)
  • Bug Fixes:
  • Resolve inherited method to use correct alias (#1582)
  • Check variables before merge in finally block (#1592)
  • Checks for field init reorder (#1599)
  • Handle empty endless loop (#1611)
  • Improve top block search for try/catch (#1633)
  • UnsupportedOperationException on adding a field (#1645)(PR #1646)
  • Don't inline anonymous in self inner class (#1645)
  • [gui] Improve search dialog performance
  • [gui] Improve resources search (#1648)
  • [gui] Improve log viewer dialog (#1311)(PR #1649)
  • [gui] Add constructors usage into class usage (#1591)
  • [gui] Sort resources by deobfuscated name (#1595)(PR #1598)
  • [gui] Correct Frida snippet for constructor (PR #1605)
  • [gui] Fix broken FileDialog by using legacy sort (#1628)(PR #1630)
  • [gui] Handle possible classes overlap in disk cache (#1633)
  • [gui] Disable actions if files not loaded (#1644)
  • [debugger] Resolve NPE in adb device viewer (#1585) (PR #1586)
  • [res] XML "null" decoding (#1583)(PR #1594)

New in Jadx 1.4.3 (Jul 21, 2022)

  • Bug Fixes:
  • [gui] Check user renames.
  • [gui] Allow to use empty name to reset rename.
  • [gui] Ignore/limit waiting of canceled search task.
  • [gui] Forbid rename method args in fallback mode.
  • [gui] Set current dir directly in file chooser constructor.
  • [gui] IndexOutOfBoundsException in JumpManager.
  • [gui] QuarkReport data validation added and other minor improvements.
  • [gui] Resolve payload offset for switch insns in debug smali code.
  • [gui] Ignore errors on code area dispose.
  • Check synthetic methods before remove/inline.
  • Correct inline/merge with overriden bridge method.
  • Add more checks before remove or rename enum methods.
  • Handle parent of inlined/moved classes.
  • Update deps and fix proto resource loading.
  • Ignore anonymous classes in enclosing node search.
  • Save classes with code generation error into cache.
  • Resolve possible decompilation double execution.
  • Better dominators algorithms.

New in Jadx 1.4.2 (Jun 20, 2022)

  • Features:
  • [gui] Support export to various deobfuscation mapping file formats (#1491)(PR #1505)
  • [gui] Add reload and live reload actions (#1537)
  • [gui] Allow to disable jump on double click (#1540)
  • Bug Fixes:
  • [cli] Allow decoding resource-only APKs (#1517)(PR #1530)
  • [cli] Remove deprecated --deobf-rewrite-cfg (#1513)
  • [gui] Try to prevent jadx node leaks in UI objects
  • [gui] Improve restoration of windows saved state (PR #1511)
  • [gui] Add volatile and update sync for decompiler field in wrapper (#1518)
  • [gui] Resolve popup menu action run (#1514, #1529)
  • [gui] Correct set highlighted text in search (#1507)
  • [gui] Allow to select file on mapping export
  • [gui] Reset disk cache on new jadx version
  • [gui] Force jadx new version check by default
  • Improve blocks tree compare for finally extract (#1501)
  • Support all-catch in multi-catch (#1510)
  • Improve class search for super call (#1512)
  • Keep types on duplicate cast remove (#1527)
  • Check class name collisions (#1526)
  • Use wide move for long/double store/load java opcodes

New in Jadx 1.4.1 (Jun 1, 2022)

  • Bug Fixes:
  • [gui] Correct handle of selected file in save dialog
  • [gui] Improve usage search, refactor java nodes creation (#1489)
  • [gui] Resolve cast exception for variable reference (#1489)
  • [gui] Save variable name to show in tooltip (#1487)
  • [gui] Save full type info in metadata (#1487)
  • [gui] Correct merge for plugin options from command line (#1490)
  • [gui] Complete Chinese Translation (PR #1492)
  • [gui] Correct close and reopen for decompiler and cache
  • [res] Ignore version in AndroidManifest.xml (#1502)(PR #1504)
  • Save cache dir for reuse on project save/reopen
  • Remap class names for store in disk cache (#1503)
  • Check if directory exists before delete (#1493)
  • Use variable length encoding instead short for offsets (can overflow) (#1489)
  • Skip dex files with parsing errors (#1495)
  • Features:
  • [gui] Add parameters logging in Frida code snippet (#1497)(PR #1498)

New in Jadx 1.4.0 (May 22, 2022)

  • Features:
  • [gui] Disk code cache and search rewrite (PR #1483)
  • Allow to load custom input (#1457)
  • Allow to include/exclude dependencies when saving with class filter (#1466)(PR #1467)
  • Bug Fixes:
  • [cli] Don't ignore critical errors (#1150)
  • [gui] Resolve NPE on project save (#1463)(PR #1464)
  • [gui] Confirm directory loading on file open (#1462)
  • [gui] Fix IndexOutOfBoundsException when switching between tabs via mouse wheel (#1456)(PR #1469)
  • [gui] Editor theme loading and error/fallback handling improved (#1476)(PR #1478)
  • [gui] Ask for project file path on exit (#1474)
  • [gui] Escape class, method and field names in Frida code snippet (PR #1480)
  • [gui] Add missing Use debug info option
  • [gui] Use alias for types in tooltips (#1487)
  • Better code styling for if-else blocks (#1455)
  • Workaround to prevent incorrect order after move inline (#1472)
  • Use alias for variable names (#1487)
  • Breaking changes in Jadx API:
  • ICodeInfo: lines and code annotations moved to new interface ICodeMetadata with helpful search methods
  • Changes for all code annotations methods to use ICodeAnnotation instead plain Object.

New in Jadx 1.3.5 (Apr 20, 2022)

  • Features:
  • Add 'simple' decompilation mode
  • [gui] Add split view for different decompilation modes
  • Bug Fixes:
  • Handle inlined classes while collecting override related methods
  • Use correct reference for replaced bridge constructor
  • Handle wildcard in invoke type resolver
  • Update class set to Android 32
  • Replace fixed memory limit with -XX:MaxRAMPercentage=70.0
  • Various minor improvements
  • [cli] Use correct converter for "--decompilation-mode" option
  • [debugger] Resolve IO read problems, proper socket closing
  • [deobf] Fix writing method mappings as fields entries
  • [gui] Rename class while rename constructor
  • [gui] Restore open tabs on project load (regression fix)
  • [gui] Don't highlight whitespaces and special symbols
  • [gui] Check free memory after GC attempt
  • [gui] Update Traditional Chinese translation
  • [res] Ignore resource chunk entries that are located after the resource chunk end

New in Jadx 1.3.4 (Mar 21, 2022)

  • Features:
  • Support MethodParameters attribute (#1260)
  • Plugin options: add verify checksum option for dex input (#1385), options for java-convert plugin
  • [gui] Dialog for showing exception details and creating an GitHub issue (PR #1399)
  • [gui] Add zoom in/out actions (#1403)
  • Bug Fixes:
  • Improve class names collision detection (#1406)
  • Allow implicit type cast for array operations (#1407)
  • Allow zero skips for restore new filled array
  • Load files also by extension (#1391)
  • Prevent NPE on 'ignore' deobf map file mode
  • [cli] Resolve regression in applying '-v' and '-q' options
  • [debugger] Handle stream end and partial reads (#1412)
  • [gui] Prevent NPE on open preferences without loaded files (#1385)
  • [gui] IllegalArgumentException when saving project to a different directory than the APK file (#1387)(PR #1388)
  • [gui] Initialize project name with loaded files (shown in Jadx title) (#1386)(PR #1393)
  • [gui] Revert contextual keywords to identifiers (#1394)
  • [gui] Handle package version in update check (#1397)
  • [gui] Don't use hardcoded color for link component (#1398)
  • [gui] Download only latest version info for jadx update (#1397)
  • [gui] Resolve NPE and fix code style in BreakpointManager
  • [gui] Reduce threads count on low memory (#1410)

New in Jadx 1.3.3 (Feb 20, 2022)

  • Features:
  • (gui] Add Frida snippet copy action (#1355)(PR #1356)
  • [gui] Add Xposed snippet copy action (PR #1383)
  • [gui] Ctrl+c copy highlighted word in code view (#1292)
  • [gui] Ctrl+c copy node string in search window (#293)
  • [cli] Improve single file mode (#1344)(#1384)
  • [deobf] Do not deobfuscate known top level domains with 2 or 3 characters (PR #1369)
  • Add option for deobfuscation map file handle mode (#1351)
  • Support multi-entry loops (simple case) (#1320)
  • Check dex checksum before parsing (#1343)
  • Bug Fixes:
  • Support full class name in inner generic types (#1340)
  • Correct use of class names for inner types (#1340)
  • Update field usage on const replace (#1348)
  • Don't inline named variables (#1338)
  • Prevent endless loop in path cross search (#1360)
  • Prevent endless loop in anonymous class analysis (#1382)
  • Check names from Kotlin metadata before use (#1364)
  • Nested try catches with overlap try blocks (#1374)(PR #1375)
  • Correct code reload after rename (#1378)
  • Inline nested anonymous classes (#1379)
  • Remove shadowed catch handlers (#1377)
  • [cli] Fix and add debug log messages in initialization phase (PR #1362)
  • [deobf] Collect missing renames for .jobf file (#1350)(PR #1353)
  • [gui] Find usage for overridden methods (#1349)(PR #1352)
  • [gui] Results in usage search sorted by name (PR #1363)
  • [gui] Missing icons and html decorations in usage dialog
  • [gui] Split decompile and index tasks for correct time counting (#1361)
  • [res] Improved decoding of flag attributes in binary XML files (#1156)(PR #1359)
  • [res] Skip '.9.png' decode if patch data not found (#1112)
  • Performance:
  • Improve ternary mod on big methods (#1379)

New in Jadx 1.3.2 (Jan 20, 2022)

  • Core:
  • Use Kotlin intrinsic methods for variables rename
  • Improve anonymous class inline
  • Correct literal negate for double and float
  • Add explicit type for non-int constants
  • Simplify cascading casts
  • Wrap negative literals before cast
  • Handle method override with several bases
  • Precalculate class deps for inline methods
  • Skip input file name checks by zip name validator
  • Use secure XML parser for process manifest
  • GUI:
  • Processing threads spinner initialization
  • Correct handling for tree row click
  • Reduce tree focus switching
  • Use relative file paths in .jadx project file
  • For Smali debugger: support multiple main <action> and <activity-alias> tags

New in Jadx 1.3.1 (Dec 20, 2021)

  • Core:
  • Don't unload field init values (#1277)
  • Handle super case for invokespecial opcode (#1300)
  • Improve try/catch bounds detection (#1303)
  • Handle move-result after invoke-custom with string concat
  • Use correct top block for try blocks with same start (#1304)
  • Invoke in nested anonymous classes (#1305)
  • Add merged condition blocks for loop region (#1307)
  • Add option to use dx/d8 for convert java bytecode (#1299)
  • Add comments with option references to improve usability
  • GUI:
  • Smali code highlighting (PR #1283)
  • Allow to minimize/maximize search windows (#1298)
  • Update Quark report parsing (#1289) (PR #1291)
  • Forward navigation shortcut on macOS (#1297)(PR #1301)
  • Restore usage data after class reload (#1281)
  • Include inlined classes in usage search (#1285)
  • Add Traditional Chinese translation (PR #1306)
  • Update Chinese translation (PR #1284, PR #1287, PR #1296)
  • Update German translation (PR #1290)

New in Jadx 1.2.0 (Nov 14, 2020)

  • Main changes:
  • Gui: support for renaming methods, classes and fields
  • Gui: allow to load multiple files, button for add files
  • Res: fix duplicate entries and deobfuscate file names in XML resources
  • Core: improved generics and varargs restore

New in Jadx 1.1.0 (Dec 7, 2019)

  • Features:
  • Initial deboxing implementation (#717) (fd7d08c)
  • Cli: add options for change log level (#735) (bc7a748)
  • Gui: add class links for AndroidManifest.xml and other minor fixes (c8df26f)
  • Gui: support APK signature v3 (PR #773) (cf3e17c)
  • Performance Improvements:
  • Gui: speed up line numbers rendering (#714) (3bc9671)
  • Bug Fixes:
  • Add assign for inlined getter methods (ccb8ed1)
  • Add dummy class if class loading exception occur (#763) (d3ecc1f)
  • Add explicit cast for byte literal in method invoke (#719) (be9dae5)
  • Add generic types propagation (#695) (ed8c662)
  • Adjust insn reorder check in code shrink visitor (#695) (3eee83c)
  • Always cast null objects in overloaded method (#707) (12bb632)
  • Check that iteration variable in for-each loop not used outside (#708) (24dc686)
  • Comment out instructions also before other constructor call (#685) (533b686)
  • Comment out instructions before super call in constructor (#685) (c6c54f9)
  • Convert inner enums and fix inner classes reference (#719) (4629043)
  • Don't change AST before checks in ternary transform (#710) (b32dc17)
  • Don't eliminate StringBuilder if no String arg present (4b314e9)don't override type of method parameter in const deboxing (#723) (ddedb8d)
  • Don't run class process from visitors to avoid deadlock (#743) (db892ad)
  • Don't stop loading classes in case of an error (PR #764) (902247f)
  • Duplicate result arg on instruction copy (11db454)
  • Force cast for null args in method invoke (temp fix for #724) (08f9a90)
  • Force one branch ternary in constructors (#685) (8410e62)
  • Handle incorrect args count in signature (#763) (00f5e83)
  • Handle methods with all NOPs (#744) (bd9e109)
  • Ignore finally extraction with only one 'if' instruction (#709) (a587ce8)
  • Ignore incorrect dex files in apk (#700) (c3f7a04)
  • Improve exception handler remove (#703) (3ae8359)
  • Improve finally extraction (49e234d)
  • Improve StringBuilder elimination (#704) (a530371)
  • Incorrect init values of inherited fields (ed9fe8a)
  • Increase region iterative traversal limit (#767) (9f06d67)
  • Inline assign in complex conditions (#699) (d1a6841)
  • Inline constant strings (#685) (424a8ff)
  • Instead commenting move constructor call to the top (#704) (c8de7b9)
  • Jadx-gui.bat and jadx.bat do not work (#692) (PR #694) (29a137b)
  • Make correct class members loading in jadx api (#742) (1cbaad3)
  • Make correct hash calculation for GenericObject type (#705) (e4fc677)
  • Merge const block before return (#699) (bae36f9)
  • Preserve arg type on PHI insn inline (#718) (8321d5e)
  • Protect method from second load (6b76a3c)
  • Read correct buffer size for string pool parsing (#712) (15d56ab)
  • Remove synchronization lock for code generation (#726) (068234f)
  • Rename packages with reserved names (#711) (c555cd0)
  • Resolve code generation error for interface methods (#775) (a48ce29)
  • Resolve error if input file don't has extension (600842a)
  • Resolve some multi-thread issues (472aa52)
  • Several improvements for multi-variable type search (#720) (1e6b303)
  • Sort inner classes and methods by source lines (e4e6f37)
  • Support instructions removing in SimplifyVisitor (2dbdd1f)
  • Try to resolve generic type variables (#662) (db2b537)
  • Unbind unused ssa variable after ternary conversion (#708) (aad2d24)
  • Use nice name for 'package-private' in modifiers change message (e842e02)
  • Workaround for IntelliJ bug on import line in build.gradle (PR #766) (3249a5e)
  • Gui: add default contructor for classes serialized with GSON (#752) (d1ac43d)
  • Gui: compare files extension in case insensitive way (9fbf9ef)
  • Gui: fix "Go to declaration" and "Find usage" menu actions (ff5f6fc)
  • Gui: fix search if class contains not generated inner class (#755) (f228a72)
  • Gui: ignore mouse click on empty space in tree (#737) (7bc01dc)
  • Gui: update Chinese translation (PR #697) (0f5fd4e)
  • Gui: use editor font on tabs (3578f7d)
  • Gui: yet another fix for broken find usage action (a71bb7a)
  • Res: skip string if parsing failed (#712) (8e8a2fa)

New in Jadx 1.0.0 (Jun 20, 2019)

  • BREAKING CHANGES:
  • some parts of jadx was rewritten from scratch:
  • type inference
  • variable declaration
  • finally block extraction
  • Features:
  • output decompilation results in json format (#676) (ed385e8)
  • support smali files (#391) (PR #588) (d23f4ac)
  • add a flag to disable debug info (#276) (PR #502) (d111fd0)
  • add generic method information to .jcst (PR #564) (fe41174)
  • add option to disable anonymous class inline (#633) (e7e7b66)
  • add options to configure "renaming" (#570) (PR #582) (74a72a5)
  • new implementation for type inference approach and variable declaration (e026345)
  • cli: decompile only a single class (PR #657) (6f973ca)
  • gui: add "Go To Declaration" in menu (PR #618) (aa41a4d)
  • gui: save the class tree width and restore it upon jadx-gui start (PR #606) (65818dc)
  • gui: save tree expansions in project (PR #605) (f803973)
  • gui: select a class to open via command-line (PR #658) (fef3e55)
  • gui: show smali (#197) (PR #635) (031582d)
  • Bug Fixes:
  • add cast for null in overloaded methods (#636) (PR #637) (77cee15)
  • add correct type propagation for check-cast and move instructions (#401) (7bd1752)
  • add labels from NOP instructions in fallback mode (#666) (5efe4bd)
  • add missing import for class generics map (PR #480) (dd2e7e8)
  • add more details for variable with type inference error (2dea6f5)
  • add primitive cast in ternary for byte and short (PR #601) (632cc3e)
  • additional checks for loop exit edges and 'for' conversion (#483) (6e66dc2)
  • additional checks for synthetic methods remove, rename and inline (#452) (28d348b)
  • allow APK files without code (no contained dex files) (PR #455) (91691fb)
  • allow override type with wider one only from debug info (#403) (b9fffa1)
  • always use FileUtils.createTempFile (PR #634) (cab3f5d)
  • avoid ConcurrentModificationException in EliminatePhiNodes pass (e1ca290)
  • avoid local variables collision with full class names (#647) (52ba33c)
  • better String constructor from byte and char arrays (#530) (PR #533) (ec66476)
  • bitwise or/and with non-boolean (#628) (PR #629) (9645f33)
  • byte to number without cast (#596) (PR #638) (e1dfb4e)
  • cast of int-to-(number) when int is boolean (#596) (PR #602) (c134329)
  • change exception to soft warning for getType in RegisterArg (3492ec3)
  • change type update collection to produce deterministic results (68d074a)
  • check block before insert additional move instruction for type inference (cbdc249)
  • check if synthetic class not yet processed but must be removed (#450) (d069928)
  • check variable usage before convert indexed loop to for-each variant (#483) (2c07253)
  • close resource (PR #546) (a6f935e)
  • conditions in ternary if (#449) (PR #558) (eb77aa5)
  • correct arg replace in PHI instruction (#462) (2383c40)
  • don't cast overloaded methods with generics from other class (#448) (008216d)
  • don't reject type update for generics (43de744)
  • don't remove empty default constructor if other constructors exists (#460) (dd13edf)
  • don't rename constructors (554e119)
  • don't rename R class fields alias (PR #492) (5f0dbf8)
  • don't rename R class in deobfuscation (#572) (PR #573) (ab4721a)
  • don't replace resources names with field names (#465) (7243ab5)
  • field increment (PR #550) (bae7f1b)
  • forbid to change types for methods arguments (b689efc)
  • generates XML key names if empty (#394) (PR #615) (c74b7f2)
  • generics constructor types (PR #594) (bcfed5b)
  • handle anonymous class self inlining (#604) (9d5dda1)
  • handle big .jar files (using multi-dex option) (#390) (PR #568) (79ccaad)
  • handle boolean condition with bitwise OR and AND (#202) (PR #522) (b78349a)
  • handle cases with SSA variable used in several PHI's (#667) (6c61ce5)
  • handle NOP instructions in unexpected places (#666) (1830c27)
  • handle NPE for methods with removed instructions (#342) (PR #583) (395cae4)
  • hide debug type inference logs (d553157)
  • hide first argument instead remove for constructor in inner class (653bb2a)
  • ignore NOPs in try-catch (#668) (f02a33a)
  • ignore not generated insns in CodeShrinker visitor (PR #560) (7b18d3a)
  • implement new type inference approach (21e11c1)
  • improve bridge methods renaming (#397) (db1b027)
  • improve class renaming and add checks for class alias usage (#532) (f283ef4)
  • improve errors handling (84b9f11)
  • improve fallback mode dump (add types, remove label after if) (4197365)
  • improve filled array detection (389caf1)
  • improve generated code on errors (dae882d)
  • improve rename checks and show rename reason (#584) (19c5725)
  • inline anonymous classes with not default constructor (#450) (4cb9f23)
  • inline constants in chained move instructions (#399) (95f9ab0)
  • inline desugared lambda classes (#467) (7654661)
  • loading aar/jar files (#631) (PR #632) (db7f2cf)
  • made correct instructions remove in new filled array replacement (#461) (17d8516)
  • merge new-array and fill-array-data with move between (#462) (98e4c4b)
  • move instruction out of try/catch (#468) (52deb48)
  • move test class and rename GUI message (PR #555) (1e55411)
  • NPE if loading local file from CLI (jadx sample.apk) (7bb7527)
  • prevent NPE while processing try/catch regions (#673) (b158858)
  • prevent stack overflow in type inference if update tree is too deep (0ca2789)
  • process field init code in dependency collector (#467) (03ae3bc)
  • produce more deterministic code (89b8090)
  • redone class alias processing (#532) (7ac0b9f)
  • redone finally extract (c892395)
  • redundant byte and short cast (#538) (PR #539) (b5344f4)
  • regenerate method code if unexpected instruction is found (#462) (75a6714)
  • reimplement variable declaration visitor (9b091b7)
  • remove declaration of unused variable (PR #590) (b1b49e6)
  • remove field redundant array type when initialized (PR #567) (513766d)
  • remove generics cast when object types match (#591) (PR #592) (01da127)
  • remove invalid chars from class names (#453) (9856b6d)
  • remove invalid chars from class names (#488) (5169dc5)
  • remove redundant array type when initialized with declaration (PR #566) (ecaa87e)
  • remove redundant cast over similar conditions (PR #612) (05e5c82)
  • remove redundant wrapping for same arith operations (PR #559) (058e4c9)
  • remove static field redundant array type when initialized (PR #580) (a1bfdc6)
  • remove unreachable blocks (#451) (0fa19fb)
  • rename class if all chars not printable (#622) (31a02a7)
  • rename class with reserved java keywords (#485) (PR #488) (d5f4266)
  • rename field if collide with any root package (#647) (f846df5)
  • rename parameters in annotations (#504) (29d3ce1)
  • rename R fields using resource names (#465) (6116a75)
  • replace dot character with underscore in style resource name (PR #466) (a4a8b05)
  • replace recursive analysis algorithms with iterations to avoid StackOverflow on big methods (#441) (710245d)
  • resolve check cast exception in string constructor simplify (41abbb1)
  • resolve mix up in SKIP and DONT_GENERATE flags (21acaa8)
  • resolve NPE due to not yet processed class (#595) (f1539d2)
  • resource qualifiers (PR #487) (650cf31)
  • restore support for AAR files (issue #95) (PR #464) (4353890)
  • safe SSA variables replacement in filled new array instruction (#399) (4e990ae)
  • search in resource classes by original name, not by alias (#562) (PR #571) (23c05bb)
  • search smali class by original name (156c979)
  • show type inference errors as method comments (87c1231)
  • skip duplicated block in complex if (#441) (7f4e641)
  • skip trailing bytes in resource table decoding (#487) (999793c)
  • stack overflow cause lamdba throw BootstrapMethodError in JDK 8 (119709b)
  • store condition blocks in 'if' region for correct blocks list (#669) (f0f5c26)
  • treat filesystem as case insensitive by default, option added for change (699f7f6)
  • UnsupportedOperationException in overloaded method process (#462) (305cf53)
  • use '$' as separator for inner classes in .jobf file (#415) (ee6508e)
  • use alias as a base for class rename if file system is case sensitive (#474) (1bb5332)
  • use multi-variable type search algorithm if type propagation is failed (4ce5cc8)
  • use original call class for invoke inherited methods (#413) (6a1717a)
  • use quantity attribute for plurals (PR #486) (42b7843)
  • use soft checks for objects and arrays in 'if' type listener (#401) (37071db)
  • use types with generics for overloaded method casts (#402) (995cf2a)
  • variable usage with enhanced for loop (#535) (PR #547) (e6e8f63)
  • workaround for primitive values if type resolved incorrectly (#671) (123ba2b)
  • xor with boolean (#409) (PR #516) (eb2a173)
  • gui: add missing translations keys, and ensure all files match (PR #525) (ba6dd08)
  • gui: add scroll to preferences dialog (7e95758)
  • gui: back button was defect since #653 (1c914ff)
  • gui: closing jadx main window terminates JVM (#639) (PR #641) (745c52e)
  • gui: detect if a window is opened inside a visible screen (PR #521) (3537f84)
  • gui: disable all components on saving the settings (PR #586) (ac1d1a5)
  • gui: exclusion disablement should be exact package match (PR #500) (eed762d)
  • gui: fill background before draw line numbers (#404) (5ad0826)
  • gui: NPE if the autosave is enabled and project is initial (PR #565) (0a08d8b)
  • gui: preserve main window maximized state (PR #626) (172f7f7)
  • gui: printUsage for jadx-gui now shows the new gui only parameter(s) (PR #660) (8e0df4c)
  • gui: remove output directories from persistent settings (#447) (f8acc31)
  • gui: remove tree children expansions as well (PR #630) (58365a8)
  • gui: separate SearchBar for Java and Smali code areas (PR #653) (4b73d24)
  • gui: show current font in preferences (d44dd0d)
  • gui: show java version, instead of VM version in about dialog (PR #489) (2e9039d)
  • gui: sort classes by case insensitivity (PR #613) (9d22b3c)
  • gui: sort resources according to their type, then name (PR #479) (9797fe5)
  • gui: update chinese simplified language (PR #508) (b49acfd)
  • gui: use alias for field and method types in tree view (6282633)
  • gui: use command (CMD) button for MacOS (#165) (PR #616) (cfbbd99)
  • gui: use same font loader as code viewer (#584) (336d6ce)
  • gui: use system font as default instead bundled Hack (#442, #445) (bcadc28)
  • res: ignore resource entry with -1 key (#556) (PR #557) (9d257cd)
  • scripts: support spaces in java path for windows scripts (#686) (a051ce6)
  • Performance Improvements:
  • cache types in dex nodes (aad70c7)

New in Jadx 0.9.0 (Feb 12, 2019)

  • Features:
  • gui: APK signature check v1/v2 using the apksig library from Google (#431) (d1af751)
  • gui: add a menu to copy class name (#351) (a8febb2)
  • gui: add icons to jadx-gui (#420) (PR #428) (f8c0449)
  • gui: make the import class name clickable (#378) (df9ae29)
  • support multi-exception catch blocks (#421) (aec9864)
  • Bug Fixes:
  • ArrayIndexOutOfBoundsException in string concatenation visitor (#427) (72b2663)
  • change not allowed access modifiers for methods (#387) (PR #439) (8c7140d), closes #370
  • change resource fields generations in R class (#308) (f6f883b)
  • correct code line number calculation (1d7bb43)
  • don't remove synthetic class with inner classes (850bd96)
  • don't remove synthetic method if args count or name not same (#361) (20b03aa)
  • don't rename constructors and class init methods in deobfuscator (#415) (0f27eba)
  • exports resources first (#376) (87f50ab)
  • Fix for #377 (Jadx in Windows open with list) (#379) (a8a3164)
  • force rename by checks from RenameVisitor (#432) (da41efa)
  • force rename fields and methods with reserved names (#364) (3815d30)
  • generates code of missing R class (#353) (5de4d07)
  • instruction deep equals must check result (1fc92d2)
  • lower regions count limit (#354) (9be62fb)
  • process try/catch without move-exception instruction (#395) (6d59f77)
  • refactor, improve performance and fix some issues in resource processing (82d0d62)
  • rename method wrapped by synthetic only from same class (#430) (618b014)
  • gui: loading of i18n resources as UTF-8 (see #363) (PR #386) (5281eed)
  • gui: allow partial settings sync to not save command line options (557667b)
  • gui: add "use imports" option to preferences (bc62933)
  • gui: add synchronization to SimpleIndex class (#435) (b28eaa1)
  • gui: add synchronizations to search index creation (#433) (9e0cd2e)
  • gui: apply render hints for line numbers (58993b9)
  • gui: don't skip indexing code lines starting with '}' (#426) (1272ae2)
  • gui: fill background before draw line numbers (#404) (7e8435c)
  • gui: limit the spare memory to max. 512MiB (#434) (ffedaea)
  • return type lost after type inference (#396) (3a798cb)
  • saves all resources (#375) (8eef4a9)
  • search exception handler splitter block by offset if jump source unknown (#406) (e9591ef)
  • show method alias in "method not decompiled" messages (#410) (fd3498a)
  • update apksig library to latest version (#431) (b0e3cfe)
  • update dx to version 16 (#369) (bedbf94)
  • use '$' as separator for inner classes in .jobf file (#415) (e0624ce)
  • use '$' for inner classes also in methods and fields (#415) (a841d0e)
  • gui: make correct size truncate for recent files list (2de86b6)
  • gui: various UI improvements (#419) (f60bb6b)
  • gui: make link for full class names (#378) (a3464d7)
  • gui: on settings reset run upgrade method (0abb51c)
  • gui: override settings by cmd options (6b3e8f0)
  • gui: show 'copy name' action only for supported nodes (9e24a5a)
  • gui: unsynchronized search index creation results in NullPointerException upon performing search (#429) (7c353a6)
  • gui: use correct font and style for certificate panel (b587b6d)
  • gui: use editor font in files tree and fix bundled font loading (2931617)
  • gui: use editor font in search node column (be509c7)
  • gui: wait time for background jobs too short (1ac2cdf)

New in Jadx 0.8.0 (Aug 27, 2018)

  • Features:
  • core: fixed deobfuscation for method and fields
  • core: many fixes for try/catch blocks and loop
  • gui: speed impovements for search dialog
  • gui: fixed memory leaks
  • gui: show app certificate
  • build: use semantic-release for automatic release publishing (156e420)
  • build: added jadx-gui executable for windows

New in Jadx 0.7.1 (Apr 3, 2018)

  • a lot of stability improvements
  • better resources decoding

New in Jadx 0.6.1 (Nov 1, 2017)

  • export sources as android gradle project
  • multidex support for apk & zip
  • 'aar' support
  • fix some 'try/catch/finally' cases
  • fixes for switch blocks
  • jadx-gui:
  • added full text search
  • support images view/unpack
  • added log viewer

New in Jadx 0.6 (Nov 18, 2016)

  • decode AndroidManifest.xml and other resources
  • deobfuscation
  • 'finally' block extraction
  • support fall through cases in switch
  • other improvements in try/catch and loop processing
  • jadx-gui:
  • added preferences dialog and font selection dialog
  • show resources tree