What's new in Jadx 1.5.0
Apr 21, 2024
- Added support for:
- Scripting, uses Kotlin, check short guide
- External plugins, guide
- Both features in preview state, API is stable but limited (especially in UI customizations)
- Jadx GUI:
- Improved code cache, allow use common directory, view/delete exist caches in preferences
- jadx-gui configuration moved into plain json files in system config directory
- Allow to set custom shortcuts
- Tabs drag and drop reorder support
- Hex-viewer for binary asset files
- Add 'go to main activity' action
- Other:
- Parse and use Kotlin metadata for renames
- Add support for XApk files
- Allow to move class to another package
- Support jsr/ret opcodes (java-input)
- A lot of bug fixes ... and regressions
New in Jadx 1.4.7 (Apr 20, 2023)
- Features:
- [core] Inline lambdas by instance field (#1800)
- [plugins] Allow to load classes using input stream or byte array in jadx-input plugin (#1457)
- Bug Fixes:
- [core] Restore missing type parameter declarations (#1800)
- [core] Filter invalid chars in app name for gradle export (PR #1813)
- [core] Correct args shift for instance invoke-custom (#1816)
- [core] Additional checks to forbid inline of null consts (#1828)
- [core] Use strict patterns for synthetic methods inline (#1829)
- [res] Resolve manifest decoding error Expected strings start (#1797)(PR #1798)
- [res] Handle RES_TABLE_TYPE_OVERLAY (#1748) (PR #1804)
- [res] Parsing of sparse RES_TABLE_TYPE_TYPE and RES_TABLE_TYPE_STAGED_ALIAS chunks (#1806 #1803)(PR #1807)
- [res] Resolve int hex attributes
- [res] Resolve custom attributes
- [res] Resolve declare-styleable atrributes
- [res] Set empty parent for styles without a parent, remove duplicated code
- [xml] Use parent attribute only for styles (PR #1815)
- [gui] Search constant fields usage in all classes (#1801)
- [gui] Redirect jump from search for inlined classes
- [gui] Show skipped resources count during search (#1808)
- [gui] Update Messages_zh_CN.properties (PR #1811)
- [debugger] Process UI updates in correct thread (#1796)
- [cli] Make enum CLI arguments match documented format (PR #1787)
New in Jadx 1.4.6 (Feb 20, 2023)
- Features:
- [core] Support polymorphic invoke (#384)(#1777)
- [gui] Add alternative file open dialog (#1709)
- [gui] Add native libs info to summary (#1717)
- [gui] Add Russian Translation (PR #1744)
- [gui] Added keyboard shortcut ctrl+w to close tab (#1765)(PR #1766)
- Bug Fixes:
- [core] Check full signature for search method override (#1743)
- [core] Escape special characters in AAB resources (PR #1747)
- [core] Allow altMetafactory method in lambda call site (#1760)
- [core] Resolve JavaNode caching issues (#1775)
- [core] Output unknown invoke-custom as polymorphic call (#1760)
- [core] Process manifest before other resources (#1740)
- [gui] Disable shell folders in file open dialog (#1709)
- [gui] Correct html disabling in search results
- [gui] Try to handle exception in RSTA.getPreferredSize() (#1712)
- [gui] Show all code sources in summary (remove dex filter) (#1716)
- [gui] Change callMethodName of constructors in Frida action (#1714)(PR #1715)
- [gui] Add template for constructor and void methods to Frida snippet (#1714)
- [gui] Hi-dpi main window initial size (#1728)(PR #1729)
- [gui] Correct html render in comments search results
- [gui] Resolve exception in smali method writer (#1739)(PR #1745)
- [gui] Improve smali disasm method param write (#1739)
- [gui] Make bytecode output closer to smali (#1739)
- [gui] Quick fix for duplicate/overlapping logcat windows (#1752)(PR #1761)
- [gui] Allow html in JVariable to render renaming of variables correctly (#1769)(PR #1770)
- [gui] Print the renamed function name in a frida snippet log (#1772)(PR #1773)
- [gui] Split tabs loading to prevent ui dead lock
New in Jadx 1.4.5 (Oct 20, 2022)
- Features:
- [gui] Option for search results count per page (#1652)
- [debugger] Add logcat output (#1411)(PR #1666)
- Bug Fixes:
- Don't rename bridged overridden methods (#1672)
- Don't mark constructor for inline if anonymous class inline is disabled (#1680)
- Handle possible concurrent exception in method codegen (#1685)
- Correct fix for all use places of incompatible primitives (#1688)
- Improve logging messages for zip security errors (#750)(PR #1698)
- Improve ternary inline, resolve more enum cases (#1686)
- Restore enum class with custom code in static init (#1699)
- Handle empty block at end of else-if chain (#1674)
- [res] Implemented parsing RES_TABLE_TYPE_LIBRARY chunks (#1663)(PR #1664)
- [debugger] Migrate to fixed jdwp library fork (#1471)
- [gui] Multi-threading issue in DebugController fixed (#1701) (PR #1702)
- [gui] Disable HTML rendering in labels if not needed
- [gui] Update Korean translation (PR #1650)
- [gui] Update pt-BR translation (PR #1655)
- [gui] Update zh-TW translation (PR #1694)
- [gui] Update zh_CN translation (PR #1700)
New in Jadx 1.4.4 (Aug 21, 2022)
- Features:
- [gui] Add manual search, stop and sort actions to search dialog (#1600)
- [gui] Save project search history
- [gui] Show start page on jadx open
- [gui] Add Brazilian Portuguese translation (PR #1596)
- Select better resource name (#1581)
- Add option to disable finally block extraction (#1592)
- Bug Fixes:
- Resolve inherited method to use correct alias (#1582)
- Check variables before merge in finally block (#1592)
- Checks for field init reorder (#1599)
- Handle empty endless loop (#1611)
- Improve top block search for try/catch (#1633)
- UnsupportedOperationException on adding a field (#1645)(PR #1646)
- Don't inline anonymous in self inner class (#1645)
- [gui] Improve search dialog performance
- [gui] Improve resources search (#1648)
- [gui] Improve log viewer dialog (#1311)(PR #1649)
- [gui] Add constructors usage into class usage (#1591)
- [gui] Sort resources by deobfuscated name (#1595)(PR #1598)
- [gui] Correct Frida snippet for constructor (PR #1605)
- [gui] Fix broken FileDialog by using legacy sort (#1628)(PR #1630)
- [gui] Handle possible classes overlap in disk cache (#1633)
- [gui] Disable actions if files not loaded (#1644)
- [debugger] Resolve NPE in adb device viewer (#1585) (PR #1586)
- [res] XML "null" decoding (#1583)(PR #1594)
New in Jadx 1.4.3 (Jul 21, 2022)
- Bug Fixes:
- [gui] Check user renames.
- [gui] Allow to use empty name to reset rename.
- [gui] Ignore/limit waiting of canceled search task.
- [gui] Forbid rename method args in fallback mode.
- [gui] Set current dir directly in file chooser constructor.
- [gui] IndexOutOfBoundsException in JumpManager.
- [gui] QuarkReport data validation added and other minor improvements.
- [gui] Resolve payload offset for switch insns in debug smali code.
- [gui] Ignore errors on code area dispose.
- Check synthetic methods before remove/inline.
- Correct inline/merge with overriden bridge method.
- Add more checks before remove or rename enum methods.
- Handle parent of inlined/moved classes.
- Update deps and fix proto resource loading.
- Ignore anonymous classes in enclosing node search.
- Save classes with code generation error into cache.
- Resolve possible decompilation double execution.
- Better dominators algorithms.
New in Jadx 1.4.2 (Jun 20, 2022)
- Features:
- [gui] Support export to various deobfuscation mapping file formats (#1491)(PR #1505)
- [gui] Add reload and live reload actions (#1537)
- [gui] Allow to disable jump on double click (#1540)
- Bug Fixes:
- [cli] Allow decoding resource-only APKs (#1517)(PR #1530)
- [cli] Remove deprecated --deobf-rewrite-cfg (#1513)
- [gui] Try to prevent jadx node leaks in UI objects
- [gui] Improve restoration of windows saved state (PR #1511)
- [gui] Add volatile and update sync for decompiler field in wrapper (#1518)
- [gui] Resolve popup menu action run (#1514, #1529)
- [gui] Correct set highlighted text in search (#1507)
- [gui] Allow to select file on mapping export
- [gui] Reset disk cache on new jadx version
- [gui] Force jadx new version check by default
- Improve blocks tree compare for finally extract (#1501)
- Support all-catch in multi-catch (#1510)
- Improve class search for super call (#1512)
- Keep types on duplicate cast remove (#1527)
- Check class name collisions (#1526)
- Use wide move for long/double store/load java opcodes
New in Jadx 1.4.1 (Jun 1, 2022)
- Bug Fixes:
- [gui] Correct handle of selected file in save dialog
- [gui] Improve usage search, refactor java nodes creation (#1489)
- [gui] Resolve cast exception for variable reference (#1489)
- [gui] Save variable name to show in tooltip (#1487)
- [gui] Save full type info in metadata (#1487)
- [gui] Correct merge for plugin options from command line (#1490)
- [gui] Complete Chinese Translation (PR #1492)
- [gui] Correct close and reopen for decompiler and cache
- [res] Ignore version in AndroidManifest.xml (#1502)(PR #1504)
- Save cache dir for reuse on project save/reopen
- Remap class names for store in disk cache (#1503)
- Check if directory exists before delete (#1493)
- Use variable length encoding instead short for offsets (can overflow) (#1489)
- Skip dex files with parsing errors (#1495)
- Features:
- [gui] Add parameters logging in Frida code snippet (#1497)(PR #1498)
New in Jadx 1.4.0 (May 22, 2022)
- Features:
- [gui] Disk code cache and search rewrite (PR #1483)
- Allow to load custom input (#1457)
- Allow to include/exclude dependencies when saving with class filter (#1466)(PR #1467)
- Bug Fixes:
- [cli] Don't ignore critical errors (#1150)
- [gui] Resolve NPE on project save (#1463)(PR #1464)
- [gui] Confirm directory loading on file open (#1462)
- [gui] Fix IndexOutOfBoundsException when switching between tabs via mouse wheel (#1456)(PR #1469)
- [gui] Editor theme loading and error/fallback handling improved (#1476)(PR #1478)
- [gui] Ask for project file path on exit (#1474)
- [gui] Escape class, method and field names in Frida code snippet (PR #1480)
- [gui] Add missing Use debug info option
- [gui] Use alias for types in tooltips (#1487)
- Better code styling for if-else blocks (#1455)
- Workaround to prevent incorrect order after move inline (#1472)
- Use alias for variable names (#1487)
- Breaking changes in Jadx API:
- ICodeInfo: lines and code annotations moved to new interface ICodeMetadata with helpful search methods
- Changes for all code annotations methods to use ICodeAnnotation instead plain Object.
New in Jadx 1.3.5 (Apr 20, 2022)
- Features:
- Add 'simple' decompilation mode
- [gui] Add split view for different decompilation modes
- Bug Fixes:
- Handle inlined classes while collecting override related methods
- Use correct reference for replaced bridge constructor
- Handle wildcard in invoke type resolver
- Update class set to Android 32
- Replace fixed memory limit with -XX:MaxRAMPercentage=70.0
- Various minor improvements
- [cli] Use correct converter for "--decompilation-mode" option
- [debugger] Resolve IO read problems, proper socket closing
- [deobf] Fix writing method mappings as fields entries
- [gui] Rename class while rename constructor
- [gui] Restore open tabs on project load (regression fix)
- [gui] Don't highlight whitespaces and special symbols
- [gui] Check free memory after GC attempt
- [gui] Update Traditional Chinese translation
- [res] Ignore resource chunk entries that are located after the resource chunk end
New in Jadx 1.3.4 (Mar 21, 2022)
- 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)
New in Jadx 1.3.3 (Feb 20, 2022)
- 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)
New in Jadx 1.3.2 (Jan 20, 2022)
- Core:
- Use Kotlin intrinsic methods for variables rename
- Improve anonymous class inline
- Correct literal negate for double and float
- Add explicit type for non-int constants
- Simplify cascading casts
- Wrap negative literals before cast
- Handle method override with several bases
- Precalculate class deps for inline methods
- Skip input file name checks by zip name validator
- Use secure XML parser for process manifest
- GUI:
- Processing threads spinner initialization
- Correct handling for tree row click
- Reduce tree focus switching
- Use relative file paths in .jadx project file
- For Smali debugger: support multiple main <action> and <activity-alias> tags
New in Jadx 1.3.1 (Dec 20, 2021)
- 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)
New in Jadx 1.2.0 (Nov 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
New in Jadx 1.1.0 (Dec 7, 2019)
- 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)
New in Jadx 0.9.0 (Feb 12, 2019)
- 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)
New in Jadx 0.8.0 (Aug 27, 2018)
- 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
New in Jadx 0.7.1 (Apr 3, 2018)
- a lot of stability improvements
- better resources decoding
New in Jadx 0.6.1 (Nov 1, 2017)
- 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
New in Jadx 0.6 (Nov 18, 2016)
- 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