315 Commits

Author SHA1 Message Date
AndnixSH 210390718c Update FormMain.resx 2025-08-02 12:18:17 +02:00
AndnixSH 5704df951e Update config.yml 2025-08-02 12:12:19 +02:00
AndnixSH 9e73936f6d Update config.yml 2025-08-02 12:09:58 +02:00
AndnixSH ddd24ecbd6 Update issue template 2025-08-02 12:06:51 +02:00
AndnixSH e50b8a8658 Fixed issue #40 2025-08-02 11:59:15 +02:00
AndnixSH 5f242bca2f Fixed apktool version output 2025-08-02 10:30:43 +02:00
AndnixSH e2784ce65e Updated tools 2025-08-02 10:29:56 +02:00
AndnixSH 93fc85fc33 Include Language.tr.resx in project 2025-07-30 19:12:09 +02:00
AndnixSH 4c389d58fb Merge branch 'pr/37' 2025-07-30 19:10:04 +02:00
AndnixSH 63e08f4f77 Remove invalid Turkish resx files 2025-07-30 19:09:43 +02:00
AndnixSH 556d01ed74 Remove flickering fix due to tabs flickering #38 2025-07-29 21:54:38 +02:00
AndnixSH eb670e7cd5 Merge branch 'pr/33' 2025-07-29 20:19:35 +02:00
AndnixSH 584df30992 Include Japanese in project 2025-07-29 20:19:14 +02:00
AndnixSH e89522cfcb Merge branch 'pr/36' 2025-07-29 19:31:13 +02:00
AndnixSH 9ffedd3cbf Merge branch 'pr/39' 2025-07-29 18:31:20 +02:00
AndnixSH 7228e182cc Update changelog.txt 2025-07-29 18:28:37 +02:00
Renji Yuusei ecce2c8e18 Update FormSettings.vi-VN.resx 2025-06-16 00:33:12 +07:00
Renji Yuusei 5f83b05335 Update FormMain.vi-VN.resx 2025-06-16 00:31:14 +07:00
Renji Yuusei aa0f62bd58 Update FormAboutBox.vi-VN.resx 2025-06-16 00:26:38 +07:00
Renji Yuusei 13420455c7 Update Language.vi-VN.resx 2025-06-15 21:15:18 +07:00
𝗛𝗼𝗹𝗶 3b90881083 Add Turkish 2025-03-27 17:01:03 +03:00
Hen_Ry be7ed3a533 Update FormMain.de.resx 2025-03-22 18:31:59 +01:00
AndnixSH 4ed20cf3de Revert back to DotNetZip but using ProDotNetZip for fixed vulnerability 2025-03-19 17:14:12 +01:00
AndnixSH aca3de41b7 Update AssemblyInfo.cs 2025-03-18 19:35:39 +01:00
AndnixSH a5497c56da Update packages 2025-03-18 19:35:17 +01:00
AndnixSH 4d2a745b11 Reduced UI flickering 2025-03-18 19:17:07 +01:00
AndnixSH b25fd6451b Fixes
- Removed APK links that are no longer available
- Fixed icon not displaying. It will load icon from Play Store as a last resort
- Faster apk parsing
2025-03-17 17:33:47 +01:00
Re*Index. (ot_inc) 19bd457b65 Merge branch 'master' of https://github.com/reindex-ot/APKToolGUI 2025-02-17 07:41:11 +09:00
Re*Index. (ot_inc) 3e1fc75808 Update Language.ja.resx 2025-02-17 07:40:53 +09:00
Re*Index. (ot_inc) 846ef4f5f1 Update Language.ja.resx 2025-02-17 07:35:47 +09:00
Re*Index. (ot_inc) d87d8af361 Delete APKToolGUI/Languages/Language.ja-JP.resx 2025-02-17 07:28:56 +09:00
Re*Index. (ot_inc) 9d31e8c2c8 Add files via upload 2025-02-17 07:28:23 +09:00
Re*Index. (ot_inc) ecd8b45846 Add files via upload 2025-02-17 07:27:28 +09:00
AndnixSH 8834cbcec2 Update changelog.txt 2025-01-30 12:08:17 +01:00
AndnixSH 1ecbb13692 3.3.1.5 2025-01-30 12:08:05 +01:00
AndnixSH 8084d5288b Update deps 2025-01-30 11:43:30 +01:00
AndnixSH 41f3663d4a Added check if stamp-cert-sha256 exists 2025-01-30 11:37:40 +01:00
AndnixSH add093dd6e Updated Apktool and Apkeditor to latest version 2025-01-30 11:25:03 +01:00
AndnixSH cb69d6b541 #32 2025-01-30 10:40:06 +01:00
AndnixSH e4a8886af6 Update AssemblyInfo.cs 2024-12-01 17:46:04 +01:00
AndnixSH 7b32dade20 Changes with unsigned APK
No longer need to extract signatures, the apktool.jar already does it on its own. And fixed issues adding original signature back to unsigned APK
2024-12-01 17:43:04 +01:00
AndnixSH 3401402bd6 Transition to System.IO.Compression 2024-11-30 22:33:55 +01:00
AndnixSH a7480e5bdf Added option to set threads 2024-11-19 09:12:15 +01:00
AndnixSH 95a69334c3 Merge pull request #29 from VeroZ1/master
Update Chinese Simplified translation
2024-11-18 14:17:53 +01:00
AndnixSH 82bee17ca7 Fixed UI for Viet 2024-11-18 14:14:18 +01:00
Renji Yuusei 61aee3cdcf Update APKToolGUI.csproj 2024-11-13 13:05:48 +07:00
Renji Yuusei 282a6ba6c0 Add Vietnamese language 2024-11-12 18:13:34 +07:00
Renji Yuusei 9ab8ad0013 Create Language.vi-VN.resx 2024-11-12 18:00:11 +07:00
VeroZ1 5953e2feef Update Chinese Simplified translation 2024-11-04 21:40:07 +08:00
AndnixSH 0f7caefaab Update changelog.txt 2024-09-30 15:52:45 +02:00
AndnixSH 48b6736ccf Fixed issue decompiling split apk using Apkeditor 2024-09-30 15:41:38 +02:00
AndnixSH f2329a4b57 Update AssemblyInfo.cs 2024-09-29 20:25:50 +02:00
AndnixSH 456b971183 Update DragDropHandlers.cs 2024-09-29 16:11:46 +02:00
AndnixSH 3417aedbe0 Update APKEditor.jar 2024-09-29 16:11:42 +02:00
AndnixSH 6e3bb9a6dd ? 2024-09-29 11:36:07 +02:00
AndnixSH 26763b0cfa Support window resizing #26 2024-09-27 21:47:04 +02:00
AndnixSH ca05365c16 Update tools 2024-09-27 18:52:15 +02:00
AndnixSH 7581a5c45c Print signature in apk info 2024-04-11 22:52:20 +02:00
AndnixSH 7e7de5f653 Update changelog.txt 2024-03-30 19:14:07 +01:00
AndnixSH 7ccbac83b2 Merge pull request #25 from YorkWaugh/master
Update Chinese Simplified translation
2024-03-29 13:11:31 +01:00
York Waugh af96daca95 Update Chinese Simplified translation 2024-03-24 16:26:31 +08:00
AndnixSH 208d14cb9b Update AssemblyInfo.cs 2024-03-03 16:52:25 +01:00
AndnixSH d4fcd90024 Option to override abi for ADB 2024-03-03 16:18:56 +01:00
AndnixSH bcc597ac0a Fix issue #22 and add up to SDK 35/Android 15 2024-03-03 13:36:04 +01:00
AndnixSH 674fc210f5 3.3.1.1 2024-02-26 12:52:52 +01:00
AndnixSH aa5d017c74 Fix ADB not ungraying the buttons after installation 2024-02-20 21:18:20 +01:00
AndnixSH 012b6f3c07 Add mergeApkBtn to ActionButtonsEnabled 2024-02-18 17:50:27 +01:00
AndnixSH c8bfc38fac Merge pull request #20 from Henry2o1o/patch-5
Update FormMain.de.resx
2024-02-09 15:09:42 +01:00
AndnixSH 6a0e01937a Merge pull request #21 from Henry2o1o/patch-6
Update Language.de.resx
2024-02-09 15:09:12 +01:00
Hen_Ry 542bc64b80 Update Language.de.resx 2024-01-28 17:06:24 +01:00
Hen_Ry e47ce35b5c Update FormMain.de.resx 2024-01-28 16:52:34 +01:00
Hen_Ry 7c3280a2ad Update FormMain.de.resx 2024-01-28 16:50:53 +01:00
AndnixSH d32a068e9a Update issues 2024-01-28 11:31:45 +01:00
AndnixSH 90f8ba18f3 Update FormMain.de.resx 2024-01-28 11:16:00 +01:00
AndnixSH 39219eaf65 Update changelog.txt 2024-01-27 15:18:36 +01:00
AndnixSH 9675fa6d85 Update README.md 2024-01-27 14:07:48 +01:00
AndnixSH 67a0bb877d Update changelog.txt 2024-01-27 14:02:35 +01:00
AndnixSH d8d1c50f00 no idea why VS changes this 2024-01-27 14:01:48 +01:00
AndnixSH 608dd37522 Print APKEditor version 2024-01-27 14:01:17 +01:00
AndnixSH d2f8e42664 Update AssemblyInfo.cs 2024-01-27 13:33:28 +01:00
AndnixSH 6cf1931bbc Temp logic
Fix freezing when clearing temp folder
Standard temp location will be ...\AppData\Local\APKToolGUI\Temp\XXXXX
2024-01-26 22:43:08 +01:00
AndnixSH 67667784fd Updated tools 2024-01-26 22:30:45 +01:00
AndnixSH 0df16541d4 Adjust settings saving
Don't require restart if language has not been changed
2024-01-26 22:25:44 +01:00
AndnixSH e141b886ef Support decompiling/compiling using ApkEditor 2024-01-26 22:14:16 +01:00
AndnixSH 9e00fd2d75 Print exceptions 2024-01-26 19:53:51 +01:00
AndnixSH a841fe0ce5 Update dependencies 2024-01-13 22:55:39 +01:00
AndnixSH d7edc9ced2 Fixed UI for German 2023-11-06 20:38:24 +01:00
AndnixSH f9cad819b6 Rename de-DE to de to avoid duplication 2023-11-06 20:26:01 +01:00
AndnixSH 02a48151c2 Included German and adjusted UI to fit for all languages 2023-11-06 17:54:05 +01:00
AndnixSH 8fddb8d760 Merge branch 'pr/18' 2023-11-06 17:34:20 +01:00
AndnixSH 0e18c8194c Merge branch 'pr/17' 2023-11-06 17:34:17 +01:00
AndnixSH aa1078660a Merge branch 'pr/16' 2023-11-06 17:34:11 +01:00
AndnixSH 33749af569 Merge branch 'pr/15' 2023-11-06 17:34:00 +01:00
AndnixSH c431d2e90c Fix language selection 2023-11-06 17:30:29 +01:00
AndnixSH 2dfac5d667 Update Log.cs 2023-11-06 17:07:56 +01:00
AndnixSH de6588a148 Fixed text align 2023-11-06 17:05:06 +01:00
AndnixSH 05cbb3cb4b Merge branch 'pr/14' 2023-11-06 17:03:44 +01:00
AndnixSH de415e8232 Included zh-CN in csproj 2023-11-06 17:02:10 +01:00
AndnixSH cfec6c9a81 Update apktool to 2.9.0 2023-11-06 16:56:06 +01:00
AndnixSH 28f15a41ac Update adb 2023-11-06 16:54:10 +01:00
AndnixSH 8513ab4788 Update Log.cs 2023-11-06 16:50:19 +01:00
Hen_Ry e4f9e5da21 Fix 2023-10-29 21:41:17 +01:00
Hen_Ry b191d547d0 Fix 2023-10-29 21:31:14 +01:00
Hen_Ry 1d764709f2 Fix 2023-10-29 21:28:47 +01:00
Hen_Ry 7ccf7da0f3 Fix 2023-10-29 21:24:22 +01:00
Hen_Ry 2bed8a468b Fix 2023-10-29 21:22:44 +01:00
Hen_Ry 6d4dc8396d Fix 2023-10-27 14:52:33 +02:00
Hen_Ry 67672a8871 Fix 2023-10-27 14:50:15 +02:00
Hen_Ry e7b942f09b Fix 2023-10-27 13:40:27 +02:00
Hen_Ry f71bd165a8 Create FormSettings.de.resx
for german
2023-10-27 11:44:44 +02:00
Hen_Ry 984735d9a2 Create FormMain.de.resx
for german
2023-10-27 11:43:40 +02:00
Hen_Ry 3e7ebe157e Create FormAboutBox.de.resx
for german
2023-10-27 11:41:57 +02:00
Hen_Ry e42e2f3897 Rename Language.de.resx to Language.de-DE.resx 2023-10-27 10:30:00 +02:00
Hen_Ry ae8106d967 Fix 2023-10-27 09:15:05 +02:00
Hen_Ry 462447de6c Update Language.de.resx
part 2/2
2023-10-26 20:36:42 +02:00
Hen_Ry 67a4b79efc Update Language.de.resx 2023-10-26 19:52:03 +02:00
Hen_Ry ba418f7427 Create Language.de.resx
for german
2023-10-26 15:33:38 +02:00
TuziChan f28fa25001 Update Simplified Chinese translation
translated all Forms,
but the Target SDK and Architetures text boxes in the apk info have alignment issues
2023-10-09 01:13:11 +08:00
AndnixSH db8be4b428 Update README.md 2023-10-07 17:49:50 +02:00
AndnixSH 7cea4c2959 APKSMerger source removed 2023-10-07 17:43:15 +02:00
AndnixSH 7def211556 Merge split APK to single APK 2023-10-07 17:39:57 +02:00
AndnixSH 9e81f5b791 Bump to v3.3.0.1 2023-10-01 16:30:03 +02:00
AndnixSH ec6fd42592 Fixed zipalign issue 2023-09-30 19:19:49 +02:00
AndnixSH 07e4026aba Update README.md 2023-09-30 10:17:03 +02:00
AndnixSH 1072739a97 Update changelog.txt 2023-09-16 16:12:28 +02:00
AndnixSH de4f176cf7 Fix crash when drag and dropping APK file 2023-09-16 14:58:09 +02:00
AndnixSH 75e05668ab Update tools 2023-09-16 13:34:47 +02:00
AndnixSH c897d959a3 Fix ApkTool errors after decompile: Change sparseResources to false 2023-09-13 11:50:23 +02:00
AndnixSH 58314b84e0 Move text tips to tooltips to keep UI clean 2023-09-13 10:32:42 +02:00
AndnixSH 906b2ea6d6 All settings portable 2023-09-09 20:50:49 +02:00
AndnixSH 926ba9e1e6 Added custom JVM args
To fix #13
2023-09-06 20:40:42 +02:00
AndnixSH efc7ec1539 Some changes 2023-09-06 15:43:51 +02:00
AndnixSH 2ab52ee4a3 Parse alt-native-code from aapt 2023-09-06 11:57:49 +02:00
AndnixSH 7bc8fb1d80 Added jump list 2023-09-06 11:36:48 +02:00
AndnixSH d4b21606b6 Add "New Instance" 2023-09-02 18:29:58 +02:00
AndnixSH 71b18764d4 Fixed sign after zipalign 2023-08-23 13:51:36 +02:00
AndnixSH e408c422de Don't parse APK info when selecting APK for decompiling 2023-08-23 12:03:38 +02:00
AndnixSH fa9c063968 Update dpendencies 2023-08-23 10:59:35 +02:00
AndnixSH e1509bc235 Bump version 3.3.0.0 2023-07-30 17:05:42 +02:00
AndnixSH da7685c40e Update Microsoft.NETCore.Platforms to 7.0.4 2023-07-30 17:04:50 +02:00
AndnixSH afa73115bc Improve dark theme a bit 2023-07-30 16:52:55 +02:00
AndnixSH 6ef981bd25 Updated APKEditor.jar to 1.2.7 2023-07-30 13:03:04 +02:00
AndnixSH 353467c461 Added --net-sec-conf flag 2023-07-29 14:49:59 +02:00
AndnixSH c6184f4eed Update apktool.jar to 2.8.1 2023-07-29 13:19:39 +02:00
AndnixSH 4a47d23b77 Added option to clear temp folder 2023-07-29 13:15:44 +02:00
AndnixSH c2233ac843 No longer change target SDK to 29
It's no longer necessary, and it cause some issues
2023-07-29 12:42:47 +02:00
AndnixSH a5e3ea133c Fix java version a bit 2023-07-17 20:17:35 +02:00
AndnixSH 68f27e1231 Added debug mode 2023-07-13 16:30:06 +02:00
AndnixSH 2a5312628f Update tools 2023-07-03 17:32:59 +02:00
AndnixSH a5c80a2c73 Removed android.intent.action.MAIN from fixer 2023-07-02 16:32:57 +02:00
AndnixSH ae20b2167c Update dependencies 2023-07-02 16:31:44 +02:00
AndnixSH 5e8051b86a Update README.md 2023-06-22 09:43:34 +02:00
AndnixSH 08bc04a9b0 Update README.md 2023-06-11 13:32:27 +02:00
AndnixSH 9f89c5bab0 Update Image.png 2023-06-05 13:16:35 +02:00
AndnixSH dfee2d8c93 Merge pull request #11 from wcxu21/master
Update Simplified Chinese translation
2023-05-21 12:34:52 +02:00
AndnixSH 5eb9b3ba9f Update README.md 2023-05-21 12:34:05 +02:00
大眼仔旭 b8615ec982 Update Simplified Chinese translation
Update Simplified Chinese translation
2023-05-19 10:45:38 +08:00
AndnixSH 926ab509d0 Update README.md 2023-05-14 11:02:38 +02:00
AndnixSH 1edcb5b836 Update README.md 2023-05-14 11:02:22 +02:00
AndnixSH 165155407d Update README.md 2023-05-13 15:26:15 +02:00
AndnixSH 3d02b40128 Merge branch 'master' of https://github.com/AndnixSH/APKToolGUI 2023-05-13 14:25:14 +02:00
AndnixSH e4559a45b7 Create LICENSE 2023-05-13 14:24:32 +02:00
AndnixSH 91bb1c8838 Remove date 2023-05-12 22:35:35 +02:00
AndnixSH 745863555a 3.2.2.0 2023-05-12 22:33:07 +02:00
AndnixSH 684fb02074 Fix installing apk even its disabled again 2023-05-12 17:21:40 +02:00
AndnixSH 2a0f4cd90a Fix crash when dropping decompiled APK on compile panel 2023-05-12 17:18:04 +02:00
AndnixSH 83fb485c26 Dark theme for panel hovering 2023-05-12 16:34:12 +02:00
AndnixSH ee0fa89598 Implemented dark theme (#5)
Not really perfect, the tabs look quite ugly and the scrollbars still write, but 95% of the controls are dark. I will probably try to add custom tabcontrol and scrollbars. Why not :D
2023-05-09 17:51:38 +02:00
AndnixSH ab629c24f3 Added View APK info in context menu #9 2023-05-08 15:28:24 +02:00
AndnixSH a45b671961 Fixed attempting to install APK even it's disabled 2023-05-08 10:39:47 +02:00
AndnixSH 7725d3c28c Update changelog.txt 2023-03-27 10:44:34 +02:00
AndnixSH 041a70daa4 Remove libaapt2_jni.dll requirement 2023-03-27 10:24:21 +02:00
AndnixSH 6a00b05eb4 Update resources 2023-03-27 10:23:38 +02:00
AndnixSH 9a66346312 Update Image.png 2023-03-27 10:00:58 +02:00
AndnixSH cff11abfb3 Make log output read only 2023-03-27 09:58:25 +02:00
AndnixSH 3ba67d54dd Update changelog.txt 2023-03-27 09:52:06 +02:00
AndnixSH 835037d137 Update AssemblyInfo.cs 2023-03-27 09:47:14 +02:00
AndnixSH d1c583e5df Updated dependencies 2023-03-27 09:43:45 +02:00
AndnixSH 3f20b9c9ca Update issue template and README 2023-03-26 19:12:19 +02:00
AndnixSH 37c71f0d57 Update README.md 2023-03-23 16:00:37 +01:00
AndnixSH a193ababbc Update README.md 2023-03-23 15:54:13 +01:00
AndnixSH b89e192fe5 Update README.md 2023-03-23 15:51:16 +01:00
AndnixSH fb896c07d0 Update README.md 2023-03-23 15:50:40 +01:00
AndnixSH 91ac7c6c47 Add video 2023-03-23 15:49:10 +01:00
AndnixSH e965173b14 Merge pull request #7 from gidano/master
Update Hungarian language file
2023-03-23 15:35:34 +01:00
AndnixSH 99378f935e Merge pull request #8 from nibred/master
Update russian language file
2023-03-23 15:35:19 +01:00
AndnixSH b7f208aaff Remove FormMain.ru-RU.resx. I'll keep FormMain.ru.resx 2023-03-23 15:34:23 +01:00
AndnixSH 3e696f0da6 Update 2023-03-23 15:33:24 +01:00
AndnixSH 3440e4748f Delete apkaio.ico 2023-03-23 15:30:10 +01:00
AndnixSH 2fbc34af87 Update 2023-03-23 12:54:29 +01:00
AndnixSH 74ceb1267d Just testing language 2023-03-23 12:33:59 +01:00
AndnixSH 18f0d94f47 Update feature_request.yml 2023-03-23 11:54:59 +01:00
AndnixSH e81e7de8fe Force delete output path in temp folder 2023-03-23 11:53:58 +01:00
AndnixSH ee39be3fcc Finally, found a way to avoid slow down when outputting APKEditor progress 2023-03-23 11:51:09 +01:00
nibred 0c0b27c1a0 Update russian language file 2023-03-17 15:42:32 +01:00
gidano d6f4f3743b Update Hungarian language file 2023-03-16 15:43:26 +01:00
AndnixSH ddc3df3fec Revert "Update changelog.txt"
This reverts commit 4a63101537.
2023-03-13 17:26:11 +01:00
AndnixSH 4a63101537 Update changelog.txt 2023-03-13 16:49:33 +01:00
AndnixSH ff76f936b1 Update changelog.txt 2023-03-13 16:40:21 +01:00
AndnixSH 92f7de3e7f Update System.Diagnostics.DiagnosticSource to 7.0.1 2023-03-13 16:00:38 +01:00
AndnixSH ef6ebdbab4 Add issue template 2023-03-13 15:59:00 +01:00
AndnixSH 285df8e366 Update 2023-03-12 20:08:21 +01:00
AndnixSH 6fede45027 Update changelog.txt 2023-03-12 11:48:43 +01:00
AndnixSH 55d2f4a59c Move menu item methods to a class, and delete unused menu strip 2023-03-12 11:42:25 +01:00
AndnixSH a436a90c33 Added Report an issue menu item 2023-03-12 10:48:00 +01:00
AndnixSH 2a1170bbfa Update changelog.txt 2023-03-11 22:20:59 +01:00
AndnixSH e92b0f780b Update README.md 2023-03-11 22:20:03 +01:00
AndnixSH 7b0a5768ac Improve process killer 2023-03-11 21:03:30 +01:00
AndnixSH 605633331c Added custom apktool path 2023-03-11 11:57:13 +01:00
AndnixSH c123c98954 Disable mail, baksmali and framework tabs if Java is not installed 2023-03-10 17:15:15 +01:00
AndnixSH 47a776ee66 Improve Java logic
- Prevent crash when Java is not found
- Show full Java version
- Call Java path only once to avoid slow startup
2023-03-09 21:22:26 +01:00
AndnixSH 45bf85bd1b Version is now 3.2.0.0 2023-03-09 18:25:59 +01:00
AndnixSH 94c586b92f Clean up log calls 2023-03-09 18:14:24 +01:00
AndnixSH 36e0b6240f Added adb 2023-03-09 16:15:00 +01:00
AndnixSH 5bc620271d Implement cancellation when clicking on status bar
And clean up
2023-03-04 17:59:03 +01:00
AndnixSH 957696e5b3 Update FormMain.cs 2023-03-03 22:56:21 +01:00
AndnixSH e69a8f2b72 Allow drop multiple files 2023-03-03 22:50:53 +01:00
AndnixSH 713378275d Improve background thread 2023-03-03 19:12:11 +01:00
AndnixSH 1841712c10 Support split APKs for context menu 2023-03-03 18:23:08 +01:00
AndnixSH bb24c0b7b9 Implement APKEditor.jar 2023-03-03 18:06:12 +01:00
AndnixSH 094ffbfa57 Update ApkFixer.cs 2023-03-02 18:48:43 +01:00
AndnixSH b9eaa4b4b5 Add main window handlers class 2023-03-02 18:36:17 +01:00
AndnixSH dd7b84b86b Language 2023-03-02 18:06:40 +01:00
AndnixSH 7965234e4e Ugh, bring back TEMP_PATH and getters to avoid null issues 2023-03-02 16:55:59 +01:00
AndnixSH 636b093943 Fix open temp path 2023-03-02 15:57:40 +01:00
AndnixSH 8fcceaba36 Fix Compile output location button 2023-03-02 15:53:19 +01:00
AndnixSH 1880b592f4 Implement split apk merging. Use own temp directory
Apk merging is based on https://github.com/shadow578/ApksMerger
2023-03-02 12:28:48 +01:00
AndnixSH 8b4717c4b9 ClearLogBeforeAction true by default 2023-02-25 12:40:53 +01:00
AndnixSH 056f912e40 Merge branch 'master' of https://github.com/AndnixSH/APKToolGUI 2023-02-25 12:20:45 +01:00
AndnixSH 1b068f0dbe Update README.md 2023-02-25 12:20:43 +01:00
AndnixSH 87b621f8c7 Tryin to merge pull request #3 from gidano/master again
Hungarian translation
2023-02-24 21:59:21 +01:00
AndnixSH deacb7c05f Added hu and pt-BR to csproj manually 2023-02-24 21:52:33 +01:00
AndnixSH 9be1957e9d Merge branch 'pr/3' 2023-02-24 21:49:24 +01:00
AndnixSH 152ef2e855 Merge branch 'pr/4' 2023-02-24 21:48:47 +01:00
AndnixSH 026c9145b1 Improve language logic
- Automatic listing available languages
- Ask to restart application when language has been changed
2023-02-24 21:46:13 +01:00
AndnixSH 06c222af58 Changes to FormMain
- Replace selected apk button with compile output button
- Some changes in Build tab
2023-02-24 17:41:41 +01:00
AndnixSH 1d250a2dc8 Improve framework logic
- Standalone framework cache. It's no longer conflicting with apktool.jar
- Framework path textbox sync across decode, build and framework tab
2023-02-24 17:21:53 +01:00
q3b5q3 55633e1505 Fix async issue 2023-02-23 18:51:51 +01:00
Igor Rückert 9661e72d6b Create Language.pt-BR.resx
Brazilian Portuguese translation for APKToolGUI
2023-02-21 14:09:26 -03:00
q3b5q3 4408a0d06d Improve aapt logic, and logs
Fix freezing when parsing APK
Don't print timer when not necessary
2023-02-15 21:45:59 +01:00
q3b5q3 8671f87a1a Fix long path again 2023-02-15 21:03:19 +01:00
q3b5q3 011b46fbc2 Fix decompile output dir 2023-02-15 12:41:53 +01:00
q3b5q3 63a0a0e028 Add long path support 2023-02-14 21:50:28 +01:00
q3b5q3 34270f6236 Support high DPI and long path 2023-02-14 16:45:35 +01:00
q3b5q3 3a36a79fce Improve directory logic 2023-02-14 16:34:58 +01:00
gidano 2698917d02 Merge branch 'AndnixSH:master' into master 2023-02-11 11:52:49 +01:00
q3b5q3 974d36c847 Attempt to fix false positives
Windows Defender no longer detect it. Now there is 2 vendors left

Bkav Pro: W32.AIDetectNet.01
MaxSecure: Trojan.Malware.300983.susgen

https://www.virustotal.com/gui/file/9fc32df83ff5792628abe1e7817a5f7004409c4935a2445d2a6ee4af8ea7623b?nocache=1
2023-02-03 20:41:16 +01:00
q3b5q3 e0317eb19d Add launchable activity text box 2023-02-03 20:24:03 +01:00
q3b5q3 4831f51f30 Improve directory performance 2023-02-03 19:11:30 +01:00
gidano 70914c70e2 Merge branch 'AndnixSH:master' into master 2023-01-21 09:42:52 +01:00
q3b5q3 4f2f98d2f9 Update ApkFixer.cs 2023-01-20 19:28:45 +01:00
q3b5q3 efefda1104 update 2023-01-08 13:46:28 +01:00
gidano dfb99358dc Hungarian translation 2023-01-06 17:24:26 +01:00
q3b5q3 2e2420bd91 Update ApkFixer.cs
Add more fixes
2023-01-05 11:24:19 +01:00
q3b5q3 2d1072d511 Update config.yml 2023-01-01 13:34:20 +01:00
q3b5q3 724bc5f60a Update config.yml 2023-01-01 13:33:30 +01:00
q3b5q3 f18e5b3031 Update changelog.txt 2023-01-01 13:08:13 +01:00
q3b5q3 98e4efce0f Update changelog.txt 2022-12-31 18:54:16 +01:00
q3b5q3 e6dbba208c Update README 2022-12-31 17:40:54 +01:00
q3b5q3 7accee6cc1 Added option to overwrite input apk of signing 2022-12-31 17:14:20 +01:00
q3b5q3 0e7e911cc4 Fix build and trying to fix output coloring issues 2022-12-30 19:09:28 +01:00
q3b5q3 083122d0eb Utf8FilenameSupport false by default 2022-12-30 18:44:53 +01:00
q3b5q3 6e3dfdb0f3 Cleaner path, minor UI changes and updated tools 2022-12-30 16:58:42 +01:00
q3b5q3 a4adc2a23c Add issue template 2022-12-30 15:39:42 +01:00
q3b5q3 c37b71a362 Fix directory move logic 2022-12-29 16:19:03 +01:00
q3b5q3 88e9d504c5 Fix crash when opening aligned directory with empty path 2022-12-03 15:34:42 +01:00
q3b5q3 f2b711e675 Fix "Do not decode sources" 2022-12-03 15:27:42 +01:00
AndnixSH c360808e36 Merge pull request #2 from wcxu21/patch-1
Update Language.zh-CN.resx
2022-12-03 15:15:40 +01:00
大眼仔旭 b9febf125c Update Language.zh-CN.resx 2022-11-22 10:43:13 +08:00
q3b5q3 57dd8a798b Add dark green color for log output 2022-11-18 19:12:09 +01:00
q3b5q3 b7e3e3d1f0 Always scroll to bottom 2022-11-18 19:05:35 +01:00
q3b5q3 a49c7e7538 UTF-8 filename support workaround
Option is enabled by default. Files will move to temp folder to do the job and move back to ordinary output location. We don't have to remove special characters like chinese, japanese, korean, arabic, etc, in order to avoid filename error anymore
2022-11-18 18:50:38 +01:00
q3b5q3 d35abe0f9a Fix smali path 2022-11-14 10:09:31 +01:00
q3b5q3 9454e2ac0e Fix baksmali input path 2022-11-13 18:45:03 +01:00
q3b5q3 d012b58bf9 Some colors in logging 2022-11-13 16:37:43 +01:00
q3b5q3 945afaa509 Sig scheme v4 is on by default and option to auto delete idsig file 2022-11-13 15:56:55 +01:00
q3b5q3 7c78e39c75 Improve temp logic 2022-11-13 12:22:12 +01:00
q3b5q3 6023bad531 Improve Java logic 2022-11-12 22:39:22 +01:00
q3b5q3 79f21cfe42 New temp logic and new menu strip
Old menu strip is bugged for some reason, had to switch to new one
2022-11-12 21:31:26 +01:00
q3b5q3 28f11f1870 Switch to simple log textbox 2022-11-12 14:51:26 +01:00
q3b5q3 ed978d1994 Update Apkinfo
Added archs and added more links to 3rd party APK downloader
2022-11-10 17:47:30 +01:00
q3b5q3 7a00679d5d Revert padding to default 2022-11-10 15:12:49 +01:00
q3b5q3 d17ac508f0 Update changelog.txt 2022-11-10 12:47:15 +01:00
q3b5q3 60c96318b0 Add incomplete Chinese Simplified #1 2022-11-10 12:02:49 +01:00
q3b5q3 e93d4dfac8 Update packages and readme 2022-11-10 11:32:35 +01:00
AndnixSH e7ffba97d1 Merge pull request #1 from wcxu21/master
Add Chinese Simplified translations
2022-11-10 09:38:36 +01:00
q3b5q3 3cdbb108bc Apkinfo fix 2022-11-10 09:24:45 +01:00
大眼仔旭 65a5802782 Add Chinese Simplified translations
Add Chinese Simplified translations
2022-10-25 16:54:51 +08:00
大眼仔旭 89a973a41e Delete Language.zh_CN.resx 2022-10-25 16:54:23 +08:00
大眼仔旭 6433fc54c2 Add Chinese Simplified translations
Add Chinese Simplified translations
2022-10-25 16:53:24 +08:00
q3b5q3 480edd3e59 Add input file/directory to log 2022-10-17 22:13:28 +02:00
q3b5q3 b471d96fa0 Update FormMain.resx 2022-10-17 21:53:43 +02:00
q3b5q3 0c957b21a8 Update AssemblyInfo.cs 2022-10-17 21:49:49 +02:00
q3b5q3 fb699cbfe8 Better font 2022-10-17 21:43:26 +02:00
q3b5q3 903cc5af42 Better font 2022-10-17 21:38:42 +02:00
q3b5q3 172b15a8d0 Stop resizing winform plz :( 2022-09-20 17:19:50 +02:00
q3b5q3 b9241c02a5 Make config portable 2022-09-20 17:17:27 +02:00
q3b5q3 986d6e180e Update changelog.txt 2022-09-20 17:16:15 +02:00
q3b5q3 ced4f9888f Bump version 2022-09-14 12:05:34 +02:00
q3b5q3 3f105d026b Some changes in FormMain
- Sign after align settings fixed
- Sign after align enabled by default
2022-09-14 12:05:00 +02:00
q3b5q3 0acfd3f73e Change tools dir and output build dir 2022-09-14 11:12:05 +02:00
q3b5q3 884b75b371 Update nuget 2022-09-13 15:20:54 +02:00
q3b5q3 0247010ae2 Disable maximize 2022-09-13 15:18:52 +02:00
q3b5q3 53ad4af6e4 Move to handler classes 2022-09-13 15:17:54 +02:00
q3b5q3 6dc216ee0d Update README.md 2022-05-22 18:57:37 +02:00
q3b5q3 1a1746af47 Minor changes to apk info 2022-05-22 18:56:11 +02:00
q3b5q3 41809f1892 3.0.2.0
- Bring back status bar. VS kept messing up with the design for some reason
- Added timelapse
- Added taskbar progress
- Play sound when done (OFF by default)
- Grid no longer sortable
2022-05-06 14:58:08 +02:00
q3b5q3 e1afd0c7ac Update README.md 2022-05-05 17:41:51 +02:00
q3b5q3 9f5ea243e6 Update README.md 2022-05-05 17:39:43 +02:00
q3b5q3 eec15ff17e Update README.md 2022-05-05 17:22:11 +02:00
q3b5q3 8e917167f3 3.0.1.0
See changelog.txt
2022-05-05 17:16:33 +02:00
q3b5q3 25b1a409b3 Fix APK decompilation input and save log in temp folder. 2022-04-17 13:22:38 +02:00
q3b5q3 f8ebdd867b Small changes
- Show changelog on update prompt
- Implement unsigned APK creation after compile. Totally forgotten it
- Compiled APK named "signed" instead "compiled" when signng after compile
2022-04-12 15:41:38 +02:00
q3b5q3 e9e27dd38e Update README.md 2022-04-11 21:06:29 +02:00
AndnixSH 01e1ac87a2 Update README.md 2022-04-11 14:06:06 +02:00
118 changed files with 21566 additions and 3982 deletions
+92
View File
@@ -0,0 +1,92 @@
name: Bug report
description: Report a bug in APK Tool GUI
labels: bug
body:
- type: checkboxes
attributes:
label: Prerequisites
description: To rule out invalid issues, confirm and check each one of the checkboxes.
options:
- label: This is not a support issue or a question. For support, questions, or help, see [support links](https://github.com/AndnixSH/APKToolGUI/issues/new/choose).
required: true
- label: I performed a cursory search of the issue tracker on [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/issues?q=is%3Aissue) to avoid opening a duplicate issue
required: true
- label: I am running the latest version of [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/releases).
required: true
- label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq)
required: true
- type: textarea
attributes:
label: Describe the bug
description: |
A clear and concise description of what the bug is.
Feel free to upload/attach link to screenshot or video
Only place logs in 'Logs' box
validations:
required: true
- type: textarea
attributes:
label: To Reproduce
description: Steps to reproduce the behavior
validations:
required: true
- type: textarea
attributes:
label: Logs
description: Please surround the logs with 3 backticks (```) to format it properly
placeholder: |
Copy and paste the logs here
This is an example how you should surround the logs with 3 backticks (```)
```
[12:50:54]java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)
[12:50:55] Apktool version "2.7.0"
[12:50:55] Drag & drop is supported
[12:50:55] Temp directory: "D:\Temp\ATG\xeaMO"
[12:50:55] Parsing APK Info...
[12:50:55] Done
[12:50:55] Getting devices...
[12:50:57] No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up
```
validations:
required: true
- type: textarea
attributes:
label: APK
description: If this APK can be freely shared, please upload/attach a link to it. Please warn with "NSFW" where applicable, if the APK or the link contains adult content
placeholder: |
https://apkcombo.com/downloader/
validations:
required: false
- type: input
attributes:
label: APK Tool GUI version
validations:
required: true
- type: input
attributes:
label: Apktool version
validations:
required: true
- type: input
attributes:
label: Java version
validations:
required: true
- type: input
attributes:
label: Operating system and version
placeholder: |
(Example: Windows 11 2h22)
validations:
required: true
+17
View File
@@ -0,0 +1,17 @@
blank_issues_enabled: false
contact_links:
- name: Apktool Issues List
url: https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue
about: Check Apktool issues before reporting issue here. Your issue might already exists
- name: Apktool forum
url: https://github.com/iBotPeaches/Apktool/discussions
about: For support, questions or help with Apktool, development and modding
- name: Smali Issues List
url: https://github.com/JesusFreke/smali/issues?q=is%3Aissue
about: Check Baksmali issues before reporting issue here. Your issue might already exists
- name: Smali Issues List 2
url: https://github.com/google/smali/issues?q=is%3Aissue
about: Check Baksmali issues before reporting issue here. Your issue might already exists
- name: Android development and modding support forum
url: https://forum.xda-developers.com/c/android-development-and-hacking.564/
about: For support, questions or help with development and modding'
@@ -0,0 +1,23 @@
name: Feature request
description: Request a feature for APK Tool GUI
labels: enhancement
body:
- type: checkboxes
attributes:
label: Prerequisites
description: To rule out invalid issues, confirm and check each one of the checkboxes.
options:
- label: This is not a support issue or a question. For support, questions, or help, see [support links](https://github.com/AndnixSH/APKToolGUI/issues/new/choose).
required: true
- label: I performed a cursory search of the issue tracker on [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/issues?q=is%3Aissue) to avoid opening a duplicate issue
required: true
- label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq)
required: true
- type: textarea
attributes:
label: Describe the feature you'd like
description: A clear and concise description of what you want to happen. Not all features will be accepted
validations:
required: true
+16
View File
@@ -0,0 +1,16 @@
name: Language suggestion/error
description: Suggest a change or report an error of language. Use this form if you can't pull request
labels: language
body:
- type: input
attributes:
label: Language
validations:
required: true
- type: textarea
attributes:
label: Description
description: A clear and concise description of what you want to be changed. You can upload/paste screenshots here. For full translation, please upload zip file of translated files or full project
validations:
required: true
+131 -48
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" />
<Import Project="..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props" Condition="Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" />
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
@@ -45,7 +45,7 @@
<DebugSymbols>false</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>D:\Portable Apps\APK Tool GUI\</OutputPath>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -56,7 +56,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>D:\Portable Apps\APK Tool GUI\</OutputPath>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -77,11 +77,15 @@
<PropertyGroup />
<PropertyGroup />
<ItemGroup>
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
<Reference Include="Costura, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.6.0.0\lib\netstandard2.0\Costura.dll</HintPath>
</Reference>
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
<Reference Include="CustomMarshalers" />
<Reference Include="DarkNet, Version=2.3.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DarkNet.2.3.0\lib\net452\DarkNet.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Build.Framework" />
<Reference Include="Microsoft.Build.Utilities.v4.0" />
@@ -91,14 +95,28 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.5.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Core.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.5.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Shell.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
</Reference>
<Reference Include="Ookii.Dialogs.WinForms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=66aa232afad40158, processorArchitecture=MSIL">
<HintPath>..\packages\Ookii.Dialogs.WinForms.4.0.0\lib\net462\Ookii.Dialogs.WinForms.dll</HintPath>
</Reference>
<Reference Include="PortableSettingsProvider, Version=0.2.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\PortableSettingsProvider.0.2.4\lib\net45\PortableSettingsProvider.dll</HintPath>
<Reference Include="OSVersionExt, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\OSVersionExt.3.0.0\lib\net462\OSVersionExt.dll</HintPath>
</Reference>
<Reference Include="ResourceLoader, Version=3.2.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ResourceLoader.3.2.4\lib\netstandard2.0\ResourceLoader.dll</HintPath>
<Reference Include="PortableSettingsProvider, Version=0.2.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\PortableSettingsProvider.0.2.5\lib\net45\PortableSettingsProvider.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="ProDotNetZip, Version=1.20.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
<HintPath>..\packages\ProDotNetZip.1.20.0\lib\netstandard2.0\ProDotNetZip.dll</HintPath>
</Reference>
<Reference Include="ResourceLoader, Version=3.3.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ResourceLoader.3.3.1\lib\netstandard2.0\ResourceLoader.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -106,8 +124,11 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
<Reference Include="System.Buffers, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.6.0\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=9.0.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.9.0.3\lib\net462\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.configuration" />
@@ -117,15 +138,20 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Data.OracleClient" />
<Reference Include="System.Design" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.6.0.0\lib\net461\System.Diagnostics.DiagnosticSource.dll</HintPath>
<Reference Include="System.Diagnostics.DiagnosticSource, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.9.0.3\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Formats.Nrbf, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Formats.Nrbf.9.0.3\lib\net462\System.Formats.Nrbf.dll</HintPath>
</Reference>
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
<Private>True</Private>
@@ -136,17 +162,7 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
@@ -167,9 +183,11 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.6.1\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
@@ -181,24 +199,27 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
<Reference Include="System.Numerics.Vectors, Version=4.1.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.6.0\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Resources.Extensions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Resources.Extensions.6.0.0\lib\net461\System.Resources.Extensions.dll</HintPath>
<Reference Include="System.Reflection.Metadata, Version=9.0.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.9.0.3\lib\net462\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Resources.Extensions, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Resources.Extensions.9.0.3\lib\net462\System.Resources.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.1\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll</HintPath>
@@ -216,6 +237,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Security.AccessControl, Version=6.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
@@ -236,11 +260,23 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Permissions, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Permissions.9.0.3\lib\net462\System.Security.Permissions.dll</HintPath>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Text.Encoding.CodePages, Version=9.0.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.9.0.3\lib\net462\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
@@ -253,13 +289,20 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<Compile Include="TaskBar\TaskBarJumpList.cs" />
<Compile Include="Utils\Log.cs" />
<Compile Include="ApkTool\AaptParser.cs" />
<Compile Include="ApkTool\ApkFixer.cs" />
<Compile Include="ApkTool\Apktool.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ApkTool\ApkEditor.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ApkTool\Smali.cs">
<SubType>Component</SubType>
</Compile>
@@ -269,16 +312,23 @@
<Compile Include="ApkTool\Signapk.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ApkTool\Adb.cs" />
<Compile Include="ApkTool\Zipalign.cs" />
<Compile Include="Handlers\AdbControlEventHandlers.cs" />
<Compile Include="Handlers\ApkinfoControlEventHandlers.cs" />
<Compile Include="Handlers\BaksmaliControlEventHandlers.cs" />
<Compile Include="Handlers\BuildControlEventHandlers.cs" />
<Compile Include="Handlers\DecodeControlEventHandlers.cs" />
<Compile Include="Handlers\DragDropHandlers.cs" />
<Compile Include="Handlers\FrameworkControlEventHandlers.cs" />
<Compile Include="Handlers\MainWindowEventHandlers.cs" />
<Compile Include="Handlers\MenuItemHandlers.cs" />
<Compile Include="Handlers\SignControlEventHandlers.cs" />
<Compile Include="Handlers\SmaliControlEventHandlers.cs" />
<Compile Include="Handlers\ZipalignControlEventHandlers.cs" />
<Compile Include="Controls\DarkTheme.cs" />
<Compile Include="Utils\AdminUtils.cs" />
<Compile Include="Utils\BitmapUtils.cs" />
<Compile Include="Utils\CMD.cs" />
<Compile Include="Utils\CommonUtils.cs" />
<Compile Include="Utils\DirectoryUtils.cs" />
@@ -306,6 +356,7 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="Java\JavaUtils.cs" />
<Compile Include="Utils\FileUtils.cs" />
<Compile Include="Utils\PathUtils.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -314,31 +365,66 @@
<DesignTime>True</DesignTime>
<DependentUpon>Language.resx</DependentUpon>
</Compile>
<Compile Include="Utils\ProcessUtils.cs" />
<Compile Include="Utils\StringExt.cs" />
<Compile Include="Web\UpdateChecker.cs" />
<Compile Include="Utils\ZipUtils.cs" />
<Compile Include="Web\WebDownload.cs">
<SubType>Component</SubType>
</Compile>
<EmbeddedResource Include="Forms\FormAboutBox.de.resx">
<DependentUpon>FormAboutBox.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAboutBox.resx">
<DependentUpon>FormAboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAboutBox.ru.resx">
<DependentUpon>FormAboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAboutBox.zh-CN.resx">
<DependentUpon>FormAboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAboutBox.vi-VN.resx">
<DependentUpon>FormAboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.de.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.ru.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.zh-CN.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.vi-VN.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.de.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.ru.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.zh-CN.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.vi-VN.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Languages\Language.de.resx" />
<EmbeddedResource Include="Languages\Language.hu.resx" />
<EmbeddedResource Include="Languages\Language.pt-BR.resx" />
<EmbeddedResource Include="Languages\Language.ru.resx" />
<EmbeddedResource Include="Languages\Language.tr.resx" />
<EmbeddedResource Include="Languages\Language.zh-CN.resx" />
<EmbeddedResource Include="Languages\Language.vi-VN.resx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -368,18 +454,11 @@
</ItemGroup>
<ItemGroup>
<Content Include="android-thin.ico" />
<None Include="Resources\apkaio.png" />
<Content Include="ILLink\ILLink.Descriptors.LibraryBuild.xml" />
<None Include="Resources\info.png" />
<None Include="Resources\waiting.png" />
<None Include="Resources\warning.png" />
<None Include="Resources\Error.png" />
<None Include="Resources\playstore.png" />
<None Include="Resources\apkpure.png" />
<None Include="Resources\apkcombo.png" />
<None Include="Resources\apkpure.ico" />
<None Include="Resources\apkcombo.ico" />
<None Include="Resources\playstore-2.png" />
<None Include="Resources\playstore.ico" />
<None Include="Resources\android-thin.ico" />
<None Include="Resources\Done.png" />
<None Include="Resources\android.png" />
@@ -409,21 +488,25 @@
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>xcopy "$(ProjectDir)tools" "$(OutDir)Resources" /Y /I /S</PreBuildEvent>
<PreBuildEvent>if not exist "$(ProjectDir)\$(OutDir)\Resources" xcopy "$(SolutionDir)\Tools" "$(ProjectDir)\$(OutDir)\Resources" /Y /I /S</PreBuildEvent>
</PropertyGroup>
<Import Project="..\packages\Fody.6.6.0\build\Fody.targets" Condition="Exists('..\packages\Fody.6.6.0\build\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Fody.6.6.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.6.0\build\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
<Error Condition="!Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.6.9.2\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.9.2\build\Fody.targets'))" />
</Target>
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" />
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" />
<Import Project="..\packages\Fody.6.9.2\build\Fody.targets" Condition="Exists('..\packages\Fody.6.9.2\build\Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
+2 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
@@ -9,6 +9,7 @@
<ErrorReportUrlHistory />
<FallbackCulture>ru-RU</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
<PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging>
+174 -55
View File
@@ -1,10 +1,13 @@
using System;
using APKToolGUI.Web;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace APKToolGUI.Utils
{
@@ -12,6 +15,12 @@ namespace APKToolGUI.Utils
{
public string ApkFile;
public string RealApkFile;
public string Armv7ApkFile;
public string Arm64ApkFile;
public string AppName;
public string PackageName;
@@ -20,7 +29,11 @@ namespace APKToolGUI.Utils
public string VersionCode;
public string SdkVersion;
public string MinSdkVersionDetailed;
public string TargetSdkVersionDetailed;
public string MinSdkVersion;
public string TargetSdkVersion;
@@ -34,6 +47,8 @@ namespace APKToolGUI.Utils
public string Densities;
public string NativeCode;
public string PlayStoreLink;
public string ApkComboLink;
@@ -42,19 +57,50 @@ namespace APKToolGUI.Utils
public string ApkAioLink;
public string AppIcon = null;
public string ApkGkLink;
public string ApkSupportLink;
public string ApkSosLink;
public string ApkMirrorLink;
public string ApkDlLink;
public string FullInfo;
internal string AppIcon = null;
internal string AppIcon120 = null;
internal string AppIcon160 = null;
internal string AppIcon240 = null;
internal string AppIcon320 = null;
internal string AppIcon480 = null;
internal string AppIcon640 = null;
internal string AppIcon65534 = null;
public bool Parse(string file)
{
bool result = true;
string info = ParseApkInfo(file);
FullInfo = info;
if (!String.IsNullOrEmpty(info))
{
string[] lines = info.Split(
new string[] { "\r\n", "\r", "\n" },
StringSplitOptions.None);
List<string> nativecode = new List<string> { };
List<string> nativecode2 = new List<string> { };
foreach (string line in lines)
{
switch (line.Split(':')[0])
@@ -68,17 +114,16 @@ namespace APKToolGUI.Utils
Permissions += StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line) + "\n";
break;
case "sdkVersion":
SdkVersion += SdkToAndroidVer(StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line));
MinSdkVersionDetailed = SdkToAndroidVer(StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line));
MinSdkVersion = StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line);
break;
case "targetSdkVersion":
TargetSdkVersion = SdkToAndroidVer(StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line));
TargetSdkVersionDetailed = SdkToAndroidVer(StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line));
TargetSdkVersion = StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line);
break;
case "application-label":
AppName = StringExt.Regex(@"(?<=application-label:\')(.*?)(?=\')", line);
break;
case "application":
AppIcon = GetIcon(file, StringExt.Regex(@"(?<=icon=\')(.*?)(?=\')", line));
break;
case "launchable-activity":
LaunchableActivity = StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line);
break;
@@ -94,17 +139,36 @@ namespace APKToolGUI.Utils
var densities = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
Densities = string.Join(", ", densities);
break;
case "alt-native-code":
nativecode2 = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
break;
case "native-code":
nativecode = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
break;
}
}
List<string> combinedList = nativecode2.Concat(nativecode).ToList();
NativeCode += string.Join(", ", combinedList);
ApkFile = file;
PlayStoreLink = "https://play.google.com/store/apps/details?id=" + PackageName;
ApkComboLink = "https://apkcombo.com/a/" + PackageName;
ApkPureLink = "https://apkpure.com/a/" + PackageName;
ApkAioLink = "https://apkaio.com/app/" + PackageName;
ApkSupportLink = "https://apk.support/app/" + PackageName;
ApkMirrorLink = "https://www.apkmirror.com/?post_type=app_release&searchtype=apk&s=" + PackageName;
ApkGkLink = "https://apkgk.com/" + PackageName + "/download";
AppIcon120 = StringExt.Regex(@"(?<=application-icon-120:\')(.*?)(?=\')", FullInfo);
AppIcon160 = StringExt.Regex(@"(?<=application-icon-160:\')(.*?)(?=\')", FullInfo);
AppIcon240 = StringExt.Regex(@"(?<=application-icon-240:\')(.*?)(?=\')", FullInfo);
AppIcon320 = StringExt.Regex(@"(?<=application-icon-320:\')(.*?)(?=\')", FullInfo);
AppIcon480 = StringExt.Regex(@"(?<=application-icon-480:\')(.*?)(?=\')", FullInfo);
AppIcon640 = StringExt.Regex(@"(?<=application-icon-640:\')(.*?)(?=\')", FullInfo);
AppIcon65534 = StringExt.Regex(@"(?<=application-icon-65534:\')(.*?)(?=\')", FullInfo);
result = true;
}
else
result = false;
return result;
}
@@ -127,99 +191,154 @@ namespace APKToolGUI.Utils
return apkinfo;
}
string[] iconFolder = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" };
private string GetIcon(string apkPath, string iconPath)
public string GetIcon(string apkPath)
{
iconPath = iconPath.Replace(".xml", ".png");
string[] png = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" };
string icon = "";
if (iconPath.Contains("anydpi-v26"))
if (!string.IsNullOrEmpty(AppIcon65534))
icon = AppIcon65534;
else if (!string.IsNullOrEmpty(AppIcon640))
icon = AppIcon640;
else if (!string.IsNullOrEmpty(AppIcon480))
icon = AppIcon480;
else if (!string.IsNullOrEmpty(AppIcon320))
icon = AppIcon320;
else if (!string.IsNullOrEmpty(AppIcon240))
icon = AppIcon240;
else if (!string.IsNullOrEmpty(AppIcon160))
icon = AppIcon160;
else if (!string.IsNullOrEmpty(AppIcon120))
icon = AppIcon120;
icon = icon.Replace(".xml", ".png");
Debug.WriteLine("Icon: " + icon);
string cacheDir = Path.Combine(Program.TEMP_PATH, PackageName);
string iconLocation = Path.Combine(cacheDir, Path.GetFileName(icon));
Directory.CreateDirectory(cacheDir);
if (icon.Contains("anydpi-v26"))
{
foreach (string folder in iconFolder)
foreach (string Png in png)
{
string icon = iconPath.Replace("mipmap-anydpi-v26", folder).Replace("drawable-anydpi-v26", folder);
if (ZipUtils.Exists(apkPath, icon))
string icon2 = icon.Replace("mipmap-anydpi-v26", Png).Replace("drawable-anydpi-v26", Png);
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
if (File.Exists(iconLocation))
{
Debug.WriteLine("Icon path " + icon);
return icon;
break;
}
}
return iconPath.Replace("mipmap-anydpi-v26", "mipmap-xhdpi").Replace(".xml", ".png");
}
else if (icon.Contains("v26"))
{
string icon2 = icon.Replace("v26", "v4");
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
icon2 = icon.Replace("-v26", "");
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
}
else
{
Debug.WriteLine("Icon path " + iconPath);
return iconPath;
ZipUtils.ExtractFile(apkPath, icon, cacheDir);
}
if (!File.Exists(iconLocation))
{
try
{
WebDownload w = new WebDownload();
string ps = w.DownloadString("https://play.google.com/store/apps/details?id=" + PackageName);
//File.WriteAllText("R:\\t.txt", ps);
string icondl = Path.Combine(cacheDir, "icon.png");
Directory.CreateDirectory(cacheDir);
w.DownloadFile(StringExt.Regex(@"(?<=\""image\"":\"")(.*?)(?=\"",\"")", ps), icondl);
iconLocation = icondl;
}
catch
{
}
}
return iconLocation;
}
//https://apilevels.com/
public string SdkToAndroidVer(string sdk)
{
switch (sdk)
{
case "35":
return sdk + ": Android 15";
case "34":
return sdk + ": Android 14";
case "33":
return sdk + ": Android 13";
case "32":
return sdk + ": Android 12.0L";
case "31":
return "31: Android 12.0";
return sdk + ": Android 12";
case "30":
return "30: Android 11.0";
return sdk + ": Android 11";
case "29":
return "29: Android 10.0";
return sdk + ": Android 10";
case "28":
return "28: Android 9.0 (Pie)";
return sdk + ": Android 9 (Pie)";
case "27":
return "27: Android 8.1 (Oreo MR1)";
return sdk + ": Android 8.1 (Oreo)";
case "26":
return "26: Android 8.0 (Oreo)";
return sdk + ": Android 8.0 (Oreo)";
case "25":
return "25: Android 7.1 (Nougat MR1)";
return sdk + ": Android 7.1 (Nougat)";
case "24":
return "24: Android 7.0 (Nougat)";
return sdk + ": Android 7.0 (Nougat)";
case "23":
return "23: Android 6.0 (Marshmallow)";
return sdk + ": Android 6 (Marshmallow)";
case "22":
return "22: Android 5.1 (Lollipop MR1)";
return sdk + ": Android 5.1 (Lollipop)";
case "21":
return "21: Android 5.0 (Lollipop)";
return sdk + ": Android 5.0 (Lollipop)";
case "20":
return "20: Android 4.4W (KitKat Watch)";
return sdk + ": Android 4.4W (KitKat Watch)";
case "19":
return "19: Android 4.4 (KitKat)";
return sdk + ": Android 4.4 (KitKat)";
case "18":
return "18: Android 4.3 (Jelly Bean MR2)";
return sdk + ": Android 4.3 (Jelly Bean)";
case "17":
return "17: Android 4.2 (Jelly Bean MR1)";
return sdk + ": Android 4.2 (Jelly Bean)";
case "16":
return "16: Android 4.1 (Jelly Bean)";
return sdk + ": Android 4.1 (Jelly Bean)";
case "15":
return "15: Android 4.0.3 (Ice Cream Sandwich MR1)";
return sdk + ": Android 4.0.3 (Ice Cream Sandwich)";
case "14":
return "14: Android 4.0 (Ice Cream Sandwich)";
return sdk + ": Android 4.0 (Ice Cream Sandwich)";
case "13":
return "13: Android 3.2 (Honeycomb MR2)";
return sdk + ": Android 3.2 (Honeycomb)";
case "12":
return "12: Android 3.1 (Honeycomb MR1)";
return sdk + ": Android 3.1 (Honeycomb)";
case "11":
return "11: Android 3.0 (Honeycomb)";
return sdk + ": Android 3.0 (Honeycomb)";
case "10":
return "10: Android 2.3.3 Gingerbread MR1";
return sdk + ": Android 2.3.3 Gingerbread";
case "9":
return "9: Android 2.3 (Gingerbread)";
return sdk + ": Android 2.3 (Gingerbread)";
case "8":
return "8: Android 2.2 (Froyo)";
return sdk + ": Android 2.2 (Froyo)";
case "7":
return "7: Android 2.1 (Eclair MR1)";
return sdk + ": Android 2.1 (Eclair)";
case "6":
return "6: Android 2.0.1 (Eclair 0.1)";
return sdk + ": Android 2.0.1 (Eclair)";
case "5":
return "5: Android 2.0 (Eclair)";
return sdk + ": Android 2.0 (Eclair)";
case "4":
return "4: Android 1.6 (Donut)";
return sdk + ": Android 1.6 (Donut)";
case "3":
return "3: Android 1.5 (Cupcake)";
return sdk + ": Android 1.5 (Cupcake)";
case "2":
return "2: Android 1.1 (Base 1.1)";
return sdk + ": Android 1.1 (Base 1.1)";
case "1":
return "1: Android 1.0 (Base)";
return sdk + ": Android 1.0 (Base)";
default:
return sdk;
}
+146
View File
@@ -0,0 +1,146 @@
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using Java;
using Microsoft.Build.Framework.XamlTypes;
using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Shapes;
namespace APKToolGUI
{
public class Adb
{
Process processAdb;
static class Keys
{
public const string Devices = " devices -l"; //list connected devices (-l for long output)
public const string Serial = " -s"; // use device with given serial (overrides $ANDROID_SERIAL)
public const string Vendor = " -i"; //Vendor
public const string ApkPath = " -r";
public const string Abi = " --abi"; //override platform's default ABI
}
public event DataReceivedEventHandler OutputDataReceived
{
add { processAdb.OutputDataReceived += value; }
remove { processAdb.OutputDataReceived -= value; }
}
public event DataReceivedEventHandler ErrorDataReceived
{
add { processAdb.ErrorDataReceived += value; }
remove { processAdb.ErrorDataReceived -= value; }
}
public event EventHandler Exited;
public int ExitCode { get { return processAdb.ExitCode; } }
string adbFileName = null;
public Adb(string AdbFileName)
{
adbFileName = AdbFileName;
processAdb = new Process();
processAdb.EnableRaisingEvents = true;
processAdb.StartInfo.FileName = AdbFileName;
processAdb.StartInfo.UseShellExecute = false; //отключаем использование оболочки, чтобы можно было читать данные вывода
processAdb.StartInfo.RedirectStandardOutput = true; // разрешаем перенаправление данных вывода
processAdb.StartInfo.RedirectStandardError = true; // разрешаем перенаправление данных вывода
processAdb.StartInfo.CreateNoWindow = true; //запрещаем создавать окно для запускаемой программы
processAdb.Exited += processAdb_Exited;
}
void processAdb_Exited(object sender, EventArgs e)
{
processAdb.CancelOutputRead();
processAdb.CancelErrorRead();
if (this.Exited != null)
Exited(this, new EventArgs());
}
public void Cancel()
{
try
{
foreach (var process in Process.GetProcessesByName("adb"))
{
if (process.Id == processAdb.Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)processAdb.Id);
process.Kill();
}
}
}
catch { }
}
public int Install(string device, string inputApk)
{
Regex regex = new Regex(@"^(\S+)\s+.*model:(\w+).*");
Match mdevice = regex.Match(device);
string setVendor = null, abi = null;
if (Settings.Default.Adb_SetVendor)
setVendor = $"{Keys.Vendor} com.android.vending {Keys.ApkPath}";
if (Settings.Default.Adb_SetOverrideAbi)
{
switch (Settings.Default.Adb_OverrideAbi)
{
case 0:
abi = Keys.Abi + " arm64-v8a";
break;
case 1:
abi = Keys.Abi + " armeabi-v7a";
break;
case 2:
abi = Keys.Abi + " x86";
break;
case 3:
abi = Keys.Abi + " x86_64";
break;
}
}
string args = String.Format($"{Keys.Serial} {mdevice.Groups[1].Value} install {setVendor} {abi} \"{inputApk}\"");
Log.d("ADB: " + adbFileName + " " + args);
Debug.WriteLine("Adb: " + args);
processAdb.EnableRaisingEvents = false;
processAdb.StartInfo.Arguments = args;
processAdb.Start();
processAdb.BeginOutputReadLine();
processAdb.BeginErrorReadLine();
processAdb.WaitForExit();
return ExitCode;
}
public string GetDevices()
{
Log.d("ADB: " + adbFileName + " " + Keys.Devices);
Process process = new Process();
process.EnableRaisingEvents = true;
process.StartInfo.FileName = adbFileName;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.EnableRaisingEvents = false;
process.StartInfo.Arguments = Keys.Devices;
process.Start();
string devices = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return devices;
}
public void KillProcess()
{
foreach (var process in Process.GetProcessesByName("adb"))
{
process.Kill();
}
}
}
}
+193
View File
@@ -0,0 +1,193 @@
using System;
using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
using System.Windows.Forms;
namespace APKToolGUI
{
public class ApkEditor : JarProcess
{
public new event ApkEditorExitedEventHandler Exited;
string _jarPath;
public ApkEditor(string javaPath, string jarPath)
: base(javaPath, jarPath)
{
this._jarPath = jarPath;
base.Exited += ApkEditor_Exited;
OutputDataReceived += ApkEditor_OutputDataReceived;
ErrorDataReceived += ApkEditor_ErrorDataReceived; //Output makes process way slower
}
ApkEditorDataReceivedEventHandler onApkEditorOutputDataRecieved;
ApkEditorDataReceivedEventHandler onApkEditorErrorDataRecieved;
public event ApkEditorDataReceivedEventHandler ApkEditorOutputDataRecieved
{
add
{
onApkEditorOutputDataRecieved += value;
}
remove
{
onApkEditorOutputDataRecieved -= value;
}
}
public event ApkEditorDataReceivedEventHandler ApkEditorErrorDataRecieved
{
add
{
onApkEditorErrorDataRecieved += value;
}
remove
{
onApkEditorErrorDataRecieved -= value;
}
}
private void ApkEditor_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
if (onApkEditorErrorDataRecieved != null && e.Data != null)
onApkEditorErrorDataRecieved(this, new ApkEditorDataReceivedEventArgs(e.Data));
}
private void ApkEditor_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (onApkEditorOutputDataRecieved != null && e.Data != null)
onApkEditorOutputDataRecieved(this, new ApkEditorDataReceivedEventArgs(e.Data));
}
void ApkEditor_Exited(object sender, EventArgs e)
{
if (Exited != null)
Exited(this, new ApkEditorExitedEventArgs(ExitCode));
}
public void Cancel()
{
try
{
foreach (var process in Process.GetProcessesByName("java"))
{
if (process.Id == Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
process.Kill();
}
}
}
catch { }
}
public int Merge(string input, string output)
{
string inputFile = String.Format("-i \"{0}\"", input);
string keyOutputDir = String.Format("-o \"{0}\"", output);
string args = String.Format("m {0} {1} -f", inputFile, keyOutputDir);
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
WaitForExit();
CancelOutputRead();
CancelErrorRead();
return ExitCode;
}
public int Decompile(string input, string output)
{
string inputFile = String.Format("-i \"{0}\"", input);
string keyOutputDir = String.Format("-o \"{0}\"", output);
string args = String.Format("d {0} {1} -f", inputFile, keyOutputDir);
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
WaitForExit();
CancelOutputRead();
CancelErrorRead();
return ExitCode;
}
public int Build(string input, string output)
{
string inputFile = String.Format("-i \"{0}\"", input);
string keyOutputDir = String.Format("-o \"{0}\"", output);
string args = String.Format("b {0} {1} -f", inputFile, keyOutputDir);
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
WaitForExit();
CancelOutputRead();
CancelErrorRead();
return ExitCode;
}
public string GetVersion()
{
using (JarProcess jar = new JarProcess(JavaPath, JarPath))
{
jar.EnableRaisingEvents = false;
jar.Start("-version");
//APKEditor always print as errors as usual :)
string version = jar.StandardOutput.ReadToEnd();
version += jar.StandardError.ReadToEnd();
jar.WaitForExit(3000);
return version.Replace("\r\n", "");
}
}
}
public class ApkEditorExitedEventArgs : EventArgs
{
public ApkEditorExitedEventArgs(int exitCode)
{
ExitCode = exitCode;
}
public int ExitCode { get; private set; }
}
public delegate void ApkEditorExitedEventHandler(object sender, ApkEditorExitedEventArgs e);
public delegate void ApkEditorDataReceivedEventHandler(Object sender, ApkEditorDataReceivedEventArgs e);
public class ApkEditorDataReceivedEventArgs : EventArgs
{
string message;
public ApkEditorDataReceivedEventArgs(string _data)
{
message = _data;
}
public String Message
{
get
{
return message;
}
}
}
}
+28 -30
View File
@@ -5,22 +5,43 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace APKToolGUI.ApkTool
{
public class ApkFixer
{
public static bool FixAndroidManifest(string path)
public static bool FixAndroidManifest(string decompilePath)
{
string manifestPath = Path.Combine(path, "AndroidManifest.xml");
string manifestPath = Path.Combine(decompilePath, "AndroidManifest.xml");
if (File.Exists(manifestPath))
{
string text = File.ReadAllText(manifestPath);
text = text.Replace("android:isSplitRequired=\"true\"", "");
text = text.Replace("android:extractNativeLibs=\"false\"", "");
text = text.Replace("android:useEmbeddedDex=\"true\"", "");
File.WriteAllText(Path.Combine(path, "AndroidManifest.xml"), text);
string maniFestText = File.ReadAllText(manifestPath);
maniFestText = maniFestText.Replace("\\ ", "\\u003");
maniFestText = maniFestText.Replace("android:isSplitRequired=\"true\"", "");
maniFestText = maniFestText.Replace("android:extractNativeLibs=\"false\"", "");
maniFestText = maniFestText.Replace("android:useEmbeddedDex=\"true\"", "");
maniFestText = maniFestText.Replace("android:manageSpace=\"true\"", "");
maniFestText = maniFestText.Replace("android:localeConfig=\"@xml/locales_config\"", "");
maniFestText = maniFestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
File.WriteAllText(manifestPath, maniFestText);
return true;
}
return false;
}
public static bool FixApktoolYml(string decompilePath)
{
string ymlPath = Path.Combine(decompilePath, "apktool.yml");
if (File.Exists(ymlPath))
{
string yml = File.ReadAllText(ymlPath);
yml = yml.Replace("sparseResources: true", "sparseResources: false");
File.WriteAllText(ymlPath, yml);
return true;
}
return false;
@@ -36,28 +57,5 @@ namespace APKToolGUI.ApkTool
}
return false;
}
public static bool ChangeSdkTo29(string path)
{
string ymlPath = Path.Combine(path, "apktool.yml");
if (File.Exists(ymlPath))
{
string[] Manifest = File.ReadAllLines(ymlPath);
string yml = "";
foreach (string s in Manifest)
{
int sdk = 30;
int.TryParse(StringExt.Regex(@"(?<= targetSdkVersion: \')(.*?)(?=\')", s), out sdk);
if (sdk >= 30)
{
yml += " targetSdkVersion: '29'\n";
return true;
}
yml += s + "\n";
}
File.WriteAllText(ymlPath, yml);
}
return false;
}
}
}
+89 -19
View File
@@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using Java;
namespace APKToolGUI
@@ -20,7 +22,6 @@ namespace APKToolGUI
Null
}
//Note: I don't use some features and don't use any framework related since I make it simple for game modding purposes
static class DecompileKeys
{
public const string NoSource = " -s"; //Do not decode sources.
@@ -33,6 +34,7 @@ namespace APKToolGUI
public const string OutputDir = " -o"; //The name of folder that gets written. Default is apk.out
public const string OnlyMainClasses = " -only-main-classes"; //Only disassemble the main dex classes (classes[0-9]*.dex) in the root.
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
public const string Jobs = " -j"; // Sets the number of threads to use.
}
static class BuildKeys
@@ -44,6 +46,9 @@ namespace APKToolGUI
public const string OutputAppPath = " -o"; // The name of apk that gets written. Default is dist/name.apk
public const string NoCrunch = " -nc"; // Disable crunching of resource files during the build step.
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
public const string UseAapt2 = " --use-aapt2"; //Upgrades apktool to use experimental aapt2 binary.
public const string NetSecConf = " --net-sec-conf"; //Add a generic Network Security Configuration file in the output APK
public const string Jobs = " -j"; // Sets the number of threads to use.
}
static class InstallFrameworkKeys
@@ -52,6 +57,12 @@ namespace APKToolGUI
public const string Tag = " -t"; //Tag frameworks using <tag>.
}
static class EmptyFrameworkKeys
{
public const string FrameDir = " -p"; //Stores framework files into <dir>.
public const string ForceDelete = " -f"; //Force delete destination directory.
}
ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved;
ApktoolDataReceivedEventHandler onApktoolErrorDataRecieved;
@@ -78,8 +89,10 @@ namespace APKToolGUI
}
}
string _jarPath;
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
{
_jarPath = jarPath;
Exited += Apktool_Exited;
OutputDataReceived += Apktool_OutputDataReceived;
ErrorDataReceived += Apktool_ErrorDataReceived;
@@ -103,9 +116,8 @@ namespace APKToolGUI
CancelErrorRead();
}
public int Decompile(string outputDir)
public int Decompile(string inputPath, string outputDir)
{
string inputPath = Settings.Default.Decode_InputAppPath;
string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyMatchOriginal = null, keyOutputDir = null, onlyMainClasses = null, noDebugInfo = null, keyKeepBrokenRes = null, apiLevel = null;
if (Settings.Default.Decode_NoSrc)
@@ -118,17 +130,23 @@ namespace APKToolGUI
keyKeepBrokenRes = DecompileKeys.KeepBrokenResource;
if (Settings.Default.Decode_MatchOriginal)
keyMatchOriginal = DecompileKeys.MatchOriginal;
if (Settings.Default.Decode_OnlyMainClasses)
if (Settings.Default.Decode_OnlyMainClasses && !Settings.Default.Decode_NoSrc)
onlyMainClasses = DecompileKeys.OnlyMainClasses;
if (Settings.Default.Decode_NoDebugInfo)
noDebugInfo = DecompileKeys.NoDebugInfo;
if (Settings.Default.Decode_UseFramework)
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Settings.Default.Decode_FrameDir);
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Settings.Default.Framework_FrameDir);
else
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
if (Settings.Default.Decode_SetApiLevel)
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Decode_ApiLevel);
if (Settings.Default.Decode_SetJobs)
apiLevel = String.Format("{0} {1}", DecompileKeys.Jobs, Settings.Default.Decode_Jobs);
keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, outputDir);
string args = String.Format("d{0}{1}{2}{3}{4}{5}{6}{7}{8}{9} \"{10}\"", keyNoSrc, keyNoRes, keyForce, onlyMainClasses, noDebugInfo, keyMatchOriginal, keyFramePath, keyKeepBrokenRes, keyOutputDir, apiLevel, inputPath);
string args = String.Format($"d{keyNoSrc}{keyNoRes}{keyForce}{onlyMainClasses}{noDebugInfo}{keyMatchOriginal}{keyFramePath}{keyKeepBrokenRes}{apiLevel}{keyOutputDir} \"{inputPath}\"");
Log.d("Apktool CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
@@ -137,11 +155,29 @@ namespace APKToolGUI
return ExitCode;
}
public int Build(string outputFile)
public void Cancel()
{
string decApkDir = Settings.Default.Build_InputDir;
try
{
foreach (var process in Process.GetProcessesByName("java"))
{
if (process.Id == Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
process.Kill();
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
public int Build(string inputFolder, string outputFile)
{
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null, netSecConf = null;
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null;
if (Settings.Default.Build_ForceAll)
keyForceAll = BuildKeys.ForceAll;
if (Settings.Default.Build_CopyOriginal)
@@ -151,12 +187,22 @@ namespace APKToolGUI
if (Settings.Default.Build_UseAapt)
keyAapt = String.Format("{0} \"{1}\"", BuildKeys.Aapt, Settings.Default.Build_AaptPath);
if (Settings.Default.Build_UseFramework)
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Settings.Default.Build_FrameDir);
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Settings.Default.Framework_FrameDir);
else
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
if (Settings.Default.Build_SetApiLevel)
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Build_ApiLevel);
apiLevel = String.Format("{0} {1}", BuildKeys.ApiLevel, Settings.Default.Build_ApiLevel);
if (Settings.Default.Build_SetJobs)
apiLevel = String.Format("{0} {1}", BuildKeys.Jobs, Settings.Default.Build_Jobs);
if (Settings.Default.Build_UseAapt2)
useAapt2 = BuildKeys.UseAapt2;
if (Settings.Default.Build_NetSecConf)
netSecConf = BuildKeys.NetSecConf;
keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, outputFile);
string args = String.Format("b{0}{1}{2}{3}{4}{5}{6} \"{7}\"", keyForceAll, keyAapt, keyCopyOriginal, noCrunch, keyFramePath, keyOutputAppPath, apiLevel, decApkDir);
string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{useAapt2}{netSecConf}{keyOutputAppPath} \"{inputFolder}\"");
Log.d("Apktool CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
@@ -170,12 +216,14 @@ namespace APKToolGUI
string inputPath = Settings.Default.InstallFramework_InputFramePath;
string keyFrameDir = null, keyTag = null;
if (Settings.Default.InstallFramework_UseFrameDir)
keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.InstallFramework_FrameDir);
if (Settings.Default.Framework_UseFrameDir)
keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.Framework_FrameDir);
if (Settings.Default.InstallFramework_UseTag)
keyTag = String.Format("{0} \"{1}\"", InstallFrameworkKeys.Tag, Settings.Default.InstallFramework_Tag);
string args = String.Format("if{0}{1} \"{2}\"", keyFrameDir, keyTag, inputPath);
string args = String.Format($"if{keyFrameDir}{keyTag} \"{inputPath}\"");
Log.d("Apktool CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
@@ -186,7 +234,15 @@ namespace APKToolGUI
public int ClearFramework()
{
string args = String.Format("empty-framework-dir --force");
string keyFramePath = null;
if (Settings.Default.Decode_UseFramework)
keyFramePath = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.Framework_FrameDir);
else
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
string args = String.Format($"empty-framework-dir {EmptyFrameworkKeys.ForceDelete} {keyFramePath}");
Log.d("Apktool CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
@@ -196,6 +252,18 @@ namespace APKToolGUI
}
public string GetVersion()
{
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
{
apktoolJar.EnableRaisingEvents = false;
apktoolJar.Start("version");
string version = apktoolJar.StandardOutput.ReadToEnd();
apktoolJar.WaitForExit(3000);
return version.Replace("\r\n", "");
}
}
public string GetVersionOld()
{
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
{
@@ -252,7 +320,7 @@ namespace APKToolGUI
message = mCol[0].Groups[2].Value;
break;
case "I":
eventType = ApktoolEventType.Information;
eventType = ApktoolEventType.None;
message = mCol[0].Groups[2].Value;
break;
case "Error":
@@ -279,7 +347,9 @@ namespace APKToolGUI
public enum ApktoolEventType
{
Information,
None,
Success,
Infomation,
Warning,
Error,
Unknown
+24 -2
View File
@@ -3,6 +3,7 @@ using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
namespace APKToolGUI
{
@@ -10,9 +11,11 @@ namespace APKToolGUI
{
public new event BaksmaliExitedEventHandler Exited;
string _jarPath;
public Baksmali(string javaPath, string jarPath)
: base(javaPath, jarPath)
{
_jarPath = jarPath;
base.Exited += Baksmali_Exited;
OutputDataReceived += Baksmali_OutputDataReceived;
ErrorDataReceived += Baksmali_ErrorDataReceived;
@@ -63,12 +66,31 @@ namespace APKToolGUI
Exited(this, new BaksmaliExitedEventArgs(ExitCode));
}
public int Disassemble(string output)
public void Cancel()
{
string inputFile = String.Format("\"{0}\"", Settings.Default.Baksmali_InputDexFile);
try
{
foreach (var process in Process.GetProcessesByName("java"))
{
if (process.Id == Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
process.Kill();
}
}
}
catch { }
}
public int Disassemble(string input, string output)
{
string inputFile = String.Format("\"{0}\"", input);
string keyOutputDir = String.Format("-o \"{0}\"", output);
string args = String.Format("d {0} {1}", inputFile, keyOutputDir);
Log.v("Baksmali CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
+37 -1
View File
@@ -2,6 +2,8 @@
using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using System.IO.Packaging;
namespace APKToolGUI
{
@@ -39,9 +41,11 @@ namespace APKToolGUI
}
}
string _jarPath;
public Signapk(string javaPath, string jarPath)
: base(javaPath, jarPath)
{
_jarPath = jarPath;
Exited += Signapk_Exited;
OutputDataReceived += Signapk_OutputDataReceived;
ErrorDataReceived += Signapk_ErrorDataReceived;
@@ -65,6 +69,22 @@ namespace APKToolGUI
Exited(this, new SignapkExitedEventArgs(base.ExitCode, lastSourceApk, lastOutApk));
}
public void Cancel()
{
try
{
foreach (var process in Process.GetProcessesByName("java"))
{
if (process.Id == Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
process.Kill();
}
}
}
catch { }
}
public int Sign(string input, string output)
{
lastSourceApk = input;
@@ -80,7 +100,7 @@ namespace APKToolGUI
alias = String.Format("--ks-key-alias {0}", Settings.Default.Sign_Alias);
string outputDir = null;
if (Settings.Default.Sign_UseOutputDir)
if (Settings.Default.Sign_UseOutputDir || !Settings.Default.Sign_OverwriteInputFile)
outputDir = String.Format("--out \"{0}\"", output);
string v1 = null;
@@ -108,6 +128,9 @@ namespace APKToolGUI
v4 = "--v4-signing-enabled false";
string args = String.Format("sign {0} {1} {2} {3} {4} {5} {6} \"{7}\"", key, alias, v1, v2, v3, v4, outputDir, lastSourceApk);
Log.v("Signapk CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
@@ -116,6 +139,19 @@ namespace APKToolGUI
CancelErrorRead();
return ExitCode;
}
public string GetSignature(string apkFile)
{
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
{
apktoolJar.EnableRaisingEvents = false;
apktoolJar.Start($"verify --print-certs \"{apkFile}\"");
string version = apktoolJar.StandardOutput.ReadToEnd();
version += apktoolJar.StandardError.ReadToEnd();
apktoolJar.WaitForExit();
return version;
}
}
}
public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e);
+24 -2
View File
@@ -3,6 +3,7 @@ using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
namespace APKToolGUI
{
@@ -10,9 +11,11 @@ namespace APKToolGUI
{
public new event SmaliExitedEventHandler Exited;
string _jarPath;
public Smali(string javaPath, string jarPath)
: base(javaPath, jarPath)
{
_jarPath = jarPath;
base.Exited += Smali_Exited;
}
@@ -60,12 +63,31 @@ namespace APKToolGUI
Exited(this, new SmaliExitedEventArgs(ExitCode));
}
public int Assemble(string output)
public void Cancel()
{
string inputFile = String.Format("\"{0}\"", Settings.Default.Smali_InputDir);
try
{
foreach (var process in Process.GetProcessesByName("java"))
{
if (process.Id == Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
process.Kill();
}
}
}
catch { }
}
public int Assemble(string input, string output)
{
string inputFile = String.Format("\"{0}\"", input);
string keyOutputDir = String.Format("-o \"{0}\"", output);
string args = String.Format("a {0} {1}", inputFile, keyOutputDir);
Log.v("Smali CMD: " + _jarPath + " " + args);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
+19 -1
View File
@@ -30,8 +30,10 @@ namespace APKToolGUI
public event EventHandler Exited;
public int ExitCode { get { return processZipalign.ExitCode; } }
string _zipalignFileName;
public Zipalign(string zipalignFileName)
{
_zipalignFileName = zipalignFileName;
processZipalign = new Process();
processZipalign.EnableRaisingEvents = true;
processZipalign.StartInfo.FileName = zipalignFileName;
@@ -50,6 +52,22 @@ namespace APKToolGUI
Exited(this, new EventArgs());
}
public void Cancel()
{
try
{
foreach (var process in Process.GetProcessesByName("zipalign"))
{
if (process.Id == processZipalign.Id)
{
ProcessUtils.KillAllProcessesSpawnedBy((uint)processZipalign.Id);
process.Kill();
}
}
}
catch { }
}
public int Align(string input, string output)
{
string keyCheckOnly = null, keyVerbose = null, keyRecompress = null, keyOverwriteOutputFile = null, keyOutputFile = null;
@@ -76,7 +94,7 @@ namespace APKToolGUI
string args = String.Format("{0}{1}{2}{3} {4} \"{5}\" {6}", keyCheckOnly, keyOverwriteOutputFile, keyVerbose, keyRecompress, Settings.Default.Zipalign_AlignmentInBytes, input, keyOutputFile);
Debug.WriteLine("Zipalign: " + args);
Log.v("Zipalign: " + _zipalignFileName + " " + args);
processZipalign.StartInfo.Arguments = args;
processZipalign.Start();
+257
View File
@@ -0,0 +1,257 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls.Primitives;
using System.Windows.Forms;
namespace APKToolGUI.Controls
{
internal class DarkTheme
{
public static Color bgColor = Color.FromArgb(32, 32, 32);
public static Color txtBoxColor = Color.FromArgb(64, 64, 64);
public static Color btnColor = Color.FromArgb(51, 51, 51);
public static Color btnBorderColor = Color.FromArgb(155, 155, 155);
public static Color tabBorderColor = Color.FromArgb(45, 45, 45);
public static Color menuItemHoverColor = Color.FromArgb(51, 51, 51);
public static Color menuItemSelectedColor = Color.FromArgb(41, 41, 41);
public static Color separatorColor = Color.FromArgb(62, 62, 62);
public static void SetTheme(Control.ControlCollection container, Form form)
{
form.BackColor = bgColor;
form.ForeColor = Color.White;
foreach (Control component in container)
{
Debug.WriteLine(component.GetType());
component.BackColor = bgColor;
component.ForeColor = Color.White;
SetThemeTabControl(component, container);
}
}
public static void SetThemeTabControl(Control component, Control.ControlCollection container)
{
if (component is SplitContainer)
{
foreach (Control control in component.Controls)
{
SetThemeTabControl(control, container);
}
}
if (component is TabControl)
{
((TabControl)component).DrawMode = TabDrawMode.OwnerDrawFixed;
foreach (Control tabControl in component.Controls)
{
SetThemeTabControl(tabControl, container);
//Debug.WriteLine("tabPage " + tabControl.GetType());
((TabControl)component).DrawItem += (sender, e) =>
{
// Set Border header
e.Graphics.FillRectangle(new SolidBrush(tabBorderColor), e.Bounds);
Rectangle paddedBounds = e.Bounds;
paddedBounds.Inflate(0, 0);
// Set the rectangle for the tab button
Rectangle tabRect = ((TabControl)component).GetTabRect(e.Index);
// Draw the border color
using (Pen borderPen = new Pen(tabBorderColor, 7))
{
e.Graphics.DrawRectangle(borderPen, tabRect);
}
StringFormat stringFlags = new StringFormat();
stringFlags.Alignment = StringAlignment.Center;
stringFlags.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(((TabControl)component).TabPages[e.Index].Text, FormMain.Instance.Font, SystemBrushes.HighlightText, tabRect, stringFlags);
//set Tabcontrol border
Graphics g = e.Graphics;
Pen p = new Pen(tabBorderColor, 8);
g.DrawRectangle(p, tabControl.Bounds.X, tabControl.Bounds.Y, tabControl.Bounds.Width, tabControl.Bounds.Height);
SolidBrush fillbrush = new SolidBrush(bgColor);
//draw rectangle behind the tabs
Rectangle lasttabrect = ((TabControl)component).GetTabRect(((TabControl)component).TabPages.Count - 1);
Rectangle background = new Rectangle();
background.Location = new Point(lasttabrect.Right, 0);
//pad the rectangle to cover the 1 pixel line between the top of the tabpage and the start of the tabs
background.Size = new Size(((TabControl)component).Right - background.Left, lasttabrect.Height + 1);
e.Graphics.FillRectangle(fillbrush, background);
};
foreach (Control tabPage in tabControl.Controls)
{
SetThemeTabControl(tabPage, container);
}
}
}
else if (component is Panel)
{
foreach (Control control in component.Controls)
{
SetThemeTabControl(control, container);
}
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
if (component is MenuStrip menuStrip)
{
((MenuStrip)component).Renderer = new ToolStripProfessionalRenderer(new MenuItemColorTable());
foreach (ToolStripItem item in menuStrip.Items)
{
if (item is ToolStripMenuItem toolStripMenuItem)
{
foreach (ToolStripMenuItem dditem in toolStripMenuItem.DropDownItems.OfType<ToolStripMenuItem>())
{
dditem.BackColor = bgColor;
dditem.ForeColor = Color.White;
//Debug.WriteLine(dditem.Text);
}
foreach (ToolStripSeparator toolStripSeparator in toolStripMenuItem.DropDownItems.OfType<ToolStripSeparator>())
{
toolStripSeparator.BackColor = Color.Blue;
toolStripSeparator.ForeColor = Color.Blue;
Debug.WriteLine(toolStripSeparator.Name);
}
toolStripMenuItem.BackColor = bgColor;
toolStripMenuItem.ForeColor = Color.White;
}
}
}
else if (component is GroupBox)
{
foreach (Control control in component.Controls)
{
SetThemeTabControl(control, container);
}
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
else if (component is ComboBox)
{
component.BackColor = bgColor;
component.ForeColor = Color.White;
((ComboBox)component).FlatStyle = FlatStyle.Flat;
}
else if (component is Button)
{
component.BackColor = btnColor;
component.ForeColor = Color.White;
((Button)component).FlatStyle = FlatStyle.Flat;
((Button)component).FlatAppearance.BorderColor = btnBorderColor;
}
else if (component is TextBox)
{
component.BackColor = txtBoxColor;
component.ForeColor = Color.White;
((TextBox)component).BorderStyle = BorderStyle.FixedSingle;
}
else if (component is RichTextBox)
{
if (component.Name == "logTxtBox")
((RichTextBox)component).BorderStyle = BorderStyle.None;
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
else
{
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
}
public class MenuItemColorTable : ProfessionalColorTable
{
/// <summary>
/// Gets the starting color of the gradient used when
/// a top-level System.Windows.Forms.ToolStripMenuItem is pressed.
/// </summary>
public override Color MenuItemPressedGradientBegin => menuItemSelectedColor;
/// <summary>
/// Gets the end color of the gradient used when a top-level
/// System.Windows.Forms.ToolStripMenuItem is pressed.
/// </summary>
public override Color MenuItemPressedGradientEnd => menuItemSelectedColor;
/// <summary>
/// Gets the border color to use with a
/// System.Windows.Forms.ToolStripMenuItem.
/// </summary>
public override Color MenuItemBorder => menuItemSelectedColor;
/// <summary>
/// Gets the starting color of the gradient used when the
/// System.Windows.Forms.ToolStripMenuItem is selected.
/// </summary>
public override Color MenuItemSelectedGradientBegin => menuItemSelectedColor;
/// <summary>
/// Gets the end color of the gradient used when the
/// System.Windows.Forms.ToolStripMenuItem is selected.
/// </summary>
public override Color MenuItemSelectedGradientEnd => menuItemSelectedColor;
/// <summary>
/// Gets the border color to use with a
/// System.Windows.Forms.ToolStripMenuItem.
/// </summary>
public override Color MenuItemSelected => menuItemHoverColor;
/// <summary>
/// Gets the solid background color of the
/// System.Windows.Forms.ToolStripDropDown.
/// </summary>
public override Color ToolStripDropDownBackground => bgColor;
/// <summary>
/// Gets the starting color of the gradient used in the image
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
/// </summary>
public override Color ImageMarginGradientBegin => bgColor;
/// <summary>
/// Gets the middle color of the gradient used in the image
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
/// </summary>
public override Color ImageMarginGradientMiddle => bgColor;
/// <summary>
/// Gets the end color of the gradient used in the image
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
/// </summary>
public override Color ImageMarginGradientEnd => bgColor;
/// <summary>
/// Gets the color to use to for shadow effects on
/// the System.Windows.Forms.ToolStripSeparator.
/// </summary>
public override Color SeparatorDark => separatorColor;
/// <summary>
/// Gets the color that is the border color to use
/// on a System.Windows.Forms.MenuStrip.
/// </summary>
public override Color MenuBorder => menuItemHoverColor;
}
}
}
+1 -1
View File
@@ -1,3 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura />
<Costura DisableCompression='true' />
</Weavers>
+39 -4
View File
@@ -29,12 +29,27 @@
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
<xs:documentation>Obsolete, use UnmanagedWinX86Assemblies instead</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinX86Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged X86 (32 bit) assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
<xs:documentation>Obsolete, use UnmanagedWinX64Assemblies instead.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinX64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged X64 (64 bit) assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinArm64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
@@ -73,6 +88,11 @@
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableEventSubscription" type="xs:boolean">
<xs:annotation>
<xs:documentation>The attach method no longer subscribes to the `AppDomain.AssemblyResolve` (.NET 4.x) and `AssemblyLoadContext.Resolving` (.NET 6.0+) events.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
@@ -105,12 +125,27 @@
</xs:attribute>
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
<xs:documentation>Obsolete, use UnmanagedWinX86Assemblies instead</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UnmanagedWinX86Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged X86 (32 bit) assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
<xs:documentation>Obsolete, use UnmanagedWinX64Assemblies instead</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UnmanagedWinX64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged X64 (64 bit) assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UnmanagedWinArm64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PreloadOrder" type="xs:string">
+1
View File
@@ -90,6 +90,7 @@
// linkLabel1
//
resources.ApplyResources(this.linkLabel1, "linkLabel1");
this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue;
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.TabStop = true;
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+6 -1
View File
@@ -1,4 +1,5 @@
using System;
using APKToolGUI.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
@@ -13,6 +14,10 @@ namespace APKToolGUI
public FormAboutBox()
{
InitializeComponent();
if (Program.IsDarkTheme())
DarkTheme.SetTheme(Controls, this);
this.Text = String.Format("{0} {1}", this.Text, AssemblyTitle);
this.labelProductName.Text = AssemblyProduct;
this.labelVersion.Text = String.Format("{0} {1}", labelVersion.Text, AssemblyVersion);
+144
View File
@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Text" xml:space="preserve">
<value>Über</value>
</data>
<data name="labelCopyright.Text" xml:space="preserve">
<value>Copyright</value>
</data>
<data name="labelProductName.Text" xml:space="preserve">
<value>Produktname</value>
</data>
<data name="labelVersion.Text" xml:space="preserve">
<value>Version</value>
</data>
<data name="linkLabel1.Text" xml:space="preserve">
<value>Github Repo</value>
</data>
<data name="okButton.Text" xml:space="preserve">
<value>&amp;ОК</value>
</data>
<data name="textBoxDescription.Text" xml:space="preserve">
<value>Beschreibung</value>
</data>
</root>
+4 -1
View File
@@ -550,7 +550,7 @@
<value>25</value>
</data>
<data name="linkLabel1.Text" xml:space="preserve">
<value>Page</value>
<value>Github Repo</value>
</data>
<data name="linkLabel1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
@@ -606,6 +606,9 @@
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>508, 283</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 8.25pt</value>
</data>
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>9, 9, 9, 9</value>
</data>
+138
View File
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="labelProductName.Text" xml:space="preserve">
<value>Tên phần mềm</value>
</data>
<data name="labelVersion.Text" xml:space="preserve">
<value>Phiên bản</value>
</data>
<data name="labelCopyright.Text" xml:space="preserve">
<value>Bản quyền</value>
</data>
<data name="textBoxDescription.Text" xml:space="preserve">
<value>Mô tả</value>
</data>
<data name="linkLabel1.Text" xml:space="preserve">
<value>Kho Github</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Giới thiệu</value>
</data>
</root>
+138
View File
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="labelProductName.Text" xml:space="preserve">
<value>软件名</value>
</data>
<data name="labelVersion.Text" xml:space="preserve">
<value>版本</value>
</data>
<data name="labelCopyright.Text" xml:space="preserve">
<value>版权</value>
</data>
<data name="textBoxDescription.Text" xml:space="preserve">
<value>描述</value>
</data>
<data name="linkLabel1.Text" xml:space="preserve">
<value>Github 仓库</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>关于</value>
</data>
</root>
+863 -418
View File
File diff suppressed because it is too large Load Diff
+1104 -492
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+549
View File
@@ -0,0 +1,549 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="splitApkTxt.Text" xml:space="preserve">
<value>Hợp nhất các tệp APK bị chia nhỏ thành một tệp APK duy nhất:</value>
</data>
<data name="mergeApkBtn.Text" xml:space="preserve">
<value>Hợp nhất</value>
</data>
<data name="comApkOpenDir.Text" xml:space="preserve">
<value>Thư mục APK đã biên dịch</value>
</data>
<data name="decOutOpenDirBtn.Text" xml:space="preserve">
<value>Thư mục đầu ra dịch ngược</value>
</data>
<data name="signApkOpenDirBtn.Text" xml:space="preserve">
<value>Thư mục APK đã ký</value>
</data>
<data name="alignApkOpenDirBtn.Text" xml:space="preserve">
<value>Thư mục APK đã Zipalign</value>
</data>
<data name="decApkOpenDirBtn.Text" xml:space="preserve">
<value>Thư mục APK đã dịch ngược</value>
</data>
<data name="compileOutputOpenDirBtn.Text" xml:space="preserve">
<value>Thư mục đầu ra biên dịch</value>
</data>
<data name="button_OpenMainActivity.Text" xml:space="preserve">
<value>Smali của Activity khởi động</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>Ký APK:</value>
</data>
<data name="button_SIGN_Sign.Text" xml:space="preserve">
<value>Ký</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Zipalign tệp APK:</value>
</data>
<data name="button_ZIPALIGN_Align.Text" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Thư mục APK đã dịch ngược:</value>
</data>
<data name="button_BUILD_Build.Text" xml:space="preserve">
<value>Biên dịch</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Tệp APK/XAPK/APKS/ZIP/APKM:</value>
</data>
<data name="button_DECODE_Decode.Text" xml:space="preserve">
<value>Dịch ngược</value>
</data>
<data name="tabPageMain.Text" xml:space="preserve">
<value>Trang chính</value>
</data>
<data name="label31.Text" xml:space="preserve">
<value>Activity khởi động:</value>
</data>
<data name="label30.Text" xml:space="preserve">
<value>Kiến trúc:</value>
</data>
<data name="label17.Text" xml:space="preserve">
<value>Tệp:</value>
</data>
<data name="label18.Text" xml:space="preserve">
<value>Bản địa hóa:</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>Quyền:</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>Mật độ (DPI):</value>
</data>
<data name="label19.Text" xml:space="preserve">
<value>Liên kết cửa hàng:</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>Tên ứng dụng:</value>
</data>
<data name="label9.Text" xml:space="preserve">
<value>Tên gói ứng dụng:</value>
</data>
<data name="label8.Text" xml:space="preserve">
<value>Phiên bản:</value>
</data>
<data name="label11.Text" xml:space="preserve">
<value>SDK tương thích tối thiểu:</value>
</data>
<data name="label10.Text" xml:space="preserve">
<value>Tên mã:</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>Kích thước màn hình</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>SDK mục tiêu:</value>
</data>
<data name="basicInfoTabPage.Text" xml:space="preserve">
<value>Thông tin cơ bản</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value>Thông tin đầy đủ</value>
</data>
<data name="tabPageApkInfo.Text" xml:space="preserve">
<value>Thông tin APK</value>
</data>
<data name="checkBox7.Text" xml:space="preserve">
<value>Không phân tích thông tin APK khi chọn APK để dịch ngược</value>
</data>
<data name="decSetApiLvlChkBox.Text" xml:space="preserve">
<value>Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS.</value>
</data>
<data name="checkBox_DECODE_FixError.Text" xml:space="preserve">
<value>Sửa lỗi ApkTool sau khi dịch ngược</value>
</data>
<data name="checkBox_DECODE_FixError.ToolTip" xml:space="preserve">
<value>Sẽ xóa extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY, các thuộc tính liên quan đến split và đặt sparseresource thành false</value>
</data>
<data name="checkBox_DECODE_OnlyMainClasses.Text" xml:space="preserve">
<value>Chỉ dịch ngược các tệp dex chính trong thư mục gốc (classes[0-9]*.dex).</value>
</data>
<data name="checkBox_DECODE_OnlyMainClasses.ToolTip" xml:space="preserve">
<value>Sửa lỗi ApkTool bất thường</value>
</data>
<data name="checkBox_DECODE_UseFramework.Text" xml:space="preserve">
<value>Sử dụng vị trí tệp framework:</value>
</data>
<data name="checkBox_DECODE_MatchOriginal.Text" xml:space="preserve">
<value>Giữ các tệp gần với bản gốc nhất có thể, ngăn việc xây dựng lại</value>
</data>
<data name="checkBox_DECODE_OutputDirectory.Text" xml:space="preserve">
<value>Thư mục đầu ra:</value>
</data>
<data name="checkBox_DECODE_KeepBrokenRes.Text" xml:space="preserve">
<value>Giữ lại tài nguyên bị hỏng</value>
</data>
<data name="checkBox_DECODE_NoSrc.Text" xml:space="preserve">
<value>Không dịch ngược mã nguồn</value>
</data>
<data name="checkBox_DECODE_Force.Text" xml:space="preserve">
<value>Buộc xóa thư mục đích</value>
</data>
<data name="checkBox_DECODE_NoRes.Text" xml:space="preserve">
<value>Không dịch ngược tài nguyên (resources)</value>
</data>
<data name="checkBox_DECODE_NoDebugInfo.Text" xml:space="preserve">
<value>Không xuất thông tin gỡ lỗi (.local, .param, .line, v.v.)</value>
</data>
<data name="groupBox_DECODE_Options.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="tabPageDecode.Text" xml:space="preserve">
<value>Dịch ngược</value>
</data>
<data name="checkBox_BUILD_NetSecConf.Text" xml:space="preserve">
<value>Thêm cấu hình bảo mật mạng chung vào APK đầu ra</value>
</data>
<data name="useAapt2ChkBox.Text" xml:space="preserve">
<value>Sử dụng aapt2 (Nâng cấp apktool để sử dụng tệp nhị phân aapt2 thử nghiệm)</value>
</data>
<data name="buildSetApiLvlChkBox.Text" xml:space="preserve">
<value>Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS.</value>
</data>
<data name="createUnsignApkChkBox.Text" xml:space="preserve">
<value>Tạo APK chưa ký với chữ ký gốc sau khi biên dịch</value>
</data>
<data name="createUnsignApkChkBox.ToolTip" xml:space="preserve">
<value>Chỉ tương thích với các mô-đun vá lõi, yêu cầu thiết bị đã root.</value>
</data>
<data name="signAfterBuildChkBox.Text" xml:space="preserve">
<value>Ký sau khi Biên dịch/Zipalign</value>
</data>
<data name="zipalignAfterBuildChkBox.Text" xml:space="preserve">
<value>Zipalign sau khi biên dịch</value>
</data>
<data name="checkBox_BUILD_NoCrunch.Text" xml:space="preserve">
<value>Vô hiệu hóa việc xử lý các tệp tài nguyên trong bước biên dịch</value>
</data>
<data name="checkBox_BUILD_ForceAll.Text" xml:space="preserve">
<value>Bỏ qua kiểm tra thay đổi và biên dịch tất cả các tệp</value>
</data>
<data name="checkBox_BUILD_OutputAppPath.Text" xml:space="preserve">
<value>Thư mục đầu ra APK</value>
</data>
<data name="checkBox_BUILD_OutputAppPath.ToolTip" xml:space="preserve">
<value>Thư mục đầu ra đã biên dịch cũng sẽ được sử dụng cho Zipalign và ký</value>
</data>
<data name="checkBox_BUILD_CopyOriginal.Text" xml:space="preserve">
<value>Sao chép thư mục AndroidManifest.xml và META-INF gốc</value>
</data>
<data name="checkBox_BUILD_UseAapt.Text" xml:space="preserve">
<value>Sử dụng vị trí tệp aapt.exe:</value>
</data>
<data name="checkBox_BUILD_UseFramework.Text" xml:space="preserve">
<value>Sử dụng vị trí tệp framework:</value>
</data>
<data name="groupBox_BUILD_Options.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="tabPageBuild.Text" xml:space="preserve">
<value>Biên dịch</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>Cài đặt APK sau khi ký (đảm bảo đã chọn thiết bị trong tùy chọn ADB trước)</value>
</data>
<data name="checkBox1.Text" xml:space="preserve">
<value>Ghi đè tệp đầu vào</value>
</data>
<data name="autoDelIdsigChkBox.Text" xml:space="preserve">
<value>Tự động xóa tệp idsig</value>
</data>
<data name="schemev4ComboBox.Items" xml:space="preserve">
<value>Mặc định</value>
</data>
<data name="schemev4ComboBox.Items1" xml:space="preserve">
<value>Bật</value>
</data>
<data name="schemev4ComboBox.Items2" xml:space="preserve">
<value>Tắt</value>
</data>
<data name="label27.Text" xml:space="preserve">
<value>Lược đồ ký v4:</value>
</data>
<data name="schemev3ComboBox.Items" xml:space="preserve">
<value>Mặc định</value>
</data>
<data name="schemev3ComboBox.Items1" xml:space="preserve">
<value>Bật</value>
</data>
<data name="schemev3ComboBox.Items2" xml:space="preserve">
<value>Tắt</value>
</data>
<data name="label26.Text" xml:space="preserve">
<value>Lược đồ ký v3:</value>
</data>
<data name="schemev2ComboBox.Items" xml:space="preserve">
<value>Mặc định</value>
</data>
<data name="schemev2ComboBox.Items1" xml:space="preserve">
<value>Bật</value>
</data>
<data name="schemev2ComboBox.Items2" xml:space="preserve">
<value>Tắt</value>
</data>
<data name="label25.Text" xml:space="preserve">
<value>Lược đồ ký v2:</value>
</data>
<data name="schemev1ComboBox.Items" xml:space="preserve">
<value>Mặc định</value>
</data>
<data name="schemev1ComboBox.Items1" xml:space="preserve">
<value>Bật</value>
</data>
<data name="schemev1ComboBox.Items2" xml:space="preserve">
<value>Tắt</value>
</data>
<data name="label24.Text" xml:space="preserve">
<value>Lược đồ ký v1:</value>
</data>
<data name="useAliasChkBox.Text" xml:space="preserve">
<value>Tên bí danh (Alias)</value>
</data>
<data name="label22.Text" xml:space="preserve">
<value>Rất khuyến khích bạn sử dụng khóa của riêng mình, được tạo bằng Android Studio hoặc các công cụ khác</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>Mật khẩu:</value>
</data>
<data name="label20.Text" xml:space="preserve">
<value>Tệp keystore/jks:</value>
</data>
<data name="useKeyStoreChkBox.Text" xml:space="preserve">
<value>Sử dụng keystore</value>
</data>
<data name="useSigningOutputDir.Text" xml:space="preserve">
<value>Thư mục đầu ra APK:</value>
</data>
<data name="label_SIGN_PrivateKey.Text" xml:space="preserve">
<value>Khóa riêng:</value>
</data>
<data name="label_SIGN_PublicKey.Text" xml:space="preserve">
<value>Khóa công khai:</value>
</data>
<data name="groupBox_SIGN_Options.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="tabPageSign.Text" xml:space="preserve">
<value>Ký</value>
</data>
<data name="zipalignOutputDirChkBox.Text" xml:space="preserve">
<value>Thư mục đầu ra APK:</value>
</data>
<data name="signAfterZipalignChkBox.Text" xml:space="preserve">
<value>Ký sau khi zipalign</value>
</data>
<data name="checkBox_ZIPALIGN_Recompress.Text" xml:space="preserve">
<value>Nén lại bằng Zopfli</value>
</data>
<data name="label_ZIPALIGN_AlignmentBytes.Text" xml:space="preserve">
<value>Căn chỉnh theo byte, ví dụ: '4' cung cấp căn chỉnh 32-bit</value>
</data>
<data name="checkBox_ZIPALIGN_CheckAlignment.Text" xml:space="preserve">
<value>Chỉ kiểm tra căn chỉnh (không sửa đổi tệp)</value>
</data>
<data name="checkBox_ZIPALIGN_VerboseOutput.Text" xml:space="preserve">
<value>Đầu ra chi tiết</value>
</data>
<data name="checkBox_ZIPALIGN_OverwriteOutputFile.Text" xml:space="preserve">
<value>Ghi đè tệp đầu ra hiện có</value>
</data>
<data name="groupBox_ZIPALIGN_Options.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="tabPageZipAlign.Text" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="openFwFolderBtn.Text" xml:space="preserve">
<value>Mở thư mục framework</value>
</data>
<data name="clearFwBtn.Text" xml:space="preserve">
<value>Xóa bộ nhớ đệm framework</value>
</data>
<data name="clearFwBeforeDecodeChkBox.Text" xml:space="preserve">
<value>Xóa bộ nhớ đệm Framework trước khi dịch ngược</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="checkBox_IF_Tag.Text" xml:space="preserve">
<value>Gắn thẻ frameworks bằng:</value>
</data>
<data name="checkBox_IF_FramePath.Text" xml:space="preserve">
<value>Lưu trữ tệp framework vào:</value>
</data>
<data name="button_IF_InstallFramework.Text" xml:space="preserve">
<value>Cài đặt</value>
</data>
<data name="groupBox_IF_Options.Text" xml:space="preserve">
<value>Tùy chọn</value>
</data>
<data name="label29.Text" xml:space="preserve">
<value>Thư mục biên dịch Smali:</value>
</data>
<data name="smaliUseOutputChkBox.Text" xml:space="preserve">
<value>Thư mục đầu ra Dex:</value>
</data>
<data name="comSmaliBtn.Text" xml:space="preserve">
<value>Biên dịch</value>
</data>
<data name="label28.Text" xml:space="preserve">
<value>Dịch ngược Dex:</value>
</data>
<data name="baksmaliUseOutputChkBox.Text" xml:space="preserve">
<value>Thư mục đầu ra:</value>
</data>
<data name="decSmaliBtn.Text" xml:space="preserve">
<value>Dịch ngược</value>
</data>
<data name="label33.Text" xml:space="preserve">
<value>Chọn thiết bị</value>
</data>
<data name="killAdbBtn.Text" xml:space="preserve">
<value>Dừng tiến trình ADB</value>
</data>
<data name="installApkBtn.Text" xml:space="preserve">
<value>Cài đặt APK</value>
</data>
<data name="refreshDevicesBtn.Text" xml:space="preserve">
<value>Làm mới</value>
</data>
<data name="overrideAbiCheckBox.Text" xml:space="preserve">
<value>Ghi đè ABI mặc định của nền tảng:</value>
</data>
<data name="setVendorChkBox.Text" xml:space="preserve">
<value>Đặt nhà cung cấp là Play Store (com.android.vending)</value>
</data>
<data name="label32.Text" xml:space="preserve">
<value>Chọn APK: </value>
</data>
<data name="toolStripStatusLabelStateText.Text" xml:space="preserve">
<value>Đang tải...</value>
</data>
<data name="clearLogToolStripMenuItem.Text" xml:space="preserve">
<value>Xóa nhật ký</value>
</data>
<data name="newInsToolStripMenuItem.Text" xml:space="preserve">
<value>Tiến trình mới</value>
</data>
<data name="saveLogToFileToolStripMenuItem.Text" xml:space="preserve">
<value>Lưu nhật ký</value>
</data>
<data name="openTempFolderToolStripMenuItem.Text" xml:space="preserve">
<value>Mở thư mục tạm</value>
</data>
<data name="clearTempFolderToolStripMenuItem.Text" xml:space="preserve">
<value>Xóa thư mục tạm</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Thoát</value>
</data>
<data name="fileToolStripMenuItem.Text" xml:space="preserve">
<value>Tệp</value>
</data>
<data name="useAPKEditorForDecompilingItem.Text" xml:space="preserve">
<value>Sử dụng APKEditor để dịch ngược</value>
</data>
<data name="settingsToolStripMenuItem.Text" xml:space="preserve">
<value>Cài đặt</value>
</data>
<data name="checkForUpdateToolStripMenuItem.Text" xml:space="preserve">
<value>Kiểm tra cập nhật</value>
</data>
<data name="reportAnIsuueToolStripMenuItem.Text" xml:space="preserve">
<value>Báo cáo sự cố</value>
</data>
<data name="apktoolIssuesToolStripMenuItem.Text" xml:space="preserve">
<value>Sự cố Apktool</value>
</data>
<data name="baksmaliIssuesToolStripMenuItem.Text" xml:space="preserve">
<value>Sự cố Baksmali</value>
</data>
<data name="aboutToolStripMenuItem.Text" xml:space="preserve">
<value>Giới thiệu</value>
</data>
<data name="helpToolStripMenuItem.Text" xml:space="preserve">
<value>Trợ giúp</value>
</data>
<data name="checkBox_DECODE_UseApkEditorMerge.Text" xml:space="preserve">
<value>Sử dụng APKEditor.jar để hợp nhất/tách APK (nhanh hơn)</value>
</data>
</root>
+549
View File
@@ -0,0 +1,549 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="splitApkTxt.Text" xml:space="preserve">
<value>将拆分的 APK 合并为单个 APK:</value>
</data>
<data name="mergeApkBtn.Text" xml:space="preserve">
<value>合并</value>
</data>
<data name="comApkOpenDir.Text" xml:space="preserve">
<value>编译的 APK 目录</value>
</data>
<data name="decOutOpenDirBtn.Text" xml:space="preserve">
<value>反编译输出目录</value>
</data>
<data name="signApkOpenDirBtn.Text" xml:space="preserve">
<value>签名的 APK 目录</value>
</data>
<data name="alignApkOpenDirBtn.Text" xml:space="preserve">
<value>Zip 对齐的 APK 目录</value>
</data>
<data name="decApkOpenDirBtn.Text" xml:space="preserve">
<value>反编译的 APK 目录</value>
</data>
<data name="compileOutputOpenDirBtn.Text" xml:space="preserve">
<value>编译输出目录</value>
</data>
<data name="button_OpenMainActivity.Text" xml:space="preserve">
<value>启动项 smail</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>APK 签名:</value>
</data>
<data name="button_SIGN_Sign.Text" xml:space="preserve">
<value>签名</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>APK 文件对齐优化:</value>
</data>
<data name="button_ZIPALIGN_Align.Text" xml:space="preserve">
<value>对齐优化</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>反编译 APK 目录:</value>
</data>
<data name="button_BUILD_Build.Text" xml:space="preserve">
<value>编译</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>APK/XAPK/APKS/ZIP/APKM 文件:</value>
</data>
<data name="button_DECODE_Decode.Text" xml:space="preserve">
<value>反编译</value>
</data>
<data name="tabPageMain.Text" xml:space="preserve">
<value>首页</value>
</data>
<data name="label31.Text" xml:space="preserve">
<value>启动 activity:</value>
</data>
<data name="label30.Text" xml:space="preserve">
<value>架构:</value>
</data>
<data name="label17.Text" xml:space="preserve">
<value>文件:</value>
</data>
<data name="label18.Text" xml:space="preserve">
<value>本地化:</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>权限:</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>密度:</value>
</data>
<data name="label19.Text" xml:space="preserve">
<value>商店链接:</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>应用名:</value>
</data>
<data name="label9.Text" xml:space="preserve">
<value>应用包名:</value>
</data>
<data name="label8.Text" xml:space="preserve">
<value>版本:</value>
</data>
<data name="label11.Text" xml:space="preserve">
<value>最小兼容 SDK:</value>
</data>
<data name="label10.Text" xml:space="preserve">
<value>代号:</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>屏幕尺寸</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>目标 SDK:</value>
</data>
<data name="basicInfoTabPage.Text" xml:space="preserve">
<value>基本信息</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value>完整信息</value>
</data>
<data name="tabPageApkInfo.Text" xml:space="preserve">
<value>APK 信息</value>
</data>
<data name="checkBox7.Text" xml:space="preserve">
<value>在选择 APK 进行反编译时,不要解析 APK 信息</value>
</data>
<data name="decSetApiLvlChkBox.Text" xml:space="preserve">
<value>设置要生成的文件的 API 级别,例如 ICS 的 14。</value>
</data>
<data name="checkBox_DECODE_FixError.Text" xml:space="preserve">
<value>修复反编译后的 ApkTool 错误</value>
</data>
<data name="checkBox_DECODE_FixError.ToolTip" xml:space="preserve">
<value>将删除 extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY,拆分相关属性并将 sparseresource 设置为 false</value>
</data>
<data name="checkBox_DECODE_OnlyMainClasses.Text" xml:space="preserve">
<value>只反汇编根目录中的主索引类(classes[0-9]*.dex)。</value>
</data>
<data name="checkBox_DECODE_OnlyMainClasses.ToolTip" xml:space="preserve">
<value>修复异常的 ApkTool 错误</value>
</data>
<data name="checkBox_DECODE_UseFramework.Text" xml:space="preserve">
<value>使用的 framework 文件位置:</value>
</data>
<data name="checkBox_DECODE_MatchOriginal.Text" xml:space="preserve">
<value>尽可能保持文件最接近原始,防止重建</value>
</data>
<data name="checkBox_DECODE_OutputDirectory.Text" xml:space="preserve">
<value>输出目录:</value>
</data>
<data name="checkBox_DECODE_KeepBrokenRes.Text" xml:space="preserve">
<value>保留损坏资源</value>
</data>
<data name="checkBox_DECODE_NoSrc.Text" xml:space="preserve">
<value>不反编译源码</value>
</data>
<data name="checkBox_DECODE_Force.Text" xml:space="preserve">
<value>强制删除目标目录</value>
</data>
<data name="checkBox_DECODE_NoRes.Text" xml:space="preserve">
<value>不反编译 resouces</value>
</data>
<data name="checkBox_DECODE_NoDebugInfo.Text" xml:space="preserve">
<value>不要输出调试信息(.Local, .param, .line等)</value>
</data>
<data name="groupBox_DECODE_Options.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="tabPageDecode.Text" xml:space="preserve">
<value>反编译</value>
</data>
<data name="checkBox_BUILD_NetSecConf.Text" xml:space="preserve">
<value>在输出 APK 中添加通用的网络安全配置文件</value>
</data>
<data name="useAapt2ChkBox.Text" xml:space="preserve">
<value>使用 aapt2(升级 apktool 使用实验性 aapt2 二进制)</value>
</data>
<data name="buildSetApiLvlChkBox.Text" xml:space="preserve">
<value>设置要生成的文件的 API 级别,例如 ICS 的 14。</value>
</data>
<data name="createUnsignApkChkBox.Text" xml:space="preserve">
<value>构建后创建具有原始签名的未签名 APK</value>
</data>
<data name="createUnsignApkChkBox.ToolTip" xml:space="preserve">
<value>只兼容核心补丁模块,需要 root 设备。</value>
</data>
<data name="signAfterBuildChkBox.Text" xml:space="preserve">
<value>在 构建/zip对齐 后进行签名</value>
</data>
<data name="zipalignAfterBuildChkBox.Text" xml:space="preserve">
<value>在构建后进行 zip对齐</value>
</data>
<data name="checkBox_BUILD_NoCrunch.Text" xml:space="preserve">
<value>在构建步骤中禁用对 resource 文件的处理</value>
</data>
<data name="checkBox_BUILD_ForceAll.Text" xml:space="preserve">
<value>跳过变更检测并构建所有文件</value>
</data>
<data name="checkBox_BUILD_OutputAppPath.Text" xml:space="preserve">
<value>APK 输出目录</value>
</data>
<data name="checkBox_BUILD_OutputAppPath.ToolTip" xml:space="preserve">
<value>编译后的输出目录也将用于 Zipalign 和签名</value>
</data>
<data name="checkBox_BUILD_CopyOriginal.Text" xml:space="preserve">
<value>复制原来的 AndroidManifest.xml 和 META-INF 文件夹</value>
</data>
<data name="checkBox_BUILD_UseAapt.Text" xml:space="preserve">
<value>使用的 aapt.exe 文件位置:</value>
</data>
<data name="checkBox_BUILD_UseFramework.Text" xml:space="preserve">
<value>使用的 framework 文件位置:</value>
</data>
<data name="groupBox_BUILD_Options.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="tabPageBuild.Text" xml:space="preserve">
<value>构建</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>签名后安装 APK(确保首先在 ADB 选项中选择设备)</value>
</data>
<data name="checkBox1.Text" xml:space="preserve">
<value>覆盖输入文件</value>
</data>
<data name="autoDelIdsigChkBox.Text" xml:space="preserve">
<value>自动删除 idsig 文件</value>
</data>
<data name="schemev4ComboBox.Items" xml:space="preserve">
<value>默认</value>
</data>
<data name="schemev4ComboBox.Items1" xml:space="preserve">
<value>开启</value>
</data>
<data name="schemev4ComboBox.Items2" xml:space="preserve">
<value>关闭</value>
</data>
<data name="label27.Text" xml:space="preserve">
<value>签名方案 v4:</value>
</data>
<data name="schemev3ComboBox.Items" xml:space="preserve">
<value>默认</value>
</data>
<data name="schemev3ComboBox.Items1" xml:space="preserve">
<value>开启</value>
</data>
<data name="schemev3ComboBox.Items2" xml:space="preserve">
<value>关闭</value>
</data>
<data name="label26.Text" xml:space="preserve">
<value>签名方案 v3:</value>
</data>
<data name="schemev2ComboBox.Items" xml:space="preserve">
<value>默认</value>
</data>
<data name="schemev2ComboBox.Items1" xml:space="preserve">
<value>启用</value>
</data>
<data name="schemev2ComboBox.Items2" xml:space="preserve">
<value>关闭</value>
</data>
<data name="label25.Text" xml:space="preserve">
<value>签名方案 v2:</value>
</data>
<data name="schemev1ComboBox.Items" xml:space="preserve">
<value>默认</value>
</data>
<data name="schemev1ComboBox.Items1" xml:space="preserve">
<value>开启</value>
</data>
<data name="schemev1ComboBox.Items2" xml:space="preserve">
<value>关闭</value>
</data>
<data name="label24.Text" xml:space="preserve">
<value>签名方案 v1:</value>
</data>
<data name="useAliasChkBox.Text" xml:space="preserve">
<value>别名</value>
</data>
<data name="label22.Text" xml:space="preserve">
<value>强烈建议您使用自己的密钥,通过 Android Studio 或其他工具创建</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>密码:</value>
</data>
<data name="label20.Text" xml:space="preserve">
<value>keystore/jks 文件:</value>
</data>
<data name="useKeyStoreChkBox.Text" xml:space="preserve">
<value>使用 keystore</value>
</data>
<data name="useSigningOutputDir.Text" xml:space="preserve">
<value>APK 输出目录:</value>
</data>
<data name="label_SIGN_PrivateKey.Text" xml:space="preserve">
<value>私钥:</value>
</data>
<data name="label_SIGN_PublicKey.Text" xml:space="preserve">
<value>公钥:</value>
</data>
<data name="groupBox_SIGN_Options.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="tabPageSign.Text" xml:space="preserve">
<value>签名</value>
</data>
<data name="zipalignOutputDirChkBox.Text" xml:space="preserve">
<value>APK 输出目录:</value>
</data>
<data name="signAfterZipalignChkBox.Text" xml:space="preserve">
<value>zip对齐后进行签名</value>
</data>
<data name="checkBox_ZIPALIGN_Recompress.Text" xml:space="preserve">
<value>使用 Zopfli 重新压缩</value>
</data>
<data name="label_ZIPALIGN_AlignmentBytes.Text" xml:space="preserve">
<value>以 bytes 为单位的对齐,例如: '4' 提供 32-bit 对齐</value>
</data>
<data name="checkBox_ZIPALIGN_CheckAlignment.Text" xml:space="preserve">
<value>只检查对齐(不修改文件)</value>
</data>
<data name="checkBox_ZIPALIGN_VerboseOutput.Text" xml:space="preserve">
<value>详细输出</value>
</data>
<data name="checkBox_ZIPALIGN_OverwriteOutputFile.Text" xml:space="preserve">
<value>覆盖现有的输出文件</value>
</data>
<data name="groupBox_ZIPALIGN_Options.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="tabPageZipAlign.Text" xml:space="preserve">
<value>Zip对齐</value>
</data>
<data name="openFwFolderBtn.Text" xml:space="preserve">
<value>打开 framework 目录</value>
</data>
<data name="clearFwBtn.Text" xml:space="preserve">
<value>清空 framework 缓存</value>
</data>
<data name="clearFwBeforeDecodeChkBox.Text" xml:space="preserve">
<value>反编译前清空 Framework 缓存</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="checkBox_IF_Tag.Text" xml:space="preserve">
<value>标签 frameworks 使用:</value>
</data>
<data name="checkBox_IF_FramePath.Text" xml:space="preserve">
<value>将 framework 文件存储到:</value>
</data>
<data name="button_IF_InstallFramework.Text" xml:space="preserve">
<value>安装</value>
</data>
<data name="groupBox_IF_Options.Text" xml:space="preserve">
<value>选项</value>
</data>
<data name="label29.Text" xml:space="preserve">
<value>Smali 编译目录:</value>
</data>
<data name="smaliUseOutputChkBox.Text" xml:space="preserve">
<value>Dex 输出目录:</value>
</data>
<data name="comSmaliBtn.Text" xml:space="preserve">
<value>编译</value>
</data>
<data name="label28.Text" xml:space="preserve">
<value>Dex 反编译:</value>
</data>
<data name="baksmaliUseOutputChkBox.Text" xml:space="preserve">
<value>输出目录:</value>
</data>
<data name="decSmaliBtn.Text" xml:space="preserve">
<value>反编译</value>
</data>
<data name="label33.Text" xml:space="preserve">
<value>选择设备</value>
</data>
<data name="killAdbBtn.Text" xml:space="preserve">
<value>结束 ADB 进程</value>
</data>
<data name="installApkBtn.Text" xml:space="preserve">
<value>安装 APK</value>
</data>
<data name="refreshDevicesBtn.Text" xml:space="preserve">
<value>刷新</value>
</data>
<data name="overrideAbiCheckBox.Text" xml:space="preserve">
<value>覆盖平台的默认 ABI:</value>
</data>
<data name="setVendorChkBox.Text" xml:space="preserve">
<value>设置 vendor 为 Play Store (com.android.vending)</value>
</data>
<data name="label32.Text" xml:space="preserve">
<value>选择 APK: </value>
</data>
<data name="toolStripStatusLabelStateText.Text" xml:space="preserve">
<value>加载中...</value>
</data>
<data name="clearLogToolStripMenuItem.Text" xml:space="preserve">
<value>清除日志</value>
</data>
<data name="newInsToolStripMenuItem.Text" xml:space="preserve">
<value>新进程</value>
</data>
<data name="saveLogToFileToolStripMenuItem.Text" xml:space="preserve">
<value>保存日志</value>
</data>
<data name="openTempFolderToolStripMenuItem.Text" xml:space="preserve">
<value>打开缓存目录</value>
</data>
<data name="clearTempFolderToolStripMenuItem.Text" xml:space="preserve">
<value>清空缓存目录</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>退出</value>
</data>
<data name="fileToolStripMenuItem.Text" xml:space="preserve">
<value>文件</value>
</data>
<data name="useAPKEditorForDecompilingItem.Text" xml:space="preserve">
<value>使用 APKEditor 进行反编译</value>
</data>
<data name="settingsToolStripMenuItem.Text" xml:space="preserve">
<value>设置</value>
</data>
<data name="checkForUpdateToolStripMenuItem.Text" xml:space="preserve">
<value>检查更新</value>
</data>
<data name="reportAnIsuueToolStripMenuItem.Text" xml:space="preserve">
<value>反馈问题</value>
</data>
<data name="apktoolIssuesToolStripMenuItem.Text" xml:space="preserve">
<value>Apktool 问题反馈</value>
</data>
<data name="baksmaliIssuesToolStripMenuItem.Text" xml:space="preserve">
<value>Baksmail 问题反馈</value>
</data>
<data name="aboutToolStripMenuItem.Text" xml:space="preserve">
<value>关于</value>
</data>
<data name="helpToolStripMenuItem.Text" xml:space="preserve">
<value>帮助</value>
</data>
<data name="checkBox_DECODE_UseApkEditorMerge.Text" xml:space="preserve">
<value>使用 APKEditor.jar 合并、分离 APK(速度更快)</value>
</data>
</root>
+170 -29
View File
@@ -32,8 +32,11 @@
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBoxJava = new System.Windows.Forms.GroupBox();
this.labelCustomJavaLocation = new System.Windows.Forms.Label();
this.themeComboBox = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.customApktoolBtn = new System.Windows.Forms.Button();
this.label6 = new System.Windows.Forms.Label();
this.buttonCustomTempLocation = new System.Windows.Forms.Button();
this.buttonCustomJavaLocation = new System.Windows.Forms.Button();
this.groupBoxLanguage = new System.Windows.Forms.GroupBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
@@ -43,14 +46,23 @@
this.buttonRemoveContextMenu = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonОК = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.checkBox7 = new System.Windows.Forms.CheckBox();
this.checkBox6 = new System.Windows.Forms.CheckBox();
this.customApkToolTxtBox = new System.Windows.Forms.TextBox();
this.useCustomApktoolChk = new System.Windows.Forms.CheckBox();
this.checkBox5 = new System.Windows.Forms.CheckBox();
this.checkBox4 = new System.Windows.Forms.CheckBox();
this.customTempLocationTxtBox = new System.Windows.Forms.TextBox();
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
this.checkBox3 = new System.Windows.Forms.CheckBox();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBoxJava.SuspendLayout();
this.groupBoxLanguage.SuspendLayout();
this.groupBoxContextMenu.SuspendLayout();
this.SuspendLayout();
@@ -64,35 +76,72 @@
//
// tabPage1
//
resources.ApplyResources(this.tabPage1, "tabPage1");
this.tabPage1.Controls.Add(this.groupBox1);
this.tabPage1.Controls.Add(this.groupBoxJava);
this.tabPage1.Controls.Add(this.groupBoxLanguage);
this.tabPage1.Controls.Add(this.groupBoxContextMenu);
resources.ApplyResources(this.tabPage1, "tabPage1");
this.tabPage1.Name = "tabPage1";
this.tabPage1.UseVisualStyleBackColor = true;
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.textBox1);
this.groupBox1.Controls.Add(this.checkBox7);
this.groupBox1.Controls.Add(this.checkBox6);
this.groupBox1.Controls.Add(this.themeComboBox);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.customApkToolTxtBox);
this.groupBox1.Controls.Add(this.customApktoolBtn);
this.groupBox1.Controls.Add(this.useCustomApktoolChk);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.checkBox5);
this.groupBox1.Controls.Add(this.checkBox4);
this.groupBox1.Controls.Add(this.customTempLocationTxtBox);
this.groupBox1.Controls.Add(this.textBoxCustomJavaLocation);
this.groupBox1.Controls.Add(this.buttonCustomTempLocation);
this.groupBox1.Controls.Add(this.checkBox3);
this.groupBox1.Controls.Add(this.buttonCustomJavaLocation);
this.groupBox1.Controls.Add(this.checkBox2);
this.groupBox1.Controls.Add(this.checkBox1);
this.groupBox1.Controls.Add(this.checkBoxCheckUpdateStartup);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// groupBoxJava
// themeComboBox
//
resources.ApplyResources(this.groupBoxJava, "groupBoxJava");
this.groupBoxJava.Controls.Add(this.labelCustomJavaLocation);
this.groupBoxJava.Controls.Add(this.textBoxCustomJavaLocation);
this.groupBoxJava.Controls.Add(this.buttonCustomJavaLocation);
this.groupBoxJava.Name = "groupBoxJava";
this.groupBoxJava.TabStop = false;
this.themeComboBox.FormattingEnabled = true;
this.themeComboBox.Items.AddRange(new object[] {
resources.GetString("themeComboBox.Items"),
resources.GetString("themeComboBox.Items1"),
resources.GetString("themeComboBox.Items2")});
resources.ApplyResources(this.themeComboBox, "themeComboBox");
this.themeComboBox.Name = "themeComboBox";
//
// labelCustomJavaLocation
// label1
//
resources.ApplyResources(this.labelCustomJavaLocation, "labelCustomJavaLocation");
this.labelCustomJavaLocation.Name = "labelCustomJavaLocation";
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// customApktoolBtn
//
resources.ApplyResources(this.customApktoolBtn, "customApktoolBtn");
this.customApktoolBtn.Name = "customApktoolBtn";
this.customApktoolBtn.UseVisualStyleBackColor = true;
this.customApktoolBtn.Click += new System.EventHandler(this.customApktoolBtn_Click);
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.ForeColor = System.Drawing.Color.DimGray;
this.label6.Name = "label6";
//
// buttonCustomTempLocation
//
resources.ApplyResources(this.buttonCustomTempLocation, "buttonCustomTempLocation");
this.buttonCustomTempLocation.Name = "buttonCustomTempLocation";
this.buttonCustomTempLocation.UseVisualStyleBackColor = true;
this.buttonCustomTempLocation.Click += new System.EventHandler(this.buttonCustomTempLocation_Click);
//
// buttonCustomJavaLocation
//
@@ -110,8 +159,8 @@
//
// comboBox1
//
resources.ApplyResources(this.comboBox1, "comboBox1");
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.comboBox1, "comboBox1");
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Name = "comboBox1";
//
@@ -158,10 +207,99 @@
this.buttonОК.UseVisualStyleBackColor = true;
this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click);
//
// textBox1
//
resources.ApplyResources(this.textBox1, "textBox1");
this.textBox1.BackColor = System.Drawing.SystemColors.Window;
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "CustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBox1.Name = "textBox1";
this.textBox1.Text = global::APKToolGUI.Properties.Settings.Default.CustomJVMArgs;
//
// checkBox7
//
resources.ApplyResources(this.checkBox7, "checkBox7");
this.checkBox7.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJVMArgs;
this.checkBox7.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox7.Name = "checkBox7";
this.checkBox7.UseVisualStyleBackColor = true;
//
// checkBox6
//
resources.ApplyResources(this.checkBox6, "checkBox6");
this.checkBox6.Checked = global::APKToolGUI.Properties.Settings.Default.DebugMode;
this.checkBox6.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DebugMode", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox6.Name = "checkBox6";
this.checkBox6.UseVisualStyleBackColor = true;
//
// customApkToolTxtBox
//
resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox");
this.customApkToolTxtBox.BackColor = System.Drawing.SystemColors.Window;
this.customApkToolTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "ApktoolPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.customApkToolTxtBox.Name = "customApkToolTxtBox";
this.customApkToolTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.ApktoolPath;
//
// useCustomApktoolChk
//
resources.ApplyResources(this.useCustomApktoolChk, "useCustomApktoolChk");
this.useCustomApktoolChk.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomApktool;
this.useCustomApktoolChk.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomApktool", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.useCustomApktoolChk.Name = "useCustomApktoolChk";
this.useCustomApktoolChk.UseVisualStyleBackColor = true;
//
// checkBox5
//
resources.ApplyResources(this.checkBox5, "checkBox5");
this.checkBox5.Checked = global::APKToolGUI.Properties.Settings.Default.Utf8FilenameSupport;
this.checkBox5.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Utf8FilenameSupport", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox5.Name = "checkBox5";
this.checkBox5.UseVisualStyleBackColor = true;
//
// checkBox4
//
resources.ApplyResources(this.checkBox4, "checkBox4");
this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJavaExe;
this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox4.Name = "checkBox4";
this.checkBox4.UseVisualStyleBackColor = true;
//
// customTempLocationTxtBox
//
resources.ApplyResources(this.customTempLocationTxtBox, "customTempLocationTxtBox");
this.customTempLocationTxtBox.BackColor = System.Drawing.SystemColors.Window;
this.customTempLocationTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "TempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.customTempLocationTxtBox.Name = "customTempLocationTxtBox";
this.customTempLocationTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.TempDir;
//
// textBoxCustomJavaLocation
//
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window;
this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
//
// checkBox3
//
resources.ApplyResources(this.checkBox3, "checkBox3");
this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomTempDir;
this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomTempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox3.Name = "checkBox3";
this.checkBox3.UseVisualStyleBackColor = true;
//
// checkBox2
//
resources.ApplyResources(this.checkBox2, "checkBox2");
this.checkBox2.Checked = global::APKToolGUI.Properties.Settings.Default.PlaySoundWhenDone;
this.checkBox2.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "PlaySoundWhenDone", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox2.Name = "checkBox2";
this.checkBox2.UseVisualStyleBackColor = true;
//
// checkBox1
//
resources.ApplyResources(this.checkBox1, "checkBox1");
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBox1.Name = "checkBox1";
this.checkBox1.UseVisualStyleBackColor = true;
@@ -175,14 +313,6 @@
this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup";
this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true;
//
// textBoxCustomJavaLocation
//
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window;
this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
//
// ignoreOutputContextMenuBox
//
resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox");
@@ -207,8 +337,6 @@
this.tabPage1.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBoxJava.ResumeLayout(false);
this.groupBoxJava.PerformLayout();
this.groupBoxLanguage.ResumeLayout(false);
this.groupBoxContextMenu.ResumeLayout(false);
this.groupBoxContextMenu.PerformLayout();
@@ -220,7 +348,6 @@
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.GroupBox groupBoxJava;
private System.Windows.Forms.GroupBox groupBoxLanguage;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.GroupBox groupBoxContextMenu;
@@ -231,10 +358,24 @@
private System.Windows.Forms.Button buttonОК;
private System.Windows.Forms.TextBox textBoxCustomJavaLocation;
private System.Windows.Forms.Button buttonCustomJavaLocation;
private System.Windows.Forms.Label labelCustomJavaLocation;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.CheckBox checkBoxCheckUpdateStartup;
private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.CheckBox ignoreOutputContextMenuBox;
private System.Windows.Forms.CheckBox checkBox2;
private System.Windows.Forms.CheckBox checkBox4;
private System.Windows.Forms.TextBox customTempLocationTxtBox;
private System.Windows.Forms.Button buttonCustomTempLocation;
private System.Windows.Forms.CheckBox checkBox3;
internal System.Windows.Forms.Label label6;
private System.Windows.Forms.CheckBox checkBox5;
private System.Windows.Forms.TextBox customApkToolTxtBox;
private System.Windows.Forms.Button customApktoolBtn;
private System.Windows.Forms.CheckBox useCustomApktoolChk;
private System.Windows.Forms.ComboBox themeComboBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.CheckBox checkBox6;
private System.Windows.Forms.CheckBox checkBox7;
private System.Windows.Forms.TextBox textBox1;
}
}
+127 -62
View File
@@ -4,19 +4,45 @@ using System.Runtime.InteropServices;
using System.IO;
using APKToolGUI.Languages;
using APKToolGUI.Utils;
using Ookii.Dialogs.WinForms;
using System.Globalization;
using System.Reflection;
using System.Collections.Generic;
using System.Windows.Shapes;
using static APKToolGUI.UpdateChecker;
using APKToolGUI.Properties;
using APKToolGUI.Controls;
using System.Diagnostics;
using System.Linq;
namespace APKToolGUI
{
public partial class FormSettings : Form
{
string currentLanguage;
bool currentUseApktoolChk;
string currentApktoolPath;
int currentTheme;
public FormSettings()
{
InitializeComponent();
if (Program.IsDarkTheme())
DarkTheme.SetTheme(Controls, this);
currentUseApktoolChk = useCustomApktoolChk.Checked;
currentApktoolPath = customApkToolTxtBox.Text;
if (!AdminUtils.IsAdministrator())
{
SetButtonShield(buttonAddContextMenu, true);
SetButtonShield(buttonRemoveContextMenu, true);
}
int themeInt = (themeComboBox.Items.Count + 1 > Settings.Default.Theme) ? Settings.Default.Theme : 0;
themeComboBox.SelectedIndex = themeInt;
currentTheme = themeInt;
}
#region GUI
@@ -29,9 +55,9 @@ namespace APKToolGUI
private void buttonОК_Click(object sender, EventArgs e)
{
SaveSettings();
this.Close();
Close();
}
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
@@ -43,13 +69,13 @@ namespace APKToolGUI
private void buttonAddContextMenu_Click(object sender, EventArgs e)
{
if(MessageBox.Show(Language.DoYouRealyWantToInstallCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
if (MessageBox.Show(Language.DoYouRealyWantToInstallCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
RunAsAdmin(Application.ExecutablePath, "ccm");
}
private void buttonRemoveContextMenu_Click(object sender, EventArgs e)
{
if (MessageBox.Show(Language.DoYouRealyWantToRemoveCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
if (MessageBox.Show(Language.DoYouRealyWantToRemoveCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
RunAsAdmin(Application.ExecutablePath, "rcm");
}
@@ -57,45 +83,85 @@ namespace APKToolGUI
private void LoadSettings()
{
//textBox1.Font = Properties.Settings.Default.FontLogMainWindow;
//textBox2.Font = Properties.Settings.Default.FontLogContextMenuWindow;
//textBox1.Text = textBox1.Font.Name + ", " + textBox1.Font.Size;
//textBox2.Text = textBox2.Font.Name + ", " + textBox2.Font.Size;
string sysLang = Language.SystemLanguage;
String sysLang = Language.SystemLanguage;
comboBox1.Items.Add(sysLang);
comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("ru"));
comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("en"));
//comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("uk"));
//comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("ru-RU"));
//comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
//comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("uk-UA"));
comboBox1.Items.Add(CultureInfo.GetCultureInfo("en"));
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
string _culture = Settings.Default.Culture;
foreach (CultureInfo culture in cultures)
{
foreach (string resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
//Debug.WriteLine(resourceName);
string[] cultName = resourceName.Split('.');
if (cultName[1] == culture.Name)
{
//Debug.WriteLine("Lang: " + cultName[1] + " " + culture.Name);
string lang = string.Format("{0} [{1}]", culture.DisplayName, culture.Name);
comboBox1.Items.Add(lang);
if (culture.Name == _culture)
comboBox1.SelectedItem = lang;
}
}
}
comboBox1.DisplayMember = "NativeName"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").NativeName
comboBox1.ValueMember = "Name"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").Name
// Если в настройках есть язык, выбираем его в списке.
String _culture = Properties.Settings.Default.Culture;
if (_culture.Equals("Auto"))
{
currentLanguage = sysLang;
comboBox1.SelectedItem = sysLang;
}
else if (string.IsNullOrEmpty(_culture))
{
comboBox1.SelectedIndex = 1;
}
else
{
var qwe = System.Globalization.CultureInfo.GetCultureInfo(_culture);
comboBox1.SelectedItem = qwe;
try
{
currentLanguage = Settings.Default.Culture;
comboBox1.SelectedItem = _culture;
}
catch { }
}
}
private void SaveSettings()
{
//Properties.Settings.Default.FontLogMainWindow = textBox1.Font;
//Properties.Settings.Default.FontLogContextMenuWindow = textBox2.Font;
try
{
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
Settings.Default.Culture = "Auto";
else
Settings.Default.Culture = StringExt.Regex(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString());
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
Properties.Settings.Default.Culture = "Auto";
else
Properties.Settings.Default.Culture = comboBox1.SelectedItem.ToString();
Properties.Settings.Default.Save();
Settings.Default.Theme = themeComboBox.SelectedIndex;
Settings.Default.Save();
if (string.IsNullOrEmpty(currentLanguage))
currentLanguage = "en";
Debug.WriteLine("Combobox: " + comboBox1.SelectedItem.ToString() + " Language: " + currentLanguage);
if (!comboBox1.SelectedItem.ToString().Contains(currentLanguage) || themeComboBox.SelectedIndex != currentTheme)
if (MessageBox.Show(Language.RestartApplicationPrompt, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
Application.Restart();
if (currentUseApktoolChk != useCustomApktoolChk.Checked || currentApktoolPath != customApkToolTxtBox.Text)
{
FormMain.Instance.SetApktoolPath();
}
}
catch (Exception ex)
{
Log.e(ex.ToString());
}
}
public static void RunAsAdmin(string aFileName, string anArguments)
@@ -105,7 +171,7 @@ namespace APKToolGUI
processInfo.FileName = aFileName;
processInfo.Arguments = anArguments;
processInfo.UseShellExecute = true;
processInfo.Verb = "runas"; // здесь вся соль
processInfo.Verb = "runas";
try
{
@@ -117,46 +183,45 @@ namespace APKToolGUI
}
}
//private void button1_Click(object sender, EventArgs e)
//{
// FontDialog fontDialog1 = new FontDialog();
// fontDialog1.Font = textBox1.Font;
// if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
// {
// textBox1.Text = fontDialog1.Font.Name + ", " + fontDialog1.Font.Size;
// textBox1.Font = fontDialog1.Font;
// }
//}
//private void button2_Click(object sender, EventArgs e)
//{
// FontDialog fontDialog1 = new FontDialog();
// fontDialog1.Font = textBox2.Font;
// if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
// {
// textBox2.Text = fontDialog1.Font.Name + ", " + fontDialog1.Font.Size;
// textBox2.Font = fontDialog1.Font;
// }
//}
private void buttonCustomJavaLocation_Click(object sender, EventArgs e)
{
using(OpenFileDialog openJavaExe = new OpenFileDialog())
using (OpenFileDialog openJavaExe = new OpenFileDialog())
{
openJavaExe.Filter = "java.exe|java.exe";
if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK)
if (openJavaExe.ShowDialog() == DialogResult.OK)
textBoxCustomJavaLocation.Text = Program.GetPortablePath(openJavaExe.FileName);
}
}
//OpenFileDialog openJavaExe = new OpenFileDialog()
//{
// Multiselect = false,
// Filter = "java.exe|java.exe"
//};
//if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK)
//{
// textBoxCustomJavaLocation.Text = openJavaExe.FileName;
//}
private void buttonCustomTempLocation_Click(object sender, EventArgs e)
{
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
{
if (!String.IsNullOrWhiteSpace(customTempLocationTxtBox.Text))
fbd.SelectedPath = customTempLocationTxtBox.Text;
if (fbd.ShowDialog() == DialogResult.OK)
{
customTempLocationTxtBox.Text = fbd.SelectedPath;
//Clear temp folder
DirectoryUtils.Delete(Program.TEMP_PATH);
//Create new temp folder
Program.TEMP_PATH = Program.RandTempDirectory();
Directory.CreateDirectory(Program.TEMP_PATH);
}
}
}
private async void customApktoolBtn_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Apktool (*.jar)|*.jar";
if (ofd.ShowDialog() == DialogResult.OK)
{
customApkToolTxtBox.Text = ofd.FileName;
}
}
}
}
}
+235
View File
@@ -0,0 +1,235 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="checkBox7.Size" type="System.Drawing.Size, System.Drawing">
<value>206, 17</value>
</data>
<data name="checkBox7.Text" xml:space="preserve">
<value>Benutzerdefinierte JVM-Argumente</value>
</data>
<data name="checkBox6.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 17</value>
</data>
<data name="checkBox6.Text" xml:space="preserve">
<value>Debug-Modus</value>
</data>
<data name="themeComboBox.Items" xml:space="preserve">
<value>Automatisch</value>
</data>
<data name="themeComboBox.Items1" xml:space="preserve">
<value>Hell</value>
</data>
<data name="themeComboBox.Items2" xml:space="preserve">
<value>Dunkel</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Thema</value>
</data>
<data name="customApktoolBtn.Text" xml:space="preserve">
<value>…</value>
</data>
<data name="useCustomApktoolChk.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 17</value>
</data>
<data name="useCustomApktoolChk.Text" xml:space="preserve">
<value>Benutzerdefinierter APKTool-Speicherort</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>502, 13</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Der Vorgang wird langsamer sein, da die Dateien in den temporären Ordner verschoben werden</value>
</data>
<data name="checkBox5.Size" type="System.Drawing.Size, System.Drawing">
<value>218, 17</value>
</data>
<data name="checkBox5.Text" xml:space="preserve">
<value>Unterstützung für UTF-8-Dateinamen</value>
</data>
<data name="checkBox4.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 17</value>
</data>
<data name="checkBox4.Text" xml:space="preserve">
<value>Benutzerdefinierter Java-Speicherort</value>
</data>
<data name="buttonCustomTempLocation.Text" xml:space="preserve">
<value>…</value>
</data>
<data name="checkBox3.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 17</value>
</data>
<data name="checkBox3.Text" xml:space="preserve">
<value>Benutzerdefinierter temporärer Standort</value>
</data>
<data name="buttonCustomJavaLocation.Text" xml:space="preserve">
<value>…</value>
</data>
<data name="checkBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 17</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>Ton abspielen, wenn du fertig bist</value>
</data>
<data name="checkBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>281, 17</value>
</data>
<data name="checkBox1.Text" xml:space="preserve">
<value>Protokoll löschen, bevor du Maßnahmen ergreifst</value>
</data>
<data name="checkBoxCheckUpdateStartup.Size" type="System.Drawing.Size, System.Drawing">
<value>191, 17</value>
</data>
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
<value>Beim Start nach Updates suchen</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Allgemein</value>
</data>
<data name="groupBoxLanguage.Text" xml:space="preserve">
<value>Sprache</value>
</data>
<data name="ignoreOutputContextMenuBox.Size" type="System.Drawing.Size, System.Drawing">
<value>376, 17</value>
</data>
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
<value>Benutzerdefiniertes Ausgabeverzeichnis für Kontextmenü ignorieren</value>
</data>
<data name="labelAdminRights.Text" xml:space="preserve">
<value>Administratorrechte erforderlich</value>
</data>
<data name="buttonAddContextMenu.Text" xml:space="preserve">
<value>Install …</value>
</data>
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
<value>Deinstall …</value>
</data>
<data name="groupBoxContextMenu.Text" xml:space="preserve">
<value>Kontextmenü</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Allgemein</value>
</data>
<data name="buttonCancel.Text" xml:space="preserve">
<value>Abbrechen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Einstellungen</value>
</data>
</root>
+549 -156
View File
@@ -121,22 +121,535 @@
<data name="tabControl1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tabPage1.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="textBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 139</value>
</data>
<data name="textBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>239, 22</value>
</data>
<data name="textBox1.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="textBox1.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;textBox1.Name" xml:space="preserve">
<value>textBox1</value>
</data>
<data name="&gt;&gt;textBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;textBox1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;textBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="checkBox7.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox7.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox7.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 141</value>
</data>
<data name="checkBox7.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 17</value>
</data>
<data name="checkBox7.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="checkBox7.Text" xml:space="preserve">
<value>Custom JVM arguments</value>
</data>
<data name="&gt;&gt;checkBox7.Name" xml:space="preserve">
<value>checkBox7</value>
</data>
<data name="&gt;&gt;checkBox7.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox7.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox7.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="checkBox6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox6.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 265</value>
</data>
<data name="checkBox6.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
</data>
<data name="checkBox6.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="checkBox6.Text" xml:space="preserve">
<value>Debug mode</value>
</data>
<data name="&gt;&gt;checkBox6.Name" xml:space="preserve">
<value>checkBox6</value>
</data>
<data name="&gt;&gt;checkBox6.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox6.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox6.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="themeComboBox.Items" xml:space="preserve">
<value>Auto</value>
</data>
<data name="themeComboBox.Items1" xml:space="preserve">
<value>Light</value>
</data>
<data name="themeComboBox.Items2" xml:space="preserve">
<value>Dark</value>
</data>
<data name="themeComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>276, 234</value>
</data>
<data name="themeComboBox.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 21</value>
</data>
<data name="themeComboBox.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="&gt;&gt;themeComboBox.Name" xml:space="preserve">
<value>themeComboBox</value>
</data>
<data name="&gt;&gt;themeComboBox.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;themeComboBox.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;themeComboBox.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 239</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Theme</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="customApkToolTxtBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="customApkToolTxtBox.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 205</value>
</data>
<data name="customApkToolTxtBox.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
</data>
<data name="customApkToolTxtBox.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="customApkToolTxtBox.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;customApkToolTxtBox.Name" xml:space="preserve">
<value>customApkToolTxtBox</value>
</data>
<data name="&gt;&gt;customApkToolTxtBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;customApkToolTxtBox.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;customApkToolTxtBox.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="customApktoolBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="customApktoolBtn.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
<data name="customApktoolBtn.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="customApktoolBtn.Location" type="System.Drawing.Point, System.Drawing">
<value>483, 205</value>
</data>
<data name="customApktoolBtn.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 23</value>
</data>
<data name="customApktoolBtn.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="customApktoolBtn.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;customApktoolBtn.Name" xml:space="preserve">
<value>customApktoolBtn</value>
</data>
<data name="&gt;&gt;customApktoolBtn.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;customApktoolBtn.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;customApktoolBtn.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="useCustomApktoolChk.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="useCustomApktoolChk.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="useCustomApktoolChk.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 207</value>
</data>
<data name="useCustomApktoolChk.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 17</value>
</data>
<data name="useCustomApktoolChk.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="useCustomApktoolChk.Text" xml:space="preserve">
<value>Custom apktool location</value>
</data>
<data name="&gt;&gt;useCustomApktoolChk.Name" xml:space="preserve">
<value>useCustomApktoolChk</value>
</data>
<data name="&gt;&gt;useCustomApktoolChk.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;useCustomApktoolChk.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;useCustomApktoolChk.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 185</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>349, 13</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>The process will be slower since files will be moved to temp folder </value>
</data>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label6.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="checkBox5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox5.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 165</value>
</data>
<data name="checkBox5.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 17</value>
</data>
<data name="checkBox5.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="checkBox5.Text" xml:space="preserve">
<value>UTF-8 filename support</value>
</data>
<data name="&gt;&gt;checkBox5.Name" xml:space="preserve">
<value>checkBox5</value>
</data>
<data name="&gt;&gt;checkBox5.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox5.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox5.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="checkBox4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox4.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 115</value>
</data>
<data name="checkBox4.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 17</value>
</data>
<data name="checkBox4.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="checkBox4.Text" xml:space="preserve">
<value>Custom Java location</value>
</data>
<data name="&gt;&gt;checkBox4.Name" xml:space="preserve">
<value>checkBox4</value>
</data>
<data name="&gt;&gt;checkBox4.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox4.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox4.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="customTempLocationTxtBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="customTempLocationTxtBox.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 86</value>
</data>
<data name="customTempLocationTxtBox.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
</data>
<data name="customTempLocationTxtBox.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="customTempLocationTxtBox.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;customTempLocationTxtBox.Name" xml:space="preserve">
<value>customTempLocationTxtBox</value>
</data>
<data name="&gt;&gt;customTempLocationTxtBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;customTempLocationTxtBox.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;customTempLocationTxtBox.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="textBoxCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="textBoxCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 112</value>
</data>
<data name="textBoxCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
</data>
<data name="textBoxCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="textBoxCustomJavaLocation.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Name" xml:space="preserve">
<value>textBoxCustomJavaLocation</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="buttonCustomTempLocation.AccessibleName" xml:space="preserve">
<value>buttonCustomTempLocation</value>
</data>
<data name="buttonCustomTempLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="buttonCustomTempLocation.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
<data name="buttonCustomTempLocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="buttonCustomTempLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>483, 86</value>
</data>
<data name="buttonCustomTempLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 23</value>
</data>
<data name="buttonCustomTempLocation.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="buttonCustomTempLocation.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;buttonCustomTempLocation.Name" xml:space="preserve">
<value>buttonCustomTempLocation</value>
</data>
<data name="&gt;&gt;buttonCustomTempLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonCustomTempLocation.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;buttonCustomTempLocation.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="checkBox3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox3.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 90</value>
</data>
<data name="checkBox3.Size" type="System.Drawing.Size, System.Drawing">
<value>139, 17</value>
</data>
<data name="checkBox3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="checkBox3.Text" xml:space="preserve">
<value>Custom temp location</value>
</data>
<data name="&gt;&gt;checkBox3.Name" xml:space="preserve">
<value>checkBox3</value>
</data>
<data name="&gt;&gt;checkBox3.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox3.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox3.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="buttonCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="buttonCustomJavaLocation.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
<data name="buttonCustomJavaLocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="buttonCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>483, 112</value>
</data>
<data name="buttonCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 23</value>
</data>
<data name="buttonCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="buttonCustomJavaLocation.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Name" xml:space="preserve">
<value>buttonCustomJavaLocation</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="checkBox2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 65</value>
</data>
<data name="checkBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>144, 17</value>
</data>
<data name="checkBox2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>Play sound when done</value>
</data>
<data name="&gt;&gt;checkBox2.Name" xml:space="preserve">
<value>checkBox2</value>
</data>
<data name="&gt;&gt;checkBox2.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkBox2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox2.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="checkBox1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="checkBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 42</value>
</data>
<data name="checkBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 17</value>
<value>144, 17</value>
</data>
<data name="checkBox1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -154,7 +667,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox1.ZOrder" xml:space="preserve">
<value>0</value>
<value>17</value>
</data>
<data name="checkBoxCheckUpdateStartup.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -166,7 +679,7 @@
<value>9, 19</value>
</data>
<data name="checkBoxCheckUpdateStartup.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 17</value>
<value>173, 17</value>
</data>
<data name="checkBoxCheckUpdateStartup.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -184,19 +697,19 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBoxCheckUpdateStartup.ZOrder" xml:space="preserve">
<value>1</value>
<value>18</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 206</value>
<value>8, 6</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 65</value>
<value>521, 299</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Other</value>
<value>General</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
@@ -210,137 +723,17 @@
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="groupBoxJava.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="labelCustomJavaLocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labelCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 17</value>
</data>
<data name="labelCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 23</value>
</data>
<data name="labelCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="labelCustomJavaLocation.Text" xml:space="preserve">
<value>Custom Java location</value>
</data>
<data name="labelCustomJavaLocation.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="&gt;&gt;labelCustomJavaLocation.Name" xml:space="preserve">
<value>labelCustomJavaLocation</value>
</data>
<data name="&gt;&gt;labelCustomJavaLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelCustomJavaLocation.Parent" xml:space="preserve">
<value>groupBoxJava</value>
</data>
<data name="&gt;&gt;labelCustomJavaLocation.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="textBoxCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="textBoxCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>195, 18</value>
</data>
<data name="textBoxCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>222, 20</value>
</data>
<data name="textBoxCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="textBoxCustomJavaLocation.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Name" xml:space="preserve">
<value>textBoxCustomJavaLocation</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.Parent" xml:space="preserve">
<value>groupBoxJava</value>
</data>
<data name="&gt;&gt;textBoxCustomJavaLocation.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="buttonCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="buttonCustomJavaLocation.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
<data name="buttonCustomJavaLocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="buttonCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>418, 17</value>
</data>
<data name="buttonCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 20</value>
</data>
<data name="buttonCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="buttonCustomJavaLocation.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Name" xml:space="preserve">
<value>buttonCustomJavaLocation</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.Parent" xml:space="preserve">
<value>groupBoxJava</value>
</data>
<data name="&gt;&gt;buttonCustomJavaLocation.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="groupBoxJava.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 153</value>
</data>
<data name="groupBoxJava.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 47</value>
</data>
<data name="groupBoxJava.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="groupBoxJava.Text" xml:space="preserve">
<value>Java</value>
</data>
<data name="&gt;&gt;groupBoxJava.Name" xml:space="preserve">
<value>groupBoxJava</value>
</data>
<data name="&gt;&gt;groupBoxJava.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBoxJava.Parent" xml:space="preserve">
<value>tabPage1</value>
</data>
<data name="&gt;&gt;groupBoxJava.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="groupBoxLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="comboBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="comboBox1.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
<data name="comboBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>129, 19</value>
<value>9, 17</value>
</data>
<data name="comboBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 21</value>
<value>347, 21</value>
</data>
<data name="comboBox1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -358,10 +751,10 @@
<value>0</value>
</data>
<data name="groupBoxLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 6</value>
<value>8, 311</value>
</data>
<data name="groupBoxLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 47</value>
<value>522, 47</value>
</data>
<data name="groupBoxLanguage.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@@ -379,7 +772,7 @@
<value>tabPage1</value>
</data>
<data name="&gt;&gt;groupBoxLanguage.ZOrder" xml:space="preserve">
<value>2</value>
<value>1</value>
</data>
<data name="groupBoxContextMenu.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@@ -394,13 +787,16 @@
<value>6, 45</value>
</data>
<data name="ignoreOutputContextMenuBox.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 17</value>
<value>278, 17</value>
</data>
<data name="ignoreOutputContextMenuBox.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
<value>Use default output directory for context menu</value>
<value>Ignore custom output directory for context menu</value>
</data>
<data name="ignoreOutputContextMenuBox.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="&gt;&gt;ignoreOutputContextMenuBox.Name" xml:space="preserve">
<value>ignoreOutputContextMenuBox</value>
@@ -414,9 +810,6 @@
<data name="&gt;&gt;ignoreOutputContextMenuBox.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="labelAdminRights.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="labelAdminRights.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@@ -424,7 +817,7 @@
<value>3, 18</value>
</data>
<data name="labelAdminRights.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 23</value>
<value>267, 23</value>
</data>
<data name="labelAdminRights.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -447,9 +840,6 @@
<data name="&gt;&gt;labelAdminRights.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="buttonAddContextMenu.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="buttonAddContextMenu.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
@@ -457,7 +847,7 @@
<value>NoControl</value>
</data>
<data name="buttonAddContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>269, 18</value>
<value>343, 18</value>
</data>
<data name="buttonAddContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 23</value>
@@ -483,9 +873,6 @@
<data name="&gt;&gt;buttonAddContextMenu.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="buttonRemoveContextMenu.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="buttonRemoveContextMenu.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>System</value>
</data>
@@ -493,7 +880,7 @@
<value>NoControl</value>
</data>
<data name="buttonRemoveContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>358, 18</value>
<value>432, 18</value>
</data>
<data name="buttonRemoveContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 23</value>
@@ -517,10 +904,10 @@
<value>3</value>
</data>
<data name="groupBoxContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 59</value>
<value>8, 364</value>
</data>
<data name="groupBoxContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 74</value>
<value>523, 74</value>
</data>
<data name="groupBoxContextMenu.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@@ -538,7 +925,7 @@
<value>tabPage1</value>
</data>
<data name="&gt;&gt;groupBoxContextMenu.ZOrder" xml:space="preserve">
<value>3</value>
<value>2</value>
</data>
<data name="tabPage1.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@@ -547,7 +934,7 @@
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>459, 278</value>
<value>535, 442</value>
</data>
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -567,11 +954,14 @@
<data name="&gt;&gt;tabPage1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tabControl1.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 8.25pt</value>
</data>
<data name="tabControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 1</value>
</data>
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>467, 304</value>
<value>543, 468</value>
</data>
<data name="tabControl1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -598,7 +988,7 @@
<value>NoControl</value>
</data>
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>385, 311</value>
<value>461, 475</value>
</data>
<data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
@@ -631,7 +1021,7 @@
<value>NoControl</value>
</data>
<data name="buttonОК.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 311</value>
<value>380, 475</value>
</data>
<data name="buttonОК.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
@@ -661,7 +1051,10 @@
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>466, 339</value>
<value>542, 503</value>
</data>
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
+199
View File
@@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="checkBox7.Text" xml:space="preserve">
<value>Tùy chỉnh lệnh JVM</value>
</data>
<data name="checkBox6.Text" xml:space="preserve">
<value>Chế độ gỡ lỗi</value>
</data>
<data name="themeComboBox.Items" xml:space="preserve">
<value>Tự động</value>
</data>
<data name="themeComboBox.Items1" xml:space="preserve">
<value>Sáng</value>
</data>
<data name="themeComboBox.Items2" xml:space="preserve">
<value>Tối</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Giao diện</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="useCustomApktoolChk.TabIndex" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="useCustomApktoolChk.Text" xml:space="preserve">
<value>Vị trí apktool tùy chỉnh</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Việc di chuyển các tệp trong quá trình xử lý vào thư mục tạm có thể mất thời gian, vui lòng kiên nhẫn chờ đợi</value>
</data>
<data name="checkBox5.Text" xml:space="preserve">
<value>Hỗ trợ tên tệp UTF-8 (bật khi tên tệp bị lỗi hiển thị)</value>
</data>
<data name="checkBox4.Text" xml:space="preserve">
<value>Vị trí Java tùy chỉnh</value>
</data>
<data name="checkBox3.Text" xml:space="preserve">
<value>Vị trí bộ đệm tùy chỉnh</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>Âm báo hoàn thành</value>
</data>
<data name="checkBox1.Text" xml:space="preserve">
<value>Xóa nhật ký trước khi thực hiện</value>
</data>
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
<value>Kiểm tra cập nhật khi khởi động</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Chung</value>
</data>
<data name="groupBoxLanguage.Text" xml:space="preserve">
<value>Ngôn ngữ</value>
</data>
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
<value>Bỏ qua thư mục đầu ra tùy chỉnh của menu chuột phải</value>
</data>
<data name="labelAdminRights.Text" xml:space="preserve">
<value>Yêu cầu quyền quản trị</value>
</data>
<data name="buttonAddContextMenu.Text" xml:space="preserve">
<value>Cài đặt</value>
</data>
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
<value>Gỡ cài đặt</value>
</data>
<data name="groupBoxContextMenu.Text" xml:space="preserve">
<value>Menu chuột phải</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Chung</value>
</data>
<data name="buttonCancel.Text" xml:space="preserve">
<value>Hủy</value>
</data>
<data name="buttonОК.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Cài đặt</value>
</data>
</root>
+199
View File
@@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="checkBox7.Text" xml:space="preserve">
<value>自定义 JVM 命令</value>
</data>
<data name="checkBox6.Text" xml:space="preserve">
<value>调试模式</value>
</data>
<data name="themeComboBox.Items" xml:space="preserve">
<value>自动</value>
</data>
<data name="themeComboBox.Items1" xml:space="preserve">
<value>浅色</value>
</data>
<data name="themeComboBox.Items2" xml:space="preserve">
<value>深色</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>主题</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="useCustomApktoolChk.TabIndex" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="useCustomApktoolChk.Text" xml:space="preserve">
<value>自定义 apktool 位置</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>操作过程的文件移动到缓存目录中需要时间,请耐心等待</value>
</data>
<data name="checkBox5.Text" xml:space="preserve">
<value>UTF-8 文件名支持,中文乱码开启</value>
</data>
<data name="checkBox4.Text" xml:space="preserve">
<value>自定义 Java 位置</value>
</data>
<data name="checkBox3.Text" xml:space="preserve">
<value>自定义缓存位置</value>
</data>
<data name="checkBox2.Text" xml:space="preserve">
<value>完成提示音</value>
</data>
<data name="checkBox1.Text" xml:space="preserve">
<value>操作前清除日志</value>
</data>
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
<value>启动时检查更新</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>常规</value>
</data>
<data name="groupBoxLanguage.Text" xml:space="preserve">
<value>语言</value>
</data>
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
<value>忽略右键菜单的自定义输出目录</value>
</data>
<data name="labelAdminRights.Text" xml:space="preserve">
<value>需要管理员权限</value>
</data>
<data name="buttonAddContextMenu.Text" xml:space="preserve">
<value>安装</value>
</data>
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
<value>卸载</value>
</data>
<data name="groupBoxContextMenu.Text" xml:space="preserve">
<value>右键菜单</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>常规</value>
</data>
<data name="buttonCancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="buttonОК.Text" xml:space="preserve">
<value>确定</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>设置</value>
</data>
</root>
@@ -0,0 +1,74 @@
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace APKToolGUI.Handlers
{
internal class AdbControlEventHandlers
{
private static FormMain main;
public AdbControlEventHandlers(FormMain Main)
{
main = Main;
main.killAdbBtn.Click += killAdbBtn_Click;
main.installApkBtn.Click += installApkBtn_Click;
main.refreshDevicesBtn.Click += refreshDevicesBtn_Click;
main.selApkAdbBtn.Click += selApkAdbBtn_Click;
main.devicesListBox.SelectedValueChanged += devicesListBox_SelectedValueChanged;
main.overrideAbiComboBox.SelectedIndexChanged += ComboBoxChanged;
}
private void ComboBoxChanged(object sender, EventArgs e)
{
Settings.Default.Adb_OverrideAbi = main.overrideAbiComboBox.SelectedIndex;
}
private async void refreshDevicesBtn_Click(object sender, EventArgs e)
{
await main.ListDevices();
}
private async void killAdbBtn_Click(object sender, EventArgs e)
{
if (MessageBox.Show(Language.ConfirmKillingAdbServer, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
main.adb.KillProcess();
await main.ListDevices();
}
}
private async void installApkBtn_Click(object sender, EventArgs e)
{
string inputFile = main.apkPathAdbTxtBox.Text;
if (File.Exists(inputFile))
{
await main.Install(inputFile);
}
else
MessageBox.Show(Language.ErrorSelectedFileNotExist, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private void selApkAdbBtn_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
if (ofd.ShowDialog() == DialogResult.OK)
{
main.apkPathAdbTxtBox.Text = ofd.FileName;
}
}
}
private void devicesListBox_SelectedValueChanged(object sender, EventArgs e)
{
main.ToLog(ApktoolEventType.None, String.Format(Language.DeviceSelected, main.devicesListBox.SelectedItem));
main.selAdbDeviceLbl.Text = main.devicesListBox.GetItemText(main.devicesListBox.SelectedItem);
}
}
}
@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace APKToolGUI.Handlers
{
internal class ApkinfoControlEventHandlers
{
private static FormMain main;
public ApkinfoControlEventHandlers(FormMain Main)
{
main = Main;
main.selApkFileInfoBtn.Click += selApkFileInfoBtn_Click;
main.psLinkBtn.Click += psLinkBtn_Click;
main.apkComboLinkBtn.Click += apkComboLinkBtn_Click;
main.apkPureLinkBtn.Click += apkPureLinkBtn_Click;
main.apkGkLinkBtn.Click += apkGkLinkBtn_Click;
main.apkSupportLinkBtn.Click += apkSupportLinkBtn_Click;
main.apkMirrorLinkBtn.Click += apkMirrorLinkBtn_Click;
}
private void selApkFileInfoBtn_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
if (ofd.ShowDialog() == DialogResult.OK)
{
main.GetApkInfo(ofd.FileName);
}
}
}
private void psLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.PlayStoreLink);
}
private void apkComboLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkComboLink);
}
private void apkPureLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkPureLink);
}
private void apkGkLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkGkLink);
}
private void apkSupportLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkSupportLink);
}
private void apkMirrorLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkMirrorLink);
}
}
}
@@ -19,6 +19,9 @@ namespace APKToolGUI.Handlers
public BaksmaliControlEventHandlers(FormMain Main)
{
main = Main;
main.baksmaliBrowseOutputBtn.Click += baksmaliBrowseOutputBtn_Click;
main.baksmaliBrowseInputDexBtn.Click += baksmaliBrowseInputDexBtn_Click;
main.decSmaliBtn.Click += decSmaliBtn_Click;
}
internal void baksmaliBrowseOutputBtn_Click(object sender, EventArgs e)
@@ -21,6 +21,11 @@ namespace APKToolGUI.Handlers
public BuildControlEventHandlers(FormMain Main)
{
main = Main;
main.button_BUILD_BrowseAaptPath.Click += button_BUILD_BrowseAaptPath_Click;
main.button_BUILD_BrowseFrameDir.Click += button_BUILD_BrowseFrameDir_Click;
main.button_BUILD_BrowseOutputAppPath.Click += button_BUILD_BrowseOutputAppPath_Click;
main.button_BUILD_BrowseInputProjectDir.Click += button_BUILD_BrowseInputProjectDir_Click;
main.button_BUILD_Build.Click += button_BUILD_Build_Click;
}
internal void button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e)
@@ -81,21 +86,5 @@ namespace APKToolGUI.Handlers
else
MessageBox.Show(Language.WarningDecodingFolderNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
internal void comApkOpenDir_Click(object sender, EventArgs e)
{
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
string outputFile = decApkDir + " compiled.apk";
if (Settings.Default.Build_UseOutputAppPath)
outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir) + ".apk");
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
}
}
@@ -19,6 +19,10 @@ namespace APKToolGUI.Handlers
public DecodeControlEventHandlers(FormMain Main)
{
main = Main;
main.button_DECODE_BrowseFrameDir.Click += button_DECODE_BrowseFrameDir_Click;
main.button_DECODE_BrowseOutputDirectory.Click += button_DECODE_BrowseOutputDirectory_Click;
main.button_DECODE_BrowseInputAppPath.Click += button_DECODE_BrowseInputAppPath_Click;
main.button_DECODE_Decode.Click += button_DECODE_Decode_Click;
}
internal void button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e)
@@ -50,10 +54,15 @@ namespace APKToolGUI.Handlers
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Android Package (*.apk, *.xapk, *.zip, *.apkm, *.apks)|*.apk;*.xapk;*.zip;*.apkm;*.apks";
if (ofd.ShowDialog() == DialogResult.OK)
{
main.textBox_DECODE_InputAppPath.Text = ofd.FileName;
main.GetApkInfo(ofd.FileName);
if (!Settings.Default.Decode_DontParseApkInfo)
main.GetApkInfo(ofd.FileName);
if (main.checkBox_DECODE_OutputDirectory.Checked)
{
main.textBox_DECODE_OutputDirectory.Text = Path.Combine(Path.GetDirectoryName(main.textBox_DECODE_InputAppPath.Text), Path.GetFileNameWithoutExtension(main.textBox_DECODE_InputAppPath.Text));
@@ -64,7 +73,8 @@ namespace APKToolGUI.Handlers
internal async void button_DECODE_Decode_Click(object sender, EventArgs e)
{
if (File.Exists(main.textBox_DECODE_InputAppPath.Text))
string inputFile = main.textBox_DECODE_InputAppPath.Text;
if (File.Exists(inputFile))
{
if (main.checkBox_DECODE_UseFramework.Checked && !Directory.Exists(main.textBox_DECODE_FrameDir.Text))
{
@@ -73,33 +83,28 @@ namespace APKToolGUI.Handlers
}
if (main.checkBox_DECODE_OutputDirectory.Checked)
{
if (String.IsNullOrWhiteSpace(main.textBox_DECODE_OutputDirectory.Text))
if (String.IsNullOrWhiteSpace(Settings.Default.Decode_OutputDir))
{
main.ShowMessage(Language.DecodeDirNotSelected, MessageBoxIcon.Warning);
return;
}
else
if (!PathUtils.IsValidPath(main.textBox_DECODE_OutputDirectory.Text))
if (!PathUtils.IsValidPath(Settings.Default.Decode_OutputDir))
{
main.ShowMessage(Language.DecodeCouldNotCreate, MessageBoxIcon.Warning);
return;
}
}
await main.Decompile(main.textBox_DECODE_InputAppPath.Text);
if (inputFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
{
await main.MergeAndDecompile(inputFile);
}
else
await main.Decompile(inputFile);
}
else
MessageBox.Show(Language.WarningFileForDecodingNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
internal void decApkOpenDirBtn_Click(object sender, EventArgs e)
{
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
Process.Start("explorer.exe", main.textBox_BUILD_InputProjectDir.Text);
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
}
}
+123 -91
View File
@@ -1,4 +1,6 @@
using APKToolGUI.Languages;
using APKToolGUI.ApkTool;
using APKToolGUI.Controls;
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using SaveToGameWpf.Logic.Utils;
@@ -16,184 +18,214 @@ namespace APKToolGUI.Handlers
class DragDropHandlers
{
private static FormMain main;
string[] apks = { ".apk", ".xapk", ".zip", ".apks", ".apkm" };
string[] apk = { ".apk" };
public DragDropHandlers(FormMain Main)
{
main = Main;
//Decode
DragEventHandler decEventHandler = new DragEventHandler((sender, e) => { DropApkToDec(e); });
Register(main.decPanel, ".apk", decEventHandler);
Register(main.textBox_DECODE_InputAppPath, ".apk", decEventHandler, main.decPanel);
Register(main.button_DECODE_Decode, ".apk", decEventHandler, main.decPanel);
Register(main.decPanel, null, decEventHandler, apks);
Register(main.textBox_DECODE_InputAppPath, main.decPanel, decEventHandler, apks);
Register(main.button_DECODE_Decode, main.decPanel, decEventHandler, apks);
DragEventHandler comEventHandler = new DragEventHandler((sender, e) => { DropDirToCom(e); });
Register(main.comPanel, "", comEventHandler);
Register(main.textBox_BUILD_InputProjectDir, "", comEventHandler, main.comPanel);
Register(main.button_BUILD_Build, "", comEventHandler, main.comPanel);
Register(main.comPanel, null, comEventHandler, null);
Register(main.textBox_BUILD_InputProjectDir, main.comPanel, comEventHandler, null);
Register(main.button_BUILD_Build, main.comPanel, comEventHandler, null);
DragEventHandler alignEventHandler = new DragEventHandler((sender, e) => { DropApkToAlign(e); });
Register(main.zipalignPanel, ".apk", alignEventHandler);
Register(main.textBox_ZIPALIGN_InputFile, ".apk", alignEventHandler, main.zipalignPanel);
Register(main.button_ZIPALIGN_Align, ".apk", alignEventHandler, main.zipalignPanel);
Register(main.zipalignPanel, null, alignEventHandler, apk);
Register(main.textBox_ZIPALIGN_InputFile, main.zipalignPanel, alignEventHandler, apk);
Register(main.button_ZIPALIGN_Align, main.zipalignPanel, alignEventHandler, apk);
DragEventHandler signEventHandler = new DragEventHandler((sender, e) => { DropApkToSign(e); });
Register(main.signPanel, ".apk", signEventHandler);
Register(main.textBox_SIGN_InputFile, ".apk", signEventHandler, main.signPanel);
Register(main.button_SIGN_Sign, ".apk", signEventHandler, main.signPanel);
Register(main.signPanel, null, signEventHandler, apk);
Register(main.textBox_SIGN_InputFile, main.signPanel, signEventHandler, apk);
Register(main.button_SIGN_Sign, main.signPanel, signEventHandler, apk);
DragEventHandler mergeEventHandler = new DragEventHandler((sender, e) => { DropApkToMerge(e); });
Register(main.mergePanel, null, mergeEventHandler, apks);
Register(main.splitApkPathTxtBox, main.mergePanel, mergeEventHandler, apks);
Register(main.mergeApkBtn, main.mergePanel, mergeEventHandler, apks);
DragEventHandler baksmaliEventHandler = new DragEventHandler((sender, e) => { DropDexToBaksmali(e); });
Register(main.bakSmaliGroupBox, ".dex", baksmaliEventHandler);
Register(main.bakSmaliGroupBox, null, baksmaliEventHandler, new string[] { ".dex" });
main.bakSmaliGroupBox.AllowDrop = true;
DragEventHandler smaliEventHandler = new DragEventHandler((sender, e) => { DropDirToSmali(e); });
Register(main.smaliGroupBox, "", smaliEventHandler);
Register(main.smaliGroupBox, null, smaliEventHandler, null);
main.smaliGroupBox.AllowDrop = true;
DragEventHandler apkInfoEventHandler = new DragEventHandler((sender, e) => { DropApkToGetInfo(e); });
Register(main.tabPageApkInfo, ".apk", apkInfoEventHandler);
Register(main.fileTxtBox, ".apk", apkInfoEventHandler);
Register(main.basicInfoTabPage, null, apkInfoEventHandler, apks);
Register(main.fileTxtBox, null, apkInfoEventHandler, apks);
DragEventHandler adbEventHandler = new DragEventHandler((sender, e) => { DropApkToInstall(e); });
Register(main.tabPageAdb, null, adbEventHandler, apk);
Register(main.installApkBtn, null, adbEventHandler, apk);
}
void Register(Control ctrl, string extension, DragEventHandler dragHandler, Control extCtrl = null)
void Register(Control ctrl, Control extCtrl, DragEventHandler dragHandler, string[] extension)
{
if (extCtrl == null)
extCtrl = ctrl;
ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = Color.White);
ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = PanelBackColor());
ctrl.DragEnter += new DragEventHandler((sender, e) => e.CheckDragEnter(extension));
ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckDragOver(extension)) extCtrl.BackColor = Color.LightGreen; });
ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckManyDragOver(extension)) extCtrl.BackColor = PanelHoverBackColor(); });
ctrl.DragDrop += dragHandler;
}
private async void DropApkToDec(DragEventArgs e)
{
string apkFile = null;
if (e.DropOneByEnd(".apk", file => apkFile = file))
string[] apkFiles = null;
if (e.DropManyByEnd(file => apkFiles = file, apks))
{
main.GetApkInfo(apkFile);
main.textBox_DECODE_InputAppPath.Text = apkFile;
main.decPanel.BackColor = Color.White;
main.decPanel.BackColor = PanelBackColor();
await main.Decompile(apkFile);
foreach (var apkFile in apkFiles)
{
main.textBox_DECODE_InputAppPath.Text = apkFile;
if (!Settings.Default.Decode_DontParseApkInfo)
await main.GetApkInfo(apkFile);
if (apkFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
{
await main.MergeAndDecompile(apkFile);
}
else
await main.Decompile(apkFile);
}
}
}
private async void DropDirToCom(DragEventArgs e)
{
string folder = null;
if (e.DropOneByEnd("", file => folder = file))
string[] folders = null;
if (e.DropManyByEnd(file => folders = file, ""))
{
if (File.Exists(Path.Combine(folder, "AndroidManifest.xml")))
foreach (var folder in folders)
{
main.textBox_BUILD_InputProjectDir.Text = folder;
main.comPanel.BackColor = Color.White;
await main.Build(folder);
if (File.Exists(Path.Combine(folder, "AndroidManifest.xml")))
{
main.textBox_BUILD_InputProjectDir.Text = folder;
main.comPanel.BackColor = PanelBackColor();
await main.Build(folder);
}
else
main.ToLog(ApktoolEventType.Error, Language.ErrorNotAnApk);
}
else
main.ToLog(ApktoolEventType.Error, Language.ErrorNotAnApk);
}
}
private async void DropApkToAlign(DragEventArgs e)
{
string apkFile = null;
if (e.DropOneByEnd(".apk", file => apkFile = file))
string[] apkFiles = null;
if (e.DropManyByEnd(file => apkFiles = file, apks))
{
main.textBox_ZIPALIGN_InputFile.Text = apkFile;
main.zipalignPanel.BackColor = Color.White;
main.zipalignPanel.BackColor = PanelBackColor();
try
foreach (var apkFile in apkFiles)
{
main.Running();
main.textBox_ZIPALIGN_InputFile.Text = apkFile;
await Task.Factory.StartNew(() =>
{
string outputDir = apkFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputDir = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(apkFile));
if (!Settings.Default.Zipalign_OverwriteOutputFile)
outputDir = PathUtils.GetDirectoryNameWithoutExtension(outputDir) + " aligned.apk";
if (main.Align(apkFile, outputDir) == 0)
main.ToLog(ApktoolEventType.Information, String.Format(Language.ZipalignFileSavedTo, outputDir));
else
main.ToLog(ApktoolEventType.Error, Language.ErrorZipalign);
});
await main.Align(apkFile);
}
catch (Exception ex)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
main.Done();
}
}
private async void DropApkToSign(DragEventArgs e)
{
string apkFile = null;
if (e.DropOneByEnd(".apk", file => apkFile = file))
string[] apkFiles = null;
if (e.DropManyByEnd(file => apkFiles = file, apks))
{
main.textBox_SIGN_InputFile.Text = apkFile;
main.signPanel.BackColor = Color.White;
main.signPanel.BackColor = PanelBackColor();
try
foreach (var apkFile in apkFiles)
{
main.Running();
main.textBox_SIGN_InputFile.Text = apkFile;
await Task.Factory.StartNew(() =>
{
string inputFile = apkFile;
string outputDir = apkFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputDir = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
if (main.Sign(inputFile, outputDir) == 0)
if (Settings.Default.Zipalign_UseOutputDir)
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, inputFile));
else
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, outputDir));
else
main.ToLog(ApktoolEventType.Error, String.Format(Language.ErrorSigning, outputDir));
});
await main.Sign(apkFile);
}
catch (Exception ex)
}
}
private async void DropApkToMerge(DragEventArgs e)
{
string[] apkFiles = null;
if (e.DropManyByEnd(file => apkFiles = file, apks))
{
main.mergePanel.BackColor = PanelBackColor();
foreach (var apkFile in apkFiles)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
main.splitApkPathTxtBox.Text = apkFile;
await main.Merge(apkFile);
}
main.Done();
}
}
private async void DropDexToBaksmali(DragEventArgs e)
{
string apkFile = null;
if (e.DropOneByEnd(".dex", file => apkFile = file))
if (e.DropOneByEnd(file => apkFile = file, ".dex"))
{
main.baksmaliBrowseInputDexTxtBox.Text = apkFile;
main.bakSmaliGroupBox.BackColor = Color.White;
await main.Baksmali(apkFile);
main.bakSmaliGroupBox.BackColor = PanelBackColor();
await main.Baksmali(apkFile);
}
}
private async void DropDirToSmali(DragEventArgs e)
{
string dir = null;
if (e.DropOneByEnd("", file => dir = file))
if (e.DropOneByEnd(file => dir = file, null))
{
main.smaliBrowseInputDirTxtBox.Text = dir;
main.smaliGroupBox.BackColor = Color.White;
await main.Smali(dir + ".dex");
main.smaliGroupBox.BackColor = PanelBackColor();
await main.Smali(dir);
}
}
private async void DropApkToInstall(DragEventArgs e)
{
string dir = null;
if (e.DropOneByEnd(file => dir = file, ".apk"))
{
main.apkPathAdbTxtBox.Text = dir;
main.tabPageAdb.BackColor = PanelBackColor();
await main.Install(dir);
}
}
private void DropApkToGetInfo(DragEventArgs e)
{
string apkFile = null;
if (e.DropOneByEnd(".apk", file => apkFile = file))
if (e.DropOneByEnd(file => apkFile = file, apks))
{
main.smaliBrowseInputDirTxtBox.Text = apkFile;
main.tabPageApkInfo.BackColor = Color.White;
main.basicInfoTabPage.BackColor = PanelBackColor();
main.GetApkInfo(apkFile);
}
}
Color PanelBackColor()
{
if (Program.IsDarkTheme())
return DarkTheme.bgColor;
return Color.White;
}
Color PanelHoverBackColor()
{
if (Program.IsDarkTheme())
return Color.Gray;
return Color.LightGreen;
}
}
}
@@ -20,6 +20,11 @@ namespace APKToolGUI.Handlers
public FrameworkControlEventHandlers(FormMain Main)
{
main = Main;
main.button_IF_BrowseFrameDir.Click += button_IF_BrowseFrameDir_Click;
main.button_IF_BrowseInputFramePath.Click += button_IF_BrowseInputFramePath_Click;
main.button_IF_InstallFramework.Click += button_IF_InstallFramework_Click;
main.clearFwBtn.Click += clearFwBtn_Click;
main.openFwFolderBtn.Click += openFwFolderBtn_Click;
}
internal void button_IF_BrowseFrameDir_Click(object sender, EventArgs e)
@@ -72,30 +77,23 @@ namespace APKToolGUI.Handlers
return;
}
main.Running();
main.ToLog(ApktoolEventType.Information, Language.InstallingFramework + " " + Path.GetFileName(main.textBox_IF_InputFramePath.Text));
main.ToStatus(String.Format(Language.InstallingFramework + " \"{0}\"...", Path.GetFileName(main.textBox_IF_InputFramePath.Text)), Resources.waiting);
main.Running(Language.InstallingFramework);
main.ToLog(ApktoolEventType.None, Language.InstallingFramework + " " + Path.GetFileName(main.textBox_IF_InputFramePath.Text));
await Task.Factory.StartNew(() =>
{
if (main.apktool.InstallFramework() == 0)
main.ToLog(ApktoolEventType.Information, Language.FrameworkInstalled);
main.Done(Language.FrameworkInstalled);
else
main.ToLog(ApktoolEventType.Error, Language.FrameworkInstallationNotStarted);
main.Error(Language.FrameworkInstallationNotStarted);
});
main.Done();
}
internal async void clearFwBtn_Click(object sender, EventArgs e)
{
await Task.Factory.StartNew(() =>
{
if (main.ClearFramework() == 0)
main.ToLog(ApktoolEventType.Information, Language.Done);
});
main.Done();
main.Running(Language.ClearingFramework);
await main.ClearFramework();
}
internal void openFwFolderBtn_Click(object sender, EventArgs e)
@@ -0,0 +1,238 @@
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
namespace APKToolGUI.Handlers
{
internal class MainWindowEventHandlers
{
private static FormMain main;
public MainWindowEventHandlers(FormMain Main)
{
main = Main;
main.clearLogToolStripMenuItem.Click += clearLogToolStripMenuItem_Click;
main.copyToolStripMenuItem.Click += copyToolStripMenuItem_Click;
main.openAndroidMainfestBtn.Click += openAndroidMainfestBtn_Click;
main.openApktoolYmlBtn.Click += openApktoolYmlBtn_Click;
main.compileOutputOpenDirBtn.Click += compiledApkOpenDirBtn_Click;
main.button_OpenMainActivity.Click += button_OpenMainActivity_Click;
main.decApkOpenDirBtn.Click += decApkOpenDirBtn_Click;
main.decOutOpenDirBtn.Click += decOutOpenDirBtn_Click;
main.comApkOpenDir.Click += comApkOpenDir_Click;
main.signApkOpenDirBtn.Click += signApkOpenDirBtn_Click;
main.alignApkOpenDirBtn.Click += alignApkOpenDirBtn_Click;
main.mergeApkBtn.Click += mergeApkBtn_Click;
main.selSplitApkBtn.Click += selSplitApkBtn_Click;
}
internal void selSplitApkBtn_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Split APK Package (*.xapk;*.zip*.apkm;*.apks)|*.xapk;*.zip*.apkm;*.apks";
if (ofd.ShowDialog() == DialogResult.OK)
{
main.splitApkPathTxtBox.Text = ofd.FileName;
}
}
}
internal async void mergeApkBtn_Click(object sender, EventArgs e)
{
try
{
main.Save();
if (!File.Exists(Settings.Default.SplitApk_InputFile))
{
main.ShowMessage(Language.SplitApkNotFound, MessageBoxIcon.Warning);
return;
}
await main.Merge(Settings.Default.SplitApk_InputFile);
}
catch (Exception ex)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
}
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
{
main.logTxtBox.Text = "";
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
System.Windows.Forms.Clipboard.SetText(main.logTxtBox.SelectedText);
}
catch (Exception ex)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
}
internal void decApkOpenDirBtn_Click(object sender, EventArgs e)
{
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
Process.Start("explorer.exe", main.textBox_BUILD_InputProjectDir.Text);
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
internal void decOutOpenDirBtn_Click(object sender, EventArgs e)
{
if (Directory.Exists(Settings.Default.Decode_OutputDir))
Process.Start("explorer.exe", Settings.Default.Decode_OutputDir);
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedOutputFolderNotExist);
}
}
private void openAndroidMainfestBtn_Click(object sender, EventArgs e)
{
if (File.Exists(Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "AndroidManifest.xml")))
Process.Start("explorer.exe", Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "AndroidManifest.xml"));
else
main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist);
}
private void openApktoolYmlBtn_Click(object sender, EventArgs e)
{
if (File.Exists(Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "apktool.yml")))
Process.Start("explorer.exe", Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "apktool.yml"));
else
main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist);
}
private void compiledApkOpenDirBtn_Click(object sender, EventArgs e)
{
if (Directory.Exists(Settings.Default.Build_OutputAppPath))
{
Process.Start("explorer.exe", Settings.Default.Build_OutputAppPath);
}
else
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
private void button_OpenMainActivity_Click(object sender, EventArgs e)
{
string decPath = main.textBox_BUILD_InputProjectDir.Text;
if (Directory.Exists(decPath))
{
var launchActivityList = new List<string>
{
main.aapt != null ? main.aapt.LaunchableActivity : CommonUtils.GetActivityFromManifest(decPath),
"com\\unity3d\\player\\UnityPlayerActivity",
CommonUtils.GetApplicationNameFromManifest(decPath)
};
foreach (string launchActivity in launchActivityList)
{
if (String.IsNullOrEmpty(launchActivity))
continue;
Debug.WriteLine(launchActivity);
string path = null;
bool activityFound = false;
for (int i = 1; i < 100; i++)
{
string smaliFolder = (i == 1) ? "smali" : "smali_classes" + i;
path = Path.Combine(decPath, smaliFolder, launchActivity.Replace(".", "\\") + ".smali");
if (File.Exists(path))
{
Debug.WriteLine(path);
activityFound = true;
break;
}
}
if (activityFound && !CommonUtils.OnCreateExists(path))
continue;
if (activityFound)
{
main.ToLog(ApktoolEventType.None, String.Format(Language.MainActivityFound, path));
Process.Start("explorer.exe", path);
return;
}
else
continue;
}
main.ToLog(ApktoolEventType.Warning, Language.MainActivityNotFoundPleaseFindManually);
}
else
main.ToLog(ApktoolEventType.Error, Language.DecompiledAPKNotExist);
}
internal void comApkOpenDir_Click(object sender, EventArgs e)
{
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
string outputFile = decApkDir + " compiled.apk";
if (Settings.Default.Build_SignAfterBuild)
outputFile = decApkDir + " signed.apk";
if (Settings.Default.Build_UseOutputAppPath)
{
outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir)) + ".apk";
if (Settings.Default.Build_SignAfterBuild)
outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir)) + " signed.apk";
}
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
internal void signApkOpenDirBtn_Click(object sender, EventArgs e)
{
string inputFile = Settings.Default.Sign_InputFile;
string outputFile = inputFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
internal void alignApkOpenDirBtn_Click(object sender, EventArgs e)
{
string inputFile = Settings.Default.Zipalign_InputFile;
string outputFile = inputFile;
if (!String.IsNullOrEmpty(outputFile))
{
if (Settings.Default.Zipalign_UseOutputDir)
outputFile = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile));
if (!Settings.Default.Zipalign_OverwriteOutputFile)
outputFile = PathUtils.GetDirectoryNameWithoutExtension(outputFile) + " aligned.apk";
}
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
}
}
}
+116
View File
@@ -0,0 +1,116 @@
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using Dark.Net;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace APKToolGUI.Handlers
{
internal class MenuItemHandlers
{
private static FormMain main;
public MenuItemHandlers(FormMain Main)
{
main = Main;
main.saveLogToFileToolStripMenuItem.Click += saveLogItem_Click;
main.settingsToolStripMenuItem.Click += menuItemSettings_Click;
main.exitToolStripMenuItem.Click += menuItemExit_Click;
main.openTempFolderToolStripMenuItem.Click += openTempFolderToolStripMenuItem_Click;
main.checkForUpdateToolStripMenuItem.Click += menuItemCheckUpdate_Click;
main.aboutToolStripMenuItem.Click += menuItemAbout_Click;
main.apktoolIssuesToolStripMenuItem.Click += apktoolIssuesLinkItem_Click;
main.baksmaliIssuesToolStripMenuItem.Click += baksmaliIssuesLinkItem_Click;
main.reportAnIsuueToolStripMenuItem.Click += reportAnIsuueToolStripMenuItem_Click;
main.newInsToolStripMenuItem.Click += newInsToolStripMenuItem_Click;
}
private void newInsToolStripMenuItem_Click(object sender, EventArgs e)
{
Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
private void saveLogItem_Click(object sender, EventArgs e)
{
using (var sfd = new SaveFileDialog())
{
sfd.FileName = "APK Tool GUI logs";
sfd.Filter = Language.TextFile + " (*.txt)|*.txt";
sfd.FilterIndex = 2;
if (sfd.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(sfd.FileName, main.logTxtBox.Text);
}
}
}
private void menuItemSettings_Click(object sender, EventArgs e)
{
Theme theme = (Theme)Settings.Default.Theme;
if (Program.IsWin10OrAbove())
DarkNet.Instance.SetCurrentProcessTheme(theme);
FormSettings frm = new FormSettings();
if (Program.IsWin10OrAbove())
DarkNet.Instance.SetWindowThemeForms(frm, theme);
frm.ShowDialog();
}
private void menuItemExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void openTempFolderToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Directory.Exists(Program.TEMP_PATH))
Process.Start("explorer.exe", Program.TEMP_PATH);
else
{
Directory.CreateDirectory(Program.TEMP_PATH);
Process.Start("explorer.exe", Program.TEMP_PATH);
}
}
private void menuItemCheckUpdate_Click(object sender, EventArgs e)
{
main.updateCheker.CheckAsync();
}
private void menuItemAbout_Click(object sender, EventArgs e)
{
Theme theme = (Theme)Settings.Default.Theme;
if (Program.IsWin10OrAbove())
DarkNet.Instance.SetCurrentProcessTheme(theme);
FormAboutBox frm = new FormAboutBox();
if (Program.IsWin10OrAbove())
DarkNet.Instance.SetWindowThemeForms(frm, theme);
frm.ShowDialog();
}
private void apktoolIssuesLinkItem_Click(object sender, EventArgs e)
{
Process.Start("https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue");
}
private void baksmaliIssuesLinkItem_Click(object sender, EventArgs e)
{
Process.Start("https://github.com/JesusFreke/smali/issues?q=is%3Aissue");
}
private void reportAnIsuueToolStripMenuItem_Click(object sender, EventArgs e)
{
Process.Start("https://github.com/AndnixSH/APKToolGUI/issues/new/choose");
}
}
}
+19 -31
View File
@@ -1,4 +1,5 @@
using APKToolGUI.Languages;
using APKToolGUI.ApkTool;
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using Ookii.Dialogs.WinForms;
@@ -21,6 +22,17 @@ namespace APKToolGUI.Handlers
public SignControlEventHandlers(FormMain Main)
{
main = Main;
main.button_SIGN_BrowsePublicKey.Click += button_SIGN_BrowsePublicKey_Click;
main.button_SIGN_BrowsePrivateKey.Click += button_SIGN_BrowsePrivateKey_Click;
main.button_SIGN_BrowsePrivateKey.Click += button_SIGN_BrowsePrivateKey_Click;
main.button_SIGN_BrowseInputFile.Click += button_SIGN_BrowseInputFile_Click;
main.button_SIGN_BrowseOutputFile.Click += button_SIGN_BrowseOutputFile_Click;
main.schemev1ComboBox.SelectedIndexChanged += schemeComboBoxChanged;
main.schemev2ComboBox.SelectedIndexChanged += schemeComboBoxChanged;
main.schemev3ComboBox.SelectedIndexChanged += schemeComboBoxChanged;
main.schemev4ComboBox.SelectedIndexChanged += schemeComboBoxChanged;
main.button_SIGN_Sign.Click += button_SIGN_Sign_Click;
main.selectKeyStoreFileBtn.Click += selectKeyStoreFileBtn_Click;
}
internal void button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e)
@@ -105,29 +117,12 @@ namespace APKToolGUI.Handlers
return;
}
main.Running();
await Task.Factory.StartNew(() =>
{
string inputFile = Settings.Default.Sign_InputFile;
string outputDir = inputFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputDir = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
if (main.Sign(inputFile, outputDir) == 0)
if (Settings.Default.Zipalign_UseOutputDir)
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, inputFile));
else
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, outputDir));
else
main.ToLog(ApktoolEventType.Error, String.Format(Language.ErrorSigning, outputDir));
});
await main.Sign(Settings.Default.Sign_InputFile);
}
catch (Exception ex)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
main.Done();
}
internal void selectKeyStoreFileBtn_Click(object sender, EventArgs e)
@@ -140,19 +135,12 @@ namespace APKToolGUI.Handlers
}
}
internal void signApkOpenDirBtn_Click(object sender, EventArgs e)
private void schemeComboBoxChanged(object sender, EventArgs e)
{
string inputFile = Settings.Default.Sign_InputFile;
string outputFile = inputFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
Settings.Default.Sign_Schemev1 = main.schemev1ComboBox.SelectedIndex;
Settings.Default.Sign_Schemev2 = main.schemev2ComboBox.SelectedIndex;
Settings.Default.Sign_Schemev3 = main.schemev3ComboBox.SelectedIndex;
Settings.Default.Sign_Schemev4 = main.schemev4ComboBox.SelectedIndex;
}
}
}
@@ -19,6 +19,9 @@ namespace APKToolGUI.Handlers
public SmaliControlEventHandlers(FormMain Main)
{
main = Main;
main.smaliBrowseOutputBtn.Click += smaliBrowseOutputBtn_Click;
main.smaliBrowseInputDirBtn.Click += smaliBrowseInputDirBtn_Click;
main.comSmaliBtn.Click += comSmaliBtn_Click;
}
internal void smaliBrowseOutputBtn_Click(object sender, EventArgs e)
@@ -60,7 +63,7 @@ namespace APKToolGUI.Handlers
return;
}
main.Smali(Settings.Default.Smali_InputDir + ".dex");
main.Smali(Settings.Default.Smali_InputDir);
}
}
}
@@ -21,6 +21,10 @@ namespace APKToolGUI.Handlers
{
main = Main;
CheckAlignSwitch = !Settings.Default.Zipalign_CheckOnly;
main.checkBox_ZIPALIGN_CheckAlignment.Click += checkBox_ZIPALIGN_CheckAlignment_CheckedChanged;
main.button_ZIPALIGN_BrowseOutputFile.Click += button_ZIPALIGN_BrowseOutputFile_Click;
main.button_ZIPALIGN_BrowseInputFile.Click += button_ZIPALIGN_BrowseInputFile_Click;
main.button_ZIPALIGN_Align.Click += button_ZIPALIGN_Align_Click;
}
internal bool CheckAlignSwitch
@@ -74,55 +78,15 @@ namespace APKToolGUI.Handlers
internal async void button_ZIPALIGN_Align_Click(object sender, EventArgs e)
{
try
if (!File.Exists(main.textBox_ZIPALIGN_InputFile.Text))
{
if (!File.Exists(main.textBox_ZIPALIGN_InputFile.Text))
{
main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning);
return;
}
await Task.Factory.StartNew(() =>
{
string inputFile = Settings.Default.Zipalign_InputFile;
string outputDir = inputFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputDir = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile));
if (!Settings.Default.Zipalign_OverwriteOutputFile)
outputDir = PathUtils.GetDirectoryNameWithoutExtension(outputDir) + " aligned.apk";
if (main.Align(inputFile, outputDir) == 0)
main.ToLog(ApktoolEventType.Information, String.Format(Language.ZipalignFileSavedTo, outputDir));
else
main.ToLog(ApktoolEventType.Error, Language.ErrorZipalign);
});
main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning);
return;
}
catch (Exception ex)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
main.Done();
}
internal void alignApkOpenDirBtn_Click(object sender, EventArgs e)
{
string inputFile = Settings.Default.Zipalign_InputFile;
string outputFile = inputFile;
if (Settings.Default.Zipalign_UseOutputDir)
outputFile = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile));
if (!Settings.Default.Zipalign_OverwriteOutputFile)
outputFile = PathUtils.GetDirectoryNameWithoutExtension(outputFile) + " aligned.apk";
if (File.Exists(outputFile))
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
else
{
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
}
await main.Align(inputFile);
}
}
}
@@ -0,0 +1,8 @@
<linker>
<assembly fullname="System.Diagnostics.DiagnosticSource">
<type fullname="System.Diagnostics.Metrics.MetricsEventSource">
<!-- Used by System.Private.CoreLib via reflection to init the EventSource -->
<method name="GetInstance" />
</type>
</assembly>
</linker>
+31 -38
View File
@@ -1,6 +1,8 @@
using System;
using APKToolGUI.Properties;
using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Java
@@ -20,10 +22,8 @@ namespace Java
private void Initialize()
{
EnableRaisingEvents = true;
if (!String.IsNullOrEmpty(JavaPath))
StartInfo.FileName = JavaPath;
else
StartInfo.FileName = "cmd.exe";
StartInfo.FileName = JavaPath;
StartInfo.StandardOutputEncoding = Encoding.GetEncoding("UTF-8");
StartInfo.UseShellExecute = false;
StartInfo.RedirectStandardOutput = true;
StartInfo.RedirectStandardError = true;
@@ -33,16 +33,13 @@ namespace Java
public new bool Start(string args)
{
EnableRaisingEvents = true;
if (!String.IsNullOrEmpty(JavaPath))
{
StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
Debug.WriteLine(String.Format("-jar \"{0}\" {1}", JarPath, args));
}
else
{
StartInfo.Arguments = String.Format("/c \" java -jar \"{0}\" {1} \"", JarPath, args);
Debug.WriteLine(String.Format("CMD: java -jar \"{0}\" {1} \"", JarPath, args));
}
string customArgs = null;
if (Settings.Default.UseCustomJVMArgs)
customArgs = Settings.Default.CustomJVMArgs;
StartInfo.Arguments = String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args);
Debug.WriteLine(String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args));
return base.Start();
}
@@ -52,17 +49,8 @@ namespace Java
{
using (Process javaProcess = new Process())
{
if (!String.IsNullOrEmpty(JavaPath))
{
javaProcess.StartInfo.FileName = JavaPath;
javaProcess.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
}
else
{
javaProcess.StartInfo.FileName = "cmd.exe";
javaProcess.StartInfo.Arguments = String.Format("/c \" java -jar \"{0}\" {1} \"", JarPath, args);
}
javaProcess.StartInfo.FileName = JavaPath;
javaProcess.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
javaProcess.StartInfo.CreateNoWindow = true;
javaProcess.StartInfo.UseShellExecute = false;
javaProcess.StartInfo.RedirectStandardError = true;
@@ -88,31 +76,36 @@ namespace Java
{
using (Process javaProcess = new Process())
{
if (!String.IsNullOrEmpty(JavaPath))
{
javaProcess.StartInfo.FileName = JavaPath;
javaProcess.StartInfo.Arguments = "-version";
}
else
{
javaProcess.StartInfo.FileName = "cmd.exe";
javaProcess.StartInfo.Arguments = "/c \"java -version \"";
}
javaProcess.StartInfo.FileName = JavaPath;
javaProcess.StartInfo.Arguments = "-version";
javaProcess.StartInfo.CreateNoWindow = true;
javaProcess.StartInfo.UseShellExecute = false;
javaProcess.StartInfo.RedirectStandardError = true;
javaProcess.Start();
string output = javaProcess.StandardError.ReadToEnd();
javaProcess.WaitForExit(3000);
//I use _JAVA_OPTIONS so I want the prompt removed
if (output.Contains("_JAVA_OPTIONS"))
{
int n = 2;
string[] lines = output
.Split(Environment.NewLine.ToCharArray())
.Skip(n)
.ToArray();
output = string.Join(Environment.NewLine, lines);
}
if (!String.IsNullOrEmpty(output))
return output.Split(new[] { '\r', '\n' }).FirstOrDefault().Replace("java", "Java");
return output.Replace("\r\n\r\n", "\n").Trim();
else
return null;
}
}
catch
{
throw;
return null;
}
}
}
+38 -45
View File
@@ -4,40 +4,44 @@ using APKToolGUI.Properties;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
namespace Java
{
public class JavaUtils
{
public static bool TryGetSystemVariable(out string javaExeLocation)
public static string GetSystemVariable()
{
try
{
ProcessStartInfo procStartInfo = new ProcessStartInfo("java", "-version ");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
if (!String.IsNullOrEmpty(proc.StandardError.ReadToEnd()))
using (Process javaProcess = new Process())
{
javaExeLocation = "java";
return true;
}
else
{
javaExeLocation = null;
return false;
javaProcess.StartInfo.FileName = "where";
javaProcess.StartInfo.Arguments = "java";
javaProcess.StartInfo.CreateNoWindow = true;
javaProcess.StartInfo.UseShellExecute = false;
javaProcess.StartInfo.RedirectStandardError = true;
javaProcess.StartInfo.RedirectStandardOutput = true;
javaProcess.Start();
string output = javaProcess.StandardOutput.ReadToEnd();
javaProcess.WaitForExit();
if (!String.IsNullOrEmpty(output))
{
string[] paths = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
foreach (string path in paths)
{
return path;
}
}
}
}
catch
{
javaExeLocation = null;
return false;
return null;
}
return null;
}
private static string GetJavaInstallationPath()
{
@@ -82,34 +86,23 @@ namespace Java
public static string GetJavaPath()
{
string javaExec;
if (!JavaUtils.TryGetSystemVariable(out javaExec))
if (Settings.Default.UseCustomJavaExe)
{
javaExec = JavaUtils.SearchPath();
if (!File.Exists(javaExec))
{
if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
using (OpenFileDialog openJavaExe = new OpenFileDialog())
{
openJavaExe.Filter = "java.exe|java.exe";
if (openJavaExe.ShowDialog() == DialogResult.OK)
{
javaExec = Program.GetPortablePath(openJavaExe.FileName);
}
else
Environment.Exit(0);
}
}
else
Environment.Exit(0);
}
else
{
return javaExec;
}
return Settings.Default.JavaExe;
}
else
{
string javaExec = JavaUtils.GetSystemVariable();
if (String.IsNullOrEmpty(javaExec))
{
javaExec = JavaUtils.SearchPath();
if (File.Exists(javaExec))
{
return javaExec;
}
}
return javaExec;
}
return javaExec;
}
}
}
+454 -13
View File
@@ -19,7 +19,7 @@ namespace APKToolGUI.Languages {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Language {
@@ -60,6 +60,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Aborted.
/// </summary>
internal static string Aborted {
get {
return ResourceManager.GetString("Aborted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to About.
/// </summary>
@@ -132,6 +141,24 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Are you sure you want to cancel the process?.
/// </summary>
internal static string CancelProcess {
get {
return ResourceManager.GetString("CancelProcess", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Can&apos;t detect APKEditor version.
/// </summary>
internal static string CantDetectApkeditorVersion {
get {
return ResourceManager.GetString("CantDetectApkeditorVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Can&apos;t detect apktool version..
/// </summary>
@@ -159,6 +186,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to It is required to clear framework cache after changing Apktool version to avoid unexpected errors. Do you want to clear it now?.
/// </summary>
internal static string ClearFrameworkPrompt {
get {
return ResourceManager.GetString("ClearFrameworkPrompt", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Clearing Framework.
/// </summary>
@@ -168,6 +204,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Clearing temp folder.
/// </summary>
internal static string ClearTempFolder {
get {
return ResourceManager.GetString("ClearTempFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Compile APK.
/// </summary>
@@ -204,6 +249,51 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Are you sure you want to kill ADB server? You might need to reconnect your device or restart emulator.
/// </summary>
internal static string ConfirmKillingAdbServer {
get {
return ResourceManager.GetString("ConfirmKillingAdbServer", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Copy file &quot;{0}&quot; to &quot;{1}&quot;.
/// </summary>
internal static string CopyFileTo {
get {
return ResourceManager.GetString("CopyFileTo", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Copy file &quot;{0}&quot; to temp directory &quot;{1}&quot;.
/// </summary>
internal static string CopyFileToTemp {
get {
return ResourceManager.GetString("CopyFileToTemp", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Copy decompiled apk folder &quot;{0}&quot; to temp directory &quot;{1}&quot;.
/// </summary>
internal static string CopyFolderToTemp {
get {
return ResourceManager.GetString("CopyFolderToTemp", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Creating Unsigned APK.
/// </summary>
internal static string CreateUnsignedApk {
get {
return ResourceManager.GetString("CreateUnsignedApk", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Debug mode.
/// </summary>
@@ -231,6 +321,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Destination directory &quot;{0}&quot; already exists. Enable &quot;Force delete destination directory&quot; if you want to overwrite it..
/// </summary>
internal static string DecodeDesDirExists {
get {
return ResourceManager.GetString("DecodeDesDirExists", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Decompilation directory not selected..
/// </summary>
@@ -285,6 +384,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Decompiling all APK files.
/// </summary>
internal static string DecompilingAllApkFiles {
get {
return ResourceManager.GetString("DecompilingAllApkFiles", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Decompiling dex.
/// </summary>
@@ -303,6 +411,87 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Delete file &quot;{0}&quot;.
/// </summary>
internal static string DeleteFile {
get {
return ResourceManager.GetString("DeleteFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleting folder: {0}.
/// </summary>
internal static string DeletingFolder {
get {
return ResourceManager.GetString("DeletingFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} detected as base.
/// </summary>
internal static string DetectedAsBase {
get {
return ResourceManager.GetString("DetectedAsBase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} detected as split.
/// </summary>
internal static string DetectedAsSplit {
get {
return ResourceManager.GetString("DetectedAsSplit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Device is not selected.
/// </summary>
internal static string DeviceNotSelected {
get {
return ResourceManager.GetString("DeviceNotSelected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Device selected &quot;{0}&quot;.
/// </summary>
internal static string DeviceSelected {
get {
return ResourceManager.GetString("DeviceSelected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} devices found.
/// </summary>
internal static string DevicesFound {
get {
return ResourceManager.GetString("DevicesFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The directory &quot;{0}&quot; does not exist.
/// </summary>
internal static string DirectoryNotExist {
get {
return ResourceManager.GetString("DirectoryNotExist", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Directory &quot;{0}&quot; does not exist.
/// </summary>
internal static string DirNotExist {
get {
return ResourceManager.GetString("DirNotExist", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Done.
/// </summary>
@@ -331,16 +520,7 @@ namespace APKToolGUI.Languages {
}
/// <summary>
/// Looks up a localized string similar to Java is not found. Do you want to select custom location?.
/// </summary>
internal static string DoYouWantToSelectJavaLocation {
get {
return ResourceManager.GetString("DoYouWantToSelectJavaLocation", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You are running as administrator. Drag &amp; drop is not supported.
/// Looks up a localized string similar to You are running as administrator. Drag &amp; drop may not be supported.
/// </summary>
internal static string DragDropNotSupported {
get {
@@ -403,7 +583,16 @@ namespace APKToolGUI.Languages {
}
/// <summary>
/// Looks up a localized string similar to Java is not installed or is installed incorrectly. The program will be closed..
/// Looks up a localized string similar to There was an error getting APK infomation.
/// </summary>
internal static string ErrorGettingApkInfo {
get {
return ResourceManager.GetString("ErrorGettingApkInfo", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Java is not installed or is installed incorrectly. Please install Java or set custom location in Settings.
/// </summary>
internal static string ErrorJavaDetect {
get {
@@ -411,6 +600,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Merging failed.
/// </summary>
internal static string ErrorMerging {
get {
return ResourceManager.GetString("ErrorMerging", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This directory is not an Android package.
/// </summary>
@@ -537,6 +735,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Extracting all APK files.
/// </summary>
internal static string ExtractingAllApkFiles {
get {
return ResourceManager.GetString("ExtractingAllApkFiles", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File.
/// </summary>
@@ -564,6 +771,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Fixed apktool.yml.
/// </summary>
internal static string FixApktoolYml {
get {
return ResourceManager.GetString("FixApktoolYml", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Folder does not exist.
/// </summary>
@@ -610,7 +826,7 @@ namespace APKToolGUI.Languages {
}
/// <summary>
/// Looks up a localized string similar to Get APK Info.
/// Looks up a localized string similar to View APK Info.
/// </summary>
internal static string GetApkInfo {
get {
@@ -618,6 +834,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Getting devices....
/// </summary>
internal static string GettingDevices {
get {
return ResourceManager.GetString("GettingDevices", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Help.
/// </summary>
@@ -627,6 +852,42 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Input directory: {0}.
/// </summary>
internal static string InputDirectory {
get {
return ResourceManager.GetString("InputDirectory", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Input file: {0}.
/// </summary>
internal static string InputFile {
get {
return ResourceManager.GetString("InputFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to APK Installation failed.
/// </summary>
internal static string InstallApkFailed {
get {
return ResourceManager.GetString("InstallApkFailed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to APK Installation successfully.
/// </summary>
internal static string InstallApkSuccessful {
get {
return ResourceManager.GetString("InstallApkSuccessful", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Install framework.
/// </summary>
@@ -636,6 +897,24 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Installing APK.
/// </summary>
internal static string InstallingApk {
get {
return ResourceManager.GetString("InstallingApk", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Installing APK &quot;{0}&quot;.
/// </summary>
internal static string InstallingApkPath {
get {
return ResourceManager.GetString("InstallingApkPath", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Installing framework.
/// </summary>
@@ -663,6 +942,69 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Merge finished. Moving directory to &quot;{0}&quot;.
/// </summary>
internal static string MergeFinishedMoveDir {
get {
return ResourceManager.GetString("MergeFinishedMoveDir", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Merging APK.
/// </summary>
internal static string MergingApk {
get {
return ResourceManager.GetString("MergingApk", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Merging APK using APKEditor.jar.
/// </summary>
internal static string MergingApkEditor {
get {
return ResourceManager.GetString("MergingApkEditor", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to META-INF folder does not exist. Skipped.
/// </summary>
internal static string MetainfNotExist {
get {
return ResourceManager.GetString("MetainfNotExist", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Move temp folder &quot;{0}&quot; to output directory &quot;{1}&quot;.
/// </summary>
internal static string MoveTempApkFileToOutput {
get {
return ResourceManager.GetString("MoveTempApkFileToOutput", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Move temp apk &quot;{0}&quot; to output directory &quot;{1}&quot;.
/// </summary>
internal static string MoveTempApkToOutput {
get {
return ResourceManager.GetString("MoveTempApkToOutput", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Moving base directory to &quot;{0}&quot;.
/// </summary>
internal static string MovingBasedirectory {
get {
return ResourceManager.GetString("MovingBasedirectory", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to For the changes to take effect you must restart the program. You want to do it now?.
/// </summary>
@@ -672,6 +1014,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up.
/// </summary>
internal static string NoDevicesFound {
get {
return ResourceManager.GetString("NoDevicesFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This folder is not a decompiled APK.
/// </summary>
@@ -690,6 +1041,42 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Open compile output folder.
/// </summary>
internal static string OpenComFolder {
get {
return ResourceManager.GetString("OpenComFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Open decompile output folder.
/// </summary>
internal static string OpenDecFolder {
get {
return ResourceManager.GetString("OpenDecFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parsing APK Info....
/// </summary>
internal static string ParsingApkInfo {
get {
return ResourceManager.GetString("ParsingApkInfo", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Please wait....
/// </summary>
internal static string PleaseWait {
get {
return ResourceManager.GetString("PleaseWait", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Removed all ApkTool dummies.
/// </summary>
@@ -708,6 +1095,24 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Restart is required to apply changes. Do you want to restart the application?.
/// </summary>
internal static string RestartApplicationPrompt {
get {
return ResourceManager.GetString("RestartApplicationPrompt", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to .
/// </summary>
internal static string SetLanguageRestartApplication {
get {
return ResourceManager.GetString("SetLanguageRestartApplication", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Settings.
/// </summary>
@@ -789,6 +1194,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Split APK is not selected.
/// </summary>
internal static string SplitApkNotFound {
get {
return ResourceManager.GetString("SplitApkNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to System language.
/// </summary>
@@ -798,6 +1212,15 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Temp directory: &quot;{0}&quot;.
/// </summary>
internal static string TempDirectory {
get {
return ResourceManager.GetString("TempDirectory", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Text file.
/// </summary>
@@ -807,6 +1230,24 @@ namespace APKToolGUI.Languages {
}
}
/// <summary>
/// Looks up a localized string similar to Time ended: {0}.
/// </summary>
internal static string TimeEnded {
get {
return ResourceManager.GetString("TimeEnded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time started: {0}.
/// </summary>
internal static string TimeStarted {
get {
return ResourceManager.GetString("TimeStarted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to New version is available. Do you want to update?.
/// </summary>
+546
View File
@@ -0,0 +1,546 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Über</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Apktool-Version</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>Auf Aktualisierung prüfen</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Debug-Modus</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Beenden</value>
</data>
<data name="File" xml:space="preserve">
<value>Datei</value>
</data>
<data name="Help" xml:space="preserve">
<value>Hilfe</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Einstellungen</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java ist nicht oder nicht korrekt installiert. Java installieren oder einen eigenen Speicherort in den Einstellungen festlegen.</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Einstellungen für das Fehlerlesen</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Eine neue Version ist verfügbar. Möchtest du aktualisieren?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Aktualisierung verfügbar</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Dekompilierungsordner nicht ausgewählt!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>Datei zum Dekompilieren nicht ausgewählt!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>Datei zum Signieren nicht ausgewählt!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Framework nicht ausgewählt!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Fehler beim Einstellungen speichern!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>Damit die Änderungen wirksam werden, musst du das Programm neu starten. Willst du es jetzt tun?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>Datei wird nicht gefunden</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>Der Ordner existiert nicht</value>
</data>
<data name="Error" xml:space="preserve">
<value>Fehler</value>
</data>
<data name="Build" xml:space="preserve">
<value>Build</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Dekompilieren</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>Framework installieren</value>
</data>
<data name="Sign" xml:space="preserve">
<value>Signieren</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Systemsprache</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Möchtest du das Kontextmenü wirklich installieren?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Möchtest du das Kontextmenü wirklich entfernen?</value>
</data>
<data name="Done" xml:space="preserve">
<value>Fertig</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Apktool-Version wird nicht erkannt</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>Dekompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}"</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Fehlerhafte Aktualisierungsprüfung:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>Signieren erfolgreich abgeschlossen. Datei gespeichert unter "{0}"</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Abgleichen</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>Kompilieren fehlgeschlagen</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Fehler bei der Eingabe des Framework-Tags</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>Ausgewählte Datei nicht vorhanden</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Fehler bei Auswahl des Framework-Verzeichnisses</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Fehler bei Auswahl der Framework-Datei. Datei existiert nicht.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>Signieren fehlgeschlagen</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Fehler - Framework-Installation wird nicht gestartet</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>Framework installieren</value>
</data>
<data name="Signing" xml:space="preserve">
<value>Signieren</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>Eingabedatei nicht gefunden</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Privater Schlüssel - nicht gefunden</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Öffentlicher Schlüssel - nicht gefunden</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP archivieren</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>Ausgewähltes Dekompilierungsverzeichnis konnte nicht erstellt werden, da es ungültige Zeichen enthält.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>Dekompilierungsverzeichnis nicht ausgewählt</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>Ausgewähltes Framework-Verzeichnis nicht vorhanden</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Dekompilieren</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>Dekompilieren fehlgeschlagen</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Ausführbare Datei</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>Ziel-SDK auf 29 geändert</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Version parsen nicht möglich</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>AndroidManifest.xml repariert</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Alle Apk-Tool-Dummys entfernt</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK ausgewählt:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>Ausgewählter Ordner nicht vorhanden</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml nicht vorhanden</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>Dekompiliertes APK-Verzeichnis existiert nicht</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>Hauptaktivität gefunden in "{0}"</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>MainActivity konnte nicht gefunden werden, manuell suchen.</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Framework bereinigen</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Kompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zipaligning fehlgeschlagen</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zipalign erfolgreich abgeschlossen. Datei gespeichert unter "{0}"</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Framework-Fehler bereinigen</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Framework Fehlerbereinigung</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Alles fertig!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Framework erfolgreich installiert</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>Framework-Verzeichnis nicht vorhanden</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Dex dekompilieren</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>Ausgewählter Ausgabeordner nicht vorhanden</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Dex dekompilieren</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Wird als Administrator ausgeführt. Drag &amp; Drop wird möglicherweise nicht unterstützt</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Drag &amp; Drop wird unterstützt</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Verzeichnis ist kein Android-Paket</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>APK kompilieren</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>DEX kompilieren</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>APK dekompilieren</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>DEX dekompilieren</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>APK-Info anzeigen</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Ordner ist keine dekompilierte APK</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Ordner ist kein dekompilierte DEX</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Erforderliche Dateien fehlen</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>APK signieren</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Textdatei</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>Zipalign APK</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Unsignierte APK erstellen</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>Ordner META-INF existiert nicht. Übersprungen</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>Fehler beim Abrufen von APK-Informationen</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Eingabeverzeichnis: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Eingabedatei: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>Datei löschen "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>Datei "{0}" in temporäres Verzeichnis "{1}" kopieren</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Dekompilierten Apk-Ordner "{0}" in temporäre Verzeichnis "{1}" kopieren</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>Zielverzeichnis "{0}" existiert bereits. Aktivieren "Löschen des Zielverzeichnisses erzwingen", wenn du es überschreiben möchtest.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Temporären Ordner "{0}" in das Ausgabeverzeichnis "{1}" verschieben</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Temporäre Apk "{0}" in das Ausgabeverzeichnis "{1}" verschieben</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>APK-Informationen parsen …</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>Ein Neustart ist erforderlich, um die Änderungen zu übernehmen. Möchtest du die Anwendung neu starten?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Alle APK-Dateien dekompilieren</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} als Basis erkannt</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} als gesplittet erkannt</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Alle APK-Dateien extrahieren</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Zusammenführen abgeschlossen. Verzeichnis verschieben nach "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>APK zusammenführen</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Basisverzeichnis verschieben nach "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>Verzeichnis "{0}" existiert nicht</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Temp-Verzeichnis: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Zusammenführen fehlgeschlagen</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>APK mit APKEditor.jar zusammenführen</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>Abgebrochen</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>Sicher, dass du den Vorgang abbrechen willst?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Geräte erkennen …</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Bitte warten …</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>Sicher, dass du den ADB-Server beenden willst? Möglicherweise musst du dein Gerät neu anschließen oder den Emulator neu starten.</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Kein Gerät ausgewählt</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Gerät ausgewählt "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>{0} Gerät gefunden</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>APK Installation fehlgeschlagen</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>APK Installation erfolgreich</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>APK installieren</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>APK installieren "{0}"</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>Keine Geräte gefunden. Vergewissere dich, dass dein Gerät mit dem Computer verbunden ist und das ADB-Debugging aktiviert ist. Wenn du einen Emulator verwendest, starte ihn neu und warte, bis er hochgefahren ist</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Beendet: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Gestartet: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>Es ist erforderlich, den Framework-Cache nach einer Änderung der Apktool-Version zu löschen, um unerwartete Fehler zu vermeiden. Möchtest du ihn jetzt löschen?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>Temp-Ordner löschen</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>Ordner löschen: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>Verzeichnis "{0}" existiert nicht</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>Kompilier-Ausgabeordner öffnen</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>Dekompilier-Ausgabeordner öffnen</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>Apktool.yml repariert</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>Datei "{0}" nach "{1}" kopieren</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>Split-APK nicht ausgewählt</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value>APKEditor Version wird nicht erkannt</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value>Sprache installiert. Programm neu starten?</value>
</data>
</root>
+516
View File
@@ -0,0 +1,516 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Rólunk</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Apktool verzió</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>Frissítés keresése</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Hibakereső mód</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Kilépés</value>
</data>
<data name="File" xml:space="preserve">
<value>Fájl</value>
</data>
<data name="Help" xml:space="preserve">
<value>Súgó</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Beállítások</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java nincs vagy rosszul van telepítve. Telepítse a Javát vagy adja meg az egyéni helyét a Beállításokban</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Hiba a beállítások olvasásakor!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Új verzió érhető el. Szeretne frissíteni?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Nincs frissítés.</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Dekódolási mappa nincs kiválasztva!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>A dekódolandó fájl nincs kiválasztva!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>Az aláírni szánt fájl nincs kiválasztva!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>A framework nincs kiválasztva!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Hiba a beállítások mentése során!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>A módosítások érvényesítéséhez újra kell indítania a programot. Most akarja megtenni?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>A fájl nem található</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>A mappa nem létezik</value>
</data>
<data name="Error" xml:space="preserve">
<value>Hiba</value>
</data>
<data name="Build" xml:space="preserve">
<value>Build</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Dekódolás</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>A keretrendszer telepítése</value>
</data>
<data name="Sign" xml:space="preserve">
<value>Aláírás</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Rendszer nyelve</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Tényleg telepíteni szeretné a kontextus menüt?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Tényleg el akarja távolítani a kontextus menüt?</value>
</data>
<data name="Done" xml:space="preserve">
<value>Kész</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Nem érzékeli az apktool verzióját.</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>A dekompilálás sikeresen befejeződött. Kimeneti könyvtár "{0}".</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Frissítés ell. hiba:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>Az aláírás sikeresen befejeződött. Fájl mentve: "{0}".</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Igazítás</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>A kódolás sikertelen</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Hiba a framework címke bevitelében.</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>A kiválasztott fájl nem létezik.</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Hiba a keretrendszer könyvtár kiválasztásában.</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Hiba a keretrendszer fájl kiválasztásában. A fájl nem létezik.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>Az aláírás sikertelen.</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Hiba. A keretrendszer telepítése nem indult el.</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>A keretrendszer telepítése</value>
</data>
<data name="Signing" xml:space="preserve">
<value>Aláírás</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>A bemeneti fájl nem található.</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Privát kulcs nem található.</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Nyilvános kulcs nem található.</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP archívumok</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>A kiválasztott dekompilációs könyvtárat nem lehetett létrehozni, mert érvénytelen karaktereket tartalmaz.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>A dekompilációs könyvtár nincs kiválasztva.</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>A kiválasztott keretkönyvtár nem létezik.</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Dekódolás</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>A dekompilálás sikertelen</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Végrehajtható fájl</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>A cél SDK 29-re változott</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Nem sikerült elemezni a verziót</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>Javított AndroidManifest.xml</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Eltávolítottuk az összes ApkTool dummie-t</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK kiválasztva:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>A kiválasztott mappa nem létezik.</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>Az AndroidManifest.xml nem létezik</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>A dekompilált APK könyvtár nem létezik</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>A MainActivity itt, "{0}" található</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>Nem találta a MainActivity-t. Kérjük keresse meg manuálisan</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Keretrendszer tisztítás</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Az összeállítás sikeresen befejeződött. Kimeneti könyvtár "{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>A Zipalign nem sikerült</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>A Zipalign sikeresen befejeződött. Fájl ide mentve "{0}"</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Keretrendszer törlési hiba</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>A keretrendszer gyorsítótára törölve</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Minden kész!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>A keretrendszer sikeresen települt</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>A keretrendszer könyvtár nem létezik</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Dex dekódolása</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>A kiválasztott kimeneti mappa nem létezik.</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Dex összeállítása</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Rendszergazdaként fut. A Húzd &amp; Dobd nem támogatott</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>A Húzd &amp; Dobd támogatott</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Ez a könyvtár nem egy Android csomag</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>APK összeállítása</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>DEX összeszerelése</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>APK dekompilálása</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>DEX szétszerelése</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>APK infó beszerzése</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Ez a mappa nem egy dekompilált APK</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Ez a mappa nem dekompilált DEX</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Szükséges fájlok hiányoznak</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>APK aláírása</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Szöveg fájl</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>APK Zipalign</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Aláírás nélküli APK létrehozása</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>A META-INF mappa nem létezik. Kihagyva</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>Hiba történt az APK-infó megszerzésében</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Bemeneti könyvtár: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Bemeneti fájl: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>"{0}" fájl törlése</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>"{0}" fájl másolása "{1}" ideiglenes könyvtárba.</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Dekompilált apk mappa "{0}" másolása "{1}" ideiglenes könyvtárba.</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>A "{0}" célkönyvtár már létezik. Ha felül szeretné írni, engedélyezze a "Célkönyvtár kényszerített törlésének" beállítását.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>A "{0}" ideiglenes mappa áthelyezése a "{1}" kimeneti könyvtárba</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>A(z) "{0}" ideiglenes apk áthelyezése a "{1}" kimeneti könyvtárba</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>APK információk elemzése...</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Az összes APK fájl visszafejtése</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} bázisként észlelve</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} részeként észlelve</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Az összes APK fájl kicsomagolása</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Egyesítés kész. Könyvtár áthelyezése ide: "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>APK egyesítése</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Bázis könyvtár áthelyezése ide: "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>A(z) "{0}" könyvtár nem létezik</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Temp könyvtár: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Az ˘egyesítés nem sikerült</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>APK egyesítése az APKEditor.jar használatával</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>Megszakítva</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>Biztosan megszakítja a folyamatot?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Eszközök keresése...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Kis türelmet...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>Biztosan leállítja az ADB szervert? Lehet, hogy újra kell csatlakoztatnia az eszközt, vagy újra kell indítania az emulátort</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Az eszköz nincs kiválasztva</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Kiválasztott eszköz: "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>{0} eszköz található</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>Az APK telepítése nem sikerült</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>Az APK telepítése sikeres volt</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>APK telepítése</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>"{0}" APK telepítése</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>Nem találhatók eszközök. Győződjön meg róla, hogy eszközén be van kapcsolva az adb hibakeresés. Ha emulátort használ, indítsa újra és várja meg amíg elindul</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Befejezve: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Elkezdve: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>A váratlan hibák elkerülése érdekében az Apktool verziójának módosítása után törölni kell a framework gyorsítótárát. Szeretné most törölni?</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value>A nyelv be van állítva. Újra akarja indítani az alkalmazást?</value>
</data>
</root>
+546
View File
@@ -0,0 +1,546 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>バージョン情報</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Apktool のバージョン</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>更新を確認する</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>デバッグモード</value>
</data>
<data name="Exit" xml:space="preserve">
<value>終了</value>
</data>
<data name="File" xml:space="preserve">
<value>ファイル</value>
</data>
<data name="Help" xml:space="preserve">
<value>ヘルプ</value>
</data>
<data name="Settings" xml:space="preserve">
<value>設定</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java がインストールされていないか、正しくインストールされていません。 Java をインストールするか、設定でカスタムの場所を設定してください。</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>設定の読み取りエラーです!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>新しいバージョン利用可能です。 更新しますか?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>利用可能な更新はありません。</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>デコード先のフォルダーが未選択です!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>デコードするファイルが未選択です!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>署名用のファイルが未選択です!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>フレームワークが未選択です!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>設定の保存エラーです!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>設定を有効化するにはプログラムを再起動してください。 今すぐしますか?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>ファイルが見つかりません</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>フォルダーが存在しません</value>
</data>
<data name="Error" xml:space="preserve">
<value>エラー</value>
</data>
<data name="Build" xml:space="preserve">
<value>ビルド</value>
</data>
<data name="Decode" xml:space="preserve">
<value>デコード</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>フレームワークをインストール</value>
</data>
<data name="Sign" xml:space="preserve">
<value>署名</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>システムの言語</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>コンテキストメニューをインストールしますか?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>コンテキストメニューを削除しますか?</value>
</data>
<data name="Done" xml:space="preserve">
<value>完了</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>apktool のバージョンを検出できません。</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>デコンパイルが正常に完了しました。 出力先のディレクトリ: {0}</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>更新の確認でエラーが発生しました:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>署名は正常に完了しました。 ファイルの保存先: {0}</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>最適化中</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>コンパイルに失敗しました</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>フレームワークタグの入力エラーです。</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>選択したファイルは存在しません。</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>フレームワークディレクトリの選択中にエラーが発生しました。</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>フレームワークファイルの選択中にエラーが発生しました。 ファイルが存在しません。</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>署名に失敗しました。</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>エラーが発生しました。 フレームワークのインストールが開始されていません。</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>フレームワークをインストール</value>
</data>
<data name="Signing" xml:space="preserve">
<value>署名</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>入力先のファイルがありません。</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>秘密鍵がありません。</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>公開鍵がありません。</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP アーカイブ</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>無効な文字が含まれているため、選択したデコンパイルディレクトリを作成できませんでした。</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>デコンパイルディレクトリが未選択です。</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>選択したフレームワークディレクトリが存在しません。</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>デコード中</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>デコンパイルに失敗しました</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>実行可能なファイル</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>ターゲット SDK を 29 に変更する</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>バージョンの解析に失敗しました</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>AndroidManifest.xml を修正しました</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>すべての ApkTook ダミーを削除しました</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>選択した APK:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>選択したフォルダーは存在しません。</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml が存在しません</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>デコンパイルされた APK ディレクトリが存在しません</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>「{0}」でメインアクティビティが見つかりました</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>メインアクティビティが見つかりませんでした。 手動で検索してください</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>フレームワークを消去</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>コンパイルが正常に完了しました。 出力先ディレクトリ: {0}</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zipaligning に失敗しました</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zipalign が正常に完了しました。 ファイルは「{0}」に保存されました</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>フレームワークの消去でエラーが発生しました</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>フレームワークキャッシュを消去しました</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>すべて完了しました!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>フレームワークが正常にインストールされました</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>フレームワークディレクトリが存在しません</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>DEX をデコンパイル中</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>選択した出力先フォルダーが存在しません。</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>DEX をコンパイル中</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>管理者として実行中です。 ドラッグ &amp; ドロップはサポートされていない可能性があります</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>ドラッグ &amp; ドロップはサポートされています</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>このディレクトリは Android パッケージではありません</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>APK をコンパイル</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>DEX を組み立て</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>APK をデコンパイル</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>DEX を分解</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>APK 情報を表示</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>このフォルダーはデコンパイルされた APK ではありません</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>このフォルダーはデコンパイルされた DEX ではありません</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>必要なファイルが見つかりません</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>APK を署名</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>テキストファイル</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>APK を最適化</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>未署名の APK を作成</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>META-INF フォルダーがありません。 スキップしました</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>アプリ情報の取得中にエラーが発生しました</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>入力先のディレクトリ: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>入力ファイル: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>「{0}」のファイルを削除</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>「{0}」のファイルを一時ディレクトリ「{1}」にコピーします</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>デコンパイルされた apk フォルダー「{0}」を一時ディレクトリの「{1}」コピーします</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>宛先のディレクトリ「{0}」は既に存在します。 上書きする場合は「宛先のディレクトリを強制的に削除」を有効化してください。</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>一時フォルダー「{0}」を出力先ディレクトリ「{1}」に移動します</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>一時 APK「{0}」を出力先ディレクトリ「{1}」に移動します</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>APK 情報を解析中です...</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>変更を適用するには再起動が必要です。 アプリを再起動しますか?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>すべての APK ファイルをデコンパイル中</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} がベースとして検出されました</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} が分割として検出されました</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>すべての APK ファイルを展開中</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>統合が完了しました。 ディレクトリを「{0}」に移動中です</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>APK を統合中</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>ベースディレクトリを「{0}」に移動中です</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>ディレクトリ「{0}」は存在しません</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>一時ディレクトリ: {0}</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>統合に失敗しました</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>APKEditor.jar を使用して APK を統合する</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>中断しました</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>プロセスをキャンセルしますか?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>デバイスを取得中です...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>お待ちください...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>ADB サーバーを強制終了しますか? デバイスを再接続するか、エミュレーターを再起動する必要があるかもしれません</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>デバイスが未選択です</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>選択されたデバイス: {0}</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>{0} 件のデバイスを検出</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>APK のインストールに失敗しました</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>APK のインストールに成功しました</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>APK をインストール中</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>APK「{0}」をインストール中です</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>デバイスはありません。 adb デバイスが ON になっている状態でデバイスがコンピューターに接続されていることを確認してください。 エミュレーターを使用する場合は、再起動して起動まで待機します</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>終了時間: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>開始時間: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>予期しないエラーを回避するには、Apktook のバージョンを変更後にフレームワークキャッシュを消去する必要があります。 今すぐに消去しますか?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>一時フォルダーを削除中</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>削除するフォルダー: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>ディレクトリ「{0}」は存在しません</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>コンパイル出力先フォルダーを開く</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>デコンパイル出力先フォルダーを開く</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>apktool.yml を修正しました</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>「{0}」のファイルを「{1}」にコピー</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>分割 APK は未選択です</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value> APKEditor バージョンの検出ができません</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value />
</data>
</root>
+429
View File
@@ -0,0 +1,429 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Sobre</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Alinhar</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Tudo concluído!</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml não existe</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK selecionado:</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Versão do apktool</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Build" xml:space="preserve">
<value>Compilar</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Não foi possível detectar a versão do apktool.</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>SDK de destino alterado para 29</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>Verificar por atualizações</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Limpando framework</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>Compilar APK</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>Montar DEX</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Compilando DEX</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Compilado com sucesso. Pasta de saída: "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>Copiar arquivo "{0}" para pasta temporária "{1}"</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Copiar pasta "{0}" do APK descompilado para pasta temporária "{1}"</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Criando APK não assinado</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Modo de depuração</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Decodificar</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>A pasta de descompilação selecionada não pôde ser criado porque contém caracteres inválidos.</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>A pasta de destino "{0}" já existe. Ative "Forçar excluir pasta de destino" se quiser substituí-la.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>Pasta de descompilação não selecionada.</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>A pasta do framework selecionado não existe.</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Decodificando</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>Descompilar APK</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>A pasta do APK descompilado não existe</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>Desmontar DEX</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Descompilando DEX</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>Descompilado com sucesso. Pasta de saída "{0}".</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>Excluir arquivo "{0}"</value>
</data>
<data name="Done" xml:space="preserve">
<value>Concluído</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Você realmente deseja instalar o menu de contexto?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Você realmente deseja remover o menu de contexto?</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Você está executando como Administrador. Arrastar e soltar não é suportado</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Arrastar e soltar é suportado</value>
</data>
<data name="Error" xml:space="preserve">
<value>Erro</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Erro ao limpar o framework</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>Falha ao compilar</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>Falha ao descompilar</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Erro ao entrar etiqueta do framework.</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>Ocorreu um erro ao obter as informações do APK</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>O Java não está instalado ou está instalado incorretamente. Instale o Java ou defina um local personalizado em Configurações</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Esta pasta não é um pacote do Android</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Erro ao ler as configurações!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Erro ao salvar as configurações!</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>O arquivo selecionado não existe.</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>A pasta selecionada não existe.</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>A pasta de saída selecionada não existe.</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Erro ao selecionar a pasta do framework.</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Erro ao selecionar arquivo do framework. O arquivo não existe.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>Falha ao assinar.</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Erro ao verificar por atualizações:</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Falha ao analisar a versão</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Falha ao alinhar ZIP</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Arquivo executável</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Sair</value>
</data>
<data name="File" xml:space="preserve">
<value>Arquivo</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>Arquivo não encontrado</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>AndroidManifest.xml corigido</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>A pasta não existe</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Cache do framework limpo</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>A pasta do framework não existe</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Erro: A instalação do framewoek não foi iniciada.</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Framework instalado com sucesso</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>Obter informações do APK</value>
</data>
<data name="Help" xml:space="preserve">
<value>Ajuda</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Pasta de entrada: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Arquivo de entrada: {0}</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>Instalar framework</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>Instalando framework</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>MainActivity encontrado em "{0}"</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>Não foi possível localizar MainActivity. Por favor, encontre-o manualmente.</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>A pasta META-INF não existe. Ignorado</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Mova a pasta temporária "{0}" para a pasta de saída "{1}"</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Mover o APK temporário "{0}" para a pasta de saída "{1}"</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>Para que as alterações entrem em vigor, você deve reiniciar o programa. Você quer fazer isso agora?</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Esta pasta não é um APK descompilado</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Esta pasta não é um DEX descompilado</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Removidos todos os dummies do apktool</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Arquivos necessários ausentes</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Configurações</value>
</data>
<data name="Sign" xml:space="preserve">
<value>Assinar</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>Assinar APK</value>
</data>
<data name="Signing" xml:space="preserve">
<value>Assinando</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>Arquivo de entrada não localizado.</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Chave privada não localizada.</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Chave pública não localizada.</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>Assinatura concluída com sucesso. Arquivo salvo em "{0}".</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Idioma do sistema</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Arquivo de texto</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Nova versão disponível. Deseja atualizar?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Nenhuma atualização está disponível.</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Pasta de decodificação não selecionada!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>Arquivo para decodificação não selecionado!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>Arquivo para assinar não selecionado!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Framework não selecionado!</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Alinhar ZIP</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>Alinhar ZIP do APK</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Alinhar ZIP concluído com sucesso. Arquivo salvo em "{0}"</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>Arquivos ZIP</value>
</data>
</root>
+153 -6
View File
@@ -142,7 +142,7 @@
<value>Settings</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java is not installed or is installed incorrectly. The program will be closed.</value>
<value>Java is not installed or is installed incorrectly. Please install Java or set custom location in Settings</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Error reading settings!</value>
@@ -204,9 +204,6 @@
<data name="Done" xml:space="preserve">
<value>Done</value>
</data>
<data name="DoYouWantToSelectJavaLocation" xml:space="preserve">
<value>Java is not found. Do you want to select custom location?</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Can't detect apktool version.</value>
</data>
@@ -346,7 +343,7 @@
<value>Compiling dex</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>You are running as administrator. Drag &amp; drop is not supported</value>
<value>You are running as administrator. Drag &amp; drop may not be supported</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Drag &amp; drop is supported</value>
@@ -376,7 +373,7 @@
<value>Disassemble DEX</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>Get APK Info</value>
<value>View APK Info</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>This folder is not a decompiled APK</value>
@@ -396,4 +393,154 @@
<data name="ZipalignApk" xml:space="preserve">
<value>Zipalign APK</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Creating Unsigned APK</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>META-INF folder does not exist. Skipped</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>There was an error getting APK infomation</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Input directory: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Input file: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>Delete file "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>Copy file "{0}" to temp directory "{1}"</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Copy decompiled apk folder "{0}" to temp directory "{1}"</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>Destination directory "{0}" already exists. Enable "Force delete destination directory" if you want to overwrite it.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Move temp folder "{0}" to output directory "{1}"</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Move temp apk "{0}" to output directory "{1}"</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>Parsing APK Info...</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>Restart is required to apply changes. Do you want to restart the application?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Decompiling all APK files</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} detected as base</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} detected as split</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Extracting all APK files</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Merge finished. Moving directory to "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>Merging APK</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Moving base directory to "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>Directory "{0}" does not exist</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Temp directory: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Merging failed</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>Merging APK using APKEditor.jar</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>Aborted</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>Are you sure you want to cancel the process?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Getting devices...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Please wait...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>Are you sure you want to kill ADB server? You might need to reconnect your device or restart emulator</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Device is not selected</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Device selected "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>{0} devices found</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>APK Installation failed</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>APK Installation successfully</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>Installing APK</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>Installing APK "{0}"</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Time ended: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Time started: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>It is required to clear framework cache after changing Apktool version to avoid unexpected errors. Do you want to clear it now?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>Clearing temp folder</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>Deleting folder: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>The directory "{0}" does not exist</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>Open compile output folder</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>Open decompile output folder</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>Fixed apktool.yml</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>Copy file "{0}" to "{1}"</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>Split APK is not selected</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value>Can't detect APKEditor version</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value />
</data>
</root>
+380 -11
View File
@@ -117,26 +117,83 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="SystemLanguage" xml:space="preserve">
<value>Язык системы</value>
<data name="About" xml:space="preserve">
<value>О программе</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Доступна новая версия. Выполнить обновление?</value>
<data name="APKToolVersion" xml:space="preserve">
<value>Версия Apktool</value>
</data>
<data name="Done" xml:space="preserve">
<value>Готово</value>
<data name="CheckForUpdate" xml:space="preserve">
<value>Проверить обновления</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Режим Debug</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Выход</value>
</data>
<data name="File" xml:space="preserve">
<value>Файл</value>
</data>
<data name="Help" xml:space="preserve">
<value>Помощь</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Настройки</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java не установлена или установлена не корректно. Программа будет закрыта.</value>
<value>Java не установлена или установлена некорректно. Пожалуйста, установите Java или укажите путь в настройках</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Ошибка при чтении файла настроек!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Доступна новая версия. Загрузить обновление?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Нет доступных обновлений.</value>
<value>Нет обновлений.</value>
</data>
<data name="DoYouWantToSelectJavaLocation" xml:space="preserve">
<value>Java не найдена. Хотите указать расположение вручную?</value>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Папка для декодирования не выбрана!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>Файл для декодирования не выбран!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>Файл для подписи не выбран!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Фреймворк не выбран!</value>
<value>Не выбраны необходимые компоненты!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Ошибка при сохранении файла настроек!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>Для завершения обновления необходим перезапуск. Перезапустить сейчас?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>Файл не найден</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>Папка не найдена</value>
</data>
<data name="Error" xml:space="preserve">
<value>Ошибка</value>
</data>
<data name="Build" xml:space="preserve">
<value>Build</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Декодирование</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>Установка</value>
</data>
<data name="Sign" xml:space="preserve">
<value>Подпись</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Язык системы</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Вы действительно хотите установить контекстное меню?</value>
@@ -144,4 +201,316 @@
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Вы действительно хотите удалить контекстное меню?</value>
</data>
<data name="Done" xml:space="preserve">
<value>Готово</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Не определена версия apktool.</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>Декомпиляция успешно завершена. Выходная директория "{0}".</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Ошибка при проверке обновлений:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>Операция успешно завершена. Файл сохранен в "{0}".</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Aligning</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>Ошибка при компиляции</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Ошибка ввода тегов</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>Выбранный файл не существует.</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Ошибка при выборе папки.</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Ошибка при выборе файла. Файл не существует.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>Sign: ошибка</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Ошибка. Установка не запущена.</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>Установка</value>
</data>
<data name="Signing" xml:space="preserve">
<value>Подписывание</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>Входной файл не найден.</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Приватный ключ не найден.</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Публичный ключ не найден.</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP архивы</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>Выбранная директория содержит недопустимые символы и не может быть создана.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>Папка для декомпиляции не выбрана.</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>Выбранная папка не существует</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Декодирование</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>Ошибка при декодировании</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Исполняемый файл</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>Изменена версия SDK на 29</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Ошибка при считывании версии</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>Измененный AndroidManifest.xml</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Удалены все дополнения для ApkTool</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>Выбранный APK:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>Выбранная папка не существует.</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml не найден</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>Декомпилированный каталог APK не существует</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>MainActivity найден в "{0}"</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>Не найден MainActivity. Попробуйте выполнить поиск вручную</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Очистка</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Компиляция успешно завершена. Выходная папка "{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zipalign: ошибка</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zipalign: успешно завершено. Файл сохранен в "{0}"</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Ошибка при очистке</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Кеш очищен</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Завершено!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Успешно установлено</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>Папка не существует</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Декомпиляция DEX</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>Выбранная выходная папка не существует.</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Компиляция DEX</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Программа запущена в режиме администратора. Drag &amp; drop не поддерживается</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Drag &amp; drop поддерживается</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Эта папка не является пакетом Android</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>Компиляция APK</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>Assemble DEX</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>Декомпиляция APK</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>Дизассемблирование DEX</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>Информация о APK</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Эта папка не является декомпилированным АРК</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Эта папка не является декомпилированным DEX</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Отсутствуют необходимые файлы</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>Подпись APK</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Текстовый файл</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>Zipalign APK</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Создание APK (unsigned)</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>Папка META-INF не существует.</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>Ошибка при получении информации о APK</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Входная папка: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Входной файл: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>Удален файл "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>Файл "{0}" скопирован во временную папку "{1}"</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Копирование декомпилированного АРК "{0}" во временную папку "{1}"</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>Целевая папка "{0}" уже существует. Используйте опцию принудительного удаления, если вы хотите ее перезаписать.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Перемещение временной папки "{0}" в выходной каталог "{1}"</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Перемещение временного АРК "{0}" в выходной каталог "{1}"</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>Чтение информации о APK...</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Декомпиляция всех APK файлов</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} определен как базовый</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} определен как split</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Извлечение всех APK файлов</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Слияние завершено. Перемещение каталога в "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>Слияние APK</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Перемещение базового каталога в "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>Папка "{0}" не существует</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Временная папка: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Ошибка при слиянии</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>Слияние APK с помощью APKEditor.jar</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>Отменено</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>Вы действительно хотите прервать процесс?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Получение устройств...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Пожалуйста, подождите...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>Вы действительно хотите завершить работу ADB сервера? После завершения работы необходимо переподключить устройство или перезапустить эмулятор</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Устройство не выбрано</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Выбрано устройство "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>Найдено {0} устройств</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>Ошибка при установке АРК</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>Установка АРК успешно завершена</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>Установка APK</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>Установлено APK "{0}"</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>Устройств не обнаружено. Убедитесь, что ваше устройство подключено к компьютеру с включенной отладкой ADB. Если вы используете эмулятор, перезапустите его и дождитесь завершения загрузки</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Время завершения: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Время начала: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>После изменения версии Apktool необходимо очистить кеш. Вы хотите очистить его сейчас?</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value>Язык установлен. Хотите перезапустить программу?</value>
</data>
</root>
+546
View File
@@ -0,0 +1,546 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Hakkında</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Apktool sürümü</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>Güncellemeleri kontrol et</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Hata ayıklama modu</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Çıkış</value>
</data>
<data name="File" xml:space="preserve">
<value>Dosya</value>
</data>
<data name="Help" xml:space="preserve">
<value>Yardım</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Ayarlar</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java yüklü değil veya yanlış yüklenmiş. Lütfen Javayı yükleyin veya Ayarlardan özel konumu ayarlayın</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Ayarlar okunurken hata oluştu!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Yeni bir sürüm mevcut. Güncellemek ister misiniz?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Güncelleme mevcut değil.</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Çözümleme klasörü seçilmedi!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>Çözümleme için dosya seçilmedi!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>İmzalama için dosya seçilmedi!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Çerçeve seçilmedi!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Ayarlar kaydedilirken hata oluştu!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>Değişikliklerin etkili olması için programı yeniden başlatmanız gerekiyor. Şimdi yapmak ister misiniz?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>Dosya bulunamadı</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>Klasör mevcut değil</value>
</data>
<data name="Error" xml:space="preserve">
<value>Hata</value>
</data>
<data name="Build" xml:space="preserve">
<value>Derle</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Çözümle</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>Çerçeveyi yükle</value>
</data>
<data name="Sign" xml:space="preserve">
<value>İmzala</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Sistem dili</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Bağlam menüsünü gerçekten yüklemek istiyor musunuz?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Bağlam menüsünü gerçekten kaldırmak istiyor musunuz?</value>
</data>
<data name="Done" xml:space="preserve">
<value>Tamamlandı</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Apktool sürümü tespit edilemedi.</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>Çözümleme başarıyla tamamlandı. Çıkış dizini "{0}".</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Güncelleme kontrolü hatası:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>İmzalama başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi.</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Hizalama</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>Derleme başarısız</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Çerçeve etiketi girilirken hata oluştu.</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>Seçilen dosya mevcut değil.</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Çerçeve dizini seçilirken hata oluştu.</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Çerçeve dosyası seçilirken hata oluştu. Dosya mevcut değil.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>İmzalama başarısız.</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Hata. Çerçeve kurulumu başlatılmadı.</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>Çerçeve yükleniyor</value>
</data>
<data name="Signing" xml:space="preserve">
<value>İmzalanıyor</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>Giriş dosyası bulunamadı.</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Özel anahtar bulunamadı.</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Genel anahtar bulunamadı.</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP arşivleri</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>Seçilen çözümleme dizini, geçersiz karakterler içerdiği için oluşturulamadı.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>Çözümleme dizini seçilmedi.</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>Seçilen çerçeve dizini mevcut değil.</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Çözümleniyor</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>Çözümleme başarısız</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Çalıştırılabilir dosya</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>Hedef SDK 29a değiştirildi</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Sürüm ayrıştırılamadı</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>AndroidManifest.xml düzeltildi</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Tüm ApkTool kuklaları kaldırıldı</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK Seçildi:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>Seçilen klasör mevcut değil.</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml mevcut değil</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>Çözümlenmiş APK dizini mevcut değil</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>Ana aktivite "{0}" içinde bulundu</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>MainActivity bulunamadı. Lütfen manuel olarak bulun</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Çerçeve temizleniyor</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Derleme başarıyla tamamlandı. Çıkış dizini "{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zipalign başarısız</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zipalign başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Çerçeve temizlenirken hata oluştu</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Çerçeve önbelleği temizlendi</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Hepsi tamamlandı!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Çerçeve başarıyla yüklendi</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>Çerçeve dizini mevcut değil</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Dex çözümlemesi yapılıyor</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>Seçilen çıkış klasörü mevcut değil.</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Dex derleniyor</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Yönetici olarak çalışıyorsunuz. Sürükle ve bırak desteklenmeyebilir</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Sürükle ve bırak destekleniyor</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Bu dizin bir Android paketi değil</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>APKyı derle</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>DEXi birleştir</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>APKyı çözümle</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>DEXi parçala</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>APK Bilgilerini Görüntüle</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Bu klasör çözümlenmiş bir APK değil</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Bu klasör çözümlenmiş bir DEX değil</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Gerekli dosyalar eksik</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>APKyı imzala</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Metin dosyası</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>APKyı zipalign yap</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>İmzasız APK oluşturuluyor</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>META-INF klasörü mevcut değil. Atlandı</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>APK bilgileri alınırken hata oluştu</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Giriş dizini: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Giriş dosyası: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>"{0}" dosyasını sil</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>"{0}" dosyasını "{1}" geçici dizinine kopyala</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Çözümlenmiş apk klasörünü "{0}" "{1}" geçici dizinine kopyala</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>Hedef dizin "{0}" zaten mevcut. Üzerine yazmak istiyorsanız "Hedef dizini zorla sil" seçeneğini etkinleştirin.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Geçici klasörü "{0}" çıkış dizinine "{1}" taşı</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Geçici apkyı "{0}" çıkış dizinine "{1}" taşı</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>APK Bilgileri Ayrıştırılıyor...</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>Değişiklikleri uygulamak için yeniden başlatma gerekiyor. Uygulamayı şimdi yeniden başlatmak ister misiniz?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Tüm APK dosyaları çözümleniyor</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} temel olarak algılandı</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} bölünmüş olarak algılandı</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Tüm APK dosyaları çıkarılıyor</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Birleştirme tamamlandı. Dizin "{0}" konumuna taşınıyor</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>APK birleştiriliyor</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Temel dizin "{0}" konumuna taşınıyor</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>"{0}" dizini mevcut değil</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Geçici dizin: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Birleştirme başarısız</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>APK, APKEditor.jar kullanılarak birleştiriliyor</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>İptal edildi</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>İşlemi iptal etmek istediğinizden emin misiniz?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Cihazlar alınıyor...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Lütfen bekleyin...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>ADB sunucusunu sonlandırmak istediğinizden emin misiniz? Cihazınızı yeniden bağlamanız veya emülatörü yeniden başlatmanız gerekebilir</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Cihaz seçilmedi</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Cihaz seçildi "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>{0} cihaz bulundu</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>APK Kurulumu başarısız</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>APK Kurulumu başarılı</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>APK yükleniyor</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>"{0}" APKsı yükleniyor</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>Cihaz bulunamadı. Cihazınızın bilgisayara bağlı olduğundan ve adb hata ayıklamasının açık olduğundan emin olun. Emülatör kullanıyorsanız, yeniden başlatın ve açılmasını bekleyin</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Bitiş zamanı: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Başlangıç zamanı: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>Apktool sürümü değiştirildikten sonra beklenmedik hataları önlemek için çerçeve önbelleğini temizlemek gerekiyor. Şimdi temizlemek ister misiniz?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>Geçici klasör temizleniyor</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>Klasör siliniyor: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>"{0}" dizini mevcut değil</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>Derleme çıkış klasörünü aç</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>Çözümleme çıkış klasörünü aç</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>apktool.yml düzeltildi</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>"{0}" dosyasını "{1}" konumuna kopyala</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>Bölünmüş APK seçilmedi</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value>APKEditor sürümü tespit edilemedi</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value />
</data>
</root>
+546
View File
@@ -0,0 +1,546 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Giới thiệu</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Phiên bản Apktool</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>Kiểm tra cập nhật</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>Chế độ gỡ lỗi</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Thoát</value>
</data>
<data name="File" xml:space="preserve">
<value>Tệp</value>
</data>
<data name="Help" xml:space="preserve">
<value>Trợ giúp</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Cài đặt</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java chưa được cài đặt hoặc đã cài đặt không đúng. Vui lòng cài đặt Java hoặc đặt vị trí tùy chỉnh trong Cài đặt</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>Lỗi đọc cài đặt!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>Có phiên bản mới. Bạn có muốn cập nhật không?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>Không có bản cập nhật nào.</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>Thư mục dịch ngược chưa được chọn!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>Tệp để dịch ngược chưa được chọn!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>Tệp để ký chưa được chọn!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Framework chưa được chọn!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>Lỗi lưu cài đặt!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>Để các thay đổi có hiệu lực, bạn phải khởi động lại chương trình. Bạn có muốn thực hiện ngay bây giờ không?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>Không tìm thấy tệp</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>Thư mục không tồn tại</value>
</data>
<data name="Error" xml:space="preserve">
<value>Lỗi</value>
</data>
<data name="Build" xml:space="preserve">
<value>Biên dịch</value>
</data>
<data name="Decode" xml:space="preserve">
<value>Dịch ngược</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>Cài đặt framework</value>
</data>
<data name="Sign" xml:space="preserve">
<value>Ký</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>Ngôn ngữ hệ thống</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>Bạn có thực sự muốn cài đặt menu ngữ cảnh không?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>Bạn có thực sự muốn xóa menu ngữ cảnh không?</value>
</data>
<data name="Done" xml:space="preserve">
<value>Hoàn tất</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>Không thể phát hiện phiên bản apktool.</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>Dịch ngược thành công. Thư mục đầu ra "{0}".</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>Lỗi kiểm tra cập nhật:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>Ký thành công. Tệp đã được lưu vào "{0}".</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>Đang căn chỉnh</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>Biên dịch thất bại</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>Lỗi nhập thẻ framework.</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>Tệp đã chọn không tồn tại.</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>Lỗi chọn thư mục framework.</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>Lỗi chọn tệp framework. Tệp không tồn tại.</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>Ký thất bại.</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>Lỗi. Việc cài đặt framework chưa được bắt đầu.</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>Đang cài đặt framework</value>
</data>
<data name="Signing" xml:space="preserve">
<value>Đang ký</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>Không tìm thấy tệp đầu vào.</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>Không tìm thấy khóa riêng.</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>Không tìm thấy khóa công khai.</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>Tệp nén ZIP</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>Thư mục dịch ngược đã chọn không thể được tạo vì chứa các ký tự không hợp lệ.</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>Thư mục dịch ngược chưa được chọn.</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>Thư mục framework đã chọn không tồn tại.</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>Đang dịch ngược</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>Dịch ngược thất bại</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>Tệp thực thi</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>Đã thay đổi target SDK thành 29</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>Phân tích phiên bản thất bại</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>Đã sửa tệp AndroidManifest.xml</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>Đã xóa tất cả các tệp giả của ApkTool</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK đã chọn:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>Thư mục đã chọn không tồn tại.</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>Tệp AndroidManifest.xml không tồn tại</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>Thư mục APK đã dịch ngược không tồn tại</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>Đã tìm thấy activity chính trong "{0}"</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>Không thể tìm thấy MainActivity. Vui lòng tìm thủ công</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>Đang xóa Framework</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>Biên dịch thành công. Thư mục đầu ra "{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zipalign thất bại</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zipalign thành công. Tệp đã được lưu vào "{0}"</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>Lỗi xóa framework</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Đã xóa bộ nhớ đệm của Framework</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>Đã xong tất cả!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Framework đã được cài đặt thành công</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>Thư mục Framework không tồn tại</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>Đang dịch ngược dex</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>Thư mục đầu ra đã chọn không tồn tại.</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>Đang biên dịch dex</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>Bạn đang chạy với quyền quản trị viên. Kéo và thả có thể không được hỗ trợ</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Kéo và thả được hỗ trợ</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>Thư mục này không phải là một gói Android</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zipalign</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>Biên dịch APK</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>Biên dịch DEX</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>Dịch ngược APK</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>Dịch ngược DEX</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>Xem thông tin APK</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>Thư mục này không phải là một APK đã được dịch ngược</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>Thư mục này không phải là một DEX đã được dịch ngược</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>Các tệp cần thiết bị thiếu</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>Ký APK</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>Tệp văn bản</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>Zipalign APK</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>Đang tạo APK chưa ký</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>Thư mục META-INF không tồn tại. Đã bỏ qua</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>Đã xảy ra lỗi khi lấy thông tin APK</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>Thư mục đầu vào: {0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>Tệp đầu vào: {0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>Xóa tệp "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>Sao chép tệp "{0}" vào thư mục tạm "{1}"</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>Sao chép thư mục apk đã dịch ngược "{0}" vào thư mục tạm "{1}"</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>Thư mục đích "{0}" đã tồn tại. Bật "Buộc xóa thư mục đích" nếu bạn muốn ghi đè lên nó.</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>Di chuyển thư mục tạm "{0}" đến thư mục đầu ra "{1}"</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>Di chuyển apk tạm "{0}" đến thư mục đầu ra "{1}"</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>Đang phân tích thông tin APK...</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>Cần khởi động lại để áp dụng các thay đổi. Bạn có muốn khởi động lại ứng dụng không?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>Đang dịch ngược tất cả các tệp APK</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} được phát hiện là base</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} được phát hiện là split</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>Đang giải nén tất cả các tệp APK</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>Hợp nhất hoàn tất. Đang di chuyển thư mục đến "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>Đang hợp nhất APK</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>Đang di chuyển thư mục base đến "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>Thư mục "{0}" không tồn tại</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>Thư mục tạm: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>Hợp nhất thất bại</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>Đang hợp nhất APK bằng APKEditor.jar</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>Đã hủy</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>Bạn có chắc muốn hủy tiến trình không?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>Đang lấy danh sách thiết bị...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Vui lòng đợi...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>Bạn có chắc muốn tắt máy chủ ADB không? Bạn có thể cần kết nối lại thiết bị hoặc khởi động lại trình giả lập</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>Thiết bị chưa được chọn</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>Đã chọn thiết bị "{0}"</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>Đã tìm thấy {0} thiết bị</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>Cài đặt APK thất bại</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>Cài đặt APK thành công</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>Đang cài đặt APK</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>Đang cài đặt APK "{0}"</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>Không tìm thấy thiết bị nào. Hãy chắc chắn rằng thiết bị của bạn được kết nối với máy tính và đã bật chế độ gỡ lỗi adb. Nếu bạn sử dụng trình giả lập, hãy khởi động lại và đợi cho đến khi nó khởi động xong</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>Thời gian kết thúc: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>Thời gian bắt đầu: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>Cần phải xóa bộ nhớ đệm của framework sau khi thay đổi phiên bản Apktool để tránh các lỗi không mong muốn. Bạn có muốn xóa ngay bây giờ không?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>Đang xóa thư mục tạm</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>Đang xóa thư mục: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>Thư mục "{0}" không tồn tại</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>Mở thư mục đầu ra biên dịch</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>Mở thư mục đầu ra dịch ngược</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>Đã sửa tệp apktool.yml</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>Sao chép tệp "{0}" đến "{1}"</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>Split APK chưa được chọn</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value>Không thể phát hiện phiên bản APKEditor</value>
</data>
<data name="SetLanguageRestartApplication" xml:space="preserve">
<value />
</data>
</root>
+543
View File
@@ -0,0 +1,543 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>关于</value>
</data>
<data name="APKToolVersion" xml:space="preserve">
<value>Apktool 版本</value>
</data>
<data name="CheckForUpdate" xml:space="preserve">
<value>检查更新</value>
</data>
<data name="DebugMode" xml:space="preserve">
<value>调试模式</value>
</data>
<data name="Exit" xml:space="preserve">
<value>退出</value>
</data>
<data name="File" xml:space="preserve">
<value>文件</value>
</data>
<data name="Help" xml:space="preserve">
<value>帮助</value>
</data>
<data name="Settings" xml:space="preserve">
<value>设置</value>
</data>
<data name="ErrorJavaDetect" xml:space="preserve">
<value>Java 没有安装或安装不正确。该程序将被关闭。</value>
</data>
<data name="ErrorReadSettings" xml:space="preserve">
<value>读取设置时出错!</value>
</data>
<data name="UpdateNewVersion" xml:space="preserve">
<value>新版本可用。是否要更新?</value>
</data>
<data name="UpdateNoUpdates" xml:space="preserve">
<value>没有更新可用。</value>
</data>
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
<value>未选择反编译文件夹!</value>
</data>
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
<value>未选择用于反编译的文件!</value>
</data>
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
<value>未选择用于签名的文件!</value>
</data>
<data name="WarningFrameworkNotSelected" xml:space="preserve">
<value>Framework 未选择!</value>
</data>
<data name="ErrorSaveSettings" xml:space="preserve">
<value>保存设置时出错!</value>
</data>
<data name="NeedRestart" xml:space="preserve">
<value>为了使这些更改生效,你必须重新启动程序。你想立即重启吗?</value>
</data>
<data name="FileNotFound" xml:space="preserve">
<value>未找到文件</value>
</data>
<data name="FolderNotExist" xml:space="preserve">
<value>文件夹不存在</value>
</data>
<data name="Error" xml:space="preserve">
<value>错误</value>
</data>
<data name="Build" xml:space="preserve">
<value>构建</value>
</data>
<data name="Decode" xml:space="preserve">
<value>反编译</value>
</data>
<data name="InstallFramework" xml:space="preserve">
<value>安装 Framework</value>
</data>
<data name="Sign" xml:space="preserve">
<value>签名</value>
</data>
<data name="SystemLanguage" xml:space="preserve">
<value>系统语言</value>
</data>
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
<value>你真的想安装上下文菜单吗?</value>
</data>
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
<value>你真的想删除上下文菜单吗?</value>
</data>
<data name="Done" xml:space="preserve">
<value>完成</value>
</data>
<data name="CantDetectApktoolVersion" xml:space="preserve">
<value>无法检测 apktool 版本。</value>
</data>
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
<value>反编译成功完成。输出目录"{0}"。</value>
</data>
<data name="ErrorUpdateChecking" xml:space="preserve">
<value>检查更新错误:</value>
</data>
<data name="SignSuccessfullyCompleted" xml:space="preserve">
<value>签名成功完成。文件保存到"{0}"。</value>
</data>
<data name="Aligning" xml:space="preserve">
<value>正在对齐</value>
</data>
<data name="ErrorCompiling" xml:space="preserve">
<value>编译失败</value>
</data>
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
<value>输入 Framework 标签错误。</value>
</data>
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
<value>所选文件不存在。</value>
</data>
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
<value>选择 Framework 目录错误。</value>
</data>
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
<value>选择 Framework 文件时出错。该文件不存在。</value>
</data>
<data name="ErrorSigning" xml:space="preserve">
<value>签名失败。</value>
</data>
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
<value>错误。Framework 安装没有开始。</value>
</data>
<data name="InstallingFramework" xml:space="preserve">
<value>正在安装 Framework</value>
</data>
<data name="Signing" xml:space="preserve">
<value>正在签名</value>
</data>
<data name="SignInputFileNotFound" xml:space="preserve">
<value>未找到输入文件。</value>
</data>
<data name="SignPrivateKeyNotFound" xml:space="preserve">
<value>未找到私钥。</value>
</data>
<data name="SignPublicKeyNotFound" xml:space="preserve">
<value>未找到公钥。</value>
</data>
<data name="ZIPArchives" xml:space="preserve">
<value>ZIP 存档</value>
</data>
<data name="DecodeCouldNotCreate" xml:space="preserve">
<value>所选的反编译目录无法创建,因为包含无效的字符。</value>
</data>
<data name="DecodeDirNotSelected" xml:space="preserve">
<value>未选择反编译目录。</value>
</data>
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
<value>所选的 Framework 目录不存在。</value>
</data>
<data name="Decoding" xml:space="preserve">
<value>正在反编译</value>
</data>
<data name="ErrorDecompiling" xml:space="preserve">
<value>反编译失败</value>
</data>
<data name="ExecutableFile" xml:space="preserve">
<value>可执行文件</value>
</data>
<data name="ChangedTargetSdkTo29" xml:space="preserve">
<value>更改目标 SDK 到 29</value>
</data>
<data name="ErrorVersionParsing" xml:space="preserve">
<value>分析版本失败</value>
</data>
<data name="FixAndroidManifest" xml:space="preserve">
<value>修复 AndroidManifest.xml</value>
</data>
<data name="RemoveApkToolDummies" xml:space="preserve">
<value>删除所有 ApkTool 假象</value>
</data>
<data name="APKSelected" xml:space="preserve">
<value>APK 选择:</value>
</data>
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
<value>所选的文件夹不存在。</value>
</data>
<data name="AndroidManifestNotExist" xml:space="preserve">
<value>AndroidManifest.xml 不存在</value>
</data>
<data name="DecompiledAPKNotExist" xml:space="preserve">
<value>反编译的 APK 目录不存在</value>
</data>
<data name="MainActivityFound" xml:space="preserve">
<value>在 "{0}" 找到主要 Activity</value>
</data>
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
<value>找不到 MainActivity。请手动查找</value>
</data>
<data name="ClearingFramework" xml:space="preserve">
<value>正在清理 Framework</value>
</data>
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
<value>编译成功完成。输出目录"{0}"</value>
</data>
<data name="ErrorZipalign" xml:space="preserve">
<value>Zip 对齐失败</value>
</data>
<data name="ZipalignFileSavedTo" xml:space="preserve">
<value>Zip 对齐成功完成。文件保存到 "{0}"</value>
</data>
<data name="ErrorClearingFw" xml:space="preserve">
<value>清除 Framework 错误</value>
</data>
<data name="FrameworkCacheCleared" xml:space="preserve">
<value>Framework 缓存已清除</value>
</data>
<data name="AllDone" xml:space="preserve">
<value>全部完成!</value>
</data>
<data name="FrameworkInstalled" xml:space="preserve">
<value>Framework 已成功安装</value>
</data>
<data name="FrameworkDirNotExist" xml:space="preserve">
<value>Framework 目录不存在</value>
</data>
<data name="DecompilingDex" xml:space="preserve">
<value>正在反编译 dex</value>
</data>
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
<value>所选的输出文件夹不存在。</value>
</data>
<data name="CompilingDex" xml:space="preserve">
<value>正在编译 dex</value>
</data>
<data name="DragDropNotSupported" xml:space="preserve">
<value>您正在以管理员身份运行。不支持拖放。</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>支持拖放</value>
</data>
<data name="ErrorNotAnApk" xml:space="preserve">
<value>此目录不是安卓软件包</value>
</data>
<data name="Baksmali" xml:space="preserve">
<value>Baksmali</value>
</data>
<data name="Smali" xml:space="preserve">
<value>Smali</value>
</data>
<data name="Zipalign" xml:space="preserve">
<value>Zip 对齐</value>
</data>
<data name="CompileApk" xml:space="preserve">
<value>编译 APK</value>
</data>
<data name="CompileDex" xml:space="preserve">
<value>编译 DEX</value>
</data>
<data name="DecompileApk" xml:space="preserve">
<value>反编译 APK</value>
</data>
<data name="DecompileDex" xml:space="preserve">
<value>反编译 DEX</value>
</data>
<data name="GetApkInfo" xml:space="preserve">
<value>获取 APK 信息</value>
</data>
<data name="NotDecompiledApk" xml:space="preserve">
<value>此文件夹不是已反编译的 APK</value>
</data>
<data name="NotDecompiledDex" xml:space="preserve">
<value>此文件夹不是反编译的 DEX</value>
</data>
<data name="RequiredFilesMissing" xml:space="preserve">
<value>缺少必需的文件</value>
</data>
<data name="SignApk" xml:space="preserve">
<value>签名 APK</value>
</data>
<data name="TextFile" xml:space="preserve">
<value>文本文件</value>
</data>
<data name="ZipalignApk" xml:space="preserve">
<value>Zip 对齐 APK</value>
</data>
<data name="CreateUnsignedApk" xml:space="preserve">
<value>创建未签名的 APK</value>
</data>
<data name="MetainfNotExist" xml:space="preserve">
<value>META-INF 文件夹不存在。已跳过</value>
</data>
<data name="ErrorGettingApkInfo" xml:space="preserve">
<value>获取 APK 信息时发生错误</value>
</data>
<data name="InputDirectory" xml:space="preserve">
<value>输入目录:{0}</value>
</data>
<data name="InputFile" xml:space="preserve">
<value>输入文件:{0}</value>
</data>
<data name="DeleteFile" xml:space="preserve">
<value>删除文件 "{0}"</value>
</data>
<data name="CopyFileToTemp" xml:space="preserve">
<value>复制文件 "{0}" 到临时目录 "{1}"</value>
</data>
<data name="CopyFolderToTemp" xml:space="preserve">
<value>复制反编译的 apk 文件夹 "{0}" 到临时目录 "{1}"</value>
</data>
<data name="DecodeDesDirExists" xml:space="preserve">
<value>目标目录 "{0}" 已经存在。如果你想覆盖它,请启用 "强制删除目标目录"。</value>
</data>
<data name="MoveTempApkFileToOutput" xml:space="preserve">
<value>移动临时文件夹 "{0}" 到输出目录 "{1}"。</value>
</data>
<data name="MoveTempApkToOutput" xml:space="preserve">
<value>移动临时 apk"{0}" 到输出目录 "{1}"</value>
</data>
<data name="ParsingApkInfo" xml:space="preserve">
<value>正在解析 APK 信息...</value>
</data>
<data name="RestartApplicationPrompt" xml:space="preserve">
<value>需要重新启动才能应用更改。 是否要重新启动应用程序?</value>
</data>
<data name="DecompilingAllApkFiles" xml:space="preserve">
<value>正在反编译所有 APK 文件</value>
</data>
<data name="DetectedAsBase" xml:space="preserve">
<value>{0} 检测为基本模块</value>
</data>
<data name="DetectedAsSplit" xml:space="preserve">
<value>{0} 检测为拆分</value>
</data>
<data name="ExtractingAllApkFiles" xml:space="preserve">
<value>提取所有 APK 文件</value>
</data>
<data name="MergeFinishedMoveDir" xml:space="preserve">
<value>合并完成。移动目录到 "{0}"</value>
</data>
<data name="MergingApk" xml:space="preserve">
<value>正在合并 APK</value>
</data>
<data name="MovingBasedirectory" xml:space="preserve">
<value>将基目录移动到 "{0}"</value>
</data>
<data name="DirNotExist" xml:space="preserve">
<value>目录 "{0}" 不存在</value>
</data>
<data name="TempDirectory" xml:space="preserve">
<value>临时目录: "{0}"</value>
</data>
<data name="ErrorMerging" xml:space="preserve">
<value>合并失败</value>
</data>
<data name="MergingApkEditor" xml:space="preserve">
<value>使用 APKEditor.jar 合并 APK</value>
</data>
<data name="Aborted" xml:space="preserve">
<value>已终止</value>
</data>
<data name="CancelProcess" xml:space="preserve">
<value>您确定要取消该进程吗?</value>
</data>
<data name="GettingDevices" xml:space="preserve">
<value>正在获取设备...</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>请稍候...</value>
</data>
<data name="ConfirmKillingAdbServer" xml:space="preserve">
<value>您确定要终止 ADB 服务吗? 您可能需要重新连接设备或重新启动模拟器</value>
</data>
<data name="DeviceNotSelected" xml:space="preserve">
<value>未选择设备</value>
</data>
<data name="DeviceSelected" xml:space="preserve">
<value>已选择 "{0}" 设备</value>
</data>
<data name="DevicesFound" xml:space="preserve">
<value>发现 {0} 设备</value>
</data>
<data name="InstallApkFailed" xml:space="preserve">
<value>APK 安装失败</value>
</data>
<data name="InstallApkSuccessful" xml:space="preserve">
<value>APK 安装成功</value>
</data>
<data name="InstallingApk" xml:space="preserve">
<value>正在安装 APK</value>
</data>
<data name="InstallingApkPath" xml:space="preserve">
<value>正在安装 APK "{0}"</value>
</data>
<data name="NoDevicesFound" xml:space="preserve">
<value>未找到设备。 确保您的设备已连接到计算机并打开了 adb 调试。 如果您使用模拟器,请重新启动它并等待它启动</value>
</data>
<data name="TimeEnded" xml:space="preserve">
<value>结束时间: {0}</value>
</data>
<data name="TimeStarted" xml:space="preserve">
<value>开始时间: {0}</value>
</data>
<data name="ClearFrameworkPrompt" xml:space="preserve">
<value>更改 Apktool 版本后需要清除 Framework 缓存以避免意外错误。 你想现在清除它吗?</value>
</data>
<data name="ClearTempFolder" xml:space="preserve">
<value>清除临时文件夹</value>
</data>
<data name="DeletingFolder" xml:space="preserve">
<value>正在删除文件夹: {0}</value>
</data>
<data name="DirectoryNotExist" xml:space="preserve">
<value>目录 "{0}" 不存在</value>
</data>
<data name="OpenComFolder" xml:space="preserve">
<value>打开编译输出文件夹</value>
</data>
<data name="OpenDecFolder" xml:space="preserve">
<value>打开反编译输出文件夹</value>
</data>
<data name="FixApktoolYml" xml:space="preserve">
<value>Apktool.yml 已修复</value>
</data>
<data name="CopyFileTo" xml:space="preserve">
<value>复制文件 "{0}" 到 "{1}"</value>
</data>
<data name="SplitApkNotFound" xml:space="preserve">
<value>未选择拆分的 APK</value>
</data>
<data name="CantDetectApkeditorVersion" xml:space="preserve">
<value>无法检测 APKEditor 版本</value>
</data>
</root>
+156 -50
View File
@@ -1,9 +1,14 @@
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using Bluegrams.Application;
using Dark.Net;
using OSVersionExtension;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
@@ -23,65 +28,136 @@ namespace APKToolGUI
[STAThread]
static void Main(String[] arg)
{
if (Environment.OSVersion.Version.Major == 6)
try
{
SetProcessDPIAware();
}
//Debug.WriteLine(Application.ProductName);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (arg.Length == 1)
{
switch (arg[0])
if (Environment.OSVersion.Version.Major == 6)
{
case "ccm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Create);
break;
case "rcm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove);
break;
SetProcessDPIAware();
}
}
else
{
if (arg.Length == 2)
PortableSettingsProvider.SettingsFileName = "config.xml";
PortableSettingsProvider.ApplyProvider(Settings.Default);
if (arg.Length == 1)
{
switch (arg[0])
{
case "comapk":
if (!File.Exists(Path.Combine(arg[1], "AndroidManifest.xml")))
case "ccm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Create);
break;
case "rcm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove);
break;
case "opendecfolder":
if (Settings.Default.Decode_UseOutputDir)
{
MessageBox.Show(Language.NotDecompiledApk, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
string outDir = Settings.Default.Decode_OutputDir;
if (Directory.Exists(outDir))
Process.Start(outDir);
else
MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
break;
case "opencomfolder":
if (Settings.Default.Build_UseOutputAppPath)
{
string outDir = Settings.Default.Build_OutputAppPath;
if (Directory.Exists(outDir))
Process.Start(outDir);
else
MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
break;
}
}
if (FilesCheck() == true)
else
{
Directory.CreateDirectory(TEMP_DIR);
PortableSettingsProvider.SettingsFileName = "config.xml";
PortableSettingsProvider.ApplyProvider(Settings.Default);
Application.Run(new FormMain());
if (arg.Length == 2)
{
switch (arg[0])
{
case "comapk":
if (!File.Exists(Path.Combine(arg[1], "AndroidManifest.xml")))
{
MessageBox.Show(Language.NotDecompiledApk, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
break;
}
}
if (FilesCheck() == true)
{
TEMP_PATH = RandTempDirectory();
TEMP_MAIN = TempDirectory();
Directory.CreateDirectory(TEMP_PATH);
Theme theme = (Theme)Settings.Default.Theme;
if (IsWin10OrAbove())
DarkNet.Instance.SetCurrentProcessTheme(theme);
Form mainForm = new FormMain();
if (IsWin10OrAbove())
DarkNet.Instance.SetWindowThemeForms(mainForm, theme);
Application.Run(mainForm);
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
//MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static bool IsWin10OrAbove()
{
// Check if the operating system is Windows 10 or above
if (OSVersion.GetOSVersion().Version.Major >= 10 && OSVersion.GetOSVersion().Version.Minor >= 0)
{
return true;
}
else
{
return false;
}
}
public static bool IsDarkTheme()
{
if (IsWin10OrAbove())
return DarkNet.Instance.EffectiveCurrentProcessThemeIsDark;
else if (Settings.Default.Theme == 2)
return true;
return false;
}
public static void SetLanguage()
{
String settingsCulture = Settings.Default.Culture;
if (settingsCulture.Equals("Auto"))
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InstalledUICulture;
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InstalledUICulture;
if (settingsCulture.Equals("Auto"))
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InstalledUICulture;
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InstalledUICulture;
}
else
{
System.Globalization.CultureInfo _settingsCulture = System.Globalization.CultureInfo.GetCultureInfo(settingsCulture);
System.Threading.Thread.CurrentThread.CurrentUICulture = _settingsCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = _settingsCulture;
}
}
else
catch
{
System.Globalization.CultureInfo _settingsCulture = System.Globalization.CultureInfo.GetCultureInfo(settingsCulture);
System.Threading.Thread.CurrentThread.CurrentUICulture = _settingsCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = _settingsCulture;
}
}
@@ -116,7 +192,13 @@ namespace APKToolGUI
AAPT_PATH,
AAPT2_PATH,
SIGNAPK_KEYPRIVATE,
SIGNAPK_KEYPUBLIC};
SIGNAPK_KEYPUBLIC,
APKEDITOR_PATH,
ADB_PATH,
ADBWINAPI_PATH,
ADBWINUSBAPI_PATH,
LIBWINP_PATH,
};
for (int i = 0; i < fileList.Length; i++)
if (!File.Exists(fileList[i]))
missingFiles.Add(Path.GetFileName(fileList[i]));
@@ -155,18 +237,42 @@ namespace APKToolGUI
return path;
}
public static string LOCAL_APPDATA_PATH = Environment.GetEnvironmentVariable("LocalAppData");
public static string TEMP_DIR = Path.Combine(Path.GetTempPath(), "APKToolGUI");
public static string APP_PATH = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
public static string APKTOOL_PATH = APP_PATH + @"\Resources\apktool.jar";
public static string APKSIGNER_PATH = APP_PATH + @"\Resources\apksigner.jar";
public static string BAKSMALI_PATH = APP_PATH + @"\Resources\baksmali.jar";
public static string SMALI_PATH = APP_PATH + @"\Resources\smali.jar";
public static string SIGNAPK_KEYPRIVATE = APP_PATH + @"\Resources\testkey.pk8";
public static string SIGNAPK_KEYPUBLIC = APP_PATH + @"\Resources\testkey.x509.pem";
public static string ZIPALIGN_PATH = APP_PATH + @"\Resources\zipalign.exe";
public static string AAPT_PATH = APP_PATH + @"\Resources\aapt.exe";
public static string AAPT2_PATH = APP_PATH + @"\Resources\aapt2.exe";
public static string FRAMEWORK_DIR = LOCAL_APPDATA_PATH + @"\apktool\framework";
public static string TempDirectory()
{
//Generate new every new instance to avoid conflict
//We want to keep obfuscated path short as possible to prevent long path error
if (Settings.Default.UseCustomTempDir)
return Path.Combine(Settings.Default.TempDir);
else
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "Temp");
}
public static string RandTempDirectory()
{
return Path.Combine(TempDirectory(), StringExt.RandStrWithCaps(5));
}
public static string ASSEMBLY_NAME { get { return AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Name; } }
public static string TEMP_PATH { get; set; }
public static string TEMP_MAIN { get; set; }
public static string LOCAL_APPDATA_PATH { get { return Environment.GetEnvironmentVariable("LocalAppData"); } }
public static string APP_PATH { get { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } }
public static string RES_PATH { get { return Path.Combine(APP_PATH, "Resources"); } }
public static string APKTOOL_PATH { get { return Path.Combine(RES_PATH, "apktool.jar"); } }
public static string APKSIGNER_PATH { get { return Path.Combine(RES_PATH, "apksigner.jar"); } }
public static string BAKSMALI_PATH { get { return Path.Combine(RES_PATH, "baksmali.jar"); } }
public static string SMALI_PATH { get { return Path.Combine(RES_PATH, "smali.jar"); } }
public static string SIGNAPK_KEYPRIVATE { get { return Path.Combine(RES_PATH, "testkey.pk8"); } }
public static string SIGNAPK_KEYPUBLIC { get { return Path.Combine(RES_PATH, "testkey.x509.pem"); } }
public static string ZIPALIGN_PATH { get { return Path.Combine(RES_PATH, "zipalign.exe"); } }
public static string AAPT_PATH { get { return Path.Combine(RES_PATH, "aapt.exe"); } }
public static string AAPT2_PATH { get { return Path.Combine(RES_PATH, "aapt2.exe"); } }
public static string APKEDITOR_PATH { get { return Path.Combine(RES_PATH, "apkeditor.jar"); } }
public static string ADB_PATH { get { return Path.Combine(RES_PATH, "adb.exe"); } }
public static string ADBWINAPI_PATH { get { return Path.Combine(RES_PATH, "AdbWinApi.dll"); } }
public static string ADBWINUSBAPI_PATH { get { return Path.Combine(RES_PATH, "AdbWinUsbApi.dll"); } }
public static string LIBWINP_PATH { get { return Path.Combine(RES_PATH, "libwinpthread-1.dll"); } }
public static string FRAMEWORK_DIR { get { return Path.Combine(LOCAL_APPDATA_PATH, "apktool", "framework"); } }
public static string STANDALONE_FRAMEWORK_DIR { get { return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "framework"); } }
}
}
+6 -6
View File
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// Управление общими сведениями о сборке осуществляется с помощью
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("APKTool GUI")]
[assembly: AssemblyTitle("APK Tool GUI")]
[assembly: AssemblyDescription("GUI for apktool, signapk and zipalign utilities.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("APKTool GUI")]
[assembly: AssemblyCopyright("© INFINUM, 2012-2015 | AndnixSH, 2022")]
[assembly: AssemblyProduct("APK Tool GUI")]
[assembly: AssemblyCopyright("Original owner: INFINUM, 2012-2015 | Maintained by: AndnixSH, 2022-2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("12cc5907-c237-4d52-8c7e-08d622828cf4")]
[assembly: Guid("49ccb60c-22a6-4a25-a4bf-9208712ad928")]
// Сведения о версии сборки состоят из следующих четырех значений:
//
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.0.0")]
[assembly: AssemblyFileVersion("3.0.0.0")]
[assembly: AssemblyVersion("3.3.1.6")]
[assembly: AssemblyFileVersion("3.3.1.6")]
+1 -41
View File
@@ -19,7 +19,7 @@ namespace APKToolGUI.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@@ -80,36 +80,6 @@ namespace APKToolGUI.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap apkaio {
get {
object obj = ResourceManager.GetObject("apkaio", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap apkcombo {
get {
object obj = ResourceManager.GetObject("apkcombo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap apkpure {
get {
object obj = ResourceManager.GetObject("apkpure", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -140,16 +110,6 @@ namespace APKToolGUI.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap playstore {
get {
object obj = ResourceManager.GetObject("playstore", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
+1 -71
View File
@@ -121,7 +121,7 @@
<data name="done" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EgAACxIB0t1+/AAAAtVJREFUeF7tmzFu3DAQRfcoPoKBXGCP4pMErtK6TuVD5AB7gQBbGqncJU0AV6k3
EQAACxEBf2RfkQAAAtVJREFUeF7tmzFu3DAQRfcoPoKBXGCP4pMErtK6TuVD5AB7gQBbGqncJU0AV6k3
/wdDQFgMxSFFDqlQH3jVcobzKYmSKO7p0KFDh1rq8/dPD+AJvIILuCVgG7ZlzIOk2ZdYOHgB70AzmQNz
MNf4g4Eiz8BylEth7rN0N45Q1KMUpxXdAvb1KN33FQp5XhTmzbOU4S90zqN+XRTTC9bgezagQ17rH1LA
CLAWn7kBHfH2pBUxAk9SZhuxg7sOR6TNICAxT3utwxGpezkgISe8ka75FKy13sSIZCPM9rlcpfxtQqKe
@@ -392,73 +392,6 @@
<data name="android_thin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\android-thin.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="apkcombo" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5gIUECEzhhsWEgAAAIFJREFU
OE+9jNENgCAMRPthHMYp3MRx3MUlWMJ91BLaXOCK+ONLXri0V6Rh3y71OJe5TCTnMi+jmJTWycu1w7Bj
dQgsR7mLFSMp3SWh6ePAciR2HLasVHLGjoMDy6Afq9hxyNKO7HWhk3OGLR+bYxU7FCwzX2FH6BB1+dOx
8t8HIjeYr/a0lujdLAAAAABJRU5ErkJggg==
</value>
</data>
<data name="apkpure" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAF8ElEQVRYR9VW729TVRi+g+rAKOPDCGYY
xKGA648hkGBiQkwYw63d3JAhsHVsLaAJa7cRcAmiERmjvbcbgtG/wKgJQU38ABGHY/1xb9vRTfGDOn50
HZEoakgU1LHe4/Oee9t1VcbG9sU3efPe3nPued7nec97ToX/ja0N7M+xBNoXmAJHF8ELNPcUmP3tBUWR
dx9deON8jj51Zq1Y8fKFixVPoVn23jDJ0l9mWbxlksXbFI1K1x9rAgdYVXfZNppn7amZTXHGzKiIfEGA
+UyKxMyKdAeumhURzyIrkrtGS/x2Vh8tDc3rYjOrgiUkaexD4mIk8CtPQBaTcJXcqHSqz/gPJrcoZaP2
fiurla2baX5d2DYzKhgViS9kCokdkJ4Ya+wpAY09W++vV+2x0tFaJFDXZw3wD2fCzCGRs7cExUUA/DnN
XkuAcfaBN1SwZ/YBq1obsybrYlZmj1RU03f2cMX0VADjVO0PmXi99doDHOxVsE+u9zcQewb2lABUKCcV
evkC0zFLSNv5lqBnIQB/zGZvAvtVYF+jlKtgzwCugr2KBLgKdUpFFX2PeH8qADDF/iDaLZM9d8jP1n7R
dLL+QulNqj1PACoAPKXCV3yh+zFT0MPZmwMd+QAbzmSPZCgyo7/jivByVZ69z3qKb76Y9Y6eABLRVQjb
KmidKasAAP6BSfa2ZbPH71FKYPnp1w/QnNpQdQmBgbUOPk6FbpozJcNJp9Ve8czHxrtKYDrrDPZHr+Z7
qhfyD2B1UdvnHBDAKRVSewGdYKU59nDlLD75XgYQvfZSKxhjs+l9ryUwSuVYdubNgzRn7cDeXIq1wYoS
7IG0CtQRYyrYztKcKZklLD4CwEH94EkCNM0el8+VgvYt+TRv9cldXC2yHVFrSoX0XtATYnal4gWaYw/b
JlbBorMHmJtOOQBTvdPsKYHCswdOCOfW5RsuvFooRJxLcqONhUK0NX9DcHMDgWmg5VwFOhewIdn2qK2H
A0zGTL3SQwD7nrMdq71qUXxseeCwOqu38RaAbwsKPJxyx5+C7Px9Q6Q62dBfxrZrnZBOoCZagYPpHpcU
6p3q+1e02oO9nGbPitH3+T0tTJB3MIAyQXGkPSdMcSdbJONGjJWnTkXejkiG2eRNvB1fVKrT7dg85Mtp
iXeOT2plyJsLsItZ7BmxXxFoJ/YAd6hgryKJMVfwjt7LThUqMKigAjjF/py+/N3NFPJq7EOiY4w93XZj
7Becbx3PnmLKM1R4TK5ToQJvQ2JfKW+qpLU3R7bOdg9Js5oTvpymq745UMAMBcyuK515NC6s6el8AKBf
U5shZrJXVwSOJGf7nUmwTII94n+4gjEal53J0kj1SMNAGavpq7zrceyO+za6h3y7WuLH5vIX5pC3NpM9
3X5IQAV7dcH5vcSe5NbY/8t1FfjzThUqJO1gXxXZxC+krQONhtZEVx4Ay1xD0kZXXHoez/XNcd9qDr5a
9j4I0FgWeyoBezrQcdvQ67wM8EsAuoRIz1nuyHDnoEFxXF+nvPQJXzzDAHoEzL9EAn6Uo11/LQirZN9c
AF/MSoBOQLa8+1Anzcnrb5sryLtzhb5sd8IdujtzH+7fM0c485yhfvB4Aeq8E2CNYO2EbwO4B/EbJHIa
Y0W0LnUDRTqE0hsQ4JQEMwY9vy3+cM9SGl/62f6J+1g3d0L7F9U8LM4H2CASYIhJuOqKi6prSBxFAm/R
nKZr2r3DrTggkQrfkQpIYITL333oHRozXn4v3b+TsW2XDhsouhKSA4CsKS7+3QRgxBF3QvK5hzsLadyd
0M8BgGptqEguUoFKAPY3H//ItYzeF57aNyn22dZyXZoD5t8CmJIgJYL60HizyNpf75Uh3zwk8IPG/u3j
9O7Z4Q8md41mGcA4KVfCtxvPBM4gPf/LjrJwhcZZWoWwrw3/iNgTH7c8Rb+f/LTtvtin7LVf3s8FeByg
Mf3VxFYc7VpSdO7wPnouYcFpgQNUU2FIaoE30jP2wJT204xY608nDK5rWRfPRGZWjk2L+dRMEP4BTv9m
88NQBeoAAAAASUVORK5CYII=
</value>
</data>
<data name="playstore" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5gIUESUj/gKpRQAABIRJREFU
WEfF11tMm2UYB/CvE8IkBrItZiYaYnCDlTGgg7VMb0jc2pVyKCzohV4bD9HEyEHmCj0YDzFRpybELBFd
NpfovXG94WKbG65xFHgprBzaFVqggx44ybry+Lzd97H3LW1hrJsX/4vS73v+P573Iy0CAMj+z3CA/LH5
3AKH5fN9TqOp0vWNnH3vcYUDZF+Hzp02K8kZaYZdY22RPI/xjDL8wx72mnSHA+y4BheFKwBZfVaS7WqG
nZ5myPGd8uf5zR++BT9mstemKxxA6IXfhb8AKCJz0EqyvC2QOd0CT822QM68wfFi+It69vp0hAfcQMA1
BIiIjCEryfAjYK4VZPOtsCPYBrmhzkuFi1+Vsvc9SniADQF/YzmDkDmsRBZoBSH4IJmh9sieBXOXavHb
vez92wkPuIkAGxZTxPUHCOGWlbAAKVnBU4Hnwpa2Jvgti53zMOEBdgT8g4UU0YuREJcxSRA0z4QMzrzl
L5vYWVsND+hHQB+WSYi440iFiD0f4Y6ewqWvj7AzNwsPGERAPxbFI9hNOP9MiqDJCLVHdweN3Yql759n
ZycLDyAIGMSSVIjYJlIjaN6cbboBrr0GgKqn2Y748IBhBBAsSIW4iqGIFJvQTzcMwAiOdmJc2RPgfeEN
tofNRsAQDqeIATEPuQm9D8sJjh3GjGLGMW4c7825CjMvvcL2xTq5FxQwjINZxGabYBB6L5YP4MghjLSB
GAAziZnOAPDvPgvQtP5niz9lAE4EjOBQB0ZCbOWZwOOon2q0Qx+OkwB0AxQwgZEAPswsxp9tSgwYQ8At
HCghaDbbBCI+O/0TWXunzA52HBe/gXjAjAARn4APZyLAOAJGcaiEoMchIZJs4lNDN4kePQ5rR48BvF16
/wg2PAMYBKwh4K5X6LLZhPVPVnyHAbgQMIaDKcKJiT8OaRN2DCIsHd0kUqmBe5VqiFaKiHcRQQF0AyJg
zYW/tVu4HBoXVGxfrJN7QQETOJwiKCDRJkSE2dhNVpUaWFWqIaJS30fQTbx8HOA9RIhHcM8pTCyPCq+z
PWx4gFsESIj44xA3YTL9TJYrTsC/RzDxCHETkQ8O9q46hHanU0j5QZUcwCKY4zCafiELh7WwVK6F5Qot
rFRQwAm4q9LEEJjoivLVszMq1ZY+qjcC3FiUCIGb6MDysEIHC4erYZEiEEA3sYKbWKlQw6LyWE+grErB
ztwsiQEusZxBGCznSKC0BkJlNNUxhLSJhXKt8065uoGdtdUkBkgIMafN58hcSS3Ml9TAOgI3EVRUB/wK
zUc2oXzbX1h5gAcBt0WAiPjEcp7MFtfBnUN1MHcIEaU0ushMibbLW1D1LHv/dpIS0G4+T6aL6mG2mKYO
/MW14CvRXXIXaQ6y9z1KeMAkAjxYjoiPzReIV94APrkeKGKqqJa45DU69vp0hAfcjl6k5W2mC2SysBGm
5I3gOaCfGz9Q+36PUPUE/jFxRQytpl+Ju+AkuAtPRkb368/05+l2sdekOxxg33d/5PbLX7M48hs6b+bX
7Gffe1zhAE8+IPsPdRQlTjbOQZ0AAAAASUVORK5CYII=
</value>
</data>
<data name="error" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -471,7 +404,4 @@
<data name="warning" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="apkaio" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\apkaio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
File diff suppressed because it is too large Load Diff
+164 -89
View File
@@ -2,223 +2,298 @@
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="APKToolGUI.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="Decode_NoSrc" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_NoSrc" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_NoRes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_NoRes" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_Force" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_Force" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Decode_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_ForceAll" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_ForceAll" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Decode_InputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="Decode_InputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Decode_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="BuildProjectDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="BuildProjectDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="InstallFramework_InputFramePath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InstallFramework_InputFramePath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="Sign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="Sign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Build_UseAapt" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_UseAapt" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_AaptPath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="Build_AaptPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Culture" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Culture" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)">Auto</Value>
</Setting>
<Setting Name="JavaExe" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="JavaExe" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LastUpdateCheck" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.DateTime" Scope="User">
<Setting Name="LastUpdateCheck" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.DateTime" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CheckForUpdateAtStartup" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="CheckForUpdateAtStartup" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="ClearLogBeforeAction" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="ClearLogBeforeAction" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Decode_MatchOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_MatchOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_KeepBrokenRes" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_KeepBrokenRes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_CopyOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_CopyOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Setting Name="Decode_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Build_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_UseOutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_OutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Build_InputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Framework_UseFrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Build_UseOutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="InstallFramework_UseTag" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_OutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="InstallFramework_Tag" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Build_InputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Framework_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InstallFramework_UseFrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InstallFramework_UseTag" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InstallFramework_Tag" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InstallFramework_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Zipalign_AlignmentInBytes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Decimal" Scope="User">
<Setting Name="Zipalign_AlignmentInBytes" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">4</Value>
</Setting>
<Setting Name="Zipalign_OverwriteOutputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Zipalign_OverwriteOutputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Zipalign_CheckOnly" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Zipalign_CheckOnly" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Zipalign_Verbose" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Zipalign_Verbose" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Zipalign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Zipalign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Zipalign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Zipalign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Zipalign_Recompress" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Zipalign_Recompress" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_PublicKey" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Sign_PublicKey" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_PrivateKey" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
<Setting Name="Sign_PrivateKey" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Decode_OnlyMainClasses" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_OnlyMainClasses" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Decode_FixError" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_FixError" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Build_NoCrunch" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Build_NoCrunch" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_NoDebugInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
<Setting Name="Decode_NoDebugInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Framework_ClearBeforeDecode" Type="System.Boolean" Scope="User">
<Setting Name="Framework_ClearBeforeDecode" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Build_ZipalignAfterBuild" Type="System.Boolean" Scope="User">
<Setting Name="Build_ZipalignAfterBuild" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Build_SignAfterBuild" Type="System.Boolean" Scope="User">
<Setting Name="Build_SignAfterBuild" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Zipalign_UseOutputDir" Type="System.Boolean" Scope="User">
<Setting Name="Zipalign_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Zipalign_SignAfterZipAlign" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
<Setting Name="Zipalign_SignAfterZipAlign" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Sign_Alias" Type="System.String" Scope="User">
<Setting Name="Sign_Alias" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)">CERT</Value>
</Setting>
<Setting Name="Sign_SetAlias" Type="System.Boolean" Scope="User">
<Setting Name="Sign_SetAlias" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_CreateUnsignedApk" Type="System.Boolean" Scope="User">
<Setting Name="Build_CreateUnsignedApk" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_UseKeystoreFile" Type="System.Boolean" Scope="User">
<Setting Name="Sign_UseKeystoreFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_KeystoreFilePath" Type="System.String" Scope="User">
<Setting Name="Sign_KeystoreFilePath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_KeystorePassword" Type="System.String" Scope="User">
<Setting Name="Sign_KeystorePassword" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_UseOutputDir" Type="System.Boolean" Scope="User">
<Setting Name="Sign_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_Schemev1" Type="System.Int32" Scope="User">
<Setting Name="Sign_Schemev1" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="Sign_Schemev2" Type="System.Int32" Scope="User">
<Setting Name="Sign_Schemev2" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="Sign_Schemev3" Type="System.Int32" Scope="User">
<Setting Name="Sign_Schemev3" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="Sign_Schemev4" Type="System.Int32" Scope="User">
<Value Profile="(Default)">2</Value>
<Setting Name="Sign_Schemev4" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="Decode_ApiLevel" Type="System.Decimal" Scope="User">
<Setting Name="Decode_ApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">4</Value>
</Setting>
<Setting Name="Build_ApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">29</Value>
</Setting>
<Setting Name="Build_ApiLevel" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">29</Value>
</Setting>
<Setting Name="Build_SetApiLevel" Type="System.Boolean" Scope="User">
<Setting Name="Build_SetApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_SetApiLevel" Type="System.Boolean" Scope="User">
<Setting Name="Decode_SetApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Baksmali_InputDexFile" Type="System.String" Scope="User">
<Setting Name="Baksmali_InputDexFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Smali_OutputDexFile" Type="System.String" Scope="User">
<Setting Name="Smali_OutputDexFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Baksmali_OutputDir" Type="System.String" Scope="User">
<Setting Name="Baksmali_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Baksmali_UseOutputDir" Type="System.Boolean" Scope="User">
<Setting Name="Baksmali_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Smali_InputDir" Type="System.String" Scope="User">
<Setting Name="Smali_InputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Smali_OutputDir" Type="System.String" Scope="User">
<Setting Name="Smali_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Smali_UseOutputDir" Type="System.Boolean" Scope="User">
<Setting Name="Smali_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="IgnoreOutputDirContextMenu" Type="System.Boolean" Scope="User">
<Setting Name="IgnoreOutputDirContextMenu" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_UseAapt2" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="PlaySoundWhenDone" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UseCustomTempDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="TempDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UseCustomJavaExe" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="AutoDeleteIdsigFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Utf8FilenameSupport" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_OverwriteInputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Adb_SetVendor" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Adb_SelectedApkPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_InstallApkAfterSign" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UseCustomApktool" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ApktoolPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Theme" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="DebugMode" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_NetSecConf" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_DontParseApkInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UseCustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)">-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</Value>
</Setting>
<Setting Name="SplitApk_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UseApkeditor" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Adb_OverrideAbi" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="Adb_SetOverrideAbi" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_Jobs" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">4</Value>
</Setting>
<Setting Name="Decode_Jobs" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">4</Value>
</Setting>
<Setting Name="Decode_SetJobs" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Build_SetJobs" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
+62 -30
View File
@@ -1,38 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- Параметры манифеста UAC
При необходимости изменить уровень управления учетными записями Windows замените
узел requestedExecutionLevel одним из следующих значений.
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Задание узла requestedExecutionLevel отключит виртуализацию файла и реестра.
Если виртуализацию файла и реестра нужно использовать для обратной
совместимости, удалите узел requestedExecutionLevel.
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Список всех версий Windows, с которыми это приложение предназначено работать. Windows автоматически выберет наиболее совместимую среду.-->
<!-- Если приложение предназначено для работы с Windows 7, раскомментируйте следующий узел supportedOS-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Включите темы для общих элементов управления и диалоговых окон Windows (Windows XP и более поздние версии) -->
<!-- <dependency>
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config.
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
@@ -43,5 +73,7 @@
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>
</dependency>
-->
</assembly>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

+57
View File
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.WindowsAPICodePack.Taskbar;
using System.IO;
using System.Reflection;
using Microsoft.WindowsAPICodePack.Shell;
using APKToolGUI.Languages;
namespace APKToolGUI
{
public class TaskBarJumpList
{
private JumpList list;
/// <summary>
/// Creating a JumpList for the application
/// </summary>
/// <param name="windowHandle"></param>
public TaskBarJumpList(IntPtr windowHandle)
{
list = JumpList.CreateJumpListForIndividualWindow(TaskbarManager.Instance.ApplicationId, windowHandle);
list.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
BuildList();
}
public void AddToRecent(string destination)
{
//Call JumpList.AddToRecent(destination); because of bug
JumpList.AddToRecent(destination);
list.Refresh();
}
public void AddTasks(string titleValue, string args)
{
JumpListLink jumpListLink = new JumpListLink(Assembly.GetEntryAssembly().Location, titleValue);
jumpListLink.IconReference = new IconReference(Assembly.GetEntryAssembly().Location, 3);
jumpListLink.Arguments = args;
list.AddUserTasks(jumpListLink);
}
/// <summary>
/// Builds the Jumplist
/// </summary>
private void BuildList()
{
JumpListCustomCategory userActionsCategory = new JumpListCustomCategory("Actions");
AddTasks(Language.OpenDecFolder, "opendecfolder");
AddTasks(Language.OpenComFolder, "opencomfolder");
list.Refresh();
}
}
}
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace APKToolGUI.Utils
{
internal class BitmapUtils
{
public static Bitmap LoadBitmap(string path)
{
if (File.Exists(path))
{
// open file in read only mode
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
// get a binary reader for the file stream
using (BinaryReader reader = new BinaryReader(stream))
{
// copy the content of the file into a memory stream
var memoryStream = new MemoryStream(reader.ReadBytes((int)stream.Length));
// make a new Bitmap object the owner of the MemoryStream
return new Bitmap(memoryStream);
}
}
else
{
return null;
}
}
}
}
+5 -5
View File
@@ -13,13 +13,12 @@ namespace APKToolGUI.Utils
{
public class CMD
{
public static string output;
static public Process p = new Process();
public static string ProcessStartWithOutput(string FileName, string Arguments)
{
// Debug.WriteLine("CMD: " + FileName + " " + Arguments);
Log.d("CMD: " + FileName + " " + Arguments);
string result = string.Empty;
try
{
using (Process process = new Process())
@@ -33,13 +32,14 @@ namespace APKToolGUI.Utils
process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("utf-8");
process.Start();
result = process.StandardOutput.ReadToEnd().Trim();
process.WaitForExit(4000);
process.WaitForExit();
}
}
catch (Exception e)
{
Debug.WriteLine("Start", e);
}
return result;
}
}
+93 -123
View File
@@ -15,161 +15,131 @@ namespace APKToolGUI.Utils
public static void Delete(string path)
{
if (Directory.Exists(path))
Directory.Delete(path, true);
Directory.Delete("\\\\?\\" + path, true);
}
public static void Copy(string sourceDirName, string destDirName, bool copySubDirs)
public static void Copy(string source, string target)
{
if (Directory.Exists(sourceDirName))
var sourcePath = source.TrimEnd('\\', ' ');
var targetPath = target.TrimEnd('\\', ' ');
var files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
.GroupBy(s => Path.GetDirectoryName(s));
foreach (var folder in files)
{
// Get the subdirectories for the specified directory.
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
var targetFolder = folder.Key.Replace(sourcePath, targetPath);
if (!dir.Exists)
//Debug.WriteLine("Create directory: " + folder);
Directory.CreateDirectory(targetFolder);
foreach (var file in folder)
{
throw new DirectoryNotFoundException(
"Source directory does not exist or could not be found: "
+ sourceDirName);
}
DirectoryInfo[] dirs = dir.GetDirectories();
// If the destination directory doesn't exist, create it.
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}
// Get the files in the directory and copy them to the new location.
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
Debug.WriteLine(file);
string temppath = Path.Combine(destDirName, file.Name);
file.CopyTo(temppath, true);
}
// If copying subdirectories, copy them and their contents to new location.
if (copySubDirs)
{
foreach (DirectoryInfo subdir in dirs)
{
string temppath = Path.Combine(destDirName, subdir.Name);
Copy(subdir.FullName, temppath, copySubDirs);
}
var targetFile = Path.Combine(targetFolder, Path.GetFileName(file));
File.Copy("\\\\?\\" + file, "\\\\?\\" + targetFile, true);
}
}
}
public static void Move(string sourceDirName, string destDirName, bool copySubDirs)
public static void Move(string source, string target)
{
try
var sourcePath = source.TrimEnd('\\', ' ');
var targetPath = target.TrimEnd('\\', ' ');
var files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
.GroupBy(s => Path.GetDirectoryName(s));
foreach (var folder in files)
{
// Get the subdirectories for the specified directory.
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
var targetFolder = folder.Key.Replace(sourcePath, targetPath);
if (!dir.Exists)
//Debug.WriteLine("Create directory: " + folder);
Directory.CreateDirectory(targetFolder);
foreach (var file in folder)
{
return;
//throw new DirectoryNotFoundException(
// "Source directory does not exist or could not be found: "
// + sourceDirName);
}
DirectoryInfo[] dirs = dir.GetDirectories();
// If the destination directory doesn't exist, create it.
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}
// Get the files in the directory and move them to the new location.
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
//string s = Path.Combine(Path.GetTempPath(), "AutoToaster", "Debugggg.txt");
// File.AppendAllText(s, Path.Combine(destDirName, file.Name) + "\n");
//HaveError(Environment.NewLine + ex, MainResources.Some_Error_Found);
string temppath = Path.Combine(destDirName, file.Name);
file.MoveTo(temppath, true);
}
// If copying subdirectories, copy them and their contents to new location.
if (copySubDirs)
{
foreach (DirectoryInfo subdir in dirs)
{
string temppath = Path.Combine(destDirName, subdir.Name);
Move(subdir.FullName, temppath, copySubDirs);
}
}
}
catch (PathTooLongException)
{
throw new PathTooLongException("Path too long. Skipped");
}
}
public static void ReplaceinFiles(string folderPath, string old, string replace, string extenstion = "*")
{
if (Directory.Exists(folderPath))
{
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
foreach (string filePath in filePaths)
{
if (File.Exists(filePath))
{
string file = File.ReadAllText(filePath);
if (file.Contains(old))
{
file = file.Replace(old, replace);
File.WriteAllText(filePath, file);
}
}
var targetFile = Path.Combine(targetFolder, Path.GetFileName(file));
if (File.Exists(targetFile))
File.Delete(targetFile);
File.Move(file, targetFile);
}
}
}
public static void ReplaceinFilesRegex(string folderPath,string pattern, string replace, string extenstion = "*"
)
{
if (Directory.Exists(folderPath))
{
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
foreach (string filePath in filePaths)
{
if (File.Exists(filePath))
{
string file = File.ReadAllText(filePath);
if (Regex.IsMatch(file, pattern))
{
file = Regex.Replace(file, pattern, replace);
File.WriteAllText(filePath, file);
}
}
}
}
}
public static void ReplaceinFilesRegex( string folderPath,string[] pattern,string replace,
public static void ReplaceinFiles(
string folderPath,
string old,
string replace,
string extenstion = "*"
)
{
if (Directory.Exists(folderPath))
{
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
foreach (string filePath in filePaths)
DirectoryInfo DR = new DirectoryInfo(folderPath);
var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel();
foreach (FileInfo filePath in filePaths)
{
if (File.Exists(filePath))
if (File.Exists(filePath.FullName))
{
string file = File.ReadAllText(filePath);
string file = File.ReadAllText(filePath.FullName);
if (file.Contains(old))
{
file = file.Replace(old, replace);
File.WriteAllText(filePath.FullName, file);
}
}
}
}
}
public static void ReplaceinFilesRegex(
string folderPath,
string pattern,
string replace,
string extenstion = "*"
)
{
if (Directory.Exists(folderPath))
{
DirectoryInfo DR = new DirectoryInfo(folderPath);
var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel();
foreach (FileInfo filePath in filePaths)
{
if (File.Exists(filePath.FullName))
{
string file = File.ReadAllText(filePath.FullName);
if (Regex.IsMatch(file, pattern))
{
file = Regex.Replace(file, pattern, replace);
File.WriteAllText(filePath.FullName, file);
}
}
}
}
}
public static void ReplaceinFilesRegex(
string folderPath,
string[] pattern,
string replace,
string extenstion = "*.*"
)
{
if (Directory.Exists(folderPath))
{
DirectoryInfo DR = new DirectoryInfo(folderPath);
var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel();
foreach (FileInfo filePath in filePaths)
{
if (File.Exists(filePath.FullName))
{
bool match = false;
string file = File.ReadAllText(filePath.FullName);
foreach (string pat in pattern)
{
if (Regex.IsMatch(file, pat))
{
file = Regex.Replace(file, pat, replace);
File.WriteAllText(filePath, file);
match = true;
}
}
if (match)
File.WriteAllText(filePath.FullName, file);
}
}
}
+60 -73
View File
@@ -1,8 +1,9 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Markup;
namespace SaveToGameWpf.Logic.Utils
{
@@ -33,52 +34,27 @@ namespace SaveToGameWpf.Logic.Utils
return filter == null ? items : items.Where(filter).ToArray();
}
public static void CheckDragEnter(this DragEventArgs e, string extensions)
{
if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return;
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (var file in files)
{
var ext = Path.GetExtension(file);
if (!String.IsNullOrEmpty(extensions) && ext.Equals(extensions))
{
e.Effect = DragDropEffects.Copy;
return;
}
else if (String.IsNullOrEmpty(extensions) && File.Exists(Path.Combine(file, "AndroidManifest.xml")))
{
e.Effect = DragDropEffects.Copy;
return;
}
}
e.Effect = DragDropEffects.None;
}
public static bool CheckDragOver(this DragEventArgs e, string extensions)
{
if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return false;
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (var file in files)
{
var ext = Path.GetExtension(file);
if (!String.IsNullOrEmpty(extensions) && ext.Equals(extensions))
{
e.Effect = DragDropEffects.Copy;
return true;
}
else if (String.IsNullOrEmpty(extensions) && File.Exists(Path.Combine(file, "AndroidManifest.xml")))
{
e.Effect = DragDropEffects.Copy;
return true;
}
}
return false;
}
public static bool CheckManyDragOver(this DragEventArgs e, params string[] extensions)
public static void CheckDragEnter(this DragEventArgs e, params string[] extensions)
{
string[] files = e.GetFilesDrop();
if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
if (extensions == null && Directory.Exists(files[0]))
e.Effect = DragDropEffects.Copy;
else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
public static bool CheckDragOver(this DragEventArgs e, params string[] extensions)
{
string[] files = e.GetFilesDrop();
if (extensions == null && Directory.Exists(files[0]))
{
e.Effect = DragDropEffects.Move;
return true;
}
else if (files.Length == 1 && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
{
e.Effect = DragDropEffects.Move;
return true;
@@ -88,46 +64,57 @@ namespace SaveToGameWpf.Logic.Utils
return false;
}
public static bool DropOneByEnd(this DragEventArgs e, string ext, Action<string> onSuccess)
{
string[] files = e.GetFilesDrop(ext);
if (files.Length == 1)
public static bool CheckManyDragOver(this DragEventArgs e, params string[] extensions)
{
string[] files = e.GetFilesDrop();
if (extensions == null && Directory.Exists(files[0]))
{
e.Effect = DragDropEffects.Move;
return true;
}
else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
{
e.Effect = DragDropEffects.Move;
return true;
}
e.Effect = DragDropEffects.None;
return false;
}
public static bool DropOneByEnd(this DragEventArgs e, Action<string> onSuccess, params string[] extensions)
{
string[] files = e.GetFilesDrop();
if (extensions == null && Directory.Exists(files[0]))
{
onSuccess(files[0]);
return true;
}
else if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
{
onSuccess(files[0]);
return true;
}
return false;
}
public static string DropOneByEnd(this DragEventArgs e, string ext)
public static bool DropManyByEnd(this DragEventArgs e, Action<string[]> onSuccess, params string[] extensions)
{
string[] files = e.GetFilesDrop(ext);
foreach (string apk in extensions)
{
Debug.WriteLine(apk);
string[] files = e.GetFilesDrop(apk);
if (files.Length == 1)
return files[0];
return null;
}
public static void DropManyByEnd(this DragEventArgs e, string ext, Action<string[]> onSuccess)
{
string[] files = e.GetFilesDrop(ext);
if (files.Length > 0)
onSuccess(files);
}
public static string[] DropManyByEnd(this DragEventArgs e, string ext)
{
string[] files = e.GetFilesDrop(ext);
if (files.Length > 0)
return files;
return null;
if (files.Length > 0)
{
onSuccess(files);
return true;
}
}
return false;
}
}
}
+23 -15
View File
@@ -2,6 +2,8 @@
using Microsoft.Win32;
using APKToolGUI.Languages;
using APKToolGUI.Utils;
using Microsoft.Build.Framework.XamlTypes;
using System.Windows.Forms;
namespace APKToolGUI
{
@@ -23,25 +25,19 @@ namespace APKToolGUI
try
{
#region Add context menu to registry
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree);
apkToolGUIFolderShell.SetValue("Icon", executablePath);
apkToolGUIFolderShell.SetValue("MUIVerb", "APKToolGUI");
apkToolGUIFolderShell.SetValue("MUIVerb", Application.ProductName);
apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build;APKToolGUI.Smali");
apkToolGUIFolderShell.Close();
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
RegistryKey shellAPK = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
shellAPK.SetValue("Icon", "\"" + executablePath + "\"");
shellAPK.SetValue("MUIVerb", "APKToolGUI");
shellAPK.SetValue("SubCommands", "APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign");
shellAPK.Close();
CreateFileAssociationsSubKey(executablePath, ".apk", "APKToolGUI.Apkinfo;APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign");
CreateFileAssociationsSubKey(executablePath, ".xapk", "APKToolGUI.Decompile");
CreateFileAssociationsSubKey(executablePath, ".apks", "APKToolGUI.Decompile");
CreateFileAssociationsSubKey(executablePath, ".zip", "APKToolGUI.Decompile");
CreateFileAssociationsSubKey(executablePath, ".apkm", "APKToolGUI.Decompile");
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".dex", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
RegistryKey shellDEX = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.dex", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
shellDEX.SetValue("Icon", "\"" + executablePath + "\"");
shellDEX.SetValue("MUIVerb", "APKToolGUI");
shellDEX.SetValue("SubCommands", "APKToolGUI.Baksmali");
shellDEX.Close();
CreateFileAssociationsSubKey(executablePath, ".dex", "APKToolGUI.Baksmali");
#endregion
#region Add command to registry
@@ -90,7 +86,7 @@ namespace APKToolGUI
RegistryKey apkinfo = shell.CreateSubKey("APKToolGUI.Apkinfo", RegistryKeyPermissionCheck.ReadWriteSubTree);
apkinfo.SetValue("", Language.GetApkInfo, RegistryValueKind.String);
apkinfo.SetValue("Icon", executablePath, RegistryValueKind.String);
apkinfo.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"apkinfo\" \"%1\"", RegistryValueKind.String);
apkinfo.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"viewinfo\" \"%1\"", RegistryValueKind.String);
apkinfo.Close();
shell.Close();
@@ -104,6 +100,18 @@ namespace APKToolGUI
return new Status(true, "Done!");
}
public static void CreateFileAssociationsSubKey(string executablePath, string fileExtension, string subCommands)
{
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
RegistryKey shell = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\" + fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree);
shell.SetValue("Icon", "\"" + executablePath + "\"");
shell.SetValue("MUIVerb", Application.ProductName);
shell.SetValue("SubCommands", subCommands);
shell.Close();
}
public static Status Remove()
{
try
+31
View File
@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace APKToolGUI.Utils
{
internal class FileUtils
{
public static void Move(string sourceFileName, string destFileName, bool overwrite = false)
{
if (File.Exists(destFileName) && overwrite)
File.Delete(destFileName);
File.Move(sourceFileName, destFileName);
}
public static void Copy(string sourceFileName, string destFileName, bool overwrite = false)
{
if (File.Exists(sourceFileName))
File.Copy(sourceFileName, destFileName, overwrite);
}
public static void Delete(string sourceFileName)
{
if (File.Exists(sourceFileName))
File.Delete(sourceFileName);
}
}
}
+62
View File
@@ -0,0 +1,62 @@
using APKToolGUI;
using APKToolGUI.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Media;
namespace APKToolGUI.Utils
{
/// <summary>
/// simple logging wrapper class
/// </summary>
public static class Log
{
/// <summary>
/// log message with level VERBOSE (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public static void v(string s)
{
if (!Settings.Default.DebugMode) return;
FormMain.Instance.ToLog(ApktoolEventType.None, s);
}
/// <summary>
/// log message with level DEBUG (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public static void d(string s)
{
if (!Settings.Default.DebugMode) return;
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
}
/// <summary>
/// log message with level INFO
/// </summary>
/// <param name="s">the string to log</param>
public static void i(string s)
{
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
}
/// <summary>
/// log message with level WARNING
/// </summary>
/// <param name="s">the string to log</param>
public static void w(string s)
{
FormMain.Instance.ToLog(ApktoolEventType.Warning, s);
}
/// <summary>
/// log message with level ERROR
/// </summary>
/// <param name="s">the string to log</param>
public static void e(string s)
{
FormMain.Instance.ToLog(ApktoolEventType.Error, s);
}
}
}
+14
View File
@@ -32,5 +32,19 @@ namespace APKToolGUI.Utils
{
return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));
}
public static string GetRelativePath(string basePath, string fullPath)
{
// Ensure both paths are absolute
basePath = Path.GetFullPath(basePath);
fullPath = Path.GetFullPath(fullPath);
if (!fullPath.StartsWith(basePath, StringComparison.OrdinalIgnoreCase))
{
throw new ArgumentException("The fullPath is not within the basePath.");
}
return fullPath.Substring(basePath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
}
}
}
+39
View File
@@ -0,0 +1,39 @@
using Microsoft.Build.Utilities;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
namespace APKToolGUI.Utils
{
internal class ProcessUtils
{
public static void KillAllProcessesSpawnedBy(UInt32 parentProcessId)
{
// NOTE: Process Ids are reused!
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"SELECT * " +
"FROM Win32_Process " +
"WHERE ParentProcessId=" + parentProcessId);
ManagementObjectCollection collection = searcher.Get();
if (collection.Count > 0)
{
foreach (var item in collection)
{
UInt32 childProcessId = (UInt32)item["ProcessId"];
if ((int)childProcessId != Process.GetCurrentProcess().Id)
{
Debug.WriteLine($"Kill child process {childProcessId}");
KillAllProcessesSpawnedBy(childProcessId);
Process childProcess = Process.GetProcessById((int)childProcessId);
childProcess.Kill();
}
}
}
}
}
}
+11
View File
@@ -69,5 +69,16 @@ namespace APKToolGUI.Utils
return text;
}
}
public static bool ContainsAny(this string haystack, params string[] needles)
{
foreach (string needle in needles)
{
if (haystack.Contains(needle))
return true;
}
return false;
}
}
}
+12 -10
View File
@@ -6,6 +6,7 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace APKToolGUI.Utils
{
@@ -112,6 +113,15 @@ namespace APKToolGUI.Utils
}
}
public static void ExtractAll(string path, string destination, bool flattenFoldersOnExtract = false)
{
using (ZipFile zip = ZipFile.Read(path))
{
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
zip.ExtractAll(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "")
{
ZipFile zip = new ZipFile();
@@ -136,15 +146,6 @@ namespace APKToolGUI.Utils
public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false)
{
//using (ZipFile zip = ZipFile.Read(path))
//{
// bool chkresult2 = zip.Any(entry => entry.FileName.Contains(folderName));
// if (chkresult2)
// {
// zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
// zip.ExtractSelectedEntries("name = *", folderName, destination, ExtractExistingFileAction.OverwriteSilently);
// }
//}
using (ZipFile zip = ZipFile.Read(path))
{
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
@@ -154,5 +155,6 @@ namespace APKToolGUI.Utils
}
}
}
}
}
}
+20 -5
View File
@@ -31,9 +31,11 @@ namespace APKToolGUI
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Version latestVersion = null;
string changelog = null;
try
{
latestVersion = GetVersion();
changelog = GetChangelog();
}
catch (Exception exc)
{
@@ -43,7 +45,7 @@ namespace APKToolGUI
{
if (CompareVersion(latestVersion))
{
e.Result = new Result(State.NeedUpdate, latestVersion.ToString(), (bool)e.Argument);
e.Result = new Result(State.NeedUpdate, latestVersion.ToString(), (bool)e.Argument, changelog);
}
else
e.Result = new Result(State.NoUpdate, null, (bool)e.Argument);
@@ -83,6 +85,17 @@ namespace APKToolGUI
return null;
}
private string GetChangelog()
{
string changelog;
using (WebClient webClient = new WebClient())
{
changelog = webClient.DownloadString("https://repo.andnixsh.com/tools/APKToolGUI/changelog.txt");
}
return changelog;
}
public enum State
{
NoUpdate,
@@ -92,15 +105,17 @@ namespace APKToolGUI
public class Result
{
public Result(State state, string message, bool silently)
public Result(State state, string message, bool silently, string changelog = null)
{
this.State = state;
this.Message = message;
this.Silently = silently;
State = state;
Message = message;
Silently = silently;
Changelog = changelog;
}
public State State { get; private set; }
public string Message { get; private set; }
public bool Silently { get; private set; }
public string Changelog { get; private set; }
}
}
}
+115 -12
View File
@@ -25,9 +25,6 @@
<setting name="Decode_InputAppPath" serializeAs="String">
<value />
</setting>
<setting name="Decode_FrameDir" serializeAs="String">
<value />
</setting>
<setting name="BuildProjectDir" serializeAs="String">
<value />
</setting>
@@ -59,7 +56,7 @@
<value>True</value>
</setting>
<setting name="ClearLogBeforeAction" serializeAs="String">
<value>False</value>
<value>True</value>
</setting>
<setting name="Decode_MatchOriginal" serializeAs="String">
<value>False</value>
@@ -70,9 +67,6 @@
<setting name="Build_CopyOriginal" serializeAs="String">
<value>False</value>
</setting>
<setting name="Build_FrameDir" serializeAs="String">
<value />
</setting>
<setting name="Build_UseFramework" serializeAs="String">
<value>False</value>
</setting>
@@ -91,7 +85,7 @@
<setting name="Build_InputDir" serializeAs="String">
<value />
</setting>
<setting name="InstallFramework_UseFrameDir" serializeAs="String">
<setting name="Framework_UseFrameDir" serializeAs="String">
<value>False</value>
</setting>
<setting name="InstallFramework_UseTag" serializeAs="String">
@@ -100,7 +94,7 @@
<setting name="InstallFramework_Tag" serializeAs="String">
<value />
</setting>
<setting name="InstallFramework_FrameDir" serializeAs="String">
<setting name="Framework_FrameDir" serializeAs="String">
<value />
</setting>
<setting name="Zipalign_AlignmentInBytes" serializeAs="String">
@@ -155,7 +149,7 @@
<value>False</value>
</setting>
<setting name="Zipalign_SignAfterZipAlign" serializeAs="String">
<value>False</value>
<value>True</value>
</setting>
<setting name="Sign_Alias" serializeAs="String">
<value>CERT</value>
@@ -188,10 +182,10 @@
<value>0</value>
</setting>
<setting name="Sign_Schemev4" serializeAs="String">
<value>2</value>
<value>0</value>
</setting>
<setting name="Decode_ApiLevel" serializeAs="String">
<value>29</value>
<value>4</value>
</setting>
<setting name="Build_ApiLevel" serializeAs="String">
<value>29</value>
@@ -226,6 +220,87 @@
<setting name="IgnoreOutputDirContextMenu" serializeAs="String">
<value>False</value>
</setting>
<setting name="Build_UseAapt2" serializeAs="String">
<value>True</value>
</setting>
<setting name="PlaySoundWhenDone" serializeAs="String">
<value>False</value>
</setting>
<setting name="UseCustomTempDir" serializeAs="String">
<value>False</value>
</setting>
<setting name="TempDir" serializeAs="String">
<value />
</setting>
<setting name="UseCustomJavaExe" serializeAs="String">
<value>False</value>
</setting>
<setting name="AutoDeleteIdsigFile" serializeAs="String">
<value>True</value>
</setting>
<setting name="Utf8FilenameSupport" serializeAs="String">
<value>False</value>
</setting>
<setting name="Sign_OverwriteInputFile" serializeAs="String">
<value>False</value>
</setting>
<setting name="Adb_SetVendor" serializeAs="String">
<value>False</value>
</setting>
<setting name="Adb_SelectedApkPath" serializeAs="String">
<value />
</setting>
<setting name="Sign_InstallApkAfterSign" serializeAs="String">
<value>False</value>
</setting>
<setting name="UseCustomApktool" serializeAs="String">
<value>False</value>
</setting>
<setting name="ApktoolPath" serializeAs="String">
<value />
</setting>
<setting name="Theme" serializeAs="String">
<value>0</value>
</setting>
<setting name="DebugMode" serializeAs="String">
<value>False</value>
</setting>
<setting name="Build_NetSecConf" serializeAs="String">
<value>False</value>
</setting>
<setting name="Decode_DontParseApkInfo" serializeAs="String">
<value>False</value>
</setting>
<setting name="UseCustomJVMArgs" serializeAs="String">
<value>False</value>
</setting>
<setting name="CustomJVMArgs" serializeAs="String">
<value>-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</value>
</setting>
<setting name="SplitApk_InputFile" serializeAs="String">
<value />
</setting>
<setting name="UseApkeditor" serializeAs="String">
<value>False</value>
</setting>
<setting name="Adb_OverrideAbi" serializeAs="String">
<value>0</value>
</setting>
<setting name="Adb_SetOverrideAbi" serializeAs="String">
<value>False</value>
</setting>
<setting name="Build_Jobs" serializeAs="String">
<value>4</value>
</setting>
<setting name="Decode_Jobs" serializeAs="String">
<value>4</value>
</setting>
<setting name="Decode_SetJobs" serializeAs="String">
<value>False</value>
</setting>
<setting name="Build_SetJobs" serializeAs="String">
<value>False</value>
</setting>
</APKToolGUI.Properties.Settings>
</userSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup>
@@ -233,8 +308,36 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.2.0" newVersion="6.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WinCopies.WindowsAPICodePack.Win32Native" publicKeyToken="ac0f4cf54a027a4d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.10.1.0" newVersion="2.10.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WinCopies.Util" publicKeyToken="cb02bf7a62cec965" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.17.0.0" newVersion="2.17.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.HashCode" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.3" newVersion="9.0.0.3" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Permissions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.3" newVersion="9.0.0.3" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+25 -14
View File
@@ -1,61 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
<package id="DotNetZip" version="1.16.0" targetFramework="net48" />
<package id="Fody" version="6.6.0" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.NETCore.Platforms" version="6.0.2" targetFramework="net48" />
<package id="Costura.Fody" version="6.0.0" targetFramework="net48" developmentDependency="true" />
<package id="DarkNet" version="2.3.0" targetFramework="net48" />
<package id="Fody" version="6.9.2" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.Bcl.HashCode" version="6.0.0" targetFramework="net48" />
<package id="Microsoft.NETCore.Platforms" version="7.0.4" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="Microsoft-WindowsAPICodePack-Core" version="1.1.5" targetFramework="net48" />
<package id="Microsoft-WindowsAPICodePack-Shell" version="1.1.5" targetFramework="net48" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="net48" />
<package id="Ookii.Dialogs.WinForms" version="4.0.0" targetFramework="net48" />
<package id="PortableSettingsProvider" version="0.2.4" targetFramework="net48" />
<package id="OSVersionExt" version="3.0.0" targetFramework="net48" />
<package id="PortableSettingsProvider" version="0.2.5" targetFramework="net48" />
<package id="ProDotNetZip" version="1.20.0" targetFramework="net48" />
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
<package id="ResourceLoader" version="3.2.4" targetFramework="net48" />
<package id="ResourceLoader" version="3.3.1" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Buffers" version="4.6.0" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Immutable" version="9.0.3" targetFramework="net48" />
<package id="System.Console" version="4.3.1" targetFramework="net48" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="6.0.0" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="9.0.3" targetFramework="net48" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
<package id="System.Formats.Nrbf" version="9.0.3" targetFramework="net48" />
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Memory" version="4.6.1" targetFramework="net48" />
<package id="System.Net.Http" version="4.3.4" targetFramework="net48" />
<package id="System.Net.Primitives" version="4.3.1" targetFramework="net48" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.6.0" targetFramework="net48" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="9.0.3" targetFramework="net48" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Resources.Extensions" version="6.0.0" targetFramework="net48" />
<package id="System.Resources.Extensions" version="9.0.3" targetFramework="net48" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime" version="4.3.1" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.1" targetFramework="net48" />
<package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net48" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
<package id="System.Security.AccessControl" version="6.0.1" targetFramework="net48" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net48" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net48" />
<package id="System.Security.Permissions" version="9.0.3" targetFramework="net48" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="9.0.3" targetFramework="net48" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net48" />
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
<package id="System.ValueTuple" version="4.6.0" targetFramework="net48" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net48" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
</packages>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Some files were not shown because too many files have changed in this diff Show More