jadx v1.0.0 Release Notes

Release Date: 2019-06-20 // almost 5 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)
    • 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)