Changelog History
Page 1
-
v1.2.0 Changes
November 14, 2020Main 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: 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: 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
insteadthis
whensuper
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, 20191.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
๐ 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, 20191.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)
- some parts of jadx was rewritten from scratch:
-
v0.9.0 Changes
February 12, 20190.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, 20180.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, 2018Note: 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
- ๐ improved loops support:
-
v0.5.2
August 15, 2014