From 3ed2df828f2b778fcd77a620e201858f432cd8a0 Mon Sep 17 00:00:00 2001 From: xiaojye <33210636+xiaojye@users.noreply.github.com> Date: Fri, 11 Oct 2024 00:11:08 +0800 Subject: [PATCH] feat(gui): add button to go to Android Manifest (PR #2296) * feat: Add button to go to Android Manifest * fix: Change the text from 'Go to Manifest' to 'Go to AndroidManifest.xml' and replace icon source --- .../src/main/java/jadx/gui/ui/MainWindow.java | 18 ++++++++++++++++++ .../java/jadx/gui/ui/action/ActionModel.java | 2 ++ .../resources/i18n/Messages_de_DE.properties | 1 + .../resources/i18n/Messages_en_US.properties | 1 + .../resources/i18n/Messages_es_ES.properties | 1 + .../resources/i18n/Messages_id_ID.properties | 1 + .../resources/i18n/Messages_ko_KR.properties | 1 + .../resources/i18n/Messages_pt_BR.properties | 1 + .../resources/i18n/Messages_ru_RU.properties | 1 + .../resources/i18n/Messages_zh_CN.properties | 1 + .../resources/i18n/Messages_zh_TW.properties | 1 + .../resources/icons/ui/androidManifest.svg | 5 +++++ 12 files changed, 34 insertions(+) create mode 100644 jadx-gui/src/main/resources/icons/ui/androidManifest.svg diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 56aede8e9..4133c45ce 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -1009,6 +1009,20 @@ public class MainWindow extends JFrame { } } + public void goToAndroidManifest() { + ResourceFile androidManifest = AndroidManifestParser.getAndroidManifest(getWrapper().getResources()); + if (androidManifest == null) { + JOptionPane.showMessageDialog(MainWindow.this, + NLS.str("error_dialog.not_found", "AndroidManifest.xml"), + NLS.str("error_dialog.title"), + JOptionPane.ERROR_MESSAGE); + return; + } + + JResource res = new JResource(androidManifest, androidManifest.getDeobfName(), JResource.JResType.FILE); + tabsController.selectTab(res); + } + private void initMenuAndToolbar() { JadxGuiAction openAction = new JadxGuiAction(ActionModel.OPEN, this::openFileDialog); JadxGuiAction openProject = new JadxGuiAction(ActionModel.OPEN_PROJECT, this::openProjectDialog); @@ -1078,6 +1092,7 @@ public class MainWindow extends JFrame { this::goToMainActivity); JadxGuiAction goToApplicationAction = new JadxGuiAction(ActionModel.GO_TO_APPLICATION, this::goToApplication); + JadxGuiAction goToAndroidManifestAction = new JadxGuiAction(ActionModel.GO_TO_ANDROID_MANIFEST, this::goToAndroidManifest); JadxGuiAction decompileAllAction = new JadxGuiAction(ActionModel.DECOMPILE_ALL, this::requestFullDecompilation); JadxGuiAction resetCacheAction = new JadxGuiAction(ActionModel.RESET_CACHE, this::resetCodeCache); JadxGuiAction deobfAction = new JadxGuiAction(ActionModel.DEOBF, this::toggleDeobfuscation); @@ -1140,6 +1155,7 @@ public class MainWindow extends JFrame { nav.add(commentSearchAction); nav.add(goToMainActivityAction); nav.add(goToApplicationAction); + nav.add(goToAndroidManifestAction); nav.addSeparator(); nav.add(backAction); nav.add(forwardAction); @@ -1209,6 +1225,7 @@ public class MainWindow extends JFrame { toolbar.add(commentSearchAction); toolbar.add(goToMainActivityAction); toolbar.add(goToApplicationAction); + toolbar.add(goToAndroidManifestAction); toolbar.addSeparator(); toolbar.add(backAction); toolbar.add(forwardAction); @@ -1238,6 +1255,7 @@ public class MainWindow extends JFrame { commentSearchAction.setEnabled(loaded); goToMainActivityAction.setEnabled(loaded); goToApplicationAction.setEnabled(loaded); + goToAndroidManifestAction.setEnabled(loaded); backAction.setEnabled(loaded); backVariantAction.setEnabled(loaded); forwardAction.setEnabled(loaded); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/action/ActionModel.java b/jadx-gui/src/main/java/jadx/gui/ui/action/ActionModel.java index e315af301..d0b3a61b6 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/action/ActionModel.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/action/ActionModel.java @@ -55,6 +55,8 @@ public enum ActionModel { Shortcut.keyboard(KeyEvent.VK_M, UiUtils.ctrlButton() | KeyEvent.SHIFT_DOWN_MASK)), GO_TO_APPLICATION(MENU_TOOLBAR, "menu.go_to_application", "menu.go_to_application", "ui/application", Shortcut.keyboard(KeyEvent.VK_A, UiUtils.ctrlButton() | KeyEvent.SHIFT_DOWN_MASK)), + GO_TO_ANDROID_MANIFEST(MENU_TOOLBAR, "menu.go_to_android_manifest", "menu.go_to_android_manifest", "ui/androidManifest", + Shortcut.none()), DECOMPILE_ALL(MENU_TOOLBAR, "menu.decompile_all", "menu.decompile_all", "ui/runAll", Shortcut.none()), RESET_CACHE(MENU_TOOLBAR, "menu.reset_cache", "menu.reset_cache", "ui/reset", diff --git a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties index f087a9c95..e9133eac1 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -17,6 +17,7 @@ menu.class_search=Klassen-Suche menu.comment_search=Kommentar suchen #menu.go_to_main_activity= #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Tools #menu.plugins=Plugins #menu.decompile_all=Decompile all classes diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index 05df7cdc7..a2fb1cbb1 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -17,6 +17,7 @@ menu.class_search=Class search menu.comment_search=Comment search menu.go_to_main_activity=Go to main Activity menu.go_to_application=Go to Application +menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Tools menu.plugins=Plugins menu.decompile_all=Decompile all classes diff --git a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties index 8c3b9330b..242c3f119 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -17,6 +17,7 @@ menu.class_search=Buscar clase #menu.comment_search=Comment search #menu.go_to_main_activity= #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Herramientas #menu.plugins=Plugins #menu.decompile_all=Decompile all classes diff --git a/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties index 967355eb4..0962b3120 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties @@ -17,6 +17,7 @@ menu.class_search=Pencarian Kelas menu.comment_search=Pencarian Komentar menu.go_to_main_activity=Pergi ke Activitas Utama #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Alat menu.plugins=Plugin menu.decompile_all=Deskompilasi semua kelas diff --git a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties index 1c4a08b6f..51191e7e9 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -17,6 +17,7 @@ menu.class_search=클래스 검색 menu.comment_search=주석 검색 #menu.go_to_main_activity= #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=도구 #menu.plugins=Plugins #menu.decompile_all=Decompile all classes diff --git a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties index dc1bee6cc..f63f1c0ff 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties @@ -17,6 +17,7 @@ menu.class_search=Buscar por classe menu.comment_search=Busca por comentário #menu.go_to_main_activity= #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Ferramentas #menu.plugins=Plugins #menu.decompile_all=Decompile all classes diff --git a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties index 388644f31..67a864329 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties @@ -17,6 +17,7 @@ menu.class_search=Поиск классов menu.comment_search=Поиск комментариев menu.go_to_main_activity=Найти главное Activity #menu.go_to_application=Go to Application +#menu.go_to_android_manifest=Go to AndroidManifest.xml menu.tools=Инструменты menu.plugins=Плагины menu.decompile_all=Декомпилировать все diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties index eec590653..719b3ee84 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -17,6 +17,7 @@ menu.class_search=类名搜索 menu.comment_search=注释搜索 menu.go_to_main_activity=前往主 Activity #menu.go_to_application=Go to Application +menu.go_to_android_manifest=前往 AndroidManifest.xml menu.tools=工具 menu.plugins=插件 menu.decompile_all=反编译所有类 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties index c9649f9f5..d49617731 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -17,6 +17,7 @@ menu.class_search=類別搜尋 menu.comment_search=註解搜尋 menu.go_to_main_activity=前往主 Activity #menu.go_to_application=Go to Application +menu.go_to_android_manifest=前往 AndroidManifest.xml menu.tools=工具 menu.plugins=外掛程式 menu.decompile_all=反編譯所有類別 diff --git a/jadx-gui/src/main/resources/icons/ui/androidManifest.svg b/jadx-gui/src/main/resources/icons/ui/androidManifest.svg new file mode 100644 index 000000000..7caf6e6c6 --- /dev/null +++ b/jadx-gui/src/main/resources/icons/ui/androidManifest.svg @@ -0,0 +1,5 @@ + + + + +