JADX Versions Save

Dex to Java decompiler

v1.3.4

2 years ago

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)

Full Changelog: https://github.com/skylot/jadx/compare/v1.3.3...v1.3.4

Download files description:

  • jadx-gui-1.3.4-with-jre-win.zip - jadx-gui with bundled JRE
  • jadx-gui-1.3.4-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
  • jadx-1.3.4.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

Artifacts on maven central repository: list. How to use jadx as a library, read on wiki page.

v1.3.3

2 years ago

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)

Full Changelog: https://github.com/skylot/jadx/compare/v1.3.2...v1.3.3

Download files description:

  • jadx-gui-1.3.3-with-jre-win.zip - jadx-gui with bundled JRE
  • jadx-gui-1.3.3-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
  • jadx-1.3.3.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

Artifacts on maven central repository: list How to use jadx as a library, read on wiki page.

v1.3.2

2 years ago

Core

  • Use Kotlin intrinsic methods for variables rename (#1207)
  • Improve anonymous class inline (#523)
  • Correct literal negate for double and float (#1334)
  • Add explicit type for non-int constants (#1336)
  • Simplify cascading casts (#1336)
  • Wrap negative literals before cast (#1327)
  • Handle method override with several bases (#1234)
  • Precalculate class deps for inline methods (#1339)
  • Skip input file name checks by zip name validator (#1310)
  • Use secure XML parser for process manifest

GUI

  • Processing threads spinner initialization (#1331)(PR #1332)
  • Correct handling for tree row click (#1324)
  • Reduce tree focus switching
  • Use relative file paths in .jadx project file (#1312) (PR #1313)
  • For Smali debugger: support multiple main <action> and <activity-alias> tags (#1322)(PR #1323)

Download files description:

  • jadx-gui-1.3.2-with-jre-win.zip - jadx-gui with bundled JRE
  • jadx-gui-1.3.2-no-jre-win.exe - jadx-gui single exe (system JRE must be installed)
  • jadx-1.3.2.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

Artifacts on maven central repository: list How to use jadx as a library, read on wiki page.

v1.3.1

2 years ago

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)

Download files description:

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

Also, jadx artifacts now available on maven central repository: view on maven How to use jadx as a library read on wiki page.

v1.3.0

2 years ago

Core

  • Initial support for 'invoke-custom' instruction (#384)
  • Initial support for java bytecode decompilation
  • Concat constant strings (#1014)
  • Rewrite try-catch processing
  • Support AAR files as input (#1034)
  • Support Android App Bundle (#1129) (PR #1131)
  • Add option to change deobfuscation map file (#1117)
  • Add option to disable methods inline (#1170)
  • Improve decompilation speed (#1269)

GUI

  • Add a smali debugger (#1136) (PR #1137)
  • Support code comments (#359) (PR #1127)
  • Use FlatLaf for themes support
  • Use SVG icons (PR #1221)
  • Add Quark-Engine integration (#1119) (PR #1135)
  • Allow to use regex in the search dialog (PR #1069)
  • Search in resource files (#347) (#1032) (PR #1108)
  • Improve exclude package feature (#1151) (PR #1152)
  • Add option to change line numbers mode (#1223)
  • Rename without deobfuscation, save renames in project (#1076 #1022)
  • Save open tabs in project file
  • Improve smali printer to show bytecode (#1114) (PR #1126)

Download files description:

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

v1.2.0

3 years ago

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
All changes

Features

  • add methods information from standard library, improve generics and varargs restore (#836) (dea7714)
  • deobf: add classname parsing for Kotlin metadata (PR #842, #758) (492a3f6)
  • deobf: improve deobfuscated class names by including class properties and info about super class respectively implemented interfaces (PR #969) (1774dc7)
  • gui: add Messages_de_DE.properties (PR #804) (553f5b0)
  • gui: allow to load multiple files, button for add files (#936) (278c5f6)
  • gui: allow to search for full method/field signature, not only the name (PR #880) (c1f4302)
  • gui: map back and forward mouse keys for navigation (#807) (9ab003d)
  • gui: on mouse hover highlight identifiers with enabled actions (like 'find usage' or 'rename') (94a06d9)
  • gui: rename classes and fields by popup menu in tree panel (PR #993) (9f68493)
  • gui: reopened tabs on file reload (PR #793 #792) (78eed86)
  • gui: support for renaming methods, classes and fields (PR #794 #791) (e3055b9)
  • res: fix duplicate entries and deobfuscate file names in XML resources (PR #995) (71617a1)
  • res: rename resources keys if contains unprintable chars or duplicates (#844) (PR #909) (315c07d)

Performance Improvements

  • gui: reduce updates count for memory usage bar (#1000) (9277341)
  • res: speed up rename of deobfuscated resources (d1e5186)

Bug Fixes

  • add cast to exact type on field access (#729) (ae31fee)
  • add methods and fields types into usage info (#729) (e7b00cc)
  • added another enum restore pattern (#926) (aa8fd3c)
  • additional casts at use place to help type inference (#1002) (2b7d7ce)
  • additional checks before insert move to help type inference (#843) (5502d93)
  • additional checks for 'if' blocks inside loops (#809) (04e309a)
  • additional checks for class signature (e09e933)
  • additional patterns to restore enum classes (#830) (62ca30b)
  • additionally show smali code of all inner classes (recursively) (PR #849, #848) (bd0d248)
  • additionally show smali code of inner classes (PR #824) (c97e504)
  • adjust limits to skip processing of large methods (#1012) (e054ea6)
  • adjust types for arithmetic instructions (#921) (60b2353)
  • allow cross-block move inline (#946) (440357d)
  • allow to inline variables around 'monitor-exit' in synchronized block (13609a5)
  • allow to regenerate class code (#791) (1c6e51f)
  • attach method details before OverrideMethodVisitor (d59c99d)
  • bring back smali files support (#961) (558a867)
  • check enum constructor content before removing (#922) (f3cd4e3)
  • checks for casts in field access, move method inline to visitor (#962) (691bf8f)
  • class resolving issues (#867) (5eec8f7)
  • collect class usage and fix class access modifiers (#729) (d720179)
  • concurrent access may cause an java.lang.ClassCastException in JNodeCache (PR #864) (4520747)
  • correct detection of exits in synchronized block (#942) (d6ad21f)
  • correct merge code variables across PHI instructions (#930) (0deafb7)
  • correct method exit blocks collection (#876) (4cdad0e)
  • correct parsing for array-data-payload (bcd6e53)
  • correct skip size for sparse switch payload (7d29c5d)
  • correct type and data merge for filled-array instruction (89b4ae6)
  • correctly process extended enums if class is not inner (#924) (4e3d858)
  • deep reload for inner classes, const values and anonymous classes (9dbffef)
  • do not copy input files as resources to output folder (2a2b83a)
  • don't add @Override for static methods (#976) (6428f29)
  • don't add @Override if super method is private (#976) (cfaa6ab)
  • don't add cast for PHI insn (#1002) (a22efc2)
  • don't apply again already resolved types (#1012) (5f659c8)
  • don't apply const split if not needed (71bf2aa)
  • don't apply types if search failed (#840) (1ce8fa8)
  • don't duplicate result arg with instruction copy (breaks SSA variable assign) (4dc4aa1)
  • don't generate string concatenation without assign to variable (58722d3)
  • don't inline 'null' object to make code compilable (#964) (545cd4e)
  • don't inline constants in synchronized statement (#799) (f5d1f28)
  • don't modify method argument types in MethodInvokeVisitor (#927 #836) (b1d5ed0)
  • don't print commented case value if it is an instruction (#850) (fcb70e6)
  • don't remove synthetic methods from enum (#884) (9d8066f)
  • don't trust type info in signature, check before apply (#858) (2d641bf)
  • don't use FileChannel on ZipFs to avoid creation of temp files (#950) (a83ca1f)
  • don't use OS specific new line chars (#861) (fa0a38d)
  • don't use static vars of mutable LiteralArg class (#1005) (8ca3cd3)
  • exclude directories from dex convertion results (b219ab6)
  • handle method arguments in primitive types conversion (#956) (bfd60b7)
  • handle xor on boolean (#921) (1bbcac2)
  • improve 'out' block detection in switch (#826) (2107da2)
  • improve boolean type handling in type inference (3143418)
  • improve checks for boolean to int conversion (#921) (714b935)
  • improve ClassNode reloading and revert some changes (0c4b807)
  • improve limit calculation for type updates in type inference (#854) (3e9f4a5)
  • improve resource type detection and remove deprecated method (cd006ce)
  • improve type inference for arrays (#837) (519a74e)
  • improve type inference for generics in invoke insn (#927) (404136c)
  • improve type inference of type variables in method invoke (#913) (6192ced)
  • improve wildcard types compare (#857) (e444ecb)
  • inline assignment instruction from same block (#820) (c24a3ed)
  • inline class constants to fix enum transform (#916) (2207cd7)
  • inline move instructions to help process constructors (#927) (e22474e)
  • load .class files (444ea9e)
  • make class public if some method going to be inlined (#729) (15776c4)
  • make correct replacement for synthetic constructor (#808) (0221380)
  • mark override methods and fix return type (#913) (0692464)
  • method info cache error (#868) (49a82c8)
  • more visibility checks for @Override (#984) (4e4c7f7)
  • move class unload to synchronized block (#977) (73ca2e0)
  • preserve code semantics on array-for-each transform (#893) (a5ea560)
  • prevent endless loop in method signature parsing (#1007) (009939f)
  • prevent zipbomb forged headers attacks (#980, PR #982) (9b1761f)
  • record inlined classes and generate Smali code for them (PR #851, #848) (4859629)
  • redone shadowed fields handling (#897) (7f5092c)
  • reload request for correct class in method inline visitor (#999) (aec8ebe)
  • remove enum methods after instructions check (#884) (2f780da)
  • remove move instructions with unused result (#835) (49ce92f)
  • replace constants for arrays in annotations (#831) (26bad4a)
  • replace constants inside annotations (#831) (2921c66)
  • replace type variables in arrays (#913) (85760cc)
  • rerun signature parser on class reload (#981) (14cbfbc)
  • resolve char literal incorrect print as string (#856) (0f808d5)
  • resolve class cast exception introduced in CodeWriter refactoring (#810) (0c55ab9)
  • resolve ClassCastException on encoded value access (#946) (5e62b90)
  • resolve error in SkipMethodArgsAttr if method not yet loaded (#924) (8785232)
  • resolve exception on assign inline (f1e2291)
  • resolve generic types in method arguments (#913) (09e267f)
  • resolve multi-threaded unloading (bb0fad2)
  • resolve NPE while compare outer generic types (89dbae8)
  • resolve several issues with package rename and class reload (#987) (e2b4280)
  • resolve some cases of switch in loop (#876) (2da772d)
  • resolved regression in Kotlin metadata parser (91ee756)
  • restart comment to escape strings in insn fallback dump (f482b8b)
  • restore android R class (#947) (regression) (65553c1)
  • restore enum for java 15 (408201b)
  • restore enum for several blocks in class init method (57c28c6)
  • several improvements for generics and type inference (459f12d), closes #956
  • shrink code if region maker add FORCE_ASSIGN_INLINE to insn (#845) (d0f197e)
  • speed up switch processing by skip not relevant exits (#846) (1336c47)
  • split CONST used in PHI to help type inference (#900) (a7f315f)
  • transform loop to for with branching at end (33f2c3f)
  • try raw types to help type inference (#913) (7cd77ae)
  • use super instead this when super member is shadowed (PR #878) (3c7be5e)
  • use correct class for Throwable, insert catch arg name if not defined (#896) (47dadf0)
  • use internal usage info for rename, fix index refresh (#791) (ae26512)
  • use recursive objects for nested inner generic classes (#869) (f5767dd)
  • workaround for link clicks in RSyntaxTextArea (#929) (45b7304)
  • deobf: resolve NPE when package is empty (if rename is disabled) (e3f388a)
  • gui: add Deutsch to locales list (#804) (8421157)
  • gui: add dots for progress titles (99eb31b)
  • gui: allow to rename packages (#987) (c0a8197)
  • gui: clear jumps history on file close (12dc4fd)
  • gui: correct app close on menu exit action (a2df92d)
  • gui: fix rename dialog pack (#972) (b76c882)
  • gui: improve Deutsch translation (PR #806) (1568008)
  • gui: load file in background thread and show progress indicator (9c88f70)
  • gui: merge plugins service files (#949) (4b18867)
  • gui: only show renaming option for JClass, JField and JMethod (PR #1001) (7353790)
  • gui: RenameDialog: Warn user if deobfuscation settings are invalid (PR #935) (705ceca)
  • gui: resolve --select-class option regression (PR #816) (287275d)
  • gui: resolve exceptions during index (#812) (af6f8b5)
  • gui: run indexJob before rename (PR #910) (8a8b945)
  • gui: search class with --select-class also by not deobfuscated names (55eb86d)
  • gui: search only in short names of methods and fields (#818) (8365855)
  • gui: update Deutsch translation (PR #811) (3b9b103)
  • gui: update Messages_zh_CN.properties (PR #959) (f696dc7)
  • gui: use correct charset when writing mapping file (PR #992) (ff6665c)
  • gui: use env %JAVA_HOME% as the JRE path (PR #895) (c62039f)
  • res: fixes deobfuscated resource text files saving (PR #1004) (804c8ef)
  • res: put deobfuscated files to res/ folder (PR #995) (f0e6c8e)
  • res: resource XML generation for parent attribute added (PR #933, #931) (c7a12ad)
  • res: skip unused bytes in xml attributes parsing (#1013) (82d4099)
  • res: XML parsing: handling of TYPE_DYNAMIC_REFERENCE entries (#919, PR #923) (258ecad)
  • xml: reset nsMap in parse method (PR #798 #796) (ef5da49)

Download files description:

  • jadx-gui-1.2.0-with-jre-win.zip - jadx-gui with bundled JRE
  • jadx-gui-1.2.0-no-jre-win.exe - jadx-gui single exe, system JRE must be installed
  • jadx-1.2.0.zip - cross-platform cli and gui bundle, system JRE must be installed

v1.1.0

4 years ago

1.1.0 (2019-12-07)

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)

v1.0.0

4 years ago

1.0.0 (2019-06-20)

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)

v0.9.0

5 years ago

0.9.0 (2019-02-12)

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)

v0.8.0

5 years ago

0.8.0 (2018-08-26)

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