144 Commits

Author SHA1 Message Date
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
111 changed files with 10441 additions and 3039 deletions
+96
View File
@@ -0,0 +1,96 @@
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 performed a cursory search of the issue tracker on [Apktool] (https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue) and [Baksmali](https://github.com/JesusFreke/smali/issues?q=is%3Aissue) but did not found an answer
required: true
- label: I am running the latest version of [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/releases) and [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases).
required: true
- label: I have tried to decompile and compile without changing anything.
required: true
- label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq)
required: true
- label: I have checked using [APKiD](https://github.com/rednaga/APKiD) and verified that the app does not have protection(s) like packer, obfuscation, anti-tamper, anti-cheats etc
required: false
- 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
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.
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: Windows 11 2h22
validations:
required: true
+23
View File
@@ -0,0 +1,23 @@
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: Baksmali 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: System apps modding support forum
url: https://forum.xda-developers.com/all-forums-by-manufacturer
about: For support, questions or help with modding system apps.
- name: Apktool forum
url: https://github.com/iBotPeaches/Apktool/discussions
about: For support, questions or help with Apktool, development and modding
- 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
- name: Android development and modding support forum 2
url: https://androidforums.com/forums/android-development.28/
about: For support, questions or help with development and modding
- name: Android development and modding support forum 3
url: https://platinmods.com/forums/modding-questions-discussions.11/
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
+67 -19
View File
@@ -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>
@@ -80,6 +80,10 @@
<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>
<Reference Include="CustomMarshalers" />
<Reference Include="DarkNet, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DarkNet.2.2.0\lib\net452\DarkNet.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>
@@ -91,12 +95,23 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.4.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Core.1.1.4\lib\net48\Microsoft.WindowsAPICodePack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.4.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Shell.1.1.4\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="OSVersionExt, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\OSVersionExt.2.0.0\lib\net462\OSVersionExt.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>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<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>
@@ -118,8 +133,8 @@
</Reference>
<Reference Include="System.Core" />
<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=7.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.7.0.2\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>
@@ -167,8 +182,9 @@
<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.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<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>
@@ -189,8 +205,8 @@
<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.Resources.Extensions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Resources.Extensions.7.0.0\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>
@@ -241,6 +257,7 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
@@ -253,13 +270,36 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<Compile Include="AndroidRes\AndroidResourceMerger.cs" />
<Compile Include="AndroidRes\AndroidResources.cs" />
<Compile Include="AndroidRes\Model\AndroidAttribute.cs" />
<Compile Include="AndroidRes\Model\AndroidBool.cs" />
<Compile Include="AndroidRes\Model\AndroidInteger.cs" />
<Compile Include="AndroidRes\Model\AndroidPlural.cs" />
<Compile Include="AndroidRes\Model\AndroidPublic.cs" />
<Compile Include="AndroidRes\Model\AndroidString.cs" />
<Compile Include="AndroidRes\Model\AndroidStyle.cs" />
<Compile Include="AndroidRes\Model\AndroidStyleable.cs" />
<Compile Include="AndroidRes\Model\AndroidTypedItem.cs" />
<Compile Include="AndroidRes\Model\GenericArrayTypes.cs" />
<Compile Include="AndroidRes\Model\GenericTypes.cs" />
<Compile Include="AndroidRes\Model\Generic\AndroidGeneric.cs" />
<Compile Include="AndroidRes\Model\Generic\AndroidGenericArray.cs" />
<Compile Include="AndroidRes\Model\Generic\AndroidResource.cs" />
<Compile Include="AndroidRes\Util\ClassExtensions.cs" />
<Compile Include="AndroidRes\Util\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 +309,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 +353,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,6 +362,7 @@
<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" />
@@ -338,7 +387,10 @@
<EmbeddedResource Include="Forms\FormSettings.ru.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Languages\Language.hu.resx" />
<EmbeddedResource Include="Languages\Language.pt-BR.resx" />
<EmbeddedResource Include="Languages\Language.ru.resx" />
<EmbeddedResource Include="Languages\Language.zh-CN.resx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -368,18 +420,10 @@
</ItemGroup>
<ItemGroup>
<Content Include="android-thin.ico" />
<None Include="Resources\apkaio.png" />
<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 +453,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\Fody.6.7.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.7.0\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\Fody.6.7.0\build\Fody.targets" Condition="Exists('..\packages\Fody.6.7.0\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">
@@ -0,0 +1,562 @@
//https://github.com/shadow578/ApksMerger
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Xml;
using APKSMerger.AndroidRes.Model;
using APKSMerger.AndroidRes.Model.Generic;
using APKSMerger.Util;
using APKToolGUI.Utils;
namespace APKSMerger.AndroidRes
{
/// <summary>
/// merges android resource files
/// </summary>
public sealed class AndroidMerger
{
/// <summary>
/// check capabilities of the base and splits, warn if (common) libs are missing
/// </summary>
/// <param name="locales">list of supported locales; key is locale, value is name of dir that first included it</param>
/// <param name="abis">list of supported abis; key is abi, value is name of dir that first included it</param>
/// <param name="baseDir">base project dir</param>
/// <param name="splits">split dirs</param>
public void CollectCapabilities(out Dictionary<string, string> locales, out Dictionary<string, string> abis,
DirectoryInfo baseDir, params DirectoryInfo[] splits)
{
//init dicts
Log.i("collecting info about splits...");
locales = new Dictionary<string, string>();
abis = new Dictionary<string, string>();
//combine base and splits into one list
List<DirectoryInfo> allDir = new List<DirectoryInfo>();
allDir.Add(baseDir);
allDir.AddRange(splits);
//check all dirs, collect infos about them
foreach (DirectoryInfo d in allDir)
{
//check exists
if (!d.Exists)
{
Directory.CreateDirectory(baseDir.FullName);
Log.w($"Create baseDir {baseDir.FullName}");
continue;
}
//get all library archs included in this dir
//a decompiled apk dir may have a lib directory that contains native libraries for all archs supported by that apk (or split)
//the archs are splitted into their own directories, depending on the arch they're for
string libsDir = Path.Combine(d.FullName, "lib");
if (Directory.Exists(libsDir))
{
foreach (string arch in Directory.EnumerateDirectories(libsDir))
{
//get name of arch
string archName = Path.GetFileName(arch);
//add arch to lists of abis
if (!abis.ContainsKey(archName))
{
Log.v($"{d.Name} includes abi {archName}");
abis.Add(archName, d.Name);
}
else
{
//double arch?
Log.w($"arch {archName} already included by {abis[archName]} - in {d.Name}");
}
}
}
else
{
Log.v($"{d.Name} does not include abis");
}
//get all locales included in this dir
//extra locales are defined in strings.xml files in directories named values-<LOCALE_NAME>
//locale name seems to be formatted as ISO 639, but with an extra r (so en-GB == en-rGB)
string resDir = Path.Combine(d.FullName, "res");
if (Directory.Exists(resDir))
{
//add all dirs matching pattern (like values-en-rGB)
foreach (string lang in Directory.EnumerateDirectories(resDir, @"values-*"))
{
//check directory contains a strings.xml
if (!File.Exists(Path.Combine(lang, "strings.xml")))
continue;
//get name of lang
string langName = Path.GetFileName(lang).ReplaceFirst("values-", "");
//add lang to list of locales
if (!locales.ContainsKey(langName))
{
Log.v($"{d.Name} included locale {langName}");
locales.Add(langName, d.Name);
}
else
{
//double lang?
Log.w($"locale {langName} already included by {locales[langName]} - in {d.Name}");
}
}
}
else
{
Log.v($"{d.Name} does not include locales");
}
}
}
/// <summary>
/// merge all splits into the base project dir
/// </summary>
/// <param name="baseDir">base project dir</param>
/// <param name="splits">split dirs to merge</param>
public void MergeSplits(DirectoryInfo baseDir, params DirectoryInfo[] splits)
{
//Log.v($"Base dir: {baseDir.FullName}");
//check all dirs exists
if (!baseDir.Exists)
{
Directory.CreateDirectory(baseDir.FullName);
Log.w($"Create baseDir {baseDir.FullName}");
//return;
}
foreach (DirectoryInfo dir in splits)
{
//Debug.WriteLine(dir);
if (!dir.Exists)
{
Log.e($"split dir {dir.FullName} dos not exist!");
return;
}
}
List<string> assetPacks = new List<string>();
//enumarate all splitted files
Dictionary</*original*/string, /*replacement*/string> globalNameReplacements = new Dictionary<string, string>();
foreach (DirectoryInfo split in splits)
{
//Log.v($"Split dir: {split.FullName}");
split.EnumerateAllFiles("*.*", true, (FileInfo splittedFile) =>
{
if (splittedFile.FullName.Contains("AndroidManifest.xml"))
{
string manifest = File.ReadAllText(splittedFile.FullName);
string splitModule = StringExt.Regex(@"(?<= split=\"")(.*?)(?=\"")", manifest);
if (!String.IsNullOrEmpty(splitModule) && manifest.Contains("dist:type=\"asset-pack\""))
{
Log.v($"Add module: {splitModule}");
assetPacks.Add(splitModule);
}
}
//Debug.WriteLine($"Splited file: {splittedFile.FullName}");
//check if should process
string splitRel = PathUtils.GetRelativePath(split.FullName, splittedFile.FullName);
if (!ShouldProcess(splittedFile, split))
{
//Log.v($"skip excluded split file {splitRel}");
return;
}
//Debug.WriteLine($"Split rel dir: {splitRel}");
//Debug.WriteLine($"base Dir: {baseDir.FullName}");
List<string> splitList = splitRel.Split('\\').ToList();
splitList.RemoveAt(0);
string outputString = string.Join("\\", splitList);
//get file path for base dir
FileInfo baseFile = new FileInfo(Path.Combine(baseDir.FullName, outputString));
//Debug.WriteLine($"Base file: {baseFile}");
//Log.v($"Base file: {baseFile}");
//create target dir in base if needed
string baseFileDir = Path.GetDirectoryName(baseFile.FullName);
//Log.v($"Base file´dir: {baseFileDir}");
//Debug.WriteLine($"Base file dir: {baseFileDir}");
if (!Directory.Exists(baseFileDir))
{
Directory.CreateDirectory(baseFileDir);
}
//check file exists in base and is resource xml
if (!IsResourceXml(baseFile))
{
//nothing to merge, just copy
Log.v($"Move split file {splitRel} to {baseFile}");
if (File.Exists(baseFile.FullName))
File.Delete(baseFile.FullName);
splittedFile.MoveTo(baseFile.FullName);
}
else
{
//already exists, merge
//Debug.WriteLine($"Merge split file {splitRel} with {baseFile}");
//skip if files are equal
if (baseFile.HasSameHash(splittedFile))
{
Log.vv($"base and split of {splitRel} have same hash, skipping...");
return;
}
//check base and split are both resource xmls, if not skip
if (/*!IsResourceXml(baseFile) ||*/ !IsResourceXml(splittedFile))
{
Log.vv($"split of {splitRel} is not resource xml, skipping...");
return;
}
if (splittedFile.FullName.Contains("styles.xml"))
{
Debug.WriteLine("Break");
}
//merge
MergeResourceXML(baseFile, splittedFile, globalNameReplacements);
}
});
}
//skip replacement if no global name replacements are available
if (globalNameReplacements.Count <= 0)
{
Log.d("skip global name replacements: count is 0");
}
//replace names globally (in xml only)
Log.d($"process {globalNameReplacements.Count} global name replacements...");
foreach (string org in globalNameReplacements.Keys)
{
Log.v($"Replace {org} with {globalNameReplacements[org]}");
//Debug.Write($"replace {org} with {globalNameReplacements[org]}");
}
baseDir.EnumerateAllFiles("*.xml", true, (FileInfo file) =>
{
//Debug.WriteLine($"Name replace in {file.FullName}");
//create temp file
FileInfo temp = new FileInfo(Path.GetTempFileName());
//copy from input to temp, replace everything on replace list
using (StreamReader inp = file.OpenText())
using (StreamWriter oup = temp.CreateText())
{
string ln;
while ((ln = inp.ReadLine()) != null)
{
//replace all
foreach (string org in globalNameReplacements.Keys)
{
string dummy = StringExt.Regex(@"APKTOOL_DUMMY_([A-Za-z0-9])\w", ln);
if (ln.Contains(dummy))
{
//To avoid replacing wrong dummies. Don't know if there is better way
ln = ln.Replace(org + "<", globalNameReplacements[org] + "<");
ln = ln.Replace(org + "\"", globalNameReplacements[org] + "\"");
//Debug.WriteLine($"Replaced {org} with {globalNameReplacements[org]} in {file.FullName}");
}
//if (ln.Contains(org))
// ln = Regex.Replace(ln, @"APKTOOL_DUMMY_([A-Za-z0-9])\w", globalNameReplacements[org]);
}
//write back
oup.WriteLine(ln);
}
}
//move temp to input and delete temp if still exists
string tempPath = temp.FullName;
if (File.Exists(file.FullName))
{
File.Delete(file.FullName);
}
temp.MoveTo(file.FullName);
if (File.Exists(tempPath))
{
File.Delete(tempPath);
}
});
//remove splits from android manifest
FileInfo baseManifest = new FileInfo(Path.Combine(baseDir.FullName, "AndroidManifest.xml"));
PatchManifest(baseManifest, assetPacks);
FileInfo baseYml = new FileInfo(Path.Combine(baseDir.FullName, "apktool.yml"));
PatchYml(baseYml, assetPacks);
}
/// <summary>
/// Patch the AndroidManifest.xml to not use splits
/// </summary>
/// <param name="manifest">the manifest xml to patch</param>
void PatchManifest(FileInfo manifest, List<string> assetPacks)
{
Log.d($"patching manifest {manifest.FullName}...");
//check the file exists
if (!manifest.Exists)
{
Log.e("manifest to patch does not exist!");
return;
}
string modules = null;
if (assetPacks.Count != 0)
{
foreach (string asset in assetPacks)
{
modules += "," + asset;
}
}
//prepare targets to remove
string[] replaceTargets = { @"android:isSplitRequired=""true""" };
List<string> removeTargets = new List<string> { @"meta-data android:name=""com.android.stamp.source""",
@"meta-data android:name=""com.android.vending.derived.apk.id""",
@"meta-data android:name=""com.android.vending.splits.required""",
@"meta-data android:name=""com.android.vending.splits"""};
//create temp file
FileInfo temp = new FileInfo(Path.GetTempFileName());
//copy from input to temp, replace everything on replace list
using (StreamReader inp = manifest.OpenText())
using (StreamWriter oup = temp.CreateText())
{
string ln;
while ((ln = inp.ReadLine()) != null)
{
//remove all
foreach (string target in replaceTargets)
{
ln = ln.Replace(target, "");
}
if (removeTargets.Any(w => ln.Contains(w)))
continue;
if (ln.Contains("STAMP_TYPE_DISTRIBUTION_APK"))
ln = ln.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
if (ln.Contains("</application>") && !String.IsNullOrEmpty(modules))
{
oup.WriteLine(@" <meta-data android:name=""com.android.dynamic.apk.fused.modules"" android:value=""base" + modules + @"""/>");
}
//write back
oup.WriteLine(ln);
}
}
//move temp to input and delete temp if still exists
string tempPath = temp.FullName;
if (File.Exists(manifest.FullName))
{
File.Delete(manifest.FullName);
}
temp.MoveTo(manifest.FullName);
if (File.Exists(tempPath))
{
File.Delete(tempPath);
}
}
void PatchYml(FileInfo yml, List<string> assetPacks)
{
Log.d($"patching apktool.yml {yml.FullName}...");
//check the file exists
if (!yml.Exists)
{
Log.e("manifest to patch does not exist!");
return;
}
//create temp file
FileInfo temp = new FileInfo(Path.GetTempFileName());
//copy from input to temp, replace everything on replace list
using (StreamReader inp = yml.OpenText())
using (StreamWriter oup = temp.CreateText())
{
string ln;
while ((ln = inp.ReadLine()) != null)
{
if (ln.Contains("doNotCompress:") && assetPacks.Count != 0)
{
oup.WriteLine(ln);
foreach (string asset in assetPacks)
{
oup.WriteLine("- assets/assetpack/" + asset);
}
continue;
}
//write back
oup.WriteLine(ln);
}
}
//move temp to input and delete temp if still exists
string tempPath = temp.FullName;
if (File.Exists(yml.FullName))
{
File.Delete(yml.FullName);
}
temp.MoveTo(yml.FullName);
if (File.Exists(tempPath))
{
File.Delete(tempPath);
}
}
/// <summary>
/// merge two splitted resource xmls, overwrite a with merged
/// </summary>
/// <param name="a">file a to merge</param>
/// <param name="b">file b to merge</param>
/// <param name="globalNameReplacements">dictionary that can be used to replace names of resources globally</param>
void MergeResourceXML(FileInfo a, FileInfo b, Dictionary</*original*/string, /*replacement*/string> globalNameReplacements)
{
//deserialize both
AndroidResources resBase = AndroidResources.FromFile(a.FullName);
AndroidResources resSplit = AndroidResources.FromFile(b.FullName);
//merge resources to resA
foreach (AndroidResource res in resSplit.Values)
{
if (res is AndroidPublic splitP)
{
//entry of public.xml, special merge (Id has to be unique)
//try to find public with same id in base apk
AndroidPublic baseP = resBase.FindPublicWithId(splitP.Id);
if (baseP == null || !baseP.Type.Equals(splitP.Type))
{
//id not found or wrong type, add from split
resBase.Values.Add(splitP);
}
else
{
//id with correct type found in base,
//check if name of base is apktool dummy and name of split is not
if (baseP.Name.StartsWith("APKTOOL_DUMMY") && !splitP.Name.StartsWith("APKTOOL_DUMMY"))
{
try
{
Log.v($"Replace {baseP.Name} with {splitP.Name}...");
globalNameReplacements.Add(baseP.Name, splitP.Name);
baseP.Name = splitP.Name;
}
catch (Exception ex)
{
Log.v($"Error replacing {baseP.Name} with {splitP.Name}...");
Debug.WriteLine(ex.Message);
}
}
}
}
else
{
//normal resource entry (string / color / ...)
if (!resBase.Values.Contains(res))
{
resBase.Values.Add(res);
}
}
}
//serialize back to a
resBase.ToFile(a.FullName);
}
/// <summary>
/// check if the xml file contains the resources xml tag
/// </summary>
/// <param name="xml">the xml to check</param>
/// <returns>does the xml contain the tag?</returns>
bool IsResourceXml(FileInfo f)
{
//check file exists
if (!f.Exists) return false;
try
{
//Net reactor cause error
//check xml root
XmlDocument xml = new XmlDocument();
xml.Load(f.FullName);
//Log.v($"IsResourceXml 5");
return xml.DocumentElement.Name.Equals("resources", StringComparison.OrdinalIgnoreCase);
}
catch
{
//probably bad xml
return false;
}
}
/// <summary>
/// should the file be processed?
/// Example for files to exclude from processing are AndroidManifest.xml, apktool.yml, and META-INF/*
/// </summary>
/// <param name="file">the file to check</param>
/// <param name="projDir">the project dir the file is in</param>
/// <returns>process the file?</returns>
bool ShouldProcess(FileInfo file, DirectoryInfo projDir)
{
//get relative path
string filePathRel = PathUtils.GetRelativePath(projDir.FullName, file.FullName).TrimStart('/').TrimStart('\\');
//check if in META-INF (exclude all)
//if (filePathRel.StartsWith("META-INF", StringComparison.OrdinalIgnoreCase))
// return false;
//check if in original (exlude all)
if (filePathRel.StartsWith("original", StringComparison.OrdinalIgnoreCase))
return false;
//check if AndroidManifest.xml OR apktool.yml
if (file.Name.Equals("androidmanifest.xml", StringComparison.OrdinalIgnoreCase)
|| file.Name.Equals("apktool.yml", StringComparison.OrdinalIgnoreCase))
return false;
//check if AndroidManifest.xml OR apktool.yml
if (file.Name.Equals("resources.arsc", StringComparison.OrdinalIgnoreCase))
return false;
//check if drawables.yml
//if (file.Name.Equals("drawables.xml", StringComparison.OrdinalIgnoreCase))
// return false;
//all ok, include
return true;
}
}
}
+103
View File
@@ -0,0 +1,103 @@
//https://github.com/shadow578/ApksMerger
using APKSMerger.AndroidRes.Model;
using APKSMerger.AndroidRes.Model.Generic;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes
{
[XmlRoot("resources")]
public sealed class AndroidResources
{
//basic
[XmlElement("bool", Type = typeof(AndroidBool))]
[XmlElement("integer", Type = typeof(AndroidInteger))]
[XmlElement("dimen", Type = typeof(AndroidDimension))]
[XmlElement("drawable", Type = typeof(AndroidDrawable))]
[XmlElement("color", Type = typeof(AndroidColor))]
[XmlElement("fraction", Type = typeof(AndroidFraction))]
//extended
[XmlElement("attr", Type = typeof(AndroidAttribute))]
[XmlElement("string", Type = typeof(AndroidString))]
[XmlElement("item", Type = typeof(AndroidTypedItem))]
[XmlElement("public", Type = typeof(AndroidPublic))]
//complex
[XmlElement("style", Type = typeof(AndroidStyle))]
[XmlElement("plurals", Type = typeof(AndroidPlural))]
[XmlElement("string-array", Type = typeof(AndroidStringArray))]
[XmlElement("integer-array", Type = typeof(AndroidIntegerArray))]
[XmlElement("array", Type = typeof(AndroidGenericArray))]
[XmlElement("declare-styleable", Type = typeof(AndroidStyleable))]
public List<AndroidResource> Values { get; set; } = new List<AndroidResource>();
/// <summary>
/// Find a AndroidPublic with matching id
/// </summary>
/// <param name="id">the id to find</param>
/// <returns>matching public, or null if not found</returns>
public AndroidPublic FindPublicWithId(string id)
{
foreach(AndroidResource res in Values)
{
if((res is AndroidPublic pub) && pub.Id.Equals(id))
{
return pub;
}
}
return null;
}
/// <summary>
/// Deserialize a file into a object
/// </summary>
/// <param name="file">the file to deserialize</param>
/// <returns>the object</returns>
public static AndroidResources FromFile(string file)
{
//check file
if (!File.Exists(file)) return null;
//deserialize
try
{
XmlSerializer ser = new XmlSerializer(typeof(AndroidResources));
using (StreamReader reader = File.OpenText(file))
{
return ser.Deserialize(reader) as AndroidResources;
}
}
catch
{
return null;
}
}
/// <summary>
/// serialize into a file
/// </summary>
/// <param name="file">the file to serialize to, will be overwritten if exists</param>
/// <returns>write file ok?</returns>
public bool ToFile(string file)
{
try
{
XmlSerializer ser = new XmlSerializer(typeof(AndroidResources));
using (StreamWriter writer = File.CreateText(file))
{
ser.Serialize(writer, this, new XmlSerializerNamespaces());
return true;
}
}
catch
{
return false;
}
}
}
}
@@ -0,0 +1,15 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidAttribute : AndroidResource
{
[XmlAttribute("format")]
public string Format { get; set; }
//[XmlText]
//[XmlAttribute("value")]
public string Value { get; set; }
}
}
@@ -0,0 +1,12 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidBool : AndroidResource
{
//[XmlText]
//[XmlAttribute("value")]
public bool Value { get; set; }
}
}
@@ -0,0 +1,12 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidInteger : AndroidResource
{
//[XmlText]
//[XmlAttribute("value")]
public int Value { get; set; }
}
}
@@ -0,0 +1,21 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidPlural : AndroidResource
{
public sealed class Plural
{
[XmlAttribute("quantitiy")]
public string Quantity { get; set; }
[XmlText]
public string Value { get; set; }
}
[XmlElement("item", Type = typeof(Plural))]
public List<Plural> Values { get; set; } = new List<Plural>();
}
}
@@ -0,0 +1,14 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidPublic : AndroidResource
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlAttribute("id")]
public string Id { get; set; }
}
}
@@ -0,0 +1,18 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidString : AndroidResource
{
//[XmlAttribute("formatted")]
//public bool Formatted { get; set; }
//[XmlAttribute("translatable")]
//public bool Translateable { get; set; }
// [XmlText]
//[XmlAttribute("value")]
public string Value { get; set; }
}
}
@@ -0,0 +1,15 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidStyle : AndroidResource
{
[XmlAttribute("parent")]
public string Parent { get; set; }
[XmlElement("item", Type = typeof(AndroidGeneric))]
public List<AndroidGeneric> Items { get; set; } = new List<AndroidGeneric>();
}
}
@@ -0,0 +1,12 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidStyleable : AndroidResource
{
[XmlElement("attr", Type = typeof(AndroidAttribute))]
public List<AndroidAttribute> Values { get; set; } = new List<AndroidAttribute>();
}
}
@@ -0,0 +1,15 @@
using APKSMerger.AndroidRes.Model.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidTypedItem : AndroidResource
{
[XmlAttribute("type")]
public string Type { get; set; }
//[XmlText]
//[XmlAttribute("value")]
public string Value { get; set; }
}
}
@@ -0,0 +1,11 @@
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model.Generic
{
public class AndroidGeneric : AndroidResource
{
[XmlText]
//[XmlAttribute("value")]
public string Value { get; set; }
}
}
@@ -0,0 +1,18 @@
using System.Collections.Generic;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model.Generic
{
public class AndroidGenericArray : AndroidResource
{
public sealed class Item
{
// [XmlText]
//[XmlAttribute("value")]
public string Value { get; set; }
}
[XmlElement("item", Type = typeof(Item))]
public List<Item> Values { get; set; } = new List<Item>();
}
}
@@ -0,0 +1,22 @@
using System;
using System.Diagnostics;
using System.Xml.Serialization;
namespace APKSMerger.AndroidRes.Model.Generic
{
public class AndroidResource
{
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
public override bool Equals(object obj)
{
//check other object is of correct type, otherwise not equal
if (!(obj is AndroidResource other)) return false;
//check if name is equal
//Debug.WriteLine("Xml name: " + other.Name);
return Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase);
}
}
}
@@ -0,0 +1,8 @@
using APKSMerger.AndroidRes.Model.Generic;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidStringArray : AndroidGenericArray { }
public sealed class AndroidIntegerArray : AndroidGenericArray { }
}
@@ -0,0 +1,12 @@
using APKSMerger.AndroidRes.Model.Generic;
namespace APKSMerger.AndroidRes.Model
{
public sealed class AndroidDimension : AndroidGeneric { }
public sealed class AndroidDrawable : AndroidGeneric { }
public sealed class AndroidColor : AndroidGeneric { }
public sealed class AndroidFraction : AndroidGeneric { }
}
@@ -0,0 +1,115 @@
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace APKSMerger.Util
{
/// <summary>
/// extension methods
/// </summary>
public static class ClassExtensions
{
/// <summary>
/// replaces the first occurance of the pattern with the replacement
/// </summary>
/// <param name="s">the string to replace in</param>
/// <param name="pattern">the pattern to replace</param>
/// <param name="replacement">the replacement for the pattern</param>
/// <returns>a string in wich the first occurance of the pattern was replaced</returns>
public static string ReplaceFirst(this string s, string pattern, string replacement)
{
int pos = s.IndexOf(pattern);
if (pos < 0)
{
return s;
}
return s.Substring(0, pos) + replacement + s.Substring(pos + pattern.Length);
}
/// <summary>
/// does the array contain the string a, ignoring case?
/// </summary>
/// <param name="s">the array to check</param>
/// <param name="a">the string to check for</param>
/// <returns>contains it?</returns>
public static bool ContainsIgnoreCase(this string[] s, string a)
{
foreach (string sa in s)
{
if (sa.Equals(a, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
/// <summary>
/// enumerates all files in the directory (and subdirs if enabled)
/// </summary>
/// <param name="dir">the directory to enumerate in</param>
/// <param name="pattern">the pattern to filter with, eg. *.* or *.txt</param>
/// <param name="includeSubDirs">should files in subdirs be included?</param>
/// <param name="action">the action to execute for all files</param>
public static void EnumerateAllFiles(this DirectoryInfo dir, string pattern, bool includeSubDirs, Action<FileInfo> action)
{
foreach (FileInfo file in dir.EnumerateFiles(pattern, includeSubDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly))
{
action.Invoke(file);
}
}
/// <summary>
/// enumerates all files in the directory (and subdirs if enabled) in parallel
/// </summary>
/// <param name="dir">the directory to enumerate in</param>
/// <param name="pattern">the pattern to filter with, eg. *.* or *.txt</param>
/// <param name="includeSubDirs">should files in subdirs be included?</param>
/// <param name="action">the action to execute for all files</param>
public static void EnumerateAllFilesParallel(this DirectoryInfo dir, string pattern, bool includeSubDirs, Action<FileInfo> action)
{
Parallel.ForEach(dir.EnumerateFiles(pattern, includeSubDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly), action);
}
/// <summary>
/// checks if the two files have the same hash (MD5)
/// </summary>
/// <param name="a">the first file</param>
/// <param name="b">the file to compare</param>
/// <returns>do they have the same hash?</returns>
public static bool HasSameHash(this FileInfo a, FileInfo b)
{
return a.GetMD5().Equals(b.GetMD5());
}
/// <summary>
/// Get the md5 of the file
/// </summary>
/// <param name="f">the file to get md5 of</param>
/// <returns>md5 string of the file</returns>
public static string GetMD5(this FileInfo f)
{
using (MD5 md5 = MD5.Create())
using (FileStream stream = f.OpenRead())
{
return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLowerInvariant();
}
}
/// <summary>
/// repeat the char n times
/// </summary>
/// <param name="c">char to repeat</param>
/// <param name="n">how often to repeat</param>
/// <returns>string with n time c</returns>
public static string Repeat(this char c, int n)
{
string s = "";
for (int i = 0; i < n; i++)
s += c;
return s;
}
}
}
+265
View File
@@ -0,0 +1,265 @@
using APKToolGUI;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Media;
namespace APKSMerger.Util
{
/// <summary>
/// simple logging wrapper class
/// </summary>
public static class Log
{
/// <summary>
/// should very verbose logs (Log.vv) be written?
/// </summary>
public static bool LogVeryVerbose { get; set; } = false;
/// <summary>
/// should verbose logs (Log.v) be written?
/// </summary>
public static bool LogVerbose { get; set; } = true;
/// <summary>
/// should debug logs (Log.d) be written?
/// </summary>
public static bool LogDebug { get; set; } = true;
#region direct logs
/// <summary>
/// log message with level VERY VERBOSE (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public static void vv(string s)
{
if (!LogVeryVerbose) return;
FormMain.Instance.ToLog(ApktoolEventType.None, s);
}
/// <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 (!LogVerbose) 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 (!LogDebug) return;
FormMain.Instance.ToLog(ApktoolEventType.None, 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);
}
#endregion
/// <summary>
/// start a new async log session
/// </summary>
/// <returns></returns>
public static AsyncLogSession StartAsync()
{
return new AsyncLogSession();
}
/// <summary>
/// writes a direct log message
/// </summary>
/// <param name="s">the string to log</param>
/// <param name="color">color to log in, null is default</param>
static void WriteLogDirect(string s, ConsoleColor? color = null)
{
//set color
ConsoleColor iColor = Console.ForegroundColor;
if (color.HasValue)
{
Console.ForegroundColor = color.Value;
}
//write log
Console.WriteLine(s);
//restore color
if (color.HasValue)
{
Console.ForegroundColor = iColor;
}
}
/// <summary>
/// async log sesssion
/// </summary>
public class AsyncLogSession : IDisposable
{
/// <summary>
/// lock object to ensure only one object commits at a time
/// </summary>
static readonly object _CommitLock = new object();
/// <summary>
/// Tag to include when logging
/// </summary>
Stack<string> tags = new Stack<string>();
/// <summary>
/// contains all pending log entries
/// </summary>
Queue<string> pending = new Queue<string>();
#region log functions
/// <summary>
/// log message with level VERY VERBOSE (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public void vv(string s)
{
if (!LogVeryVerbose) return;
EnqueueMessage($"[VV]{s}");
}
/// <summary>
/// log message with level VERBOSE (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public void v(string s)
{
if (!LogVerbose) return;
EnqueueMessage($"[V]{s}");
}
/// <summary>
/// log message with level DEBUG (may be disabled)
/// </summary>
/// <param name="s">the string to log</param>
public void d(string s)
{
if (!LogDebug) return;
EnqueueMessage($"[D]{s}");
}
/// <summary>
/// log message with level INFO
/// </summary>
/// <param name="s">the string to log</param>
public void i(string s)
{
EnqueueMessage($"[I]{s}");
}
/// <summary>
/// log message with level WARNING
/// </summary>
/// <param name="s">the string to log</param>
public void w(string s)
{
EnqueueMessage($"[W]{s}");
}
/// <summary>
/// log message with level ERROR
/// </summary>
/// <param name="s">the string to log</param>
public void e(string s)
{
EnqueueMessage($"[E]{s}");
}
#endregion
/// <summary>
/// enqueue a message in the message queue
/// </summary>
/// <param name="s">the message to enqueue</param>
void EnqueueMessage(string s)
{
pending.Enqueue($"{GetTag()}:{s}");
}
/// <summary>
/// push a tag onto the tags stack
/// </summary>
/// <param name="t">the tag to push</param>
public void PushTag(string t)
{
tags.Push(t);
}
/// <summary>
/// pop the last tag of the tags stack
/// </summary>
public void PopTag()
{
// tags.TryPop(out _);
}
/// <summary>
/// get the current tag
/// </summary>
/// <returns>current tag, or string.Empty if no tag</returns>
public string GetTag()
{
string tag;
// if (!tags.TryPeek(out tag))
tag = string.Empty;
return tag;
}
/// <summary>
/// commit all pending log entries
/// </summary>
public void Commit()
{
lock (_CommitLock)
{
while (pending.Count > 0)
{
WriteLogDirect(pending.Dequeue());
}
}
}
/// <summary>
/// same as calling .Commit(). used for using() syntax
/// </summary>
public void Dispose()
{
Commit();
}
}
}
}
+49 -9
View File
@@ -12,6 +12,12 @@ namespace APKToolGUI.Utils
{
public string ApkFile;
public string RealApkFile;
public string Armv7ApkFile;
public string Arm64ApkFile;
public string AppName;
public string PackageName;
@@ -20,7 +26,11 @@ namespace APKToolGUI.Utils
public string VersionCode;
public string SdkVersion;
public string MinSdkVersionDetailed;
public string TargetSdkVersionDetailed;
public string MinSdkVersion;
public string TargetSdkVersion;
@@ -34,6 +44,8 @@ namespace APKToolGUI.Utils
public string Densities;
public string NativeCode;
public string PlayStoreLink;
public string ApkComboLink;
@@ -42,13 +54,29 @@ 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 AppIcon;
public string FullInfo;
public bool Parse(string file)
{
bool result = true;
string info = ParseApkInfo(file);
FullInfo = info;
if (!String.IsNullOrEmpty(info))
{
string[] lines = info.Split(
@@ -68,10 +96,12 @@ 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);
@@ -94,6 +124,10 @@ namespace APKToolGUI.Utils
var densities = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
Densities = string.Join(", ", densities);
break;
case "native-code":
var nativecode = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
NativeCode = string.Join(", ", nativecode);
break;
}
}
@@ -105,6 +139,8 @@ namespace APKToolGUI.Utils
result = true;
}
else
result = false;
return result;
}
@@ -158,14 +194,18 @@ namespace APKToolGUI.Utils
{
switch (sdk)
{
case "33":
return "31: Android 13";
case "32":
return "31: Android 12.0L";
case "31":
return "31: Android 12.0";
return "31: Android 12";
case "30":
return "30: Android 11.0";
return "30: Android 11";
case "29":
return "29: Android 10.0";
return "29: Android 10";
case "28":
return "28: Android 9.0 (Pie)";
return "28: Android 9 (Pie)";
case "27":
return "27: Android 8.1 (Oreo MR1)";
case "26":
@@ -175,7 +215,7 @@ namespace APKToolGUI.Utils
case "24":
return "24: Android 7.0 (Nougat)";
case "23":
return "23: Android 6.0 (Marshmallow)";
return "23: Android 6 (Marshmallow)";
case "22":
return "22: Android 5.1 (Lollipop MR1)";
case "21":
+124
View File
@@ -0,0 +1,124 @@
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using Java;
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 armeabi-v7a";
}
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;
if (Settings.Default.Adb_SetVendor)
setVendor = $"{Keys.Vendor} com.android.vending {Keys.ApkPath}";
string args = String.Format($"{Keys.Serial} {mdevice.Groups[1].Value} install {setVendor} \"{inputApk}\"");
Debug.WriteLine("Adb: " + args);
processAdb.EnableRaisingEvents = false;
processAdb.StartInfo.Arguments = args;
processAdb.Start();
processAdb.BeginOutputReadLine();
processAdb.BeginErrorReadLine();
processAdb.WaitForExit();
return ExitCode;
}
public string GetDevices()
{
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();
}
}
}
}
+132
View File
@@ -0,0 +1,132 @@
using System;
using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
namespace APKToolGUI
{
public class ApkEditor : JarProcess
{
public new event ApkEditorExitedEventHandler Exited;
public ApkEditor(string javaPath, string jarPath)
: base(javaPath, 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);
Start(args);
BeginOutputReadLine();
BeginErrorReadLine();
WaitForExit();
CancelOutputRead();
CancelErrorRead();
return ExitCode;
}
}
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;
}
}
}
}
+22 -17
View File
@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace APKToolGUI.ApkTool
@@ -16,11 +17,19 @@ namespace APKToolGUI.ApkTool
string manifestPath = Path.Combine(path, "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("<queries>\r\n <intent>\r\n <action android:name=\"android.intent.action.MAIN\"/>\r\n </intent>\r\n </queries>", "");
maniFestText = maniFestText.Replace("<intent> <action android:name=\"android.intent.action.MAIN\"/> </intent>", "");
maniFestText = maniFestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
File.WriteAllText(Path.Combine(path, "AndroidManifest.xml"), maniFestText);
return true;
}
return false;
@@ -42,20 +51,16 @@ namespace APKToolGUI.ApkTool
string ymlPath = Path.Combine(path, "apktool.yml");
if (File.Exists(ymlPath))
{
string[] Manifest = File.ReadAllLines(ymlPath);
string yml = "";
foreach (string s in Manifest)
string ymll = File.ReadAllText(ymlPath);
int sdk = 30;
int.TryParse(StringExt.Regex(@"(?<= targetSdkVersion: \')(.*?)(?=\')", ymll), out sdk);
if (sdk >= 30)
{
int sdk = 30;
int.TryParse(StringExt.Regex(@"(?<= targetSdkVersion: \')(.*?)(?=\')", s), out sdk);
if (sdk >= 30)
{
yml += " targetSdkVersion: '29'\n";
return true;
}
yml += s + "\n";
ymll = ymll.Replace("targetSdkVersion: '" + sdk + "'", "targetSdkVersion: '29'");
File.WriteAllText(ymlPath, ymll);
return true;
}
File.WriteAllText(ymlPath, yml);
}
return false;
}
+55 -16
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.
@@ -44,6 +45,7 @@ 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.
}
static class InstallFrameworkKeys
@@ -52,6 +54,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;
@@ -117,17 +125,19 @@ 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);
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}\"");
Start(args);
BeginOutputReadLine();
@@ -136,11 +146,28 @@ 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);
}
}
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null;
public int Build(string inputFolder, string outputFile)
{
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null;
if (Settings.Default.Build_ForceAll)
keyForceAll = BuildKeys.ForceAll;
if (Settings.Default.Build_CopyOriginal)
@@ -150,12 +177,16 @@ 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}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
if (Settings.Default.Build_SetApiLevel)
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Build_ApiLevel);
if (Settings.Default.Build_UseAapt2)
useAapt2 = BuildKeys.UseAapt2;
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}{keyOutputAppPath} \"{inputFolder}\"");
Start(args);
BeginOutputReadLine();
@@ -169,12 +200,12 @@ 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}\"");
Start(args);
BeginOutputReadLine();
@@ -185,7 +216,13 @@ 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}");
Start(args);
BeginOutputReadLine();
@@ -251,7 +288,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":
@@ -278,7 +315,9 @@ namespace APKToolGUI
public enum ApktoolEventType
{
Information,
None,
Success,
Infomation,
Warning,
Error,
Unknown
+19 -2
View File
@@ -3,6 +3,7 @@ using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
namespace APKToolGUI
{
@@ -63,9 +64,25 @@ 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);
+18 -1
View File
@@ -2,6 +2,7 @@
using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
namespace APKToolGUI
{
@@ -65,6 +66,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 +97,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;
+19 -2
View File
@@ -3,6 +3,7 @@ using Java;
using System.Diagnostics;
using APKToolGUI.Properties;
using System.IO;
using APKToolGUI.Utils;
namespace APKToolGUI
{
@@ -60,9 +61,25 @@ 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);
+16
View File
@@ -50,6 +50,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;
+224
View File
@@ -0,0 +1,224 @@
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
{
static Color bgColor = Color.FromArgb(32, 32, 32);
static Color txtBoxColor = Color.FromArgb(64, 64, 64);
static Color btnColor = Color.FromArgb(51, 51, 51);
static Color btnBorderColor = Color.FromArgb(155, 155, 155);
static Color tabBorderColor = Color.FromArgb(45, 45, 45);
static Color menuItemHoverColor = Color.FromArgb(51, 51, 51);
static Color menuItemSelectedColor = Color.FromArgb(41, 41, 41);
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);
}
}
public static void SetThemeTabControl(Control component)
{
if (component is TabControl)
{
((TabControl)component).DrawMode = TabDrawMode.OwnerDrawFixed;
foreach (Control tabControl in component.Controls)
{
SetThemeTabControl(tabControl);
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);
}
}
}
else if (component is Panel)
{
foreach (Control control in component.Controls)
{
SetThemeTabControl(control);
}
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)
{
dditem.BackColor = bgColor;
dditem.ForeColor = Color.White;
Debug.WriteLine(dditem.Text);
}
toolStripMenuItem.BackColor = bgColor;
toolStripMenuItem.ForeColor = Color.White;
}
}
}
else if (component is GroupBox)
{
foreach (Control control in component.Controls)
{
SetThemeTabControl(control);
}
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)
{
foreach (Control panel in component.Controls)
{
SetThemeTabControl(panel);
}
component.BackColor = txtBoxColor;
component.ForeColor = Color.White;
((TextBox)component).BorderStyle = BorderStyle.FixedSingle;
}
else if (component is RichTextBox)
{
((RichTextBox)component).BorderStyle = BorderStyle.None;
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
else
{
component.BackColor = bgColor;
component.ForeColor = Color.White;
}
}
public class MenuItemColorTable : ProfessionalColorTable
{
public override Color ImageMarginGradientBegin
{
get { return bgColor; }
}
public override Color ImageMarginGradientEnd
{
get { return bgColor; }
}
public override Color ToolStripDropDownBackground
{
get { return bgColor; }
}
public override Color MenuItemSelected
{
get { return menuItemHoverColor; }
}
public override Color MenuBorder
{
get { return menuItemHoverColor; }
}
public override Color MenuItemBorder
{
get { return menuItemHoverColor; }
}
public override Color MenuItemSelectedGradientBegin
{
get { return menuItemSelectedColor; }
}
public override Color MenuItemSelectedGradientEnd
{
get { return menuItemSelectedColor; }
}
public override Color MenuItemPressedGradientBegin
{
get { return menuItemSelectedColor; }
}
public override Color MenuItemPressedGradientEnd
{
get { return menuItemSelectedColor; }
}
}
}
}
+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>
+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);
+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>
+626 -354
View File
File diff suppressed because it is too large Load Diff
+1073 -526
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+159 -51
View File
@@ -32,25 +32,34 @@
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.customApkToolTxtBox = new System.Windows.Forms.TextBox();
this.customApktoolBtn = new System.Windows.Forms.Button();
this.useCustomApktoolChk = new System.Windows.Forms.CheckBox();
this.label6 = new System.Windows.Forms.Label();
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.buttonCustomTempLocation = new System.Windows.Forms.Button();
this.checkBox3 = new System.Windows.Forms.CheckBox();
this.buttonCustomJavaLocation = new System.Windows.Forms.Button();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
this.groupBoxLanguage = new System.Windows.Forms.GroupBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.groupBoxContextMenu = new System.Windows.Forms.GroupBox();
this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox();
this.labelAdminRights = new System.Windows.Forms.Label();
this.buttonAddContextMenu = new System.Windows.Forms.Button();
this.buttonRemoveContextMenu = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonОК = new System.Windows.Forms.Button();
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.label1 = new System.Windows.Forms.Label();
this.themeComboBox = new System.Windows.Forms.ComboBox();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBoxJava.SuspendLayout();
this.groupBoxLanguage.SuspendLayout();
this.groupBoxContextMenu.SuspendLayout();
this.SuspendLayout();
@@ -65,7 +74,6 @@
// 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");
@@ -75,24 +83,100 @@
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
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
// customApkToolTxtBox
//
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;
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;
//
// labelCustomJavaLocation
// customApktoolBtn
//
resources.ApplyResources(this.labelCustomJavaLocation, "labelCustomJavaLocation");
this.labelCustomJavaLocation.Name = "labelCustomJavaLocation";
resources.ApplyResources(this.customApktoolBtn, "customApktoolBtn");
this.customApktoolBtn.Name = "customApktoolBtn";
this.customApktoolBtn.UseVisualStyleBackColor = true;
this.customApktoolBtn.Click += new System.EventHandler(this.customApktoolBtn_Click);
//
// 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;
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.ForeColor = System.Drawing.Color.DimGray;
this.label6.Name = "label6";
//
// 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;
//
// buttonCustomTempLocation
//
resources.ApplyResources(this.buttonCustomTempLocation, "buttonCustomTempLocation");
this.buttonCustomTempLocation.Name = "buttonCustomTempLocation";
this.buttonCustomTempLocation.UseVisualStyleBackColor = true;
this.buttonCustomTempLocation.Click += new System.EventHandler(this.buttonCustomTempLocation_Click);
//
// 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;
//
// buttonCustomJavaLocation
//
@@ -101,6 +185,32 @@
this.buttonCustomJavaLocation.UseVisualStyleBackColor = true;
this.buttonCustomJavaLocation.Click += new System.EventHandler(this.buttonCustomJavaLocation_Click);
//
// 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;
//
// checkBoxCheckUpdateStartup
//
resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup");
this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup;
this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup";
this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true;
//
// groupBoxLanguage
//
resources.ApplyResources(this.groupBoxLanguage, "groupBoxLanguage");
@@ -125,6 +235,14 @@
this.groupBoxContextMenu.Name = "groupBoxContextMenu";
this.groupBoxContextMenu.TabStop = false;
//
// ignoreOutputContextMenuBox
//
resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox");
this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu;
this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox";
this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true;
//
// labelAdminRights
//
resources.ApplyResources(this.labelAdminRights, "labelAdminRights");
@@ -158,38 +276,20 @@
this.buttonОК.UseVisualStyleBackColor = true;
this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click);
//
// checkBox1
// label1
//
resources.ApplyResources(this.checkBox1, "checkBox1");
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
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;
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// checkBoxCheckUpdateStartup
// themeComboBox
//
resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup");
this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup;
this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
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");
this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu;
this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox";
this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true;
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";
//
// FormSettings
//
@@ -207,8 +307,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 +318,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 +328,21 @@
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;
}
}
+104 -61
View File
@@ -4,19 +4,43 @@ 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;
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 +53,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 +67,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 +81,65 @@ 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;
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 = Properties.Settings.Default.Culture;
foreach (CultureInfo culture in cultures)
{
foreach (string resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
string[] cultNamw = resourceName.Split('.');
if (cultNamw[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
{
var qwe = System.Globalization.CultureInfo.GetCultureInfo(_culture);
comboBox1.SelectedItem = qwe;
try
{
currentLanguage = Properties.Settings.Default.Culture;
comboBox1.SelectedItem = _culture;
}
catch { }
}
}
private void SaveSettings()
{
//Properties.Settings.Default.FontLogMainWindow = textBox1.Font;
//Properties.Settings.Default.FontLogContextMenuWindow = textBox2.Font;
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
Properties.Settings.Default.Culture = "Auto";
Settings.Default.Culture = "Auto";
else
Properties.Settings.Default.Culture = comboBox1.SelectedItem.ToString();
Properties.Settings.Default.Save();
Settings.Default.Culture = StringExt.Regex(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString());
Settings.Default.Theme = themeComboBox.SelectedIndex;
Settings.Default.Save();
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();
}
}
public static void RunAsAdmin(string aFileName, string anArguments)
@@ -105,7 +149,7 @@ namespace APKToolGUI
processInfo.FileName = aFileName;
processInfo.Arguments = anArguments;
processInfo.UseShellExecute = true;
processInfo.Verb = "runas"; // здесь вся соль
processInfo.Verb = "runas";
try
{
@@ -117,46 +161,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.TempDirectory();
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;
}
}
}
}
}
+452 -143
View File
@@ -124,19 +124,439 @@
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="themeComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 213</value>
</data>
<data name="themeComboBox.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<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>0</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 216</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>1</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>203, 180</value>
</data>
<data name="customApkToolTxtBox.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 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>2</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>421, 180</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>3</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, 182</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>4</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>24, 160</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>5</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, 140</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>6</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, 114</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>7</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>203, 86</value>
</data>
<data name="customTempLocationTxtBox.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 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>8</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>203, 112</value>
</data>
<data name="textBoxCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 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>9</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>421, 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>10</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, 89</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>11</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>421, 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>12</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>13</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 +574,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBox1.ZOrder" xml:space="preserve">
<value>0</value>
<value>14</value>
</data>
<data name="checkBoxCheckUpdateStartup.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -166,7 +586,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 +604,19 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;checkBoxCheckUpdateStartup.ZOrder" xml:space="preserve">
<value>1</value>
<value>15</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>454, 251</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,123 +630,6 @@
<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>
@@ -337,10 +640,10 @@
<value>System</value>
</data>
<data name="comboBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>129, 19</value>
<value>129, 17</value>
</data>
<data name="comboBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 21</value>
<value>319, 21</value>
</data>
<data name="comboBox1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -358,10 +661,10 @@
<value>0</value>
</data>
<data name="groupBoxLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 6</value>
<value>8, 263</value>
</data>
<data name="groupBoxLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 47</value>
<value>454, 47</value>
</data>
<data name="groupBoxLanguage.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@@ -379,7 +682,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 +697,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>
@@ -424,7 +730,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>
@@ -457,7 +763,7 @@
<value>NoControl</value>
</data>
<data name="buttonAddContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>269, 18</value>
<value>276, 18</value>
</data>
<data name="buttonAddContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 23</value>
@@ -493,7 +799,7 @@
<value>NoControl</value>
</data>
<data name="buttonRemoveContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>358, 18</value>
<value>365, 18</value>
</data>
<data name="buttonRemoveContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 23</value>
@@ -517,10 +823,10 @@
<value>3</value>
</data>
<data name="groupBoxContextMenu.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 59</value>
<value>8, 316</value>
</data>
<data name="groupBoxContextMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>447, 74</value>
<value>454, 74</value>
</data>
<data name="groupBoxContextMenu.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@@ -538,7 +844,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 +853,7 @@
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>459, 278</value>
<value>466, 396</value>
</data>
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -567,11 +873,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>474, 422</value>
</data>
<data name="tabControl1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -598,7 +907,7 @@
<value>NoControl</value>
</data>
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>385, 311</value>
<value>392, 429</value>
</data>
<data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
@@ -631,7 +940,7 @@
<value>NoControl</value>
</data>
<data name="buttonОК.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 311</value>
<value>311, 429</value>
</data>
<data name="buttonОК.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
@@ -661,7 +970,7 @@
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>466, 339</value>
<value>473, 457</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
@@ -0,0 +1,67 @@
using APKToolGUI.Languages;
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;
}
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,94 @@
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.apkSosLinkBtn.Click += apkSosLinkBtn_Click;
main.apkMirrorLinkBtn.Click += apkMirrorLinkBtn_Click;
main.apkAioLinkBtn.Click += apkAioLinkBtn_Click;
main.apkDlLinkBtn.Click += apkDlLinkBtn_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 apkSosLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkSosLink);
}
private void apkMirrorLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkMirrorLink);
}
private void apkAioLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkAioLink);
}
private void apkDlLinkBtn_Click(object sender, EventArgs e)
{
if (main.aapt != null)
Process.Start(main.aapt.ApkDlLink);
}
}
}
@@ -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,27 +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_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);
}
}
}
}
@@ -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)
@@ -64,7 +68,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 +78,35 @@ 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"))
{
if (Settings.Default.Decode_UseApkEditorMergeApk)
{
await main.MergeUsingApkEditor(inputFile);
}
else
{
await main.Merge(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);
}
}
}
}
+88 -87
View File
@@ -1,4 +1,5 @@
using APKToolGUI.Languages;
using APKToolGUI.ApkTool;
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
using SaveToGameWpf.Logic.Utils;
@@ -16,182 +17,182 @@ namespace APKToolGUI.Handlers
class DragDropHandlers
{
private static FormMain main;
string[] apks = { ".apk", ".xapk", ".zip", ".apks", ".apkm" };
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, apks);
Register(main.textBox_ZIPALIGN_InputFile, main.zipalignPanel, alignEventHandler, apks);
Register(main.button_ZIPALIGN_Align, main.zipalignPanel, alignEventHandler, apks);
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, apks);
Register(main.textBox_SIGN_InputFile, main.signPanel, signEventHandler, apks);
Register(main.button_SIGN_Sign, main.signPanel, signEventHandler, 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, new string[] { ".apk" });
Register(main.installApkBtn, null, adbEventHandler, new string[] { ".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.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 = Color.LightGreen; });
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;
await main.Decompile(apkFile);
foreach (var apkFile in apkFiles)
{
main.textBox_DECODE_InputAppPath.Text = apkFile;
await main.GetApkInfo(apkFile);
if (apkFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
{
if (Settings.Default.Decode_UseApkEditorMergeApk)
{
await main.MergeUsingApkEditor(apkFile);
}
else
{
await main.Merge(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, null))
{
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 = Color.White;
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;
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;
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)
{
main.ToLog(ApktoolEventType.Error, ex.Message);
}
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);
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");
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 = Color.White;
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 = Color.White;
main.GetApkInfo(apkFile);
}
}
@@ -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,208 @@
using APKToolGUI.Languages;
using APKToolGUI.Properties;
using APKToolGUI.Utils;
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;
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;
}
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
{
main.logTxtBox.Text = "";
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
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);
}
}
}
}
+105
View File
@@ -0,0 +1,105 @@
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;
}
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);
}
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);
}
}
}
+11 -37
View File
@@ -1,6 +1,7 @@
using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Java
@@ -20,10 +21,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 +32,8 @@ 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));
}
StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
Debug.WriteLine(String.Format("-jar \"{0}\" {1}", JarPath, args));
return base.Start();
}
@@ -52,17 +43,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,16 +70,8 @@ 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;
@@ -105,14 +79,14 @@ namespace Java
string output = javaProcess.StandardError.ReadToEnd();
javaProcess.WaitForExit(3000);
if (!String.IsNullOrEmpty(output))
return output.Split(new[] { '\r', '\n' }).FirstOrDefault().Replace("java", "Java");
return output = output.Remove(output.LastIndexOf(Environment.NewLine));
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;
}
}
}
+355 -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,15 @@ 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 apktool version..
/// </summary>
@@ -159,6 +177,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>
@@ -204,6 +231,33 @@ 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 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>
@@ -240,6 +294,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>
@@ -294,6 +357,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>
@@ -312,6 +384,69 @@ 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 {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 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>
@@ -340,16 +475,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 {
@@ -412,7 +538,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 {
@@ -420,6 +555,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>
@@ -546,6 +690,24 @@ 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 Extract original signature.
/// </summary>
internal static string ExtractOrigSignature {
get {
return ResourceManager.GetString("ExtractOrigSignature", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File.
/// </summary>
@@ -619,7 +781,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 {
@@ -627,6 +789,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>
@@ -636,6 +807,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>
@@ -645,6 +852,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>
@@ -672,6 +897,33 @@ 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>
@@ -681,6 +933,33 @@ namespace APKToolGUI.Languages {
}
}
/// <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>
@@ -690,6 +969,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>
@@ -708,6 +996,24 @@ namespace APKToolGUI.Languages {
}
}
/// <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>
@@ -726,6 +1032,15 @@ 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 Settings.
/// </summary>
@@ -816,6 +1131,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>
@@ -825,6 +1149,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>
+519
View File
@@ -0,0 +1,519 @@
<?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="SetLanguageRestartApplication" xml:space="preserve">
<value>A nyelv be van állítva. Újra akarja indítani az alkalmazást?</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="ExtractOrigSignature" xml:space="preserve">
<value>Az eredeti aláírás kibontása</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>
</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>
+120 -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>
@@ -402,4 +399,121 @@
<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="ExtractOrigSignature" xml:space="preserve">
<value>Extract original signature</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>
</root>
+383 -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,319 @@
<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="SetLanguageRestartApplication" 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} определен как 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="ExtractOrigSignature" 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>
</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>关于</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>
</root>
+132 -52
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,114 @@ namespace APKToolGUI
[STAThread]
static void Main(String[] arg)
{
if (Environment.OSVersion.Version.Major == 6)
try
{
SetProcessDPIAware();
}
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)
if (arg.Length == 1)
{
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;
}
case "ccm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Create);
break;
case "rcm":
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove);
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)
{
PortableSettingsProvider.SettingsFileName = "config.xml";
PortableSettingsProvider.ApplyProvider(Settings.Default);
TEMP_PATH = 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 +170,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 +215,38 @@ 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, StringExt.RandStrWithCaps(5));
else
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, StringExt.RandStrWithCaps(5));
}
public static string ASSEMBLY_NAME { get { return AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Name; } }
public static string APP_NAME { get { return "APK Tool GUI"; } }
public static string TEMP_PATH { 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-2023")]
[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.2")]
[assembly: AssemblyFileVersion("3.0.0.2")]
[assembly: AssemblyVersion("3.2.1.0")]
[assembly: AssemblyFileVersion("3.2.1.0")]
+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>
+293 -34
View File
@@ -12,7 +12,7 @@ namespace APKToolGUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -27,6 +27,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_NoSrc {
get {
return ((bool)(this["Decode_NoSrc"]));
@@ -40,6 +41,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_NoRes {
get {
return ((bool)(this["Decode_NoRes"]));
@@ -53,6 +55,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_Force {
get {
return ((bool)(this["Decode_Force"]));
@@ -66,6 +69,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_UseFramework {
get {
return ((bool)(this["Decode_UseFramework"]));
@@ -79,6 +83,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_ForceAll {
get {
return ((bool)(this["Build_ForceAll"]));
@@ -91,6 +96,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Decode_InputAppPath {
get {
return ((string)(this["Decode_InputAppPath"]));
@@ -103,18 +109,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public string Decode_FrameDir {
get {
return ((string)(this["Decode_FrameDir"]));
}
set {
this["Decode_FrameDir"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string BuildProjectDir {
get {
return ((string)(this["BuildProjectDir"]));
@@ -127,6 +122,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string InstallFramework_InputFramePath {
get {
return ((string)(this["InstallFramework_InputFramePath"]));
@@ -139,6 +135,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_InputFile {
get {
return ((string)(this["Sign_InputFile"]));
@@ -151,6 +148,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_OutputDir {
get {
return ((string)(this["Sign_OutputDir"]));
@@ -164,6 +162,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_UseAapt {
get {
return ((bool)(this["Build_UseAapt"]));
@@ -176,6 +175,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Build_AaptPath {
get {
return ((string)(this["Build_AaptPath"]));
@@ -189,6 +189,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Auto")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Culture {
get {
return ((string)(this["Culture"]));
@@ -201,6 +202,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string JavaExe {
get {
return ((string)(this["JavaExe"]));
@@ -213,6 +215,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public global::System.DateTime LastUpdateCheck {
get {
return ((global::System.DateTime)(this["LastUpdateCheck"]));
@@ -226,6 +229,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool CheckForUpdateAtStartup {
get {
return ((bool)(this["CheckForUpdateAtStartup"]));
@@ -238,7 +242,8 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool ClearLogBeforeAction {
get {
return ((bool)(this["ClearLogBeforeAction"]));
@@ -252,6 +257,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_MatchOriginal {
get {
return ((bool)(this["Decode_MatchOriginal"]));
@@ -265,6 +271,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_KeepBrokenRes {
get {
return ((bool)(this["Decode_KeepBrokenRes"]));
@@ -278,6 +285,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_CopyOriginal {
get {
return ((bool)(this["Build_CopyOriginal"]));
@@ -287,22 +295,11 @@ namespace APKToolGUI.Properties {
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public string Build_FrameDir {
get {
return ((string)(this["Build_FrameDir"]));
}
set {
this["Build_FrameDir"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_UseFramework {
get {
return ((bool)(this["Build_UseFramework"]));
@@ -316,6 +313,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_UseOutputDir {
get {
return ((bool)(this["Decode_UseOutputDir"]));
@@ -328,6 +326,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Decode_OutputDir {
get {
return ((string)(this["Decode_OutputDir"]));
@@ -341,6 +340,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_UseOutputAppPath {
get {
return ((bool)(this["Build_UseOutputAppPath"]));
@@ -354,6 +354,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Build_OutputAppPath {
get {
return ((string)(this["Build_OutputAppPath"]));
@@ -367,6 +368,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Build_InputDir {
get {
return ((string)(this["Build_InputDir"]));
@@ -380,12 +382,13 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InstallFramework_UseFrameDir {
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Framework_UseFrameDir {
get {
return ((bool)(this["InstallFramework_UseFrameDir"]));
return ((bool)(this["Framework_UseFrameDir"]));
}
set {
this["InstallFramework_UseFrameDir"] = value;
this["Framework_UseFrameDir"] = value;
}
}
@@ -393,6 +396,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool InstallFramework_UseTag {
get {
return ((bool)(this["InstallFramework_UseTag"]));
@@ -406,6 +410,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string InstallFramework_Tag {
get {
return ((string)(this["InstallFramework_Tag"]));
@@ -419,12 +424,13 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InstallFramework_FrameDir {
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Framework_FrameDir {
get {
return ((string)(this["InstallFramework_FrameDir"]));
return ((string)(this["Framework_FrameDir"]));
}
set {
this["InstallFramework_FrameDir"] = value;
this["Framework_FrameDir"] = value;
}
}
@@ -432,6 +438,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("4")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public decimal Zipalign_AlignmentInBytes {
get {
return ((decimal)(this["Zipalign_AlignmentInBytes"]));
@@ -445,6 +452,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_OverwriteOutputFile {
get {
return ((bool)(this["Zipalign_OverwriteOutputFile"]));
@@ -458,6 +466,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_CheckOnly {
get {
return ((bool)(this["Zipalign_CheckOnly"]));
@@ -471,6 +480,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_Verbose {
get {
return ((bool)(this["Zipalign_Verbose"]));
@@ -484,6 +494,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Zipalign_OutputDir {
get {
return ((string)(this["Zipalign_OutputDir"]));
@@ -497,6 +508,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Zipalign_InputFile {
get {
return ((string)(this["Zipalign_InputFile"]));
@@ -510,6 +522,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_Recompress {
get {
return ((bool)(this["Zipalign_Recompress"]));
@@ -523,6 +536,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_PublicKey {
get {
return ((string)(this["Sign_PublicKey"]));
@@ -536,6 +550,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_PrivateKey {
get {
return ((string)(this["Sign_PrivateKey"]));
@@ -549,6 +564,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_OnlyMainClasses {
get {
return ((bool)(this["Decode_OnlyMainClasses"]));
@@ -562,6 +578,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_FixError {
get {
return ((bool)(this["Decode_FixError"]));
@@ -575,6 +592,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_NoCrunch {
get {
return ((bool)(this["Build_NoCrunch"]));
@@ -588,6 +606,7 @@ namespace APKToolGUI.Properties {
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_NoDebugInfo {
get {
return ((bool)(this["Decode_NoDebugInfo"]));
@@ -598,8 +617,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Framework_ClearBeforeDecode {
get {
return ((bool)(this["Framework_ClearBeforeDecode"]));
@@ -610,8 +631,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_ZipalignAfterBuild {
get {
return ((bool)(this["Build_ZipalignAfterBuild"]));
@@ -622,8 +645,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_SignAfterBuild {
get {
return ((bool)(this["Build_SignAfterBuild"]));
@@ -634,8 +659,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_UseOutputDir {
get {
return ((bool)(this["Zipalign_UseOutputDir"]));
@@ -646,8 +673,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Zipalign_SignAfterZipAlign {
get {
return ((bool)(this["Zipalign_SignAfterZipAlign"]));
@@ -658,8 +687,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("CERT")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_Alias {
get {
return ((string)(this["Sign_Alias"]));
@@ -670,8 +701,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Sign_SetAlias {
get {
return ((bool)(this["Sign_SetAlias"]));
@@ -682,8 +715,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_CreateUnsignedApk {
get {
return ((bool)(this["Build_CreateUnsignedApk"]));
@@ -694,8 +729,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Sign_UseKeystoreFile {
get {
return ((bool)(this["Sign_UseKeystoreFile"]));
@@ -706,8 +743,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_KeystoreFilePath {
get {
return ((string)(this["Sign_KeystoreFilePath"]));
@@ -718,8 +757,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Sign_KeystorePassword {
get {
return ((string)(this["Sign_KeystorePassword"]));
@@ -730,8 +771,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Sign_UseOutputDir {
get {
return ((bool)(this["Sign_UseOutputDir"]));
@@ -742,8 +785,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public int Sign_Schemev1 {
get {
return ((int)(this["Sign_Schemev1"]));
@@ -754,8 +799,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public int Sign_Schemev2 {
get {
return ((int)(this["Sign_Schemev2"]));
@@ -766,8 +813,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public int Sign_Schemev3 {
get {
return ((int)(this["Sign_Schemev3"]));
@@ -778,8 +827,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("2")]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public int Sign_Schemev4 {
get {
return ((int)(this["Sign_Schemev4"]));
@@ -790,8 +841,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("29")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public decimal Decode_ApiLevel {
get {
return ((decimal)(this["Decode_ApiLevel"]));
@@ -802,8 +855,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("29")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public decimal Build_ApiLevel {
get {
return ((decimal)(this["Build_ApiLevel"]));
@@ -814,8 +869,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_SetApiLevel {
get {
return ((bool)(this["Build_SetApiLevel"]));
@@ -826,8 +883,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Decode_SetApiLevel {
get {
return ((bool)(this["Decode_SetApiLevel"]));
@@ -838,8 +897,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Baksmali_InputDexFile {
get {
return ((string)(this["Baksmali_InputDexFile"]));
@@ -850,8 +911,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Smali_OutputDexFile {
get {
return ((string)(this["Smali_OutputDexFile"]));
@@ -862,8 +925,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Baksmali_OutputDir {
get {
return ((string)(this["Baksmali_OutputDir"]));
@@ -874,8 +939,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Baksmali_UseOutputDir {
get {
return ((bool)(this["Baksmali_UseOutputDir"]));
@@ -886,8 +953,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Smali_InputDir {
get {
return ((string)(this["Smali_InputDir"]));
@@ -898,8 +967,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public string Smali_OutputDir {
get {
return ((string)(this["Smali_OutputDir"]));
@@ -910,8 +981,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Smali_UseOutputDir {
get {
return ((bool)(this["Smali_UseOutputDir"]));
@@ -922,8 +995,10 @@ namespace APKToolGUI.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool IgnoreOutputDirContextMenu {
get {
return ((bool)(this["IgnoreOutputDirContextMenu"]));
@@ -932,5 +1007,189 @@ namespace APKToolGUI.Properties {
this["IgnoreOutputDirContextMenu"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool Build_UseAapt2 {
get {
return ((bool)(this["Build_UseAapt2"]));
}
set {
this["Build_UseAapt2"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
public bool PlaySoundWhenDone {
get {
return ((bool)(this["PlaySoundWhenDone"]));
}
set {
this["PlaySoundWhenDone"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UseCustomTempDir {
get {
return ((bool)(this["UseCustomTempDir"]));
}
set {
this["UseCustomTempDir"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string TempDir {
get {
return ((string)(this["TempDir"]));
}
set {
this["TempDir"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UseCustomJavaExe {
get {
return ((bool)(this["UseCustomJavaExe"]));
}
set {
this["UseCustomJavaExe"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool AutoDeleteIdsigFile {
get {
return ((bool)(this["AutoDeleteIdsigFile"]));
}
set {
this["AutoDeleteIdsigFile"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool Utf8FilenameSupport {
get {
return ((bool)(this["Utf8FilenameSupport"]));
}
set {
this["Utf8FilenameSupport"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool Sign_OverwriteInputFile {
get {
return ((bool)(this["Sign_OverwriteInputFile"]));
}
set {
this["Sign_OverwriteInputFile"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool Decode_UseApkEditorMergeApk {
get {
return ((bool)(this["Decode_UseApkEditorMergeApk"]));
}
set {
this["Decode_UseApkEditorMergeApk"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool Adb_SetVendor {
get {
return ((bool)(this["Adb_SetVendor"]));
}
set {
this["Adb_SetVendor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Adb_SelectedApkPath {
get {
return ((string)(this["Adb_SelectedApkPath"]));
}
set {
this["Adb_SelectedApkPath"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool Sign_InstallApkAfterSign {
get {
return ((bool)(this["Sign_InstallApkAfterSign"]));
}
set {
this["Sign_InstallApkAfterSign"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UseCustomApktool {
get {
return ((bool)(this["UseCustomApktool"]));
}
set {
this["UseCustomApktool"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApktoolPath {
get {
return ((string)(this["ApktoolPath"]));
}
set {
this["ApktoolPath"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public int Theme {
get {
return ((int)(this["Theme"]));
}
set {
this["Theme"] = value;
}
}
}
}
+126 -87
View File
@@ -2,224 +2,263 @@
<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)">29</Value>
</Setting>
<Setting Name="Build_ApiLevel" Type="System.Decimal" Scope="User">
<Setting Name="Build_ApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" 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" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="TempDir" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UseCustomJavaExe" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="AutoDeleteIdsigFile" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Utf8FilenameSupport" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Sign_OverwriteInputFile" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Decode_UseApkEditorMergeApk" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="Adb_SetVendor" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Adb_SelectedApkPath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Sign_InstallApkAfterSign" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UseCustomApktool" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ApktoolPath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Theme" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>
+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

+36
View File
@@ -0,0 +1,36 @@
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
{
MessageBox.Show("Error Loading File.", "Error!", MessageBoxButtons.OK);
return null;
}
}
}
}
+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);
}
}
}
+59 -73
View File
@@ -1,7 +1,7 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
namespace SaveToGameWpf.Logic.Utils
@@ -33,52 +33,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.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 +63,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.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;
}
}
}
+22 -15
View File
@@ -2,6 +2,7 @@
using Microsoft.Win32;
using APKToolGUI.Languages;
using APKToolGUI.Utils;
using Microsoft.Build.Framework.XamlTypes;
namespace APKToolGUI
{
@@ -23,25 +24,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(Program.APP_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);
apkToolGUIFolderShell.SetValue("Icon", executablePath);
apkToolGUIFolderShell.SetValue("MUIVerb", "APKToolGUI");
apkToolGUIFolderShell.SetValue("MUIVerb", Program.APP_NAME);
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 +85,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 +99,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(Program.APP_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);
shell.SetValue("Icon", "\"" + executablePath + "\"");
shell.SetValue("MUIVerb", Program.APP_NAME);
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);
}
}
}
+11
View File
@@ -32,5 +32,16 @@ namespace APKToolGUI.Utils
{
return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));
}
public static string GetRelativePath(string relativeTo, string path)
{
var uri = new Uri(relativeTo);
var rel = Uri.UnescapeDataString(uri.MakeRelativeUri(new Uri(path)).ToString()).Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
if (rel.Contains(Path.DirectorySeparatorChar.ToString()) == false)
{
rel = $".{Path.DirectorySeparatorChar}{rel}";
}
return rel;
}
}
}
+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;
}
}
}
+9
View File
@@ -112,6 +112,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();
+62 -11
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,7 +182,7 @@
<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>
@@ -226,6 +220,51 @@
<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="Decode_UseApkEditorMergeApk" serializeAs="String">
<value>True</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>
</APKToolGUI.Properties.Settings>
</userSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup>
@@ -235,6 +274,18 @@
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.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.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+9 -5
View File
@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
<package id="DarkNet" version="2.2.0" targetFramework="net48" />
<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="Fody" version="6.7.0" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.NETCore.Platforms" version="7.0.2" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="Microsoft-WindowsAPICodePack-Core" version="1.1.4" targetFramework="net48" />
<package id="Microsoft-WindowsAPICodePack-Shell" version="1.1.4" 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="OSVersionExt" version="2.0.0" targetFramework="net48" />
<package id="PortableSettingsProvider" version="0.2.4" targetFramework="net48" />
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
<package id="ResourceLoader" version="3.2.4" targetFramework="net48" />
@@ -16,7 +20,7 @@
<package id="System.Collections.Concurrent" version="4.3.0" 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="7.0.2" 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.Globalization" version="4.3.0" targetFramework="net48" />
@@ -28,7 +32,7 @@
<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.5.5" 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" />
@@ -37,7 +41,7 @@
<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.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Resources.Extensions" version="6.0.0" targetFramework="net48" />
<package id="System.Resources.Extensions" version="7.0.0" 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" />
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

+64 -27
View File
@@ -1,50 +1,75 @@
# APK Tool GUI
![](https://i.imgur.com/MUuWTdW.png)
![](Assets/Image.png)
[![](https://img.shields.io/github/downloads/AndnixSH/APKToolGUI/total?style=for-the-badge)](https://github.com/AndnixSH/APKToolGUI/releases) [![](https://img.shields.io/github/v/release/andnixsh/APKToolGUI?style=for-the-badge)](https://github.com/AndnixSH/APKToolGUI/releases)
GUI for apktool, signapk, zipalign and baksmali utilities.
It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc.
# Download
# Download links
https://github.com/AndnixSH/APKToolGUI/releases
https://app.box.com/s/y0cxdzxknb98v3c90e705ltzuehjiddn
https://mega.nz/folder/aBxWnaSA#XMLOS9bPJgtTTd2vEjh2SQ
https://sbupload.com/folder/3324/APK_Tool_GUI
# Requirements
- Windows 7 and above
- JDK/JRE 8 and above. Highly recommended to use 64-bit version of Java if your system is 64-bit
- .NET Framework 4.8
- Windows 7 32-bit/64-bit and above
- [Java Runtime Environment](https://www.java.com/en/)/[Java SE Development Kit](https://www.oracle.com/java/technologies/downloads/) 8 and above. Highly recommended to use 64-bit version if your system is 64-bit
- [.NET Framework 4.8](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48) (Windows 10 and above have it preinstalled)
# Features
- Decompile APK
- Decompile and merge split APK/XAPK/APKS/ZIP/APKM using build-in split merging and APKEditor.jar (Default)
- Compile APK
- Sign APK
- Zipalign APK
- Adb
- Framework
- Drag and drop
- APK info
- Log
- Log output
- All features from [Apktool](https://ibotpeaches.github.io/Apktool/documentation/).
- Additional features that can fix some Apktool errors, such as removing DUMMY_APKTOOL, clear framework before decompiling
- Multi language
- Right-click context menu
- Create unsigned APK for Core Patch
- High DPI support
- Long path support (Windows 10 and above)
# Languages
- Brazilian Portuguese (Incomplete)
- English
- Hungary (Incomplete)
- Russian (Incomplete)
- Chinese Simplified (Incomplete)
### Translation
If you like to help translate with your native language, I recommend using Visual Studio 2022. You don't need any programming knowledge, you just edit the GUI and the `.resx` files
Create new `.resx` file under `Languages` folder, and `Forms/FormXXX.cs/`. To create a new `.resx` under `Forms/FormXXX.cs/`, open the form and select the form to show the properties. In the properties, scroll down until you see Language, and select any language you would like to translate.
<details>
<summary>Video tutorial</summary>
https://user-images.githubusercontent.com/40742924/227244601-6f796141-ac2d-4c60-b5cd-7f6872604cd7.mp4
</details>
If you can't use Visual Studio, you can use translator tools like [resxtranslator](https://github.com/HakanL/resxtranslator) or [RESX Translator automat](https://www.utilstudio.com/en/resx-translator/), but make sure the `.resx` file is added to [APKToolGUI.csproj](https://github.com/AndnixSH/APKToolGUI/blob/master/APKToolGUI/APKToolGUI.csproj), otherwise Visual Studio would not be able to detect it
Make pull request when you are done
# Issues
Issues with Apktool, read the log, check if your modification and/or syntax is correct. If not, check this page https://github.com/iBotPeaches/Apktool/issues
Issues with Apktool? Please do cursory search of the issue tracker of [Apktool](https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue) and [Baksmali](https://github.com/JesusFreke/smali/issues?q=is%3Aissue), see if your question may be answered
Otherwise, report issues here and I will point you to the right direction.
For Framework/system apps related issues, check on [XDA Forum](https://forum.xda-developers.com/)
Framework/system apps related issues, check on [XDA Forum](https://forum.xda-developers.com/)
**Some apps may been protected or obfuscated for content protection purposes or against cheaters. Bypassing of such is beyond the scope of this tool, so please DO NOT post an issue regarding to it. This tool does not support bypassing such protections, and never will be!**
**Sometimes apps may protect or obfuscate for content protection purposes and so on. Bypassing of such is beyond the scope of this tool, so please DO NOT post an issue regarding to it. This tool does not support bypassing such securities**
Anything else, [create a new issue](https://github.com/AndnixSH/APKToolGUI/issues)
# FAQ
##### Q: Can it be ported to other OS like Linux?
A: Maybe, but it's not easy since Microsoft is dumb for not making it easy for .NET Core unlike Java's GUI which supports all supported platforms
A: Maybe, but it's not easy since Microsoft is dumb for not supporting it for .NET Core, unlike Java FX which supported all platforms. If you know, feel free to open an issue
##### Q: How to update Apktool?
A: Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder
@@ -53,28 +78,40 @@ A: Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and r
A: Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/downloads/) and replace it on Resources folder
##### Q: How to reset?
A: Simply delete the config.xml file
A: Simply delete the config.xml file from the directory of the executeable
##### Q: Why this tool is a virus?
A: It just a false positive, anti-virus always flag tools/softwares like this as virus. Don't always believe what your anti-virus are telling you. Try to compile the source by yourself and you will see
##### Q: Can you make an automatic APK injecting tool?
A: No, that's not the point of this tool, and I don't have time for that. However, you can try making it by yourself, or have a look on [SaveToGame](https://github.com/And42/SaveToGame) which can give you ideas how to do it.
A: No, that's out of scope of this tool, and I'm not interested.
##### Q: Can you implement to convert APK to AAB?
A: No, apktool is about recompiling, not about converting to other formats. AAB is only used for distributing an application to Play Store. It is not directly installable.
##### Q: Can you implement an option to protect/pack/obfuscate APK?
A: No, APK protection is beyond the scope of this tool
##### Q: Can you implement an option to deobfuscate/unpack APK or bypass anti-cheat/security?
A: No, they are also beyond the scope of this tool. I don't condone bypassing such protections
##### Q: I don't like split APK. Where can I get single APK instead?
A: Download from [Apkcombo's APK downloader](https://apkcombo.com/downloader/), or [Apkpure](https://apkpure.com/) (Choose APK instead XAPK)
##### Q: Can you help me with modding APK in general?
A: Sorry, I don't offer support with it.
# Development
This project is written in C#
Use Visual Studio 2019 and above. NET Framework 4.8 SDK is required
### Translation
Currently there is two languages, english and russian. Russian is not complete because I don't speak russian, it was originally written by INF1NUM. If you like to translate russian or other language, feel free to do it and pull request
- Create new resx file under Languages folder. It is used for cs files
- Open any forms. Under properties, scroll down until you see Language, and select any language you would like to translate. It will create new resx file inside cs file
# Credits
- AndnixSH
- iBotPeaches ([Apktool](https://ibotpeaches.github.io/Apktool/))
- INF1NUM (Original author of [APKToolGUI](https://github.com/INF1NUM/APKToolGUI))
- iBotPeaches ([Apktool CLI](https://ibotpeaches.github.io/Apktool/))
- REAndroid ([APKEditor](https://github.com/REAndroid/APKEditor))
- shadow578 ([ApksMerger](https://github.com/shadow578/ApksMerger))
# Disclaimer
Same as Apktool by iBotPeaches, It is NOT intended for piracy and other non-legal uses. It could be used for localizing, adding some features or support for custom platforms and other GOOD purposes. Just try to be fair with authors of an app, that you use and probably like.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

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