Skip to content

v1.0.0

Compare
Choose a tag to compare
@skylot skylot released this 20 Jun 09:17

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)