All Versions
12
Latest Version
Avg Release Cycle
221 days
Latest Release
1449 days ago

Changelog History
Page 1

  • v1.2.0 Changes

    November 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 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 Changes

    December 07, 2019

    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 Changes

    June 20, 2019

    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)
    • 0๏ธโƒฃ 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)
    • 0๏ธโƒฃ 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 Changes

    February 12, 2019

    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 Changes

    August 26, 2018

    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
  • v0.7.1 Changes

    March 25, 2018

    Note: ensure you have installed Java 8 64-bit version

    ๐Ÿ”„ Changes:

    • a lot of stability improvements
    • ๐Ÿ‘ better resources decoding
  • v0.6.1 Changes

    December 05, 2016

    ๐Ÿ— Note: this is just a build of latest dev branch, no new features was added

    ๐Ÿš€ Changes from previous release:

    • 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
  • v0.6.0 Changes

    April 10, 2015

    ๐Ÿš€ Changes from previous release:

    • 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
  • v0.5.4 Changes

    November 09, 2014

    ๐Ÿš€ Changes from previous release:

    • ๐Ÿ‘Œ improved loops support:
      • indexed loops
      • for-each loop
      • 'break' with label
      • 'continue'
    • decompile ternary operations in conditions
    • โช restore switch over enums
    • ๐Ÿ‘ try/catch improvements ('finally' block not yet supported)
    • expand arrays for known vararg arguments
    • sort methods by source line number
    • jadx-gui:
      • add saving preferences (open/save paths, flatten packages)
      • add new version notification
  • v0.5.2

    August 15, 2014