mirror of
https://github.com/AndnixSH/APKToolGUI.git
synced 2026-05-04 11:02:27 +00:00
Compare commits
148 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f72cf9dee | |||
| 79e8cd2ef9 | |||
| 5be8c9623a | |||
| 08fb90285c | |||
| e0e99c862f | |||
| cfb094a275 | |||
| ca58db1975 | |||
| 5e6eee2f5e | |||
| eb39b5bf69 | |||
| 8230d8239d | |||
| 824aadbce1 | |||
| e12fc939b9 | |||
| 0b043a4a3b | |||
| f974e198d5 | |||
| 8c43f59bd1 | |||
| bd1dcf6f64 | |||
| e0018909dc | |||
| 580c49b59c | |||
| 328736bbab | |||
| a294aa5a40 | |||
| 17289ff3f3 | |||
| 4471de12d5 | |||
| 469ccb6c9c | |||
| bfd2f41c88 | |||
| 6cda22c47e | |||
| 73dbd422a8 | |||
| 6411889613 | |||
| 210390718c | |||
| 5704df951e | |||
| 9e73936f6d | |||
| ddd24ecbd6 | |||
| e50b8a8658 | |||
| 5f242bca2f | |||
| e2784ce65e | |||
| 93fc85fc33 | |||
| 4c389d58fb | |||
| 63e08f4f77 | |||
| 556d01ed74 | |||
| eb670e7cd5 | |||
| 584df30992 | |||
| e89522cfcb | |||
| 9ffedd3cbf | |||
| 7228e182cc | |||
| ecce2c8e18 | |||
| 5f83b05335 | |||
| aa0f62bd58 | |||
| 13420455c7 | |||
| 3b90881083 | |||
| be7ed3a533 | |||
| 4ed20cf3de | |||
| aca3de41b7 | |||
| a5497c56da | |||
| 4d2a745b11 | |||
| b25fd6451b | |||
| 19bd457b65 | |||
| 3e1fc75808 | |||
| 846ef4f5f1 | |||
| d87d8af361 | |||
| 9d31e8c2c8 | |||
| ecd8b45846 | |||
| 8834cbcec2 | |||
| 1ecbb13692 | |||
| 8084d5288b | |||
| 41f3663d4a | |||
| add093dd6e | |||
| cb69d6b541 | |||
| e4a8886af6 | |||
| 7b32dade20 | |||
| 3401402bd6 | |||
| a7480e5bdf | |||
| 95a69334c3 | |||
| 82bee17ca7 | |||
| 61aee3cdcf | |||
| 282a6ba6c0 | |||
| 9ab8ad0013 | |||
| 5953e2feef | |||
| 0f7caefaab | |||
| 48b6736ccf | |||
| f2329a4b57 | |||
| 456b971183 | |||
| 3417aedbe0 | |||
| 6e3bb9a6dd | |||
| 26763b0cfa | |||
| ca05365c16 | |||
| 7581a5c45c | |||
| 7e7de5f653 | |||
| 7ccbac83b2 | |||
| af96daca95 | |||
| 208d14cb9b | |||
| d4fcd90024 | |||
| bcc597ac0a | |||
| 674fc210f5 | |||
| aa5d017c74 | |||
| 012b6f3c07 | |||
| c8bfc38fac | |||
| 6a0e01937a | |||
| 542bc64b80 | |||
| e47ce35b5c | |||
| 7c3280a2ad | |||
| d32a068e9a | |||
| 90f8ba18f3 | |||
| 39219eaf65 | |||
| 9675fa6d85 | |||
| 67a0bb877d | |||
| d8d1c50f00 | |||
| 608dd37522 | |||
| d2f8e42664 | |||
| 6cf1931bbc | |||
| 67667784fd | |||
| 0df16541d4 | |||
| e141b886ef | |||
| 9e00fd2d75 | |||
| a841fe0ce5 | |||
| d7edc9ced2 | |||
| f9cad819b6 | |||
| 02a48151c2 | |||
| 8fddb8d760 | |||
| 0e18c8194c | |||
| aa1078660a | |||
| 33749af569 | |||
| c431d2e90c | |||
| 2dfac5d667 | |||
| de6588a148 | |||
| 05cbb3cb4b | |||
| de415e8232 | |||
| cfec6c9a81 | |||
| 28f15a41ac | |||
| 8513ab4788 | |||
| e4f9e5da21 | |||
| b191d547d0 | |||
| 1d764709f2 | |||
| 7ccf7da0f3 | |||
| 2bed8a468b | |||
| 6d4dc8396d | |||
| 67672a8871 | |||
| e7b942f09b | |||
| f71bd165a8 | |||
| 984735d9a2 | |||
| 3e7ebe157e | |||
| e42e2f3897 | |||
| ae8106d967 | |||
| 462447de6c | |||
| 67a4b79efc | |||
| ba418f7427 | |||
| f28fa25001 | |||
| db8be4b428 | |||
| 7cea4c2959 | |||
| 7def211556 |
@@ -11,16 +11,10 @@ body:
|
||||
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.
|
||||
- label: I am running the latest version of [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/releases).
|
||||
required: true
|
||||
- label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq)
|
||||
required: true
|
||||
- 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:
|
||||
@@ -92,6 +86,7 @@ body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating system and version
|
||||
placeholder: (Example: Windows 11 2h22)
|
||||
placeholder: |
|
||||
(Example: Windows 11 2h22)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -3,21 +3,15 @@ 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: Smali Issues List
|
||||
url: https://github.com/JesusFreke/smali/issues?q=is%3Aissue
|
||||
about: Check Baksmali issues before reporting issue here. Your issue might already exists
|
||||
- name: Smali Issues List 2
|
||||
url: https://github.com/google/smali/issues?q=is%3Aissue
|
||||
about: Check Baksmali issues before reporting issue here. Your issue might already exists
|
||||
- name: Android development and modding support forum
|
||||
url: https://forum.xda-developers.com/c/android-development-and-hacking.564/
|
||||
about: For support, questions or help with development and modding
|
||||
- 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
|
||||
about: For support, questions or help with development and modding'
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
name: Language suggestion/error
|
||||
description: Suggest a change or report an error of language. Use this form if you can't pull request
|
||||
labels: language
|
||||
body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: Language
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: A clear and concise description of what you want to be changed. You can upload/paste screenshots here. For full translation, please upload zip file of translated files or full project
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
name: Checkout Code
|
||||
|
||||
- name: Setup MSBuild Path
|
||||
uses: microsoft/setup-msbuild@v1.3.1
|
||||
|
||||
- name: Setup NuGet
|
||||
uses: NuGet/setup-nuget@v2
|
||||
|
||||
- name: Restore NuGet Packages
|
||||
run: nuget restore APKToolGUI.sln
|
||||
|
||||
- name: Build Application
|
||||
run: msbuild APKToolGUI.sln /p:Configuration=Release
|
||||
|
||||
- name: Create package directory
|
||||
run: mkdir package
|
||||
|
||||
- name: Copy essential files to package
|
||||
shell: pwsh
|
||||
run: |
|
||||
Copy-Item APKToolGUI/bin/Release/APKToolGUI.exe package/
|
||||
Copy-Item changelog.txt package/Changelog.txt
|
||||
|
||||
if (Test-Path APKToolGUI/bin/Release/Resources) {
|
||||
Copy-Item APKToolGUI/bin/Release/Resources package/ -Recurse
|
||||
}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: APKToolGUI
|
||||
path: package/
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" />
|
||||
<Import Project="..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props" Condition="Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" />
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
@@ -77,15 +77,15 @@
|
||||
<PropertyGroup />
|
||||
<PropertyGroup />
|
||||
<ItemGroup>
|
||||
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
<Reference Include="Costura, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.6.0.0\lib\netstandard2.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CustomMarshalers" />
|
||||
<Reference Include="DarkNet, Version=2.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DarkNet.2.3.0\lib\net452\DarkNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
|
||||
<Reference Include="Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Build.Framework" />
|
||||
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
||||
@@ -112,8 +112,11 @@
|
||||
</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 Include="ProDotNetZip, Version=1.20.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ProDotNetZip.1.20.0\lib\netstandard2.0\ProDotNetZip.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ResourceLoader, Version=3.3.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ResourceLoader.3.3.1\lib\netstandard2.0\ResourceLoader.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
@@ -121,8 +124,11 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Collections.Immutable, Version=9.0.0.10, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Collections.Immutable.9.0.10\lib\net462\System.Collections.Immutable.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.configuration" />
|
||||
@@ -132,15 +138,20 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.OracleClient" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=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 Include="System.Diagnostics.DiagnosticSource, Version=9.0.0.10, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.9.0.10\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.DirectoryServices" />
|
||||
<Reference Include="System.Formats.Nrbf, Version=9.0.0.10, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Formats.Nrbf.9.0.10\lib\net462\System.Formats.Nrbf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
@@ -151,17 +162,7 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
@@ -183,9 +184,10 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<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 Include="System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
@@ -197,24 +199,27 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Resources.Extensions, Version=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 Include="System.Reflection.Metadata, Version=9.0.0.10, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.Metadata.9.0.10\lib\net462\System.Reflection.Metadata.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Resources.Extensions, Version=9.0.0.10, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Resources.Extensions.9.0.10\lib\net462\System.Resources.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Extensions, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll</HintPath>
|
||||
@@ -232,6 +237,9 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Security.AccessControl, Version=6.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
@@ -252,11 +260,22 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Permissions, Version=9.0.0.10, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Permissions.9.0.10\lib\net462\System.Security.Permissions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceProcess" />
|
||||
<Reference Include="System.Text.Encoding.CodePages, Version=9.0.0.10, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.Encoding.CodePages.9.0.10\lib\net462\System.Text.Encoding.CodePages.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
@@ -274,23 +293,6 @@
|
||||
<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="TaskBar\TaskBarJumpList.cs" />
|
||||
<Compile Include="Utils\Log.cs" />
|
||||
<Compile Include="ApkTool\AaptParser.cs" />
|
||||
@@ -370,28 +372,59 @@
|
||||
<Compile Include="Web\WebDownload.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.de.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.ru.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.zh-CN.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.vi-VN.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormMain.de.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormMain.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormMain.ru.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormMain.zh-CN.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormMain.vi-VN.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormSettings.de.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormSettings.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormSettings.ru.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormSettings.zh-CN.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\FormSettings.vi-VN.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Languages\Language.de.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.hu.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.pt-BR.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.ru.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.tr.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.zh-CN.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.vi-VN.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
@@ -460,19 +493,19 @@
|
||||
<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\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.8.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.8.0\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Fody.6.9.3\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.9.3\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.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.8.0\build\Fody.targets" Condition="Exists('..\packages\Fody.6.8.0\build\Fody.targets')" />
|
||||
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.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">
|
||||
@@ -480,4 +513,6 @@
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<Import Project="..\packages\Fody.6.9.3\build\Fody.targets" Condition="Exists('..\packages\Fody.6.9.3\build\Fody.targets')" />
|
||||
<Import Project="..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets" Condition="Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" />
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<PublishUrlHistory>publish\</PublishUrlHistory>
|
||||
@@ -9,6 +9,7 @@
|
||||
<ErrorReportUrlHistory />
|
||||
<FallbackCulture>ru-RU</FallbackCulture>
|
||||
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<EnableSecurityDebugging>false</EnableSecurityDebugging>
|
||||
|
||||
@@ -1,562 +0,0 @@
|
||||
//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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
//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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace APKSMerger.AndroidRes.Model.Generic
|
||||
{
|
||||
public class AndroidGeneric : AndroidResource
|
||||
{
|
||||
[XmlText]
|
||||
//[XmlAttribute("value")]
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using APKSMerger.AndroidRes.Model.Generic;
|
||||
|
||||
namespace APKSMerger.AndroidRes.Model
|
||||
{
|
||||
public sealed class AndroidStringArray : AndroidGenericArray { }
|
||||
|
||||
public sealed class AndroidIntegerArray : AndroidGenericArray { }
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
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 { }
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using APKToolGUI.Web;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -66,10 +68,23 @@ namespace APKToolGUI.Utils
|
||||
|
||||
public string ApkDlLink;
|
||||
|
||||
public string AppIcon;
|
||||
|
||||
public string FullInfo;
|
||||
|
||||
internal string AppIcon = null;
|
||||
|
||||
internal string AppIcon120 = null;
|
||||
|
||||
internal string AppIcon160 = null;
|
||||
|
||||
internal string AppIcon240 = null;
|
||||
|
||||
internal string AppIcon320 = null;
|
||||
|
||||
internal string AppIcon480 = null;
|
||||
|
||||
internal string AppIcon640 = null;
|
||||
|
||||
internal string AppIcon65534 = null;
|
||||
|
||||
public bool Parse(string file)
|
||||
{
|
||||
@@ -87,34 +102,32 @@ namespace APKToolGUI.Utils
|
||||
|
||||
List<string> nativecode = new List<string> { };
|
||||
List<string> nativecode2 = new List<string> { };
|
||||
StringBuilder permissionsBuilder = new StringBuilder();
|
||||
foreach (string line in lines)
|
||||
{
|
||||
switch (line.Split(':')[0])
|
||||
{
|
||||
case "package":
|
||||
PackageName = StringExt.Regex(@"(?<=package: name=\')(.*?)(?=\')", line);
|
||||
VersionName = StringExt.Regex(@"(?<=versionName=\')(.*?)(?=\')", line);
|
||||
VersionCode = StringExt.Regex(@"(?<=versionCode=\')(.*?)(?=\')", line);
|
||||
PackageName = StringExt.RegexExtract(@"(?<=package: name=\')(.*?)(?=\')", line);
|
||||
VersionName = StringExt.RegexExtract(@"(?<=versionName=\')(.*?)(?=\')", line);
|
||||
VersionCode = StringExt.RegexExtract(@"(?<=versionCode=\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "uses-permission":
|
||||
Permissions += StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line) + "\n";
|
||||
permissionsBuilder.AppendLine(StringExt.RegexExtract(@"(?<=name=\')(.*?)(?=\')", line));
|
||||
break;
|
||||
case "sdkVersion":
|
||||
MinSdkVersionDetailed = SdkToAndroidVer(StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line));
|
||||
MinSdkVersion = StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line);
|
||||
MinSdkVersionDetailed = SdkToAndroidVer(StringExt.RegexExtract(@"(?<=sdkVersion:\')(.*?)(?=\')", line));
|
||||
MinSdkVersion = StringExt.RegexExtract(@"(?<=sdkVersion:\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "targetSdkVersion":
|
||||
TargetSdkVersionDetailed = SdkToAndroidVer(StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line));
|
||||
TargetSdkVersion = StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line);
|
||||
TargetSdkVersionDetailed = SdkToAndroidVer(StringExt.RegexExtract(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line));
|
||||
TargetSdkVersion = StringExt.RegexExtract(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "application-label":
|
||||
AppName = StringExt.Regex(@"(?<=application-label:\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "application":
|
||||
AppIcon = GetIcon(file, StringExt.Regex(@"(?<=icon=\')(.*?)(?=\')", line));
|
||||
AppName = StringExt.RegexExtract(@"(?<=application-label:\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "launchable-activity":
|
||||
LaunchableActivity = StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line);
|
||||
LaunchableActivity = StringExt.RegexExtract(@"(?<=name=\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "supports-screens":
|
||||
var screens = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
@@ -136,13 +149,25 @@ namespace APKToolGUI.Utils
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Permissions = permissionsBuilder.ToString();
|
||||
List<string> combinedList = nativecode2.Concat(nativecode).ToList();
|
||||
NativeCode += string.Join(", ", combinedList);
|
||||
ApkFile = file;
|
||||
PlayStoreLink = "https://play.google.com/store/apps/details?id=" + PackageName;
|
||||
ApkComboLink = "https://apkcombo.com/a/" + PackageName;
|
||||
ApkPureLink = "https://apkpure.com/a/" + PackageName;
|
||||
ApkAioLink = "https://apkaio.com/app/" + PackageName;
|
||||
ApkSupportLink = "https://apk.support/app/" + PackageName;
|
||||
ApkMirrorLink = "https://www.apkmirror.com/?post_type=app_release&searchtype=apk&s=" + PackageName;
|
||||
ApkGkLink = "https://apkgk.com/" + PackageName + "/download";
|
||||
|
||||
AppIcon120 = StringExt.RegexExtract(@"(?<=application-icon-120:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon160 = StringExt.RegexExtract(@"(?<=application-icon-160:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon240 = StringExt.RegexExtract(@"(?<=application-icon-240:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon320 = StringExt.RegexExtract(@"(?<=application-icon-320:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon480 = StringExt.RegexExtract(@"(?<=application-icon-480:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon640 = StringExt.RegexExtract(@"(?<=application-icon-640:\')(.*?)(?=\')", FullInfo);
|
||||
AppIcon65534 = StringExt.RegexExtract(@"(?<=application-icon-65534:\')(.*?)(?=\')", FullInfo);
|
||||
|
||||
result = true;
|
||||
}
|
||||
@@ -170,103 +195,165 @@ namespace APKToolGUI.Utils
|
||||
return apkinfo;
|
||||
}
|
||||
|
||||
string[] iconFolder = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" };
|
||||
|
||||
private string GetIcon(string apkPath, string iconPath)
|
||||
public string GetIcon(string apkPath)
|
||||
{
|
||||
iconPath = iconPath.Replace(".xml", ".png");
|
||||
string[] png = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" };
|
||||
string icon = "";
|
||||
|
||||
if (iconPath.Contains("anydpi-v26"))
|
||||
if (!string.IsNullOrEmpty(AppIcon65534))
|
||||
icon = AppIcon65534;
|
||||
else if (!string.IsNullOrEmpty(AppIcon640))
|
||||
icon = AppIcon640;
|
||||
else if (!string.IsNullOrEmpty(AppIcon480))
|
||||
icon = AppIcon480;
|
||||
else if (!string.IsNullOrEmpty(AppIcon320))
|
||||
icon = AppIcon320;
|
||||
else if (!string.IsNullOrEmpty(AppIcon240))
|
||||
icon = AppIcon240;
|
||||
else if (!string.IsNullOrEmpty(AppIcon160))
|
||||
icon = AppIcon160;
|
||||
else if (!string.IsNullOrEmpty(AppIcon120))
|
||||
icon = AppIcon120;
|
||||
|
||||
icon = icon.Replace(".xml", ".png");
|
||||
|
||||
Debug.WriteLine("Icon: " + icon);
|
||||
|
||||
string cacheDir = Path.Combine(Program.TEMP_PATH, PackageName);
|
||||
string iconLocation = Path.Combine(cacheDir, Path.GetFileName(icon));
|
||||
Directory.CreateDirectory(cacheDir);
|
||||
|
||||
if (icon.Contains("anydpi-v26"))
|
||||
{
|
||||
foreach (string folder in iconFolder)
|
||||
foreach (string Png in png)
|
||||
{
|
||||
string icon = iconPath.Replace("mipmap-anydpi-v26", folder).Replace("drawable-anydpi-v26", folder);
|
||||
|
||||
if (ZipUtils.Exists(apkPath, icon))
|
||||
string icon2 = icon.Replace("mipmap-anydpi-v26", Png).Replace("drawable-anydpi-v26", Png);
|
||||
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
|
||||
if (File.Exists(iconLocation))
|
||||
{
|
||||
Debug.WriteLine("Icon path " + icon);
|
||||
return icon;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return iconPath.Replace("mipmap-anydpi-v26", "mipmap-xhdpi").Replace(".xml", ".png");
|
||||
}
|
||||
else if (icon.Contains("v26"))
|
||||
{
|
||||
string icon2 = icon.Replace("v26", "v4");
|
||||
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
|
||||
icon2 = icon.Replace("-v26", "");
|
||||
ZipUtils.ExtractFile(apkPath, icon2, cacheDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("Icon path " + iconPath);
|
||||
return iconPath;
|
||||
ZipUtils.ExtractFile(apkPath, icon, cacheDir);
|
||||
}
|
||||
|
||||
if (!File.Exists(iconLocation))
|
||||
{
|
||||
try
|
||||
{
|
||||
WebDownload w = new WebDownload();
|
||||
string ps = w.DownloadString("https://play.google.com/store/apps/details?id=" + PackageName);
|
||||
//File.WriteAllText("R:\\t.txt", ps);
|
||||
string icondl = Path.Combine(cacheDir, "icon.png");
|
||||
Directory.CreateDirectory(cacheDir);
|
||||
w.DownloadFile(StringExt.RegexExtract(@"(?<=\""image\"":\"")(.*?)(?=\"",\"")", ps), icondl);
|
||||
iconLocation = icondl;
|
||||
}
|
||||
catch (System.Net.WebException ex)
|
||||
{
|
||||
Debug.WriteLine($"[AaptParser] Failed to download icon from web: {ex.Message}");
|
||||
// Icon download failure is not critical, use default value
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Debug.WriteLine($"[AaptParser] Failed to save icon file: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[AaptParser] Unexpected error getting icon: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
return iconLocation;
|
||||
}
|
||||
|
||||
//https://apilevels.com/
|
||||
public string SdkToAndroidVer(string sdk)
|
||||
{
|
||||
switch (sdk)
|
||||
{
|
||||
case "36":
|
||||
return sdk + ": Android 16";
|
||||
case "35":
|
||||
return sdk + ": Android 15";
|
||||
case "34":
|
||||
return sdk + ": Android 14";
|
||||
case "33":
|
||||
return "31: Android 13";
|
||||
return sdk + ": Android 13";
|
||||
case "32":
|
||||
return "31: Android 12.0L";
|
||||
return sdk + ": Android 12.0L";
|
||||
case "31":
|
||||
return "31: Android 12";
|
||||
return sdk + ": Android 12";
|
||||
case "30":
|
||||
return "30: Android 11";
|
||||
return sdk + ": Android 11";
|
||||
case "29":
|
||||
return "29: Android 10";
|
||||
return sdk + ": Android 10";
|
||||
case "28":
|
||||
return "28: Android 9 (Pie)";
|
||||
return sdk + ": Android 9 (Pie)";
|
||||
case "27":
|
||||
return "27: Android 8.1 (Oreo MR1)";
|
||||
return sdk + ": Android 8.1 (Oreo)";
|
||||
case "26":
|
||||
return "26: Android 8.0 (Oreo)";
|
||||
return sdk + ": Android 8.0 (Oreo)";
|
||||
case "25":
|
||||
return "25: Android 7.1 (Nougat MR1)";
|
||||
return sdk + ": Android 7.1 (Nougat)";
|
||||
case "24":
|
||||
return "24: Android 7.0 (Nougat)";
|
||||
return sdk + ": Android 7.0 (Nougat)";
|
||||
case "23":
|
||||
return "23: Android 6 (Marshmallow)";
|
||||
return sdk + ": Android 6 (Marshmallow)";
|
||||
case "22":
|
||||
return "22: Android 5.1 (Lollipop MR1)";
|
||||
return sdk + ": Android 5.1 (Lollipop)";
|
||||
case "21":
|
||||
return "21: Android 5.0 (Lollipop)";
|
||||
return sdk + ": Android 5.0 (Lollipop)";
|
||||
case "20":
|
||||
return "20: Android 4.4W (KitKat Watch)";
|
||||
return sdk + ": Android 4.4W (KitKat Watch)";
|
||||
case "19":
|
||||
return "19: Android 4.4 (KitKat)";
|
||||
return sdk + ": Android 4.4 (KitKat)";
|
||||
case "18":
|
||||
return "18: Android 4.3 (Jelly Bean MR2)";
|
||||
return sdk + ": Android 4.3 (Jelly Bean)";
|
||||
case "17":
|
||||
return "17: Android 4.2 (Jelly Bean MR1)";
|
||||
return sdk + ": Android 4.2 (Jelly Bean)";
|
||||
case "16":
|
||||
return "16: Android 4.1 (Jelly Bean)";
|
||||
return sdk + ": Android 4.1 (Jelly Bean)";
|
||||
case "15":
|
||||
return "15: Android 4.0.3 (Ice Cream Sandwich MR1)";
|
||||
return sdk + ": Android 4.0.3 (Ice Cream Sandwich)";
|
||||
case "14":
|
||||
return "14: Android 4.0 (Ice Cream Sandwich)";
|
||||
return sdk + ": Android 4.0 (Ice Cream Sandwich)";
|
||||
case "13":
|
||||
return "13: Android 3.2 (Honeycomb MR2)";
|
||||
return sdk + ": Android 3.2 (Honeycomb)";
|
||||
case "12":
|
||||
return "12: Android 3.1 (Honeycomb MR1)";
|
||||
return sdk + ": Android 3.1 (Honeycomb)";
|
||||
case "11":
|
||||
return "11: Android 3.0 (Honeycomb)";
|
||||
return sdk + ": Android 3.0 (Honeycomb)";
|
||||
case "10":
|
||||
return "10: Android 2.3.3 Gingerbread MR1";
|
||||
return sdk + ": Android 2.3.3 Gingerbread";
|
||||
case "9":
|
||||
return "9: Android 2.3 (Gingerbread)";
|
||||
return sdk + ": Android 2.3 (Gingerbread)";
|
||||
case "8":
|
||||
return "8: Android 2.2 (Froyo)";
|
||||
return sdk + ": Android 2.2 (Froyo)";
|
||||
case "7":
|
||||
return "7: Android 2.1 (Eclair MR1)";
|
||||
return sdk + ": Android 2.1 (Eclair)";
|
||||
case "6":
|
||||
return "6: Android 2.0.1 (Eclair 0.1)";
|
||||
return sdk + ": Android 2.0.1 (Eclair)";
|
||||
case "5":
|
||||
return "5: Android 2.0 (Eclair)";
|
||||
return sdk + ": Android 2.0 (Eclair)";
|
||||
case "4":
|
||||
return "4: Android 1.6 (Donut)";
|
||||
return sdk + ": Android 1.6 (Donut)";
|
||||
case "3":
|
||||
return "3: Android 1.5 (Cupcake)";
|
||||
return sdk + ": Android 1.5 (Cupcake)";
|
||||
case "2":
|
||||
return "2: Android 1.1 (Base 1.1)";
|
||||
return sdk + ": Android 1.1 (Base 1.1)";
|
||||
case "1":
|
||||
return "1: Android 1.0 (Base)";
|
||||
return sdk + ": Android 1.0 (Base)";
|
||||
default:
|
||||
return sdk;
|
||||
}
|
||||
|
||||
+99
-26
@@ -10,16 +10,18 @@ using System.Windows.Shapes;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Adb
|
||||
public class Adb : IDisposable
|
||||
{
|
||||
Process processAdb;
|
||||
private bool disposed = false;
|
||||
|
||||
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 const string Abi = " --abi"; //override platform's default ABI
|
||||
}
|
||||
|
||||
public event DataReceivedEventHandler OutputDataReceived
|
||||
@@ -43,10 +45,10 @@ namespace APKToolGUI
|
||||
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.StartInfo.UseShellExecute = false; // Disable shell execution to read output data
|
||||
processAdb.StartInfo.RedirectStandardOutput = true; // Allow output redirection
|
||||
processAdb.StartInfo.RedirectStandardError = true; // Allow error redirection
|
||||
processAdb.StartInfo.CreateNoWindow = true; // Do not create window for the launched program
|
||||
processAdb.Exited += processAdb_Exited;
|
||||
}
|
||||
|
||||
@@ -64,14 +66,62 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("adb"))
|
||||
{
|
||||
if (process.Id == processAdb.Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)processAdb.Id);
|
||||
process.Kill();
|
||||
if (process.Id == processAdb.Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)processAdb.Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Adb] Cancel failed: {ex.Message}");
|
||||
// Process termination failure is not critical, so continue
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (processAdb != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!processAdb.HasExited)
|
||||
{
|
||||
processAdb.Kill();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Adb] Error disposing process: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
processAdb.Dispose();
|
||||
processAdb = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Adb()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public int Install(string device, string inputApk)
|
||||
@@ -79,11 +129,29 @@ namespace APKToolGUI
|
||||
Regex regex = new Regex(@"^(\S+)\s+.*model:(\w+).*");
|
||||
Match mdevice = regex.Match(device);
|
||||
|
||||
string setVendor = null;
|
||||
string setVendor = null, abi = null;
|
||||
if (Settings.Default.Adb_SetVendor)
|
||||
setVendor = $"{Keys.Vendor} com.android.vending {Keys.ApkPath}";
|
||||
if (Settings.Default.Adb_SetOverrideAbi)
|
||||
{
|
||||
switch (Settings.Default.Adb_OverrideAbi)
|
||||
{
|
||||
case 0:
|
||||
abi = Keys.Abi + " arm64-v8a";
|
||||
break;
|
||||
case 1:
|
||||
abi = Keys.Abi + " armeabi-v7a";
|
||||
break;
|
||||
case 2:
|
||||
abi = Keys.Abi + " x86";
|
||||
break;
|
||||
case 3:
|
||||
abi = Keys.Abi + " x86_64";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string args = String.Format($"{Keys.Serial} {mdevice.Groups[1].Value} install {setVendor} \"{inputApk}\"");
|
||||
string args = String.Format($"{Keys.Serial} {mdevice.Groups[1].Value} install {setVendor} {abi} \"{inputApk}\"");
|
||||
|
||||
Log.d("ADB: " + adbFileName + " " + args);
|
||||
Debug.WriteLine("Adb: " + args);
|
||||
@@ -102,26 +170,31 @@ namespace APKToolGUI
|
||||
{
|
||||
Log.d("ADB: " + adbFileName + " " + Keys.Devices);
|
||||
|
||||
Process process = new Process();
|
||||
process.EnableRaisingEvents = true;
|
||||
process.StartInfo.FileName = adbFileName;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.RedirectStandardError = true;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
process.EnableRaisingEvents = false;
|
||||
process.StartInfo.Arguments = Keys.Devices;
|
||||
process.Start();
|
||||
string devices = process.StandardOutput.ReadToEnd();
|
||||
process.WaitForExit();
|
||||
return devices;
|
||||
using (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();
|
||||
using (process)
|
||||
{
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,10 @@ using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class ApkEditor : JarProcess
|
||||
public class ApkEditor : JarProcess, IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
|
||||
public new event ApkEditorExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
@@ -72,14 +74,28 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
if (process.Id == Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
Debug.WriteLine($"[ApkEditor] Process already exited: {ex.Message}");
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[ApkEditor] Failed to access process: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[ApkEditor] Failed to cancel process: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public int Merge(string input, string output)
|
||||
@@ -102,6 +118,96 @@ namespace APKToolGUI
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public int Decompile(string input, string output)
|
||||
{
|
||||
string inputFile = String.Format("-i \"{0}\"", input);
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("d {0} {1} -f", inputFile, keyOutputDir);
|
||||
|
||||
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
|
||||
WaitForExit();
|
||||
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public int Build(string input, string output)
|
||||
{
|
||||
string inputFile = String.Format("-i \"{0}\"", input);
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("b {0} {1} -f", inputFile, keyOutputDir);
|
||||
|
||||
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
|
||||
WaitForExit();
|
||||
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
public string GetVersion()
|
||||
{
|
||||
using (JarProcess jar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
jar.EnableRaisingEvents = false;
|
||||
jar.Start("-version");
|
||||
|
||||
//APKEditor always print as errors as usual :)
|
||||
string version = jar.StandardOutput.ReadToEnd();
|
||||
version += jar.StandardError.ReadToEnd();
|
||||
jar.WaitForExit(3000);
|
||||
return version.Replace("\r\n", "");
|
||||
}
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected new virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[ApkEditor] Error during disposal: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~ApkEditor()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
}
|
||||
|
||||
public class ApkEditorExitedEventArgs : EventArgs
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
|
||||
|
||||
using APKToolGUI.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -15,28 +17,49 @@ namespace APKToolGUI.ApkTool
|
||||
public static bool FixAndroidManifest(string decompilePath)
|
||||
{
|
||||
string manifestPath = Path.Combine(decompilePath, "AndroidManifest.xml");
|
||||
if (File.Exists(manifestPath))
|
||||
if (!File.Exists(manifestPath))
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
string maniFestText = File.ReadAllText(manifestPath);
|
||||
maniFestText = maniFestText.Replace("\\ ", "\\u003");
|
||||
maniFestText = maniFestText.Replace("android:isSplitRequired=\"true\"", "");
|
||||
maniFestText = maniFestText.Replace("android:extractNativeLibs=\"false\"", "");
|
||||
maniFestText = maniFestText.Replace("android:useEmbeddedDex=\"true\"", "");
|
||||
maniFestText = maniFestText.Replace("android:manageSpace=\"true\"", "");
|
||||
maniFestText = maniFestText.Replace("android:localeConfig=\"@xml/locales_config\"", "");
|
||||
maniFestText = maniFestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
|
||||
|
||||
File.WriteAllText(manifestPath, maniFestText);
|
||||
string manifestText = File.ReadAllText(manifestPath);
|
||||
manifestText = manifestText.Replace("\\ ", "\\u003");
|
||||
manifestText = manifestText.Replace("android:isSplitRequired=\"true\"", "");
|
||||
manifestText = manifestText.Replace("android:extractNativeLibs=\"false\"", "");
|
||||
manifestText = manifestText.Replace("android:useEmbeddedDex=\"true\"", "");
|
||||
manifestText = manifestText.Replace("android:manageSpace=\"true\"", "");
|
||||
manifestText = manifestText.Replace("android:localeConfig=\"@xml/locales_config\"", "");
|
||||
manifestText = manifestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
|
||||
manifestText = Regex.Replace(manifestText, @"\s*android:requiredSplitTypes=""[^""]*""", "");
|
||||
manifestText = Regex.Replace(manifestText, @"\s*android:splitTypes=""[^""]*""", "");
|
||||
|
||||
File.WriteAllText(manifestPath, manifestText);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
catch (IOException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to fix AndroidManifest.xml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (UnauthorizedAccessException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied to AndroidManifest.xml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error fixing AndroidManifest.xml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool FixApktoolYml(string decompilePath)
|
||||
{
|
||||
string ymlPath = Path.Combine(decompilePath, "apktool.yml");
|
||||
if (File.Exists(ymlPath))
|
||||
if (!File.Exists(ymlPath))
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
string yml = File.ReadAllText(ymlPath);
|
||||
yml = yml.Replace("sparseResources: true", "sparseResources: false");
|
||||
@@ -44,18 +67,49 @@ namespace APKToolGUI.ApkTool
|
||||
File.WriteAllText(ymlPath, yml);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
catch (IOException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to fix apktool.yml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (UnauthorizedAccessException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied to apktool.yml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error fixing apktool.yml: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool RemoveApkToolDummies(string path)
|
||||
{
|
||||
string resPath = Path.Combine(path, "res", "values");
|
||||
if (Directory.Exists(resPath))
|
||||
if (!Directory.Exists(resPath))
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
DirectoryUtils.ReplaceinFilesRegex(resPath, "(.*(?:APKTOOL_DUMMY).*)", "");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
catch (IOException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to remove APKTOOL_DUMMY: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (UnauthorizedAccessException ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied while removing APKTOOL_DUMMY: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error removing APKTOOL_DUMMY: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+234
-69
@@ -11,54 +11,121 @@ using Java;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Apktool : JarProcess
|
||||
public class Apktool : JarProcess, IDisposable
|
||||
{
|
||||
enum ApktoolActionType
|
||||
private bool disposed = false;
|
||||
private static readonly Regex ApktoolVersionRegex = new Regex(@"v?(?<version>\d+\.\d+\.\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
public Version ParsedVersion { get; private set; }
|
||||
public string Version { get; private set; }
|
||||
|
||||
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
|
||||
{
|
||||
Decompile,
|
||||
Build,
|
||||
InstallFramework,
|
||||
ClearFramework,
|
||||
Null
|
||||
Exited += Apktool_Exited;
|
||||
OutputDataReceived += Apktool_OutputDataReceived;
|
||||
ErrorDataReceived += Apktool_ErrorDataReceived;
|
||||
|
||||
string apktoolVersion = GetVersion();
|
||||
string apktoolVersionOld = GetVersionOld();
|
||||
if (!String.IsNullOrWhiteSpace(apktoolVersion) && !Regex.IsMatch(apktoolVersion, @"\r\n?|\n"))
|
||||
Version = apktoolVersion;
|
||||
else if (!String.IsNullOrWhiteSpace(apktoolVersionOld) && !Regex.IsMatch(apktoolVersionOld, @"\r\n?|\n"))
|
||||
Version = apktoolVersionOld;
|
||||
|
||||
ParsedVersion = ParseVersion(Version);
|
||||
|
||||
Debug.WriteLine($"[Apktool] Parsed version: {ParsedVersion}");
|
||||
}
|
||||
|
||||
static class DecompileKeys
|
||||
{
|
||||
public const string NoSource = " -s"; //Do not decode sources.
|
||||
public const string NoResource = " -r"; //Do not decode resources.
|
||||
public const string NoDebugInfo = " -b"; //don't write out debug info (.local, .param, .line, etc.)
|
||||
public const string Force = " -f"; //Skip changes detection and build all files.
|
||||
public const string FrameworkPath = " -p"; //Uses framework files located in <dir>.
|
||||
public const string KeepBrokenResource = " -k"; //Use if there was an error and some resources were dropped
|
||||
public const string MatchOriginal = " -m"; //Keeps files to closest to original as possible. Prevents rebuild.
|
||||
public const string OutputDir = " -o"; //The name of folder that gets written. Default is apk.out
|
||||
public const string OnlyMainClasses = " -only-main-classes"; //Only disassemble the main dex classes (classes[0-9]*.dex) in the root.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
//Do not decode sources.
|
||||
public const string NoSource = " -s";
|
||||
|
||||
//Do not decode resources.
|
||||
public const string NoResource = " -r";
|
||||
|
||||
//don't write out debug info (.local, .param, .line, etc.)
|
||||
//The -b flag has been removed from APKtool 3.0.1 and later versions,
|
||||
//but the --no-debug-info flag is supported in all versions.
|
||||
public const string NoDebugInfo = " --no-debug-info";
|
||||
|
||||
//Skip changes detection and build all files.
|
||||
public const string Force = " -f";
|
||||
|
||||
//Uses framework files located in <dir>.
|
||||
public const string FrameworkPath = " -p";
|
||||
|
||||
//Use if there was an error and some resources were dropped
|
||||
public const string KeepBrokenResource = " -k";
|
||||
|
||||
//Keeps files to closest to original as possible. Prevents rebuild.
|
||||
public const string MatchOriginal = " -m";
|
||||
|
||||
//The name of folder that gets written. Default is apk.out
|
||||
public const string OutputDir = " -o";
|
||||
|
||||
//Only disassemble the main dex classes (classes[0-9]*.dex) in the root.
|
||||
public const string OnlyMainClasses = " --only-main-classes";
|
||||
|
||||
//The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
public const string ApiLevel = " -api";
|
||||
|
||||
// Sets the number of threads to use.
|
||||
public const string Jobs = " -j";
|
||||
}
|
||||
|
||||
static class BuildKeys
|
||||
{
|
||||
public const string ForceAll = " -f"; //Skip changes detection and build all files.
|
||||
public const string CopyOriginal = " -c"; //opies original AndroidManifest.xml and META-INF. See project page for more info.
|
||||
public const string Aapt = " -a"; //Loads aapt from specified location.
|
||||
public const string FrameworkPath = " -p"; //Uses framework files located in <dir>.
|
||||
public const string OutputAppPath = " -o"; // The name of apk that gets written. Default is dist/name.apk
|
||||
public const string NoCrunch = " -nc"; // Disable crunching of resource files during the build step.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
public const string UseAapt2 = " --use-aapt2"; //Upgrades apktool to use experimental aapt2 binary.
|
||||
public const string NetSecConf = " --net-sec-conf"; //Add a generic Network Security Configuration file in the output APK
|
||||
//Skip changes detection and build all files.
|
||||
public const string ForceAll = " -f";
|
||||
|
||||
//opies original AndroidManifest.xml and META-INF. See project page for more info.
|
||||
public const string CopyOriginal = " -c";
|
||||
|
||||
//Loads aapt from specified location.
|
||||
public const string Aapt = " -a";
|
||||
|
||||
//Uses framework files located in <dir>.
|
||||
public const string FrameworkPath = " -p";
|
||||
|
||||
// The name of apk that gets written. Default is dist/name.apk
|
||||
public const string OutputAppPath = " -o";
|
||||
|
||||
// Disable crunching of resource files during the build step.
|
||||
public const string NoCrunch = " -nc";
|
||||
|
||||
//The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
public const string ApiLevel = " -api";
|
||||
|
||||
//Upgrades apktool to use experimental aapt2 binary.
|
||||
public const string UseAapt2 = " --use-aapt2";
|
||||
|
||||
//Add a generic Network Security Configuration file in the output APK
|
||||
public const string NetSecConf = " --net-sec-conf";
|
||||
|
||||
// Sets the number of threads to use.
|
||||
public const string Jobs = " -j";
|
||||
}
|
||||
|
||||
static class InstallFrameworkKeys
|
||||
{
|
||||
public const string FrameDir = " -p"; //Stores framework files into <dir>.
|
||||
public const string Tag = " -t"; //Tag frameworks using <tag>.
|
||||
//Stores framework files into <dir>.
|
||||
public const string FrameDir = " -p";
|
||||
|
||||
//Tag frameworks using <tag>.
|
||||
public const string Tag = " -t";
|
||||
}
|
||||
|
||||
static class EmptyFrameworkKeys
|
||||
{
|
||||
public const string FrameDir = " -p"; //Stores framework files into <dir>.
|
||||
public const string ForceDelete = " -f"; //Force delete destination directory.
|
||||
//Stores framework files into <dir>.
|
||||
public const string FrameDir = " -p";
|
||||
|
||||
//Force delete destination directory.
|
||||
public const string ForceDelete = " -f";
|
||||
|
||||
//Include all framework files regardless of tag. (3.0.1+)
|
||||
public const string All = " -a";
|
||||
}
|
||||
|
||||
ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved;
|
||||
@@ -87,15 +154,6 @@ namespace APKToolGUI
|
||||
}
|
||||
}
|
||||
|
||||
string _jarPath;
|
||||
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
|
||||
{
|
||||
_jarPath = jarPath;
|
||||
Exited += Apktool_Exited;
|
||||
OutputDataReceived += Apktool_OutputDataReceived;
|
||||
ErrorDataReceived += Apktool_ErrorDataReceived;
|
||||
}
|
||||
|
||||
private void Apktool_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onApktoolErrorDataRecieved != null && e.Data != null)
|
||||
@@ -116,7 +174,7 @@ namespace APKToolGUI
|
||||
|
||||
public int Decompile(string inputPath, string outputDir)
|
||||
{
|
||||
string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyMatchOriginal = null, keyOutputDir = null, onlyMainClasses = null, noDebugInfo = null, keyKeepBrokenRes = null, apiLevel = null;
|
||||
string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyMatchOriginal = null, keyOutputDir = null, onlyMainClasses = null, noDebugInfo = null, keyKeepBrokenRes = null, apiLevel = null, jobs = null;
|
||||
|
||||
if (Settings.Default.Decode_NoSrc)
|
||||
keyNoSrc = DecompileKeys.NoSource;
|
||||
@@ -128,7 +186,7 @@ namespace APKToolGUI
|
||||
keyKeepBrokenRes = DecompileKeys.KeepBrokenResource;
|
||||
if (Settings.Default.Decode_MatchOriginal)
|
||||
keyMatchOriginal = DecompileKeys.MatchOriginal;
|
||||
if (Settings.Default.Decode_OnlyMainClasses && !Settings.Default.Decode_NoSrc)
|
||||
if (Settings.Default.Decode_OnlyMainClasses && !Settings.Default.Decode_NoSrc && IsVersionAtMost("2.12.1"))
|
||||
onlyMainClasses = DecompileKeys.OnlyMainClasses;
|
||||
if (Settings.Default.Decode_NoDebugInfo)
|
||||
noDebugInfo = DecompileKeys.NoDebugInfo;
|
||||
@@ -138,11 +196,13 @@ namespace APKToolGUI
|
||||
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
|
||||
if (Settings.Default.Decode_SetApiLevel)
|
||||
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Decode_ApiLevel);
|
||||
if (Settings.Default.Decode_SetJobs)
|
||||
jobs = String.Format("{0} {1}", DecompileKeys.Jobs, Settings.Default.Decode_Jobs);
|
||||
keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, outputDir);
|
||||
|
||||
string args = String.Format($"d{keyNoSrc}{keyNoRes}{keyForce}{onlyMainClasses}{noDebugInfo}{keyMatchOriginal}{keyFramePath}{keyKeepBrokenRes}{apiLevel}{keyOutputDir} \"{inputPath}\"");
|
||||
string args = String.Format($"d{keyNoSrc}{keyNoRes}{keyForce}{onlyMainClasses}{noDebugInfo}{keyMatchOriginal}{keyFramePath}{keyKeepBrokenRes}{apiLevel}{jobs}{keyOutputDir} \"{inputPath}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
Log.d("Apktool CMD: " + JarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
@@ -151,28 +211,9 @@ namespace APKToolGUI
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public int Build(string inputFolder, string outputFile)
|
||||
{
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null, netSecConf = null;
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, jobs = null, useAapt2 = null, netSecConf = null;
|
||||
|
||||
if (Settings.Default.Build_ForceAll)
|
||||
keyForceAll = BuildKeys.ForceAll;
|
||||
@@ -185,18 +226,20 @@ namespace APKToolGUI
|
||||
if (Settings.Default.Build_UseFramework)
|
||||
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Settings.Default.Framework_FrameDir);
|
||||
else
|
||||
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
|
||||
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
|
||||
if (Settings.Default.Build_SetApiLevel)
|
||||
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Build_ApiLevel);
|
||||
apiLevel = String.Format("{0} {1}", BuildKeys.ApiLevel, Settings.Default.Build_ApiLevel);
|
||||
if (Settings.Default.Build_SetJobs)
|
||||
jobs = String.Format("{0} {1}", BuildKeys.Jobs, Settings.Default.Build_Jobs);
|
||||
if (Settings.Default.Build_UseAapt2)
|
||||
useAapt2 = BuildKeys.UseAapt2;
|
||||
if (Settings.Default.Build_NetSecConf)
|
||||
netSecConf = BuildKeys.NetSecConf;
|
||||
keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, outputFile);
|
||||
|
||||
string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{useAapt2}{netSecConf}{keyOutputAppPath} \"{inputFolder}\"");
|
||||
string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{jobs}{useAapt2}{netSecConf}{keyOutputAppPath} \"{inputFolder}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
Log.d("Apktool CMD: " + JarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
@@ -217,7 +260,7 @@ namespace APKToolGUI
|
||||
|
||||
string args = String.Format($"if{keyFrameDir}{keyTag} \"{inputPath}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
Log.d("Apktool CMD: " + JarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
@@ -235,8 +278,10 @@ namespace APKToolGUI
|
||||
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR);
|
||||
|
||||
string args = String.Format($"empty-framework-dir {EmptyFrameworkKeys.ForceDelete} {keyFramePath}");
|
||||
if (IsVersionAtLeast("3.0.1"))
|
||||
args = String.Format($"clean-frameworks {EmptyFrameworkKeys.All} {keyFramePath}");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
Log.d("Apktool CMD: " + JarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
@@ -245,7 +290,54 @@ namespace APKToolGUI
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public bool IsVersionAtLeast(string minimumVersion)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(minimumVersion))
|
||||
throw new ArgumentException("Minimum version cannot be null or empty.", nameof(minimumVersion));
|
||||
|
||||
return ParsedVersion.CompareTo(new Version(minimumVersion)) >= 0;
|
||||
}
|
||||
|
||||
public bool IsVersionAtMost(string maximumVersion)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(maximumVersion))
|
||||
throw new ArgumentException("Maximum version cannot be null or empty.", nameof(maximumVersion));
|
||||
|
||||
return ParsedVersion.CompareTo(new Version(maximumVersion)) <= 0;
|
||||
}
|
||||
|
||||
private static Version ParseVersion(string rawVersion)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(rawVersion))
|
||||
return null;
|
||||
|
||||
Match match = ApktoolVersionRegex.Match(rawVersion.Trim());
|
||||
if (!match.Success)
|
||||
return null;
|
||||
|
||||
try
|
||||
{
|
||||
return new Version(match.Groups["version"].Value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetVersion()
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
apktoolJar.EnableRaisingEvents = false;
|
||||
apktoolJar.Start("version");
|
||||
string version = apktoolJar.StandardOutput.ReadToEnd();
|
||||
apktoolJar.WaitForExit(3000);
|
||||
return version.Replace("\r\n", "");
|
||||
}
|
||||
}
|
||||
|
||||
public string GetVersionOld()
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
@@ -256,6 +348,70 @@ namespace APKToolGUI
|
||||
return version.Replace("\r\n", "");
|
||||
}
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
using (process)
|
||||
{
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Apktool] Process already exited: {ex.Message}");
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Apktool] Failed to access process: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Apktool] Failed to cancel process: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected new virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Apktool] Error during disposal: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Apktool()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ApktoolDataReceivedEventHandler(Object sender, ApktoolDataReceivedEventArgs e);
|
||||
@@ -336,4 +492,13 @@ namespace APKToolGUI
|
||||
Error,
|
||||
Unknown
|
||||
}
|
||||
|
||||
enum ApktoolActionType
|
||||
{
|
||||
Decompile,
|
||||
Build,
|
||||
InstallFramework,
|
||||
ClearFramework,
|
||||
Null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ using APKToolGUI.Utils;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Baksmali : JarProcess
|
||||
public class Baksmali : JarProcess, IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
|
||||
public new event BaksmaliExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
@@ -72,14 +74,28 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
if (process.Id == Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Baksmali] Process already exited: {ex.Message}");
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Baksmali] Failed to access process: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Baksmali] Failed to cancel process: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public int Disassemble(string input, string output)
|
||||
@@ -99,6 +115,40 @@ namespace APKToolGUI
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected new virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Baksmali] Error during disposal: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Baksmali()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
}
|
||||
|
||||
public class BaksmaliExitedEventArgs : EventArgs
|
||||
|
||||
@@ -3,11 +3,14 @@ using Java;
|
||||
using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using System.IO.Packaging;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Signapk : JarProcess
|
||||
public class Signapk : JarProcess, IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
|
||||
public new event SignapkExitedEventHandler Exited;
|
||||
|
||||
private string lastSourceApk;
|
||||
@@ -74,14 +77,28 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
if (process.Id == Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Signapk] Process already exited: {ex.Message}");
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Signapk] Failed to access process: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Signapk] Failed to cancel process: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public int Sign(string input, string output)
|
||||
@@ -138,6 +155,53 @@ namespace APKToolGUI
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public string GetSignature(string apkFile)
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
apktoolJar.EnableRaisingEvents = false;
|
||||
apktoolJar.Start($"verify --print-certs \"{apkFile}\"");
|
||||
string version = apktoolJar.StandardOutput.ReadToEnd();
|
||||
version += apktoolJar.StandardError.ReadToEnd();
|
||||
apktoolJar.WaitForExit();
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected new virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Signapk] Error during disposal: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Signapk()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e);
|
||||
|
||||
@@ -7,8 +7,10 @@ using APKToolGUI.Utils;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Smali : JarProcess
|
||||
public class Smali : JarProcess, IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
|
||||
public new event SmaliExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
@@ -69,14 +71,28 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("java"))
|
||||
{
|
||||
if (process.Id == Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
if (process.Id == Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Smali] Process already exited: {ex.Message}");
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Smali] Failed to access process: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Smali] Failed to cancel process: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public int Assemble(string input, string output)
|
||||
@@ -96,6 +112,40 @@ namespace APKToolGUI
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected new virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cancel();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Smali] Error during disposal: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Smali()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
}
|
||||
|
||||
public class SmaliExitedEventArgs : EventArgs
|
||||
|
||||
+116
-14
@@ -6,9 +6,11 @@ using System.IO;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Zipalign
|
||||
public class Zipalign : IDisposable
|
||||
{
|
||||
Process processZipalign;
|
||||
private bool disposed = false;
|
||||
|
||||
static class Keys
|
||||
{
|
||||
public const string CheckOnly = " -c";
|
||||
@@ -37,10 +39,10 @@ namespace APKToolGUI
|
||||
processZipalign = new Process();
|
||||
processZipalign.EnableRaisingEvents = true;
|
||||
processZipalign.StartInfo.FileName = zipalignFileName;
|
||||
processZipalign.StartInfo.UseShellExecute = false; //отключаем использование оболочки, чтобы можно было читать данные вывода
|
||||
processZipalign.StartInfo.RedirectStandardOutput = true; // разрешаем перенаправление данных вывода
|
||||
processZipalign.StartInfo.RedirectStandardError = true; // разрешаем перенаправление данных вывода
|
||||
processZipalign.StartInfo.CreateNoWindow = true; //запрещаем создавать окно для запускаемой программы
|
||||
processZipalign.StartInfo.UseShellExecute = false; // Disable shell execution to read output data
|
||||
processZipalign.StartInfo.RedirectStandardOutput = true; // Allow output redirection
|
||||
processZipalign.StartInfo.RedirectStandardError = true; // Allow error redirection
|
||||
processZipalign.StartInfo.CreateNoWindow = true; // Do not create window for the launched program
|
||||
processZipalign.Exited += processZipalign_Exited;
|
||||
}
|
||||
|
||||
@@ -58,14 +60,62 @@ namespace APKToolGUI
|
||||
{
|
||||
foreach (var process in Process.GetProcessesByName("zipalign"))
|
||||
{
|
||||
if (process.Id == processZipalign.Id)
|
||||
using (process)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)processZipalign.Id);
|
||||
process.Kill();
|
||||
if (process.Id == processZipalign.Id)
|
||||
{
|
||||
ProcessUtils.KillAllProcessesSpawnedBy((uint)processZipalign.Id);
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Cancel failed: {ex.Message}");
|
||||
// Process termination failure is not critical, so continue
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (processZipalign != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!processZipalign.HasExited)
|
||||
{
|
||||
processZipalign.Kill();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Error disposing process: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
processZipalign.Dispose();
|
||||
processZipalign = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Zipalign()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public int Align(string input, string output)
|
||||
@@ -102,11 +152,63 @@ namespace APKToolGUI
|
||||
processZipalign.BeginErrorReadLine();
|
||||
processZipalign.WaitForExit();
|
||||
|
||||
//if (!Settings.Default.Zipalign_CheckOnly && Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
//{
|
||||
File.Delete(output);
|
||||
File.Move(PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk", output);
|
||||
//}
|
||||
// Handle temp file (only when not in CheckOnly mode)
|
||||
if (!Settings.Default.Zipalign_CheckOnly)
|
||||
{
|
||||
string tempFile = PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk";
|
||||
|
||||
try
|
||||
{
|
||||
// 1. Delete output file
|
||||
if (File.Exists(output))
|
||||
{
|
||||
File.Delete(output);
|
||||
Debug.WriteLine($"[Zipalign] Deleted existing output: {output}");
|
||||
}
|
||||
|
||||
// 2. Check temp file existence and move
|
||||
if (File.Exists(tempFile))
|
||||
{
|
||||
File.Move(tempFile, output);
|
||||
Debug.WriteLine($"[Zipalign] Moved temp file to output: {tempFile} -> {output}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Warning: Temp file not found: {tempFile}");
|
||||
return 1; // Return failure code
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Failed to process output file: {ex.Message}");
|
||||
|
||||
// Attempt to cleanup temp file
|
||||
try
|
||||
{
|
||||
if (File.Exists(tempFile))
|
||||
{
|
||||
File.Delete(tempFile);
|
||||
Debug.WriteLine($"[Zipalign] Cleaned up temp file: {tempFile}");
|
||||
}
|
||||
}
|
||||
catch (Exception cleanupEx)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Failed to cleanup temp file: {cleanupEx.Message}");
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
catch (UnauthorizedAccessException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Access denied: {ex.Message}");
|
||||
return 1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Zipalign] Unexpected error processing output: {ex.Message}");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,13 @@ namespace APKToolGUI.Controls
|
||||
|
||||
public static void SetThemeTabControl(Control component, Control.ControlCollection container)
|
||||
{
|
||||
if (component is SplitContainer)
|
||||
{
|
||||
foreach (Control control in component.Controls)
|
||||
{
|
||||
SetThemeTabControl(control, container);
|
||||
}
|
||||
}
|
||||
if (component is TabControl)
|
||||
{
|
||||
((TabControl)component).DrawMode = TabDrawMode.OwnerDrawFixed;
|
||||
|
||||
@@ -29,12 +29,27 @@
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
<xs:documentation>Obsolete, use UnmanagedWinX86Assemblies instead</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinX86Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged X86 (32 bit) assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
<xs:documentation>Obsolete, use UnmanagedWinX64Assemblies instead.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinX64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged X64 (64 bit) assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="UnmanagedWinArm64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
|
||||
@@ -73,6 +88,11 @@
|
||||
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="DisableEventSubscription" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The attach method no longer subscribes to the `AppDomain.AssemblyResolve` (.NET 4.x) and `AssemblyLoadContext.Resolving` (.NET 6.0+) events.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
|
||||
@@ -105,12 +125,27 @@
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
<xs:documentation>Obsolete, use UnmanagedWinX86Assemblies instead</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="UnmanagedWinX86Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged X86 (32 bit) assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
<xs:documentation>Obsolete, use UnmanagedWinX64Assemblies instead</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="UnmanagedWinX64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged X64 (64 bit) assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="UnmanagedWinArm64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="PreloadOrder" type="xs:string">
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Über</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Text" xml:space="preserve">
|
||||
<value>Copyright</value>
|
||||
</data>
|
||||
<data name="labelProductName.Text" xml:space="preserve">
|
||||
<value>Produktname</value>
|
||||
</data>
|
||||
<data name="labelVersion.Text" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Text" xml:space="preserve">
|
||||
<value>Github Repo</value>
|
||||
</data>
|
||||
<data name="okButton.Text" xml:space="preserve">
|
||||
<value>&ОК</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Text" xml:space="preserve">
|
||||
<value>Beschreibung</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="labelProductName.Text" xml:space="preserve">
|
||||
<value>Tên phần mềm</value>
|
||||
</data>
|
||||
<data name="labelVersion.Text" xml:space="preserve">
|
||||
<value>Phiên bản</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Text" xml:space="preserve">
|
||||
<value>Bản quyền</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Text" xml:space="preserve">
|
||||
<value>Mô tả</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Text" xml:space="preserve">
|
||||
<value>Kho Github</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Giới thiệu</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="labelProductName.Text" xml:space="preserve">
|
||||
<value>软件名</value>
|
||||
</data>
|
||||
<data name="labelVersion.Text" xml:space="preserve">
|
||||
<value>版本</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Text" xml:space="preserve">
|
||||
<value>版权</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Text" xml:space="preserve">
|
||||
<value>描述</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Text" xml:space="preserve">
|
||||
<value>Github 仓库</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
</root>
|
||||
Generated
+228
-86
@@ -32,6 +32,11 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
|
||||
this.tabControlMain = new System.Windows.Forms.TabControl();
|
||||
this.tabPageMain = new System.Windows.Forms.TabPage();
|
||||
this.mergePanel = new System.Windows.Forms.Panel();
|
||||
this.splitApkTxt = new System.Windows.Forms.Label();
|
||||
this.splitApkPathTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.selSplitApkBtn = new System.Windows.Forms.Button();
|
||||
this.mergeApkBtn = new System.Windows.Forms.Button();
|
||||
this.comApkOpenDir = new System.Windows.Forms.Button();
|
||||
this.decOutOpenDirBtn = new System.Windows.Forms.Button();
|
||||
this.signApkOpenDirBtn = new System.Windows.Forms.Button();
|
||||
@@ -64,13 +69,12 @@
|
||||
this.tabPageApkInfo = new System.Windows.Forms.TabPage();
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.basicInfoTabPage = new System.Windows.Forms.TabPage();
|
||||
this.label34 = new System.Windows.Forms.Label();
|
||||
this.sigTxtBox = new System.Windows.Forms.RichTextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.launchActivityTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.label31 = new System.Windows.Forms.Label();
|
||||
this.archSdkTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.label30 = new System.Windows.Forms.Label();
|
||||
this.apkDlLinkBtn = new System.Windows.Forms.Button();
|
||||
this.apkSosLinkBtn = new System.Windows.Forms.Button();
|
||||
this.apkMirrorLinkBtn = new System.Windows.Forms.Button();
|
||||
this.apkSupportLinkBtn = new System.Windows.Forms.Button();
|
||||
this.apkGkLinkBtn = new System.Windows.Forms.Button();
|
||||
@@ -85,7 +89,6 @@
|
||||
this.fileTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.densityTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.apkAioLinkBtn = new System.Windows.Forms.Button();
|
||||
this.packNameTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.apkPureLinkBtn = new System.Windows.Forms.Button();
|
||||
this.verTxtBox = new System.Windows.Forms.TextBox();
|
||||
@@ -107,8 +110,9 @@
|
||||
this.fullInfoTextBox = new System.Windows.Forms.RichTextBox();
|
||||
this.tabPageDecode = new System.Windows.Forms.TabPage();
|
||||
this.groupBox_DECODE_Options = new System.Windows.Forms.GroupBox();
|
||||
this.decJobsLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.checkBox3 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox7 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox_DECODE_UseApkEditorMerge = new System.Windows.Forms.CheckBox();
|
||||
this.decApiLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.decSetApiLvlChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox_DECODE_FixError = new System.Windows.Forms.CheckBox();
|
||||
@@ -127,6 +131,8 @@
|
||||
this.checkBox_DECODE_NoDebugInfo = new System.Windows.Forms.CheckBox();
|
||||
this.tabPageBuild = new System.Windows.Forms.TabPage();
|
||||
this.groupBox_BUILD_Options = new System.Windows.Forms.GroupBox();
|
||||
this.comJobsLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.checkBox4 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox_BUILD_NetSecConf = new System.Windows.Forms.CheckBox();
|
||||
this.useAapt2ChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.buildApiLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
@@ -221,12 +227,14 @@
|
||||
this.baksmaliBrowseInputDexBtn = new System.Windows.Forms.Button();
|
||||
this.baksmaliBrowseInputDexTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.tabPageAdb = new System.Windows.Forms.TabPage();
|
||||
this.overrideAbiComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.selAdbDeviceLbl = new System.Windows.Forms.Label();
|
||||
this.label33 = new System.Windows.Forms.Label();
|
||||
this.killAdbBtn = new System.Windows.Forms.Button();
|
||||
this.installApkBtn = new System.Windows.Forms.Button();
|
||||
this.refreshDevicesBtn = new System.Windows.Forms.Button();
|
||||
this.selApkAdbBtn = new System.Windows.Forms.Button();
|
||||
this.overrideAbiCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.setVendorChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.apkPathAdbTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.label32 = new System.Windows.Forms.Label();
|
||||
@@ -243,12 +251,14 @@
|
||||
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.newInsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.saveLogToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.openTempFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.clearTempFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.useAPKEditorForDecompilingItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.reportAnIsuueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@@ -256,8 +266,10 @@
|
||||
this.baksmaliIssuesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.tabControlMain.SuspendLayout();
|
||||
this.tabPageMain.SuspendLayout();
|
||||
this.mergePanel.SuspendLayout();
|
||||
this.signPanel.SuspendLayout();
|
||||
this.zipalignPanel.SuspendLayout();
|
||||
this.comPanel.SuspendLayout();
|
||||
@@ -269,9 +281,11 @@
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.tabPageDecode.SuspendLayout();
|
||||
this.groupBox_DECODE_Options.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.decJobsLvlUpDown)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.decApiLvlUpDown)).BeginInit();
|
||||
this.tabPageBuild.SuspendLayout();
|
||||
this.groupBox_BUILD_Options.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.comJobsLvlUpDown)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.buildApiLvlUpDown)).BeginInit();
|
||||
this.tabPageSign.SuspendLayout();
|
||||
this.groupBox_SIGN_Options.SuspendLayout();
|
||||
@@ -288,12 +302,15 @@
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.contextMenuStripLog.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
this.splitContainer1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tabControlMain
|
||||
//
|
||||
this.tabControlMain.AllowDrop = true;
|
||||
resources.ApplyResources(this.tabControlMain, "tabControlMain");
|
||||
this.tabControlMain.Controls.Add(this.tabPageMain);
|
||||
this.tabControlMain.Controls.Add(this.tabPageApkInfo);
|
||||
this.tabControlMain.Controls.Add(this.tabPageDecode);
|
||||
@@ -303,6 +320,7 @@
|
||||
this.tabControlMain.Controls.Add(this.tabPageInstallFramework);
|
||||
this.tabControlMain.Controls.Add(this.tabPageBaksmali);
|
||||
this.tabControlMain.Controls.Add(this.tabPageAdb);
|
||||
resources.ApplyResources(this.tabControlMain, "tabControlMain");
|
||||
this.tabControlMain.Name = "tabControlMain";
|
||||
this.tabControlMain.SelectedIndex = 0;
|
||||
this.tabControlMain.SelectedIndexChanged += new System.EventHandler(this.tabControlMain_SelectedIndexChanged);
|
||||
@@ -310,6 +328,7 @@
|
||||
// tabPageMain
|
||||
//
|
||||
this.tabPageMain.BackColor = System.Drawing.Color.White;
|
||||
this.tabPageMain.Controls.Add(this.mergePanel);
|
||||
this.tabPageMain.Controls.Add(this.comApkOpenDir);
|
||||
this.tabPageMain.Controls.Add(this.decOutOpenDirBtn);
|
||||
this.tabPageMain.Controls.Add(this.signApkOpenDirBtn);
|
||||
@@ -326,6 +345,42 @@
|
||||
resources.ApplyResources(this.tabPageMain, "tabPageMain");
|
||||
this.tabPageMain.Name = "tabPageMain";
|
||||
//
|
||||
// mergePanel
|
||||
//
|
||||
this.mergePanel.AllowDrop = true;
|
||||
this.mergePanel.Controls.Add(this.splitApkTxt);
|
||||
this.mergePanel.Controls.Add(this.splitApkPathTxtBox);
|
||||
this.mergePanel.Controls.Add(this.selSplitApkBtn);
|
||||
this.mergePanel.Controls.Add(this.mergeApkBtn);
|
||||
resources.ApplyResources(this.mergePanel, "mergePanel");
|
||||
this.mergePanel.Name = "mergePanel";
|
||||
//
|
||||
// splitApkTxt
|
||||
//
|
||||
resources.ApplyResources(this.splitApkTxt, "splitApkTxt");
|
||||
this.splitApkTxt.Name = "splitApkTxt";
|
||||
//
|
||||
// splitApkPathTxtBox
|
||||
//
|
||||
this.splitApkPathTxtBox.AllowDrop = true;
|
||||
resources.ApplyResources(this.splitApkPathTxtBox, "splitApkPathTxtBox");
|
||||
this.splitApkPathTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "SplitApk_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.splitApkPathTxtBox.Name = "splitApkPathTxtBox";
|
||||
this.splitApkPathTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.SplitApk_InputFile;
|
||||
//
|
||||
// selSplitApkBtn
|
||||
//
|
||||
resources.ApplyResources(this.selSplitApkBtn, "selSplitApkBtn");
|
||||
this.selSplitApkBtn.Name = "selSplitApkBtn";
|
||||
this.selSplitApkBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// mergeApkBtn
|
||||
//
|
||||
this.mergeApkBtn.AllowDrop = true;
|
||||
resources.ApplyResources(this.mergeApkBtn, "mergeApkBtn");
|
||||
this.mergeApkBtn.Name = "mergeApkBtn";
|
||||
this.mergeApkBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// comApkOpenDir
|
||||
//
|
||||
resources.ApplyResources(this.comApkOpenDir, "comApkOpenDir");
|
||||
@@ -540,19 +595,18 @@
|
||||
resources.ApplyResources(this.tabControl1, "tabControl1");
|
||||
this.tabControl1.Name = "tabControl1";
|
||||
this.tabControl1.SelectedIndex = 0;
|
||||
this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.FillToRight;
|
||||
this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
|
||||
//
|
||||
// basicInfoTabPage
|
||||
//
|
||||
this.basicInfoTabPage.AllowDrop = true;
|
||||
resources.ApplyResources(this.basicInfoTabPage, "basicInfoTabPage");
|
||||
this.basicInfoTabPage.Controls.Add(this.label34);
|
||||
this.basicInfoTabPage.Controls.Add(this.sigTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.label5);
|
||||
this.basicInfoTabPage.Controls.Add(this.launchActivityTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.label31);
|
||||
this.basicInfoTabPage.Controls.Add(this.archSdkTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.label30);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkDlLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkSosLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkMirrorLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkSupportLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkGkLinkBtn);
|
||||
@@ -567,7 +621,6 @@
|
||||
this.basicInfoTabPage.Controls.Add(this.fileTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.label14);
|
||||
this.basicInfoTabPage.Controls.Add(this.densityTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkAioLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.packNameTxtBox);
|
||||
this.basicInfoTabPage.Controls.Add(this.apkPureLinkBtn);
|
||||
this.basicInfoTabPage.Controls.Add(this.verTxtBox);
|
||||
@@ -588,10 +641,16 @@
|
||||
this.basicInfoTabPage.Name = "basicInfoTabPage";
|
||||
this.basicInfoTabPage.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label34
|
||||
// sigTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.label34, "label34");
|
||||
this.label34.Name = "label34";
|
||||
resources.ApplyResources(this.sigTxtBox, "sigTxtBox");
|
||||
this.sigTxtBox.Name = "sigTxtBox";
|
||||
this.sigTxtBox.ReadOnly = true;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// launchActivityTxtBox
|
||||
//
|
||||
@@ -615,18 +674,6 @@
|
||||
resources.ApplyResources(this.label30, "label30");
|
||||
this.label30.Name = "label30";
|
||||
//
|
||||
// apkDlLinkBtn
|
||||
//
|
||||
resources.ApplyResources(this.apkDlLinkBtn, "apkDlLinkBtn");
|
||||
this.apkDlLinkBtn.Name = "apkDlLinkBtn";
|
||||
this.apkDlLinkBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// apkSosLinkBtn
|
||||
//
|
||||
resources.ApplyResources(this.apkSosLinkBtn, "apkSosLinkBtn");
|
||||
this.apkSosLinkBtn.Name = "apkSosLinkBtn";
|
||||
this.apkSosLinkBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// apkMirrorLinkBtn
|
||||
//
|
||||
resources.ApplyResources(this.apkMirrorLinkBtn, "apkMirrorLinkBtn");
|
||||
@@ -707,12 +754,6 @@
|
||||
this.densityTxtBox.Name = "densityTxtBox";
|
||||
this.densityTxtBox.ReadOnly = true;
|
||||
//
|
||||
// apkAioLinkBtn
|
||||
//
|
||||
resources.ApplyResources(this.apkAioLinkBtn, "apkAioLinkBtn");
|
||||
this.apkAioLinkBtn.Name = "apkAioLinkBtn";
|
||||
this.apkAioLinkBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// packNameTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.packNameTxtBox, "packNameTxtBox");
|
||||
@@ -787,6 +828,7 @@
|
||||
resources.ApplyResources(this.apkIconPicBox, "apkIconPicBox");
|
||||
this.apkIconPicBox.Name = "apkIconPicBox";
|
||||
this.apkIconPicBox.TabStop = false;
|
||||
this.apkIconPicBox.Click += new System.EventHandler(this.apkIconPicBox_Click);
|
||||
//
|
||||
// label11
|
||||
//
|
||||
@@ -829,8 +871,9 @@
|
||||
//
|
||||
// groupBox_DECODE_Options
|
||||
//
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.decJobsLvlUpDown);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox3);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox7);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_UseApkEditorMerge);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.decApiLvlUpDown);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.decSetApiLvlChkBox);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_FixError);
|
||||
@@ -851,6 +894,26 @@
|
||||
this.groupBox_DECODE_Options.Name = "groupBox_DECODE_Options";
|
||||
this.groupBox_DECODE_Options.TabStop = false;
|
||||
//
|
||||
// decJobsLvlUpDown
|
||||
//
|
||||
this.decJobsLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Decode_Jobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.decJobsLvlUpDown, "decJobsLvlUpDown");
|
||||
this.decJobsLvlUpDown.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.decJobsLvlUpDown.Name = "decJobsLvlUpDown";
|
||||
this.decJobsLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Decode_Jobs;
|
||||
//
|
||||
// checkBox3
|
||||
//
|
||||
resources.ApplyResources(this.checkBox3, "checkBox3");
|
||||
this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_SetJobs;
|
||||
this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_SetJobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox3.Name = "checkBox3";
|
||||
this.checkBox3.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox7
|
||||
//
|
||||
resources.ApplyResources(this.checkBox7, "checkBox7");
|
||||
@@ -859,15 +922,6 @@
|
||||
this.checkBox7.Name = "checkBox7";
|
||||
this.checkBox7.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox_DECODE_UseApkEditorMerge
|
||||
//
|
||||
resources.ApplyResources(this.checkBox_DECODE_UseApkEditorMerge, "checkBox_DECODE_UseApkEditorMerge");
|
||||
this.checkBox_DECODE_UseApkEditorMerge.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_UseApkEditorMergeApk;
|
||||
this.checkBox_DECODE_UseApkEditorMerge.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBox_DECODE_UseApkEditorMerge.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_UseApkEditorMergeApk", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox_DECODE_UseApkEditorMerge.Name = "checkBox_DECODE_UseApkEditorMerge";
|
||||
this.checkBox_DECODE_UseApkEditorMerge.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// decApiLvlUpDown
|
||||
//
|
||||
this.decApiLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Decode_ApiLevel", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
@@ -905,18 +959,18 @@
|
||||
//
|
||||
// textBox_DECODE_FrameDir
|
||||
//
|
||||
resources.ApplyResources(this.textBox_DECODE_FrameDir, "textBox_DECODE_FrameDir");
|
||||
this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_DECODE_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseFramework;
|
||||
resources.ApplyResources(this.textBox_DECODE_FrameDir, "textBox_DECODE_FrameDir");
|
||||
this.textBox_DECODE_FrameDir.Name = "textBox_DECODE_FrameDir";
|
||||
this.textBox_DECODE_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir;
|
||||
//
|
||||
// button_DECODE_BrowseOutputDirectory
|
||||
//
|
||||
resources.ApplyResources(this.button_DECODE_BrowseOutputDirectory, "button_DECODE_BrowseOutputDirectory");
|
||||
this.button_DECODE_BrowseOutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_DECODE_BrowseOutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseOutputDir;
|
||||
resources.ApplyResources(this.button_DECODE_BrowseOutputDirectory, "button_DECODE_BrowseOutputDirectory");
|
||||
this.button_DECODE_BrowseOutputDirectory.Name = "button_DECODE_BrowseOutputDirectory";
|
||||
this.button_DECODE_BrowseOutputDirectory.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -930,9 +984,9 @@
|
||||
//
|
||||
// button_DECODE_BrowseFrameDir
|
||||
//
|
||||
resources.ApplyResources(this.button_DECODE_BrowseFrameDir, "button_DECODE_BrowseFrameDir");
|
||||
this.button_DECODE_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_DECODE_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseFramework;
|
||||
resources.ApplyResources(this.button_DECODE_BrowseFrameDir, "button_DECODE_BrowseFrameDir");
|
||||
this.button_DECODE_BrowseFrameDir.Name = "button_DECODE_BrowseFrameDir";
|
||||
this.button_DECODE_BrowseFrameDir.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -954,10 +1008,10 @@
|
||||
//
|
||||
// textBox_DECODE_OutputDirectory
|
||||
//
|
||||
resources.ApplyResources(this.textBox_DECODE_OutputDirectory, "textBox_DECODE_OutputDirectory");
|
||||
this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Decode_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_DECODE_OutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseOutputDir;
|
||||
resources.ApplyResources(this.textBox_DECODE_OutputDirectory, "textBox_DECODE_OutputDirectory");
|
||||
this.textBox_DECODE_OutputDirectory.Name = "textBox_DECODE_OutputDirectory";
|
||||
this.textBox_DECODE_OutputDirectory.Text = global::APKToolGUI.Properties.Settings.Default.Decode_OutputDir;
|
||||
//
|
||||
@@ -1011,6 +1065,8 @@
|
||||
//
|
||||
// groupBox_BUILD_Options
|
||||
//
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.comJobsLvlUpDown);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.checkBox4);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_NetSecConf);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.useAapt2ChkBox);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.buildApiLvlUpDown);
|
||||
@@ -1034,6 +1090,26 @@
|
||||
this.groupBox_BUILD_Options.Name = "groupBox_BUILD_Options";
|
||||
this.groupBox_BUILD_Options.TabStop = false;
|
||||
//
|
||||
// comJobsLvlUpDown
|
||||
//
|
||||
this.comJobsLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Build_Jobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.comJobsLvlUpDown, "comJobsLvlUpDown");
|
||||
this.comJobsLvlUpDown.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.comJobsLvlUpDown.Name = "comJobsLvlUpDown";
|
||||
this.comJobsLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Build_Jobs;
|
||||
//
|
||||
// checkBox4
|
||||
//
|
||||
resources.ApplyResources(this.checkBox4, "checkBox4");
|
||||
this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.Build_SetJobs;
|
||||
this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_SetJobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox4.Name = "checkBox4";
|
||||
this.checkBox4.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox_BUILD_NetSecConf
|
||||
//
|
||||
resources.ApplyResources(this.checkBox_BUILD_NetSecConf, "checkBox_BUILD_NetSecConf");
|
||||
@@ -1103,9 +1179,9 @@
|
||||
//
|
||||
// button_BUILD_BrowseOutputAppPath
|
||||
//
|
||||
resources.ApplyResources(this.button_BUILD_BrowseOutputAppPath, "button_BUILD_BrowseOutputAppPath");
|
||||
this.button_BUILD_BrowseOutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_BUILD_BrowseOutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath;
|
||||
resources.ApplyResources(this.button_BUILD_BrowseOutputAppPath, "button_BUILD_BrowseOutputAppPath");
|
||||
this.button_BUILD_BrowseOutputAppPath.Name = "button_BUILD_BrowseOutputAppPath";
|
||||
this.button_BUILD_BrowseOutputAppPath.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -1120,17 +1196,17 @@
|
||||
//
|
||||
// button_BUILD_BrowseFrameDir
|
||||
//
|
||||
resources.ApplyResources(this.button_BUILD_BrowseFrameDir, "button_BUILD_BrowseFrameDir");
|
||||
this.button_BUILD_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_BUILD_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseFramework;
|
||||
resources.ApplyResources(this.button_BUILD_BrowseFrameDir, "button_BUILD_BrowseFrameDir");
|
||||
this.button_BUILD_BrowseFrameDir.Name = "button_BUILD_BrowseFrameDir";
|
||||
this.button_BUILD_BrowseFrameDir.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// button_BUILD_BrowseAaptPath
|
||||
//
|
||||
resources.ApplyResources(this.button_BUILD_BrowseAaptPath, "button_BUILD_BrowseAaptPath");
|
||||
this.button_BUILD_BrowseAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_BUILD_BrowseAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt;
|
||||
resources.ApplyResources(this.button_BUILD_BrowseAaptPath, "button_BUILD_BrowseAaptPath");
|
||||
this.button_BUILD_BrowseAaptPath.Name = "button_BUILD_BrowseAaptPath";
|
||||
this.button_BUILD_BrowseAaptPath.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -1153,10 +1229,10 @@
|
||||
//
|
||||
// textBox_BUILD_OutputAppPath
|
||||
//
|
||||
resources.ApplyResources(this.textBox_BUILD_OutputAppPath, "textBox_BUILD_OutputAppPath");
|
||||
this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Build_OutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_OutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath;
|
||||
resources.ApplyResources(this.textBox_BUILD_OutputAppPath, "textBox_BUILD_OutputAppPath");
|
||||
this.textBox_BUILD_OutputAppPath.Name = "textBox_BUILD_OutputAppPath";
|
||||
this.textBox_BUILD_OutputAppPath.Text = global::APKToolGUI.Properties.Settings.Default.Build_OutputAppPath;
|
||||
//
|
||||
@@ -1170,19 +1246,19 @@
|
||||
//
|
||||
// textBox_BUILD_AaptPath
|
||||
//
|
||||
resources.ApplyResources(this.textBox_BUILD_AaptPath, "textBox_BUILD_AaptPath");
|
||||
this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Build_AaptPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_AaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt;
|
||||
resources.ApplyResources(this.textBox_BUILD_AaptPath, "textBox_BUILD_AaptPath");
|
||||
this.textBox_BUILD_AaptPath.Name = "textBox_BUILD_AaptPath";
|
||||
this.textBox_BUILD_AaptPath.Text = global::APKToolGUI.Properties.Settings.Default.Build_AaptPath;
|
||||
//
|
||||
// textBox_BUILD_FrameDir
|
||||
//
|
||||
resources.ApplyResources(this.textBox_BUILD_FrameDir, "textBox_BUILD_FrameDir");
|
||||
this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_BUILD_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseFramework;
|
||||
resources.ApplyResources(this.textBox_BUILD_FrameDir, "textBox_BUILD_FrameDir");
|
||||
this.textBox_BUILD_FrameDir.Name = "textBox_BUILD_FrameDir";
|
||||
this.textBox_BUILD_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir;
|
||||
//
|
||||
@@ -1327,8 +1403,8 @@
|
||||
//
|
||||
// textBox3
|
||||
//
|
||||
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystorePassword", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox3, "textBox3");
|
||||
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystorePassword", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox3.Name = "textBox3";
|
||||
this.textBox3.Text = global::APKToolGUI.Properties.Settings.Default.Sign_KeystorePassword;
|
||||
this.textBox3.UseSystemPasswordChar = true;
|
||||
@@ -1341,8 +1417,8 @@
|
||||
//
|
||||
// aliasTxtBox
|
||||
//
|
||||
this.aliasTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_Alias", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.aliasTxtBox, "aliasTxtBox");
|
||||
this.aliasTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_Alias", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.aliasTxtBox.Name = "aliasTxtBox";
|
||||
this.aliasTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Sign_Alias;
|
||||
//
|
||||
@@ -1357,14 +1433,14 @@
|
||||
//
|
||||
// label22
|
||||
//
|
||||
resources.ApplyResources(this.label22, "label22");
|
||||
this.label22.ForeColor = System.Drawing.Color.Maroon;
|
||||
resources.ApplyResources(this.label22, "label22");
|
||||
this.label22.Name = "label22";
|
||||
//
|
||||
// keyStoreFileTxtBox
|
||||
//
|
||||
this.keyStoreFileTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystoreFilePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.keyStoreFileTxtBox, "keyStoreFileTxtBox");
|
||||
this.keyStoreFileTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystoreFilePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.keyStoreFileTxtBox.Name = "keyStoreFileTxtBox";
|
||||
this.keyStoreFileTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Sign_KeystoreFilePath;
|
||||
//
|
||||
@@ -1412,8 +1488,8 @@
|
||||
//
|
||||
// textBox_SIGN_OutputFile
|
||||
//
|
||||
this.textBox_SIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox_SIGN_OutputFile, "textBox_SIGN_OutputFile");
|
||||
this.textBox_SIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_SIGN_OutputFile.Name = "textBox_SIGN_OutputFile";
|
||||
this.textBox_SIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.Sign_OutputDir;
|
||||
//
|
||||
@@ -1431,15 +1507,15 @@
|
||||
//
|
||||
// textBox_SIGN_PublicKey
|
||||
//
|
||||
this.textBox_SIGN_PublicKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PublicKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox_SIGN_PublicKey, "textBox_SIGN_PublicKey");
|
||||
this.textBox_SIGN_PublicKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PublicKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_SIGN_PublicKey.Name = "textBox_SIGN_PublicKey";
|
||||
this.textBox_SIGN_PublicKey.Text = global::APKToolGUI.Properties.Settings.Default.Sign_PublicKey;
|
||||
//
|
||||
// textBox_SIGN_PrivateKey
|
||||
//
|
||||
this.textBox_SIGN_PrivateKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PrivateKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox_SIGN_PrivateKey, "textBox_SIGN_PrivateKey");
|
||||
this.textBox_SIGN_PrivateKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PrivateKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_SIGN_PrivateKey.Name = "textBox_SIGN_PrivateKey";
|
||||
this.textBox_SIGN_PrivateKey.Text = global::APKToolGUI.Properties.Settings.Default.Sign_PrivateKey;
|
||||
//
|
||||
@@ -1452,7 +1528,6 @@
|
||||
//
|
||||
// groupBox_ZIPALIGN_Options
|
||||
//
|
||||
resources.ApplyResources(this.groupBox_ZIPALIGN_Options, "groupBox_ZIPALIGN_Options");
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.zipalignOutputDirChkBox);
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.signAfterZipalignChkBox);
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_Recompress);
|
||||
@@ -1463,6 +1538,7 @@
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_VerboseOutput);
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.numericUpDown_ZIPALIGN_AlignmentBytes);
|
||||
this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_OverwriteOutputFile);
|
||||
resources.ApplyResources(this.groupBox_ZIPALIGN_Options, "groupBox_ZIPALIGN_Options");
|
||||
this.groupBox_ZIPALIGN_Options.Name = "groupBox_ZIPALIGN_Options";
|
||||
this.groupBox_ZIPALIGN_Options.TabStop = false;
|
||||
//
|
||||
@@ -1512,8 +1588,8 @@
|
||||
//
|
||||
// textBox_ZIPALIGN_OutputFile
|
||||
//
|
||||
this.textBox_ZIPALIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Zipalign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox_ZIPALIGN_OutputFile, "textBox_ZIPALIGN_OutputFile");
|
||||
this.textBox_ZIPALIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Zipalign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_ZIPALIGN_OutputFile.Name = "textBox_ZIPALIGN_OutputFile";
|
||||
this.textBox_ZIPALIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.Zipalign_OutputDir;
|
||||
//
|
||||
@@ -1585,7 +1661,6 @@
|
||||
//
|
||||
// groupBox_IF_Options
|
||||
//
|
||||
resources.ApplyResources(this.groupBox_IF_Options, "groupBox_IF_Options");
|
||||
this.groupBox_IF_Options.Controls.Add(this.checkBox_IF_Tag);
|
||||
this.groupBox_IF_Options.Controls.Add(this.checkBox_IF_FramePath);
|
||||
this.groupBox_IF_Options.Controls.Add(this.textBox_IF_Tag);
|
||||
@@ -1594,6 +1669,7 @@
|
||||
this.groupBox_IF_Options.Controls.Add(this.button_IF_BrowseInputFramePath);
|
||||
this.groupBox_IF_Options.Controls.Add(this.textBox_IF_InputFramePath);
|
||||
this.groupBox_IF_Options.Controls.Add(this.textBox_IF_FrameDir);
|
||||
resources.ApplyResources(this.groupBox_IF_Options, "groupBox_IF_Options");
|
||||
this.groupBox_IF_Options.Name = "groupBox_IF_Options";
|
||||
this.groupBox_IF_Options.TabStop = false;
|
||||
//
|
||||
@@ -1615,10 +1691,10 @@
|
||||
//
|
||||
// textBox_IF_Tag
|
||||
//
|
||||
resources.ApplyResources(this.textBox_IF_Tag, "textBox_IF_Tag");
|
||||
this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_Tag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_UseTag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_IF_Tag.Enabled = global::APKToolGUI.Properties.Settings.Default.InstallFramework_UseTag;
|
||||
resources.ApplyResources(this.textBox_IF_Tag, "textBox_IF_Tag");
|
||||
this.textBox_IF_Tag.Name = "textBox_IF_Tag";
|
||||
this.textBox_IF_Tag.Text = global::APKToolGUI.Properties.Settings.Default.InstallFramework_Tag;
|
||||
//
|
||||
@@ -1630,9 +1706,9 @@
|
||||
//
|
||||
// button_IF_BrowseFrameDir
|
||||
//
|
||||
resources.ApplyResources(this.button_IF_BrowseFrameDir, "button_IF_BrowseFrameDir");
|
||||
this.button_IF_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Framework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.button_IF_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Framework_UseFrameDir;
|
||||
resources.ApplyResources(this.button_IF_BrowseFrameDir, "button_IF_BrowseFrameDir");
|
||||
this.button_IF_BrowseFrameDir.Name = "button_IF_BrowseFrameDir";
|
||||
this.button_IF_BrowseFrameDir.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -1651,10 +1727,10 @@
|
||||
//
|
||||
// textBox_IF_FrameDir
|
||||
//
|
||||
resources.ApplyResources(this.textBox_IF_FrameDir, "textBox_IF_FrameDir");
|
||||
this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Framework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox_IF_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Framework_UseFrameDir;
|
||||
resources.ApplyResources(this.textBox_IF_FrameDir, "textBox_IF_FrameDir");
|
||||
this.textBox_IF_FrameDir.Name = "textBox_IF_FrameDir";
|
||||
this.textBox_IF_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir;
|
||||
//
|
||||
@@ -1714,8 +1790,8 @@
|
||||
//
|
||||
// smaliBrowseOutputTxtBox
|
||||
//
|
||||
this.smaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Smali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.smaliBrowseOutputTxtBox, "smaliBrowseOutputTxtBox");
|
||||
this.smaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Smali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.smaliBrowseOutputTxtBox.Name = "smaliBrowseOutputTxtBox";
|
||||
this.smaliBrowseOutputTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Smali_OutputDir;
|
||||
//
|
||||
@@ -1759,8 +1835,8 @@
|
||||
//
|
||||
// baksmaliBrowseOutputTxtBox
|
||||
//
|
||||
this.baksmaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Baksmali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.baksmaliBrowseOutputTxtBox, "baksmaliBrowseOutputTxtBox");
|
||||
this.baksmaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Baksmali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.baksmaliBrowseOutputTxtBox.Name = "baksmaliBrowseOutputTxtBox";
|
||||
this.baksmaliBrowseOutputTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Baksmali_OutputDir;
|
||||
//
|
||||
@@ -1786,12 +1862,14 @@
|
||||
// tabPageAdb
|
||||
//
|
||||
this.tabPageAdb.AllowDrop = true;
|
||||
this.tabPageAdb.Controls.Add(this.overrideAbiComboBox);
|
||||
this.tabPageAdb.Controls.Add(this.selAdbDeviceLbl);
|
||||
this.tabPageAdb.Controls.Add(this.label33);
|
||||
this.tabPageAdb.Controls.Add(this.killAdbBtn);
|
||||
this.tabPageAdb.Controls.Add(this.installApkBtn);
|
||||
this.tabPageAdb.Controls.Add(this.refreshDevicesBtn);
|
||||
this.tabPageAdb.Controls.Add(this.selApkAdbBtn);
|
||||
this.tabPageAdb.Controls.Add(this.overrideAbiCheckBox);
|
||||
this.tabPageAdb.Controls.Add(this.setVendorChkBox);
|
||||
this.tabPageAdb.Controls.Add(this.apkPathAdbTxtBox);
|
||||
this.tabPageAdb.Controls.Add(this.label32);
|
||||
@@ -1800,6 +1878,18 @@
|
||||
this.tabPageAdb.Name = "tabPageAdb";
|
||||
this.tabPageAdb.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// overrideAbiComboBox
|
||||
//
|
||||
this.overrideAbiComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.overrideAbiComboBox.FormattingEnabled = true;
|
||||
this.overrideAbiComboBox.Items.AddRange(new object[] {
|
||||
resources.GetString("overrideAbiComboBox.Items"),
|
||||
resources.GetString("overrideAbiComboBox.Items1"),
|
||||
resources.GetString("overrideAbiComboBox.Items2"),
|
||||
resources.GetString("overrideAbiComboBox.Items3")});
|
||||
resources.ApplyResources(this.overrideAbiComboBox, "overrideAbiComboBox");
|
||||
this.overrideAbiComboBox.Name = "overrideAbiComboBox";
|
||||
//
|
||||
// selAdbDeviceLbl
|
||||
//
|
||||
this.selAdbDeviceLbl.ForeColor = System.Drawing.Color.ForestGreen;
|
||||
@@ -1835,6 +1925,14 @@
|
||||
this.selApkAdbBtn.Name = "selApkAdbBtn";
|
||||
this.selApkAdbBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// overrideAbiCheckBox
|
||||
//
|
||||
resources.ApplyResources(this.overrideAbiCheckBox, "overrideAbiCheckBox");
|
||||
this.overrideAbiCheckBox.Checked = global::APKToolGUI.Properties.Settings.Default.Adb_SetOverrideAbi;
|
||||
this.overrideAbiCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Adb_SetOverrideAbi", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.overrideAbiCheckBox.Name = "overrideAbiCheckBox";
|
||||
this.overrideAbiCheckBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// setVendorChkBox
|
||||
//
|
||||
resources.ApplyResources(this.setVendorChkBox, "setVendorChkBox");
|
||||
@@ -1845,8 +1943,8 @@
|
||||
//
|
||||
// apkPathAdbTxtBox
|
||||
//
|
||||
this.apkPathAdbTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Adb_SelectedApkPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.apkPathAdbTxtBox, "apkPathAdbTxtBox");
|
||||
this.apkPathAdbTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Adb_SelectedApkPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.apkPathAdbTxtBox.Name = "apkPathAdbTxtBox";
|
||||
this.apkPathAdbTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Adb_SelectedApkPath;
|
||||
//
|
||||
@@ -1857,8 +1955,8 @@
|
||||
//
|
||||
// devicesListBox
|
||||
//
|
||||
this.devicesListBox.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.devicesListBox, "devicesListBox");
|
||||
this.devicesListBox.FormattingEnabled = true;
|
||||
this.devicesListBox.Name = "devicesListBox";
|
||||
//
|
||||
// statusStrip1
|
||||
@@ -1929,6 +2027,7 @@
|
||||
this.menuStrip1.GripMargin = new System.Windows.Forms.Padding(2);
|
||||
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileToolStripMenuItem,
|
||||
this.settingsToolStripMenuItem1,
|
||||
this.helpToolStripMenuItem});
|
||||
resources.ApplyResources(this.menuStrip1, "menuStrip1");
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
@@ -1938,7 +2037,6 @@
|
||||
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.newInsToolStripMenuItem,
|
||||
this.saveLogToFileToolStripMenuItem,
|
||||
this.settingsToolStripMenuItem,
|
||||
this.toolStripMenuItem1,
|
||||
this.openTempFolderToolStripMenuItem,
|
||||
this.clearTempFolderToolStripMenuItem,
|
||||
@@ -1957,11 +2055,6 @@
|
||||
this.saveLogToFileToolStripMenuItem.Name = "saveLogToFileToolStripMenuItem";
|
||||
resources.ApplyResources(this.saveLogToFileToolStripMenuItem, "saveLogToFileToolStripMenuItem");
|
||||
//
|
||||
// settingsToolStripMenuItem
|
||||
//
|
||||
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
|
||||
resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem");
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
@@ -1988,6 +2081,26 @@
|
||||
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
||||
resources.ApplyResources(this.exitToolStripMenuItem, "exitToolStripMenuItem");
|
||||
//
|
||||
// settingsToolStripMenuItem1
|
||||
//
|
||||
this.settingsToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.useAPKEditorForDecompilingItem,
|
||||
this.settingsToolStripMenuItem});
|
||||
this.settingsToolStripMenuItem1.Name = "settingsToolStripMenuItem1";
|
||||
resources.ApplyResources(this.settingsToolStripMenuItem1, "settingsToolStripMenuItem1");
|
||||
//
|
||||
// useAPKEditorForDecompilingItem
|
||||
//
|
||||
this.useAPKEditorForDecompilingItem.Checked = global::APKToolGUI.Properties.Settings.Default.UseApkeditor;
|
||||
this.useAPKEditorForDecompilingItem.CheckOnClick = true;
|
||||
this.useAPKEditorForDecompilingItem.Name = "useAPKEditorForDecompilingItem";
|
||||
resources.ApplyResources(this.useAPKEditorForDecompilingItem, "useAPKEditorForDecompilingItem");
|
||||
//
|
||||
// settingsToolStripMenuItem
|
||||
//
|
||||
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
|
||||
resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem");
|
||||
//
|
||||
// helpToolStripMenuItem
|
||||
//
|
||||
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
@@ -2030,23 +2143,35 @@
|
||||
this.toolTip1.InitialDelay = 500;
|
||||
this.toolTip1.ReshowDelay = 100;
|
||||
//
|
||||
// splitContainer1
|
||||
//
|
||||
resources.ApplyResources(this.splitContainer1, "splitContainer1");
|
||||
this.splitContainer1.Name = "splitContainer1";
|
||||
//
|
||||
// splitContainer1.Panel1
|
||||
//
|
||||
this.splitContainer1.Panel1.Controls.Add(this.tabControlMain);
|
||||
//
|
||||
// splitContainer1.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.logTxtBox);
|
||||
//
|
||||
// FormMain
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.logTxtBox);
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.Controls.Add(this.tabControlMain);
|
||||
this.DoubleBuffered = true;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "FormMain";
|
||||
this.Activated += new System.EventHandler(this.FormMain_Activated);
|
||||
this.Shown += new System.EventHandler(this.FormMain_Shown);
|
||||
this.tabControlMain.ResumeLayout(false);
|
||||
this.tabPageMain.ResumeLayout(false);
|
||||
this.mergePanel.ResumeLayout(false);
|
||||
this.mergePanel.PerformLayout();
|
||||
this.signPanel.ResumeLayout(false);
|
||||
this.signPanel.PerformLayout();
|
||||
this.zipalignPanel.ResumeLayout(false);
|
||||
@@ -2064,10 +2189,12 @@
|
||||
this.tabPageDecode.ResumeLayout(false);
|
||||
this.groupBox_DECODE_Options.ResumeLayout(false);
|
||||
this.groupBox_DECODE_Options.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.decJobsLvlUpDown)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.decApiLvlUpDown)).EndInit();
|
||||
this.tabPageBuild.ResumeLayout(false);
|
||||
this.groupBox_BUILD_Options.ResumeLayout(false);
|
||||
this.groupBox_BUILD_Options.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.comJobsLvlUpDown)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.buildApiLvlUpDown)).EndInit();
|
||||
this.tabPageSign.ResumeLayout(false);
|
||||
this.groupBox_SIGN_Options.ResumeLayout(false);
|
||||
@@ -2093,6 +2220,10 @@
|
||||
this.contextMenuStripLog.ResumeLayout(false);
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||
this.splitContainer1.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
|
||||
this.splitContainer1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -2269,7 +2400,6 @@
|
||||
internal System.Windows.Forms.Button baksmaliBrowseOutputBtn;
|
||||
internal System.Windows.Forms.TextBox baksmaliBrowseOutputTxtBox;
|
||||
internal System.Windows.Forms.Button openApktoolYmlBtn;
|
||||
internal System.Windows.Forms.Button apkAioLinkBtn;
|
||||
private System.Windows.Forms.Label label29;
|
||||
private System.Windows.Forms.Label label28;
|
||||
internal System.Windows.Forms.Button signApkOpenDirBtn;
|
||||
@@ -2281,8 +2411,6 @@
|
||||
private System.Windows.Forms.RichTextBox fullInfoTextBox;
|
||||
internal System.Windows.Forms.TabPage basicInfoTabPage;
|
||||
internal System.Windows.Forms.Button apkMirrorLinkBtn;
|
||||
internal System.Windows.Forms.Button apkDlLinkBtn;
|
||||
internal System.Windows.Forms.Button apkSosLinkBtn;
|
||||
internal System.Windows.Forms.Button apkSupportLinkBtn;
|
||||
internal System.Windows.Forms.Button apkGkLinkBtn;
|
||||
internal System.Windows.Forms.TextBox archSdkTxtBox;
|
||||
@@ -2295,7 +2423,6 @@
|
||||
internal System.Windows.Forms.Label label31;
|
||||
internal System.Windows.Forms.RichTextBox logTxtBox;
|
||||
internal System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
|
||||
private System.Windows.Forms.CheckBox checkBox_DECODE_UseApkEditorMerge;
|
||||
private System.Windows.Forms.ToolTip toolTip1;
|
||||
internal System.Windows.Forms.Button selApkAdbBtn;
|
||||
private System.Windows.Forms.Label label32;
|
||||
@@ -2310,7 +2437,6 @@
|
||||
internal System.Windows.Forms.Label selAdbDeviceLbl;
|
||||
private System.Windows.Forms.CheckBox checkBox2;
|
||||
internal System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem apktoolIssuesToolStripMenuItem;
|
||||
@@ -2323,9 +2449,25 @@
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearTempFolderToolStripMenuItem;
|
||||
internal System.Windows.Forms.CheckBox checkBox_BUILD_NetSecConf;
|
||||
internal System.Windows.Forms.Label label34;
|
||||
private System.Windows.Forms.CheckBox checkBox7;
|
||||
internal System.Windows.Forms.ToolStripMenuItem newInsToolStripMenuItem;
|
||||
internal System.Windows.Forms.Panel mergePanel;
|
||||
internal System.Windows.Forms.Label splitApkTxt;
|
||||
internal System.Windows.Forms.TextBox splitApkPathTxtBox;
|
||||
internal System.Windows.Forms.Button selSplitApkBtn;
|
||||
internal System.Windows.Forms.Button mergeApkBtn;
|
||||
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem1;
|
||||
internal System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem useAPKEditorForDecompilingItem;
|
||||
internal System.Windows.Forms.CheckBox overrideAbiCheckBox;
|
||||
internal System.Windows.Forms.ComboBox overrideAbiComboBox;
|
||||
internal System.Windows.Forms.RichTextBox sigTxtBox;
|
||||
internal System.Windows.Forms.Label label5;
|
||||
internal System.Windows.Forms.NumericUpDown decJobsLvlUpDown;
|
||||
internal System.Windows.Forms.CheckBox checkBox3;
|
||||
internal System.Windows.Forms.NumericUpDown comJobsLvlUpDown;
|
||||
internal System.Windows.Forms.CheckBox checkBox4;
|
||||
private System.Windows.Forms.SplitContainer splitContainer1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+497
-434
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+4156
-1596
File diff suppressed because it is too large
Load Diff
@@ -275,4 +275,79 @@
|
||||
<data name="label_SIGN_PublicKey.Text" xml:space="preserve">
|
||||
<value>Открытый ключ</value>
|
||||
</data>
|
||||
<data name="tabPageMain.Text" xml:space="preserve">
|
||||
<value>Главная</value>
|
||||
</data>
|
||||
<data name="tabPageApkInfo.Text" xml:space="preserve">
|
||||
<value>Инфо APK</value>
|
||||
</data>
|
||||
<data name="checkBox4.Text" xml:space="preserve">
|
||||
<value>Количество потоков:</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NetSecConf.Text" xml:space="preserve">
|
||||
<value>Добавить файл конфигурации сетевой безопасности (Network Security Configuration)</value>
|
||||
</data>
|
||||
<data name="useAapt2ChkBox.Text" xml:space="preserve">
|
||||
<value>Использовать aapt2 (для версий apktool < 2.11.1)</value>
|
||||
</data>
|
||||
<data name="buildSetApiLvlChkBox.Text" xml:space="preserve">
|
||||
<value>Установить уровень API (напр. 14 для ICS)</value>
|
||||
</data>
|
||||
<data name="createUnsignApkChkBox.Text" xml:space="preserve">
|
||||
<value>Создать неподписанный APK с оригинальной подписью (Core Patch)</value>
|
||||
</data>
|
||||
<data name="signAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>Подписать после сборки / выравнивания</value>
|
||||
</data>
|
||||
<data name="zipalignAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>Выровнять после сборки</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NoCrunch.Text" xml:space="preserve">
|
||||
<value>Отключить сжатие ресурсов</value>
|
||||
</data>
|
||||
<data name="tabPageBaksmali.Text" xml:space="preserve">
|
||||
<value>Baksmali / Smali</value>
|
||||
</data>
|
||||
<data name="tabPageAdb.Text" xml:space="preserve">
|
||||
<value>ADB</value>
|
||||
</data>
|
||||
<data name="mergeApkBtn.Text" xml:space="preserve">
|
||||
<value>Слияние APK</value>
|
||||
</data>
|
||||
<data name="selSplitApkBtn.Text" xml:space="preserve">
|
||||
<value>Выбрать Split APK</value>
|
||||
</data>
|
||||
<data name="baksmaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>Свой каталог вывода:</value>
|
||||
</data>
|
||||
<data name="smaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>Свой каталог вывода:</value>
|
||||
</data>
|
||||
<data name="killAdbBtn.Text" xml:space="preserve">
|
||||
<value>Перезапустить ADB</value>
|
||||
</data>
|
||||
<data name="installApkBtn.Text" xml:space="preserve">
|
||||
<value>Установить APK</value>
|
||||
</data>
|
||||
<data name="refreshDevicesBtn.Text" xml:space="preserve">
|
||||
<value>Обновить список</value>
|
||||
</data>
|
||||
<data name="selApkAdbBtn.Text" xml:space="preserve">
|
||||
<value>Выбрать APK</value>
|
||||
</data>
|
||||
<data name="overrideAbiCheckBox.Text" xml:space="preserve">
|
||||
<value>Переопределить ABI:</value>
|
||||
</data>
|
||||
<data name="bakSmaliGroupBox.Text" xml:space="preserve">
|
||||
<value>Baksmali (DEX -> Smali)</value>
|
||||
</data>
|
||||
<data name="smaliGroupBox.Text" xml:space="preserve">
|
||||
<value>Smali (Smali -> DEX)</value>
|
||||
</data>
|
||||
<data name="decSmaliBtn.Text" xml:space="preserve">
|
||||
<value>Дизассемблировать</value>
|
||||
</data>
|
||||
<data name="comSmaliBtn.Text" xml:space="preserve">
|
||||
<value>Ассемблировать</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,549 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="splitApkTxt.Text" xml:space="preserve">
|
||||
<value>Hợp nhất các tệp APK bị chia nhỏ thành một tệp APK duy nhất:</value>
|
||||
</data>
|
||||
<data name="mergeApkBtn.Text" xml:space="preserve">
|
||||
<value>Hợp nhất</value>
|
||||
</data>
|
||||
<data name="comApkOpenDir.Text" xml:space="preserve">
|
||||
<value>Thư mục APK đã biên dịch</value>
|
||||
</data>
|
||||
<data name="decOutOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra dịch ngược</value>
|
||||
</data>
|
||||
<data name="signApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Thư mục APK đã ký</value>
|
||||
</data>
|
||||
<data name="alignApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Thư mục APK đã Zipalign</value>
|
||||
</data>
|
||||
<data name="decApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Thư mục APK đã dịch ngược</value>
|
||||
</data>
|
||||
<data name="compileOutputOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra biên dịch</value>
|
||||
</data>
|
||||
<data name="button_OpenMainActivity.Text" xml:space="preserve">
|
||||
<value>Smali của Activity khởi động</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Ký APK:</value>
|
||||
</data>
|
||||
<data name="button_SIGN_Sign.Text" xml:space="preserve">
|
||||
<value>Ký</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Zipalign tệp APK:</value>
|
||||
</data>
|
||||
<data name="button_ZIPALIGN_Align.Text" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Thư mục APK đã dịch ngược:</value>
|
||||
</data>
|
||||
<data name="button_BUILD_Build.Text" xml:space="preserve">
|
||||
<value>Biên dịch</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Tệp APK/XAPK/APKS/ZIP/APKM:</value>
|
||||
</data>
|
||||
<data name="button_DECODE_Decode.Text" xml:space="preserve">
|
||||
<value>Dịch ngược</value>
|
||||
</data>
|
||||
<data name="tabPageMain.Text" xml:space="preserve">
|
||||
<value>Trang chính</value>
|
||||
</data>
|
||||
<data name="label31.Text" xml:space="preserve">
|
||||
<value>Activity khởi động:</value>
|
||||
</data>
|
||||
<data name="label30.Text" xml:space="preserve">
|
||||
<value>Kiến trúc:</value>
|
||||
</data>
|
||||
<data name="label17.Text" xml:space="preserve">
|
||||
<value>Tệp:</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>Bản địa hóa:</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>Quyền:</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>Mật độ (DPI):</value>
|
||||
</data>
|
||||
<data name="label19.Text" xml:space="preserve">
|
||||
<value>Liên kết cửa hàng:</value>
|
||||
</data>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>Tên ứng dụng:</value>
|
||||
</data>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>Tên gói ứng dụng:</value>
|
||||
</data>
|
||||
<data name="label8.Text" xml:space="preserve">
|
||||
<value>Phiên bản:</value>
|
||||
</data>
|
||||
<data name="label11.Text" xml:space="preserve">
|
||||
<value>SDK tương thích tối thiểu:</value>
|
||||
</data>
|
||||
<data name="label10.Text" xml:space="preserve">
|
||||
<value>Tên mã:</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>Kích thước màn hình</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>SDK mục tiêu:</value>
|
||||
</data>
|
||||
<data name="basicInfoTabPage.Text" xml:space="preserve">
|
||||
<value>Thông tin cơ bản</value>
|
||||
</data>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value>Thông tin đầy đủ</value>
|
||||
</data>
|
||||
<data name="tabPageApkInfo.Text" xml:space="preserve">
|
||||
<value>Thông tin APK</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Không phân tích thông tin APK khi chọn APK để dịch ngược</value>
|
||||
</data>
|
||||
<data name="decSetApiLvlChkBox.Text" xml:space="preserve">
|
||||
<value>Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS.</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_FixError.Text" xml:space="preserve">
|
||||
<value>Sửa lỗi ApkTool sau khi dịch ngược</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_FixError.ToolTip" xml:space="preserve">
|
||||
<value>Sẽ xóa extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY, các thuộc tính liên quan đến split và đặt sparseresource thành false</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OnlyMainClasses.Text" xml:space="preserve">
|
||||
<value>Chỉ dịch ngược các tệp dex chính trong thư mục gốc (classes[0-9]*.dex).</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OnlyMainClasses.ToolTip" xml:space="preserve">
|
||||
<value>Sửa lỗi ApkTool bất thường</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_UseFramework.Text" xml:space="preserve">
|
||||
<value>Sử dụng vị trí tệp framework:</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_MatchOriginal.Text" xml:space="preserve">
|
||||
<value>Giữ các tệp gần với bản gốc nhất có thể, ngăn việc xây dựng lại</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OutputDirectory.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra:</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_KeepBrokenRes.Text" xml:space="preserve">
|
||||
<value>Giữ lại tài nguyên bị hỏng</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoSrc.Text" xml:space="preserve">
|
||||
<value>Không dịch ngược mã nguồn</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_Force.Text" xml:space="preserve">
|
||||
<value>Buộc xóa thư mục đích</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoRes.Text" xml:space="preserve">
|
||||
<value>Không dịch ngược tài nguyên (resources)</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoDebugInfo.Text" xml:space="preserve">
|
||||
<value>Không xuất thông tin gỡ lỗi (.local, .param, .line, v.v.)</value>
|
||||
</data>
|
||||
<data name="groupBox_DECODE_Options.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="tabPageDecode.Text" xml:space="preserve">
|
||||
<value>Dịch ngược</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NetSecConf.Text" xml:space="preserve">
|
||||
<value>Thêm cấu hình bảo mật mạng chung vào APK đầu ra</value>
|
||||
</data>
|
||||
<data name="useAapt2ChkBox.Text" xml:space="preserve">
|
||||
<value>Sử dụng aapt2 (Nâng cấp apktool để sử dụng tệp nhị phân aapt2 thử nghiệm)</value>
|
||||
</data>
|
||||
<data name="buildSetApiLvlChkBox.Text" xml:space="preserve">
|
||||
<value>Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS.</value>
|
||||
</data>
|
||||
<data name="createUnsignApkChkBox.Text" xml:space="preserve">
|
||||
<value>Tạo APK chưa ký với chữ ký gốc sau khi biên dịch</value>
|
||||
</data>
|
||||
<data name="createUnsignApkChkBox.ToolTip" xml:space="preserve">
|
||||
<value>Chỉ tương thích với các mô-đun vá lõi, yêu cầu thiết bị đã root.</value>
|
||||
</data>
|
||||
<data name="signAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>Ký sau khi Biên dịch/Zipalign</value>
|
||||
</data>
|
||||
<data name="zipalignAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>Zipalign sau khi biên dịch</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NoCrunch.Text" xml:space="preserve">
|
||||
<value>Vô hiệu hóa việc xử lý các tệp tài nguyên trong bước biên dịch</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_ForceAll.Text" xml:space="preserve">
|
||||
<value>Bỏ qua kiểm tra thay đổi và biên dịch tất cả các tệp</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_OutputAppPath.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra APK</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_OutputAppPath.ToolTip" xml:space="preserve">
|
||||
<value>Thư mục đầu ra đã biên dịch cũng sẽ được sử dụng cho Zipalign và ký</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_CopyOriginal.Text" xml:space="preserve">
|
||||
<value>Sao chép thư mục AndroidManifest.xml và META-INF gốc</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_UseAapt.Text" xml:space="preserve">
|
||||
<value>Sử dụng vị trí tệp aapt.exe:</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_UseFramework.Text" xml:space="preserve">
|
||||
<value>Sử dụng vị trí tệp framework:</value>
|
||||
</data>
|
||||
<data name="groupBox_BUILD_Options.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="tabPageBuild.Text" xml:space="preserve">
|
||||
<value>Biên dịch</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>Cài đặt APK sau khi ký (đảm bảo đã chọn thiết bị trong tùy chọn ADB trước)</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>Ghi đè tệp đầu vào</value>
|
||||
</data>
|
||||
<data name="autoDelIdsigChkBox.Text" xml:space="preserve">
|
||||
<value>Tự động xóa tệp idsig</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items" xml:space="preserve">
|
||||
<value>Mặc định</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items1" xml:space="preserve">
|
||||
<value>Bật</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items2" xml:space="preserve">
|
||||
<value>Tắt</value>
|
||||
</data>
|
||||
<data name="label27.Text" xml:space="preserve">
|
||||
<value>Lược đồ ký v4:</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items" xml:space="preserve">
|
||||
<value>Mặc định</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items1" xml:space="preserve">
|
||||
<value>Bật</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items2" xml:space="preserve">
|
||||
<value>Tắt</value>
|
||||
</data>
|
||||
<data name="label26.Text" xml:space="preserve">
|
||||
<value>Lược đồ ký v3:</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items" xml:space="preserve">
|
||||
<value>Mặc định</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items1" xml:space="preserve">
|
||||
<value>Bật</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items2" xml:space="preserve">
|
||||
<value>Tắt</value>
|
||||
</data>
|
||||
<data name="label25.Text" xml:space="preserve">
|
||||
<value>Lược đồ ký v2:</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items" xml:space="preserve">
|
||||
<value>Mặc định</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items1" xml:space="preserve">
|
||||
<value>Bật</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items2" xml:space="preserve">
|
||||
<value>Tắt</value>
|
||||
</data>
|
||||
<data name="label24.Text" xml:space="preserve">
|
||||
<value>Lược đồ ký v1:</value>
|
||||
</data>
|
||||
<data name="useAliasChkBox.Text" xml:space="preserve">
|
||||
<value>Tên bí danh (Alias)</value>
|
||||
</data>
|
||||
<data name="label22.Text" xml:space="preserve">
|
||||
<value>Rất khuyến khích bạn sử dụng khóa của riêng mình, được tạo bằng Android Studio hoặc các công cụ khác</value>
|
||||
</data>
|
||||
<data name="label21.Text" xml:space="preserve">
|
||||
<value>Mật khẩu:</value>
|
||||
</data>
|
||||
<data name="label20.Text" xml:space="preserve">
|
||||
<value>Tệp keystore/jks:</value>
|
||||
</data>
|
||||
<data name="useKeyStoreChkBox.Text" xml:space="preserve">
|
||||
<value>Sử dụng keystore</value>
|
||||
</data>
|
||||
<data name="useSigningOutputDir.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra APK:</value>
|
||||
</data>
|
||||
<data name="label_SIGN_PrivateKey.Text" xml:space="preserve">
|
||||
<value>Khóa riêng:</value>
|
||||
</data>
|
||||
<data name="label_SIGN_PublicKey.Text" xml:space="preserve">
|
||||
<value>Khóa công khai:</value>
|
||||
</data>
|
||||
<data name="groupBox_SIGN_Options.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="tabPageSign.Text" xml:space="preserve">
|
||||
<value>Ký</value>
|
||||
</data>
|
||||
<data name="zipalignOutputDirChkBox.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra APK:</value>
|
||||
</data>
|
||||
<data name="signAfterZipalignChkBox.Text" xml:space="preserve">
|
||||
<value>Ký sau khi zipalign</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_Recompress.Text" xml:space="preserve">
|
||||
<value>Nén lại bằng Zopfli</value>
|
||||
</data>
|
||||
<data name="label_ZIPALIGN_AlignmentBytes.Text" xml:space="preserve">
|
||||
<value>Căn chỉnh theo byte, ví dụ: '4' cung cấp căn chỉnh 32-bit</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_CheckAlignment.Text" xml:space="preserve">
|
||||
<value>Chỉ kiểm tra căn chỉnh (không sửa đổi tệp)</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_VerboseOutput.Text" xml:space="preserve">
|
||||
<value>Đầu ra chi tiết</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_OverwriteOutputFile.Text" xml:space="preserve">
|
||||
<value>Ghi đè tệp đầu ra hiện có</value>
|
||||
</data>
|
||||
<data name="groupBox_ZIPALIGN_Options.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="tabPageZipAlign.Text" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="openFwFolderBtn.Text" xml:space="preserve">
|
||||
<value>Mở thư mục framework</value>
|
||||
</data>
|
||||
<data name="clearFwBtn.Text" xml:space="preserve">
|
||||
<value>Xóa bộ nhớ đệm framework</value>
|
||||
</data>
|
||||
<data name="clearFwBeforeDecodeChkBox.Text" xml:space="preserve">
|
||||
<value>Xóa bộ nhớ đệm Framework trước khi dịch ngược</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="checkBox_IF_Tag.Text" xml:space="preserve">
|
||||
<value>Gắn thẻ frameworks bằng:</value>
|
||||
</data>
|
||||
<data name="checkBox_IF_FramePath.Text" xml:space="preserve">
|
||||
<value>Lưu trữ tệp framework vào:</value>
|
||||
</data>
|
||||
<data name="button_IF_InstallFramework.Text" xml:space="preserve">
|
||||
<value>Cài đặt</value>
|
||||
</data>
|
||||
<data name="groupBox_IF_Options.Text" xml:space="preserve">
|
||||
<value>Tùy chọn</value>
|
||||
</data>
|
||||
<data name="label29.Text" xml:space="preserve">
|
||||
<value>Thư mục biên dịch Smali:</value>
|
||||
</data>
|
||||
<data name="smaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra Dex:</value>
|
||||
</data>
|
||||
<data name="comSmaliBtn.Text" xml:space="preserve">
|
||||
<value>Biên dịch</value>
|
||||
</data>
|
||||
<data name="label28.Text" xml:space="preserve">
|
||||
<value>Dịch ngược Dex:</value>
|
||||
</data>
|
||||
<data name="baksmaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>Thư mục đầu ra:</value>
|
||||
</data>
|
||||
<data name="decSmaliBtn.Text" xml:space="preserve">
|
||||
<value>Dịch ngược</value>
|
||||
</data>
|
||||
<data name="label33.Text" xml:space="preserve">
|
||||
<value>Chọn thiết bị</value>
|
||||
</data>
|
||||
<data name="killAdbBtn.Text" xml:space="preserve">
|
||||
<value>Dừng tiến trình ADB</value>
|
||||
</data>
|
||||
<data name="installApkBtn.Text" xml:space="preserve">
|
||||
<value>Cài đặt APK</value>
|
||||
</data>
|
||||
<data name="refreshDevicesBtn.Text" xml:space="preserve">
|
||||
<value>Làm mới</value>
|
||||
</data>
|
||||
<data name="overrideAbiCheckBox.Text" xml:space="preserve">
|
||||
<value>Ghi đè ABI mặc định của nền tảng:</value>
|
||||
</data>
|
||||
<data name="setVendorChkBox.Text" xml:space="preserve">
|
||||
<value>Đặt nhà cung cấp là Play Store (com.android.vending)</value>
|
||||
</data>
|
||||
<data name="label32.Text" xml:space="preserve">
|
||||
<value>Chọn APK: </value>
|
||||
</data>
|
||||
<data name="toolStripStatusLabelStateText.Text" xml:space="preserve">
|
||||
<value>Đang tải...</value>
|
||||
</data>
|
||||
<data name="clearLogToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Xóa nhật ký</value>
|
||||
</data>
|
||||
<data name="newInsToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Tiến trình mới</value>
|
||||
</data>
|
||||
<data name="saveLogToFileToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Lưu nhật ký</value>
|
||||
</data>
|
||||
<data name="openTempFolderToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Mở thư mục tạm</value>
|
||||
</data>
|
||||
<data name="clearTempFolderToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Xóa thư mục tạm</value>
|
||||
</data>
|
||||
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Thoát</value>
|
||||
</data>
|
||||
<data name="fileToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Tệp</value>
|
||||
</data>
|
||||
<data name="useAPKEditorForDecompilingItem.Text" xml:space="preserve">
|
||||
<value>Sử dụng APKEditor để dịch ngược</value>
|
||||
</data>
|
||||
<data name="settingsToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Cài đặt</value>
|
||||
</data>
|
||||
<data name="checkForUpdateToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Kiểm tra cập nhật</value>
|
||||
</data>
|
||||
<data name="reportAnIsuueToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Báo cáo sự cố</value>
|
||||
</data>
|
||||
<data name="apktoolIssuesToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Sự cố Apktool</value>
|
||||
</data>
|
||||
<data name="baksmaliIssuesToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Sự cố Baksmali</value>
|
||||
</data>
|
||||
<data name="aboutToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Giới thiệu</value>
|
||||
</data>
|
||||
<data name="helpToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Trợ giúp</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_UseApkEditorMerge.Text" xml:space="preserve">
|
||||
<value>Sử dụng APKEditor.jar để hợp nhất/tách APK (nhanh hơn)</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,549 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="splitApkTxt.Text" xml:space="preserve">
|
||||
<value>将拆分的 APK 合并为单个 APK:</value>
|
||||
</data>
|
||||
<data name="mergeApkBtn.Text" xml:space="preserve">
|
||||
<value>合并</value>
|
||||
</data>
|
||||
<data name="comApkOpenDir.Text" xml:space="preserve">
|
||||
<value>编译的 APK 目录</value>
|
||||
</data>
|
||||
<data name="decOutOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>反编译输出目录</value>
|
||||
</data>
|
||||
<data name="signApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>签名的 APK 目录</value>
|
||||
</data>
|
||||
<data name="alignApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>Zip 对齐的 APK 目录</value>
|
||||
</data>
|
||||
<data name="decApkOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>反编译的 APK 目录</value>
|
||||
</data>
|
||||
<data name="compileOutputOpenDirBtn.Text" xml:space="preserve">
|
||||
<value>编译输出目录</value>
|
||||
</data>
|
||||
<data name="button_OpenMainActivity.Text" xml:space="preserve">
|
||||
<value>启动项 smail</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>APK 签名:</value>
|
||||
</data>
|
||||
<data name="button_SIGN_Sign.Text" xml:space="preserve">
|
||||
<value>签名</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>APK 文件对齐优化:</value>
|
||||
</data>
|
||||
<data name="button_ZIPALIGN_Align.Text" xml:space="preserve">
|
||||
<value>对齐优化</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>反编译 APK 目录:</value>
|
||||
</data>
|
||||
<data name="button_BUILD_Build.Text" xml:space="preserve">
|
||||
<value>编译</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>APK/XAPK/APKS/ZIP/APKM 文件:</value>
|
||||
</data>
|
||||
<data name="button_DECODE_Decode.Text" xml:space="preserve">
|
||||
<value>反编译</value>
|
||||
</data>
|
||||
<data name="tabPageMain.Text" xml:space="preserve">
|
||||
<value>首页</value>
|
||||
</data>
|
||||
<data name="label31.Text" xml:space="preserve">
|
||||
<value>启动 activity:</value>
|
||||
</data>
|
||||
<data name="label30.Text" xml:space="preserve">
|
||||
<value>架构:</value>
|
||||
</data>
|
||||
<data name="label17.Text" xml:space="preserve">
|
||||
<value>文件:</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>本地化:</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>权限:</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>密度:</value>
|
||||
</data>
|
||||
<data name="label19.Text" xml:space="preserve">
|
||||
<value>商店链接:</value>
|
||||
</data>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>应用名:</value>
|
||||
</data>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>应用包名:</value>
|
||||
</data>
|
||||
<data name="label8.Text" xml:space="preserve">
|
||||
<value>版本:</value>
|
||||
</data>
|
||||
<data name="label11.Text" xml:space="preserve">
|
||||
<value>最小兼容 SDK:</value>
|
||||
</data>
|
||||
<data name="label10.Text" xml:space="preserve">
|
||||
<value>代号:</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>屏幕尺寸</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>目标 SDK:</value>
|
||||
</data>
|
||||
<data name="basicInfoTabPage.Text" xml:space="preserve">
|
||||
<value>基本信息</value>
|
||||
</data>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value>完整信息</value>
|
||||
</data>
|
||||
<data name="tabPageApkInfo.Text" xml:space="preserve">
|
||||
<value>APK 信息</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>在选择 APK 进行反编译时,不要解析 APK 信息</value>
|
||||
</data>
|
||||
<data name="decSetApiLvlChkBox.Text" xml:space="preserve">
|
||||
<value>设置要生成的文件的 API 级别,例如 ICS 的 14。</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_FixError.Text" xml:space="preserve">
|
||||
<value>修复反编译后的 ApkTool 错误</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_FixError.ToolTip" xml:space="preserve">
|
||||
<value>将删除 extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY,拆分相关属性并将 sparseresource 设置为 false</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OnlyMainClasses.Text" xml:space="preserve">
|
||||
<value>只反汇编根目录中的主索引类(classes[0-9]*.dex)。</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OnlyMainClasses.ToolTip" xml:space="preserve">
|
||||
<value>修复异常的 ApkTool 错误</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_UseFramework.Text" xml:space="preserve">
|
||||
<value>使用的 framework 文件位置:</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_MatchOriginal.Text" xml:space="preserve">
|
||||
<value>尽可能保持文件最接近原始,防止重建</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_OutputDirectory.Text" xml:space="preserve">
|
||||
<value>输出目录:</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_KeepBrokenRes.Text" xml:space="preserve">
|
||||
<value>保留损坏资源</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoSrc.Text" xml:space="preserve">
|
||||
<value>不反编译源码</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_Force.Text" xml:space="preserve">
|
||||
<value>强制删除目标目录</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoRes.Text" xml:space="preserve">
|
||||
<value>不反编译 resouces</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_NoDebugInfo.Text" xml:space="preserve">
|
||||
<value>不要输出调试信息(.Local, .param, .line等)</value>
|
||||
</data>
|
||||
<data name="groupBox_DECODE_Options.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="tabPageDecode.Text" xml:space="preserve">
|
||||
<value>反编译</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NetSecConf.Text" xml:space="preserve">
|
||||
<value>在输出 APK 中添加通用的网络安全配置文件</value>
|
||||
</data>
|
||||
<data name="useAapt2ChkBox.Text" xml:space="preserve">
|
||||
<value>使用 aapt2(升级 apktool 使用实验性 aapt2 二进制)</value>
|
||||
</data>
|
||||
<data name="buildSetApiLvlChkBox.Text" xml:space="preserve">
|
||||
<value>设置要生成的文件的 API 级别,例如 ICS 的 14。</value>
|
||||
</data>
|
||||
<data name="createUnsignApkChkBox.Text" xml:space="preserve">
|
||||
<value>构建后创建具有原始签名的未签名 APK</value>
|
||||
</data>
|
||||
<data name="createUnsignApkChkBox.ToolTip" xml:space="preserve">
|
||||
<value>只兼容核心补丁模块,需要 root 设备。</value>
|
||||
</data>
|
||||
<data name="signAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>在 构建/zip对齐 后进行签名</value>
|
||||
</data>
|
||||
<data name="zipalignAfterBuildChkBox.Text" xml:space="preserve">
|
||||
<value>在构建后进行 zip对齐</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_NoCrunch.Text" xml:space="preserve">
|
||||
<value>在构建步骤中禁用对 resource 文件的处理</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_ForceAll.Text" xml:space="preserve">
|
||||
<value>跳过变更检测并构建所有文件</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_OutputAppPath.Text" xml:space="preserve">
|
||||
<value>APK 输出目录</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_OutputAppPath.ToolTip" xml:space="preserve">
|
||||
<value>编译后的输出目录也将用于 Zipalign 和签名</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_CopyOriginal.Text" xml:space="preserve">
|
||||
<value>复制原来的 AndroidManifest.xml 和 META-INF 文件夹</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_UseAapt.Text" xml:space="preserve">
|
||||
<value>使用的 aapt.exe 文件位置:</value>
|
||||
</data>
|
||||
<data name="checkBox_BUILD_UseFramework.Text" xml:space="preserve">
|
||||
<value>使用的 framework 文件位置:</value>
|
||||
</data>
|
||||
<data name="groupBox_BUILD_Options.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="tabPageBuild.Text" xml:space="preserve">
|
||||
<value>构建</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>签名后安装 APK(确保首先在 ADB 选项中选择设备)</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>覆盖输入文件</value>
|
||||
</data>
|
||||
<data name="autoDelIdsigChkBox.Text" xml:space="preserve">
|
||||
<value>自动删除 idsig 文件</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items1" xml:space="preserve">
|
||||
<value>开启</value>
|
||||
</data>
|
||||
<data name="schemev4ComboBox.Items2" xml:space="preserve">
|
||||
<value>关闭</value>
|
||||
</data>
|
||||
<data name="label27.Text" xml:space="preserve">
|
||||
<value>签名方案 v4:</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items1" xml:space="preserve">
|
||||
<value>开启</value>
|
||||
</data>
|
||||
<data name="schemev3ComboBox.Items2" xml:space="preserve">
|
||||
<value>关闭</value>
|
||||
</data>
|
||||
<data name="label26.Text" xml:space="preserve">
|
||||
<value>签名方案 v3:</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items1" xml:space="preserve">
|
||||
<value>启用</value>
|
||||
</data>
|
||||
<data name="schemev2ComboBox.Items2" xml:space="preserve">
|
||||
<value>关闭</value>
|
||||
</data>
|
||||
<data name="label25.Text" xml:space="preserve">
|
||||
<value>签名方案 v2:</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items1" xml:space="preserve">
|
||||
<value>开启</value>
|
||||
</data>
|
||||
<data name="schemev1ComboBox.Items2" xml:space="preserve">
|
||||
<value>关闭</value>
|
||||
</data>
|
||||
<data name="label24.Text" xml:space="preserve">
|
||||
<value>签名方案 v1:</value>
|
||||
</data>
|
||||
<data name="useAliasChkBox.Text" xml:space="preserve">
|
||||
<value>别名</value>
|
||||
</data>
|
||||
<data name="label22.Text" xml:space="preserve">
|
||||
<value>强烈建议您使用自己的密钥,通过 Android Studio 或其他工具创建</value>
|
||||
</data>
|
||||
<data name="label21.Text" xml:space="preserve">
|
||||
<value>密码:</value>
|
||||
</data>
|
||||
<data name="label20.Text" xml:space="preserve">
|
||||
<value>keystore/jks 文件:</value>
|
||||
</data>
|
||||
<data name="useKeyStoreChkBox.Text" xml:space="preserve">
|
||||
<value>使用 keystore</value>
|
||||
</data>
|
||||
<data name="useSigningOutputDir.Text" xml:space="preserve">
|
||||
<value>APK 输出目录:</value>
|
||||
</data>
|
||||
<data name="label_SIGN_PrivateKey.Text" xml:space="preserve">
|
||||
<value>私钥:</value>
|
||||
</data>
|
||||
<data name="label_SIGN_PublicKey.Text" xml:space="preserve">
|
||||
<value>公钥:</value>
|
||||
</data>
|
||||
<data name="groupBox_SIGN_Options.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="tabPageSign.Text" xml:space="preserve">
|
||||
<value>签名</value>
|
||||
</data>
|
||||
<data name="zipalignOutputDirChkBox.Text" xml:space="preserve">
|
||||
<value>APK 输出目录:</value>
|
||||
</data>
|
||||
<data name="signAfterZipalignChkBox.Text" xml:space="preserve">
|
||||
<value>zip对齐后进行签名</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_Recompress.Text" xml:space="preserve">
|
||||
<value>使用 Zopfli 重新压缩</value>
|
||||
</data>
|
||||
<data name="label_ZIPALIGN_AlignmentBytes.Text" xml:space="preserve">
|
||||
<value>以 bytes 为单位的对齐,例如: '4' 提供 32-bit 对齐</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_CheckAlignment.Text" xml:space="preserve">
|
||||
<value>只检查对齐(不修改文件)</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_VerboseOutput.Text" xml:space="preserve">
|
||||
<value>详细输出</value>
|
||||
</data>
|
||||
<data name="checkBox_ZIPALIGN_OverwriteOutputFile.Text" xml:space="preserve">
|
||||
<value>覆盖现有的输出文件</value>
|
||||
</data>
|
||||
<data name="groupBox_ZIPALIGN_Options.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="tabPageZipAlign.Text" xml:space="preserve">
|
||||
<value>Zip对齐</value>
|
||||
</data>
|
||||
<data name="openFwFolderBtn.Text" xml:space="preserve">
|
||||
<value>打开 framework 目录</value>
|
||||
</data>
|
||||
<data name="clearFwBtn.Text" xml:space="preserve">
|
||||
<value>清空 framework 缓存</value>
|
||||
</data>
|
||||
<data name="clearFwBeforeDecodeChkBox.Text" xml:space="preserve">
|
||||
<value>反编译前清空 Framework 缓存</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="checkBox_IF_Tag.Text" xml:space="preserve">
|
||||
<value>标签 frameworks 使用:</value>
|
||||
</data>
|
||||
<data name="checkBox_IF_FramePath.Text" xml:space="preserve">
|
||||
<value>将 framework 文件存储到:</value>
|
||||
</data>
|
||||
<data name="button_IF_InstallFramework.Text" xml:space="preserve">
|
||||
<value>安装</value>
|
||||
</data>
|
||||
<data name="groupBox_IF_Options.Text" xml:space="preserve">
|
||||
<value>选项</value>
|
||||
</data>
|
||||
<data name="label29.Text" xml:space="preserve">
|
||||
<value>Smali 编译目录:</value>
|
||||
</data>
|
||||
<data name="smaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>Dex 输出目录:</value>
|
||||
</data>
|
||||
<data name="comSmaliBtn.Text" xml:space="preserve">
|
||||
<value>编译</value>
|
||||
</data>
|
||||
<data name="label28.Text" xml:space="preserve">
|
||||
<value>Dex 反编译:</value>
|
||||
</data>
|
||||
<data name="baksmaliUseOutputChkBox.Text" xml:space="preserve">
|
||||
<value>输出目录:</value>
|
||||
</data>
|
||||
<data name="decSmaliBtn.Text" xml:space="preserve">
|
||||
<value>反编译</value>
|
||||
</data>
|
||||
<data name="label33.Text" xml:space="preserve">
|
||||
<value>选择设备</value>
|
||||
</data>
|
||||
<data name="killAdbBtn.Text" xml:space="preserve">
|
||||
<value>结束 ADB 进程</value>
|
||||
</data>
|
||||
<data name="installApkBtn.Text" xml:space="preserve">
|
||||
<value>安装 APK</value>
|
||||
</data>
|
||||
<data name="refreshDevicesBtn.Text" xml:space="preserve">
|
||||
<value>刷新</value>
|
||||
</data>
|
||||
<data name="overrideAbiCheckBox.Text" xml:space="preserve">
|
||||
<value>覆盖平台的默认 ABI:</value>
|
||||
</data>
|
||||
<data name="setVendorChkBox.Text" xml:space="preserve">
|
||||
<value>设置 vendor 为 Play Store (com.android.vending)</value>
|
||||
</data>
|
||||
<data name="label32.Text" xml:space="preserve">
|
||||
<value>选择 APK: </value>
|
||||
</data>
|
||||
<data name="toolStripStatusLabelStateText.Text" xml:space="preserve">
|
||||
<value>加载中...</value>
|
||||
</data>
|
||||
<data name="clearLogToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>清除日志</value>
|
||||
</data>
|
||||
<data name="newInsToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>新进程</value>
|
||||
</data>
|
||||
<data name="saveLogToFileToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>保存日志</value>
|
||||
</data>
|
||||
<data name="openTempFolderToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>打开缓存目录</value>
|
||||
</data>
|
||||
<data name="clearTempFolderToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>清空缓存目录</value>
|
||||
</data>
|
||||
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="fileToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>文件</value>
|
||||
</data>
|
||||
<data name="useAPKEditorForDecompilingItem.Text" xml:space="preserve">
|
||||
<value>使用 APKEditor 进行反编译</value>
|
||||
</data>
|
||||
<data name="settingsToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>设置</value>
|
||||
</data>
|
||||
<data name="checkForUpdateToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>检查更新</value>
|
||||
</data>
|
||||
<data name="reportAnIsuueToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>反馈问题</value>
|
||||
</data>
|
||||
<data name="apktoolIssuesToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Apktool 问题反馈</value>
|
||||
</data>
|
||||
<data name="baksmaliIssuesToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Baksmail 问题反馈</value>
|
||||
</data>
|
||||
<data name="aboutToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
<data name="helpToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>帮助</value>
|
||||
</data>
|
||||
<data name="checkBox_DECODE_UseApkEditorMerge.Text" xml:space="preserve">
|
||||
<value>使用 APKEditor.jar 合并、分离 APK(速度更快)</value>
|
||||
</data>
|
||||
</root>
|
||||
+4
-4
@@ -209,9 +209,9 @@
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
resources.ApplyResources(this.textBox1, "textBox1");
|
||||
this.textBox1.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "CustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.textBox1, "textBox1");
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Text = global::APKToolGUI.Properties.Settings.Default.CustomJVMArgs;
|
||||
//
|
||||
@@ -233,9 +233,9 @@
|
||||
//
|
||||
// customApkToolTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox");
|
||||
this.customApkToolTxtBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.customApkToolTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "ApktoolPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox");
|
||||
this.customApkToolTxtBox.Name = "customApkToolTxtBox";
|
||||
this.customApkToolTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.ApktoolPath;
|
||||
//
|
||||
@@ -265,17 +265,17 @@
|
||||
//
|
||||
// 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));
|
||||
resources.ApplyResources(this.customTempLocationTxtBox, "customTempLocationTxtBox");
|
||||
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));
|
||||
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
|
||||
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
|
||||
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
|
||||
//
|
||||
|
||||
@@ -12,6 +12,8 @@ using System.Windows.Shapes;
|
||||
using static APKToolGUI.UpdateChecker;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Controls;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -81,20 +83,24 @@ namespace APKToolGUI
|
||||
|
||||
private void LoadSettings()
|
||||
{
|
||||
String sysLang = Language.SystemLanguage;
|
||||
string sysLang = Language.SystemLanguage;
|
||||
|
||||
comboBox1.Items.Add(sysLang);
|
||||
comboBox1.Items.Add(CultureInfo.GetCultureInfo("en"));
|
||||
|
||||
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
|
||||
String _culture = Properties.Settings.Default.Culture;
|
||||
string _culture = Settings.Default.Culture;
|
||||
|
||||
foreach (CultureInfo culture in cultures)
|
||||
{
|
||||
foreach (string resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames())
|
||||
{
|
||||
string[] cultNamw = resourceName.Split('.');
|
||||
if (cultNamw[1] == culture.Name)
|
||||
//Debug.WriteLine(resourceName);
|
||||
string[] cultName = resourceName.Split('.');
|
||||
if (cultName[1] == culture.Name)
|
||||
{
|
||||
string lang = String.Format("{0} [{1}]", culture.DisplayName, culture.Name);
|
||||
//Debug.WriteLine("Lang: " + cultName[1] + " " + culture.Name);
|
||||
string lang = string.Format("{0} [{1}]", culture.DisplayName, culture.Name);
|
||||
comboBox1.Items.Add(lang);
|
||||
|
||||
if (culture.Name == _culture)
|
||||
@@ -111,11 +117,15 @@ namespace APKToolGUI
|
||||
currentLanguage = sysLang;
|
||||
comboBox1.SelectedItem = sysLang;
|
||||
}
|
||||
else if (string.IsNullOrEmpty(_culture))
|
||||
{
|
||||
comboBox1.SelectedIndex = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
currentLanguage = Properties.Settings.Default.Culture;
|
||||
currentLanguage = Settings.Default.Culture;
|
||||
comboBox1.SelectedItem = _culture;
|
||||
}
|
||||
catch { }
|
||||
@@ -129,11 +139,16 @@ namespace APKToolGUI
|
||||
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
|
||||
Settings.Default.Culture = "Auto";
|
||||
else
|
||||
Settings.Default.Culture = StringExt.Regex(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString());
|
||||
Settings.Default.Culture = StringExt.RegexExtract(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString());
|
||||
|
||||
Settings.Default.Theme = themeComboBox.SelectedIndex;
|
||||
Settings.Default.Save();
|
||||
|
||||
if (string.IsNullOrEmpty(currentLanguage))
|
||||
currentLanguage = "en";
|
||||
|
||||
Debug.WriteLine("Combobox: " + comboBox1.SelectedItem.ToString() + " Language: " + currentLanguage);
|
||||
|
||||
if (!comboBox1.SelectedItem.ToString().Contains(currentLanguage) || themeComboBox.SelectedIndex != currentTheme)
|
||||
if (MessageBox.Show(Language.RestartApplicationPrompt, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
Application.Restart();
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="checkBox7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>206, 17</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Benutzerdefinierte JVM-Argumente</value>
|
||||
</data>
|
||||
<data name="checkBox6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 17</value>
|
||||
</data>
|
||||
<data name="checkBox6.Text" xml:space="preserve">
|
||||
<value>Debug-Modus</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items" xml:space="preserve">
|
||||
<value>Automatisch</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items1" xml:space="preserve">
|
||||
<value>Hell</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items2" xml:space="preserve">
|
||||
<value>Dunkel</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Thema</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Text" xml:space="preserve">
|
||||
<value>…</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 17</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Text" xml:space="preserve">
|
||||
<value>Benutzerdefinierter APKTool-Speicherort</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 13</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Der Vorgang wird langsamer sein, da die Dateien in den temporären Ordner verschoben werden</value>
|
||||
</data>
|
||||
<data name="checkBox5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>218, 17</value>
|
||||
</data>
|
||||
<data name="checkBox5.Text" xml:space="preserve">
|
||||
<value>Unterstützung für UTF-8-Dateinamen</value>
|
||||
</data>
|
||||
<data name="checkBox4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>212, 17</value>
|
||||
</data>
|
||||
<data name="checkBox4.Text" xml:space="preserve">
|
||||
<value>Benutzerdefinierter Java-Speicherort</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.Text" xml:space="preserve">
|
||||
<value>…</value>
|
||||
</data>
|
||||
<data name="checkBox3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>233, 17</value>
|
||||
</data>
|
||||
<data name="checkBox3.Text" xml:space="preserve">
|
||||
<value>Benutzerdefinierter temporärer Standort</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Text" xml:space="preserve">
|
||||
<value>…</value>
|
||||
</data>
|
||||
<data name="checkBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>203, 17</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>Ton abspielen, wenn du fertig bist</value>
|
||||
</data>
|
||||
<data name="checkBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>281, 17</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>Protokoll löschen, bevor du Maßnahmen ergreifst</value>
|
||||
</data>
|
||||
<data name="checkBoxCheckUpdateStartup.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 17</value>
|
||||
</data>
|
||||
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
|
||||
<value>Beim Start nach Updates suchen</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Allgemein</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Text" xml:space="preserve">
|
||||
<value>Sprache</value>
|
||||
</data>
|
||||
<data name="ignoreOutputContextMenuBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>376, 17</value>
|
||||
</data>
|
||||
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
|
||||
<value>Benutzerdefiniertes Ausgabeverzeichnis für Kontextmenü ignorieren</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.Text" xml:space="preserve">
|
||||
<value>Administratorrechte erforderlich</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Text" xml:space="preserve">
|
||||
<value>Install …</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
|
||||
<value>Deinstall …</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Text" xml:space="preserve">
|
||||
<value>Kontextmenü</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value>Allgemein</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Text" xml:space="preserve">
|
||||
<value>Abbrechen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -128,12 +128,15 @@
|
||||
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="textBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>230, 139</value>
|
||||
<value>274, 139</value>
|
||||
</data>
|
||||
<data name="textBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>265, 22</value>
|
||||
<value>239, 22</value>
|
||||
</data>
|
||||
<data name="textBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>20</value>
|
||||
@@ -223,10 +226,10 @@
|
||||
<value>Dark</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>128, 238</value>
|
||||
<value>276, 234</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>121, 21</value>
|
||||
<value>153, 21</value>
|
||||
</data>
|
||||
<data name="themeComboBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
@@ -250,7 +253,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 241</value>
|
||||
<value>7, 239</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>41, 13</value>
|
||||
@@ -273,11 +276,14 @@
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="customApkToolTxtBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="customApkToolTxtBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>230, 205</value>
|
||||
<value>274, 205</value>
|
||||
</data>
|
||||
<data name="customApkToolTxtBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>215, 22</value>
|
||||
<value>203, 22</value>
|
||||
</data>
|
||||
<data name="customApkToolTxtBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
@@ -297,6 +303,9 @@
|
||||
<data name=">>customApkToolTxtBox.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>System</value>
|
||||
</data>
|
||||
@@ -304,7 +313,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 205</value>
|
||||
<value>483, 205</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -364,7 +373,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>24, 185</value>
|
||||
<value>6, 185</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>349, 13</value>
|
||||
@@ -447,11 +456,14 @@
|
||||
<data name=">>checkBox4.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="customTempLocationTxtBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="customTempLocationTxtBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>230, 86</value>
|
||||
<value>274, 86</value>
|
||||
</data>
|
||||
<data name="customTempLocationTxtBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>215, 22</value>
|
||||
<value>203, 22</value>
|
||||
</data>
|
||||
<data name="customTempLocationTxtBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
@@ -471,11 +483,14 @@
|
||||
<data name=">>customTempLocationTxtBox.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="textBoxCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="textBoxCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>230, 112</value>
|
||||
<value>274, 112</value>
|
||||
</data>
|
||||
<data name="textBoxCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>215, 22</value>
|
||||
<value>203, 22</value>
|
||||
</data>
|
||||
<data name="textBoxCustomJavaLocation.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
@@ -498,6 +513,9 @@
|
||||
<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>
|
||||
@@ -505,7 +523,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 86</value>
|
||||
<value>483, 86</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -558,6 +576,9 @@
|
||||
<data name=">>checkBox3.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>System</value>
|
||||
</data>
|
||||
@@ -565,7 +586,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 112</value>
|
||||
<value>483, 112</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -682,7 +703,7 @@
|
||||
<value>8, 6</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 299</value>
|
||||
<value>521, 299</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
@@ -709,10 +730,10 @@
|
||||
<value>System</value>
|
||||
</data>
|
||||
<data name="comboBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>156, 17</value>
|
||||
<value>9, 17</value>
|
||||
</data>
|
||||
<data name="comboBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>319, 21</value>
|
||||
<value>347, 21</value>
|
||||
</data>
|
||||
<data name="comboBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
@@ -733,7 +754,7 @@
|
||||
<value>8, 311</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>512, 47</value>
|
||||
<value>522, 47</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
@@ -826,7 +847,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>303, 18</value>
|
||||
<value>343, 18</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 23</value>
|
||||
@@ -859,7 +880,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>392, 18</value>
|
||||
<value>432, 18</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 23</value>
|
||||
@@ -886,7 +907,7 @@
|
||||
<value>8, 364</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>513, 74</value>
|
||||
<value>523, 74</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
@@ -913,7 +934,7 @@
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>525, 442</value>
|
||||
<value>535, 442</value>
|
||||
</data>
|
||||
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@@ -940,7 +961,7 @@
|
||||
<value>0, 1</value>
|
||||
</data>
|
||||
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>533, 468</value>
|
||||
<value>543, 468</value>
|
||||
</data>
|
||||
<data name="tabControl1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@@ -967,7 +988,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>451, 475</value>
|
||||
<value>461, 475</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
@@ -1000,7 +1021,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonОК.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>370, 475</value>
|
||||
<value>380, 475</value>
|
||||
</data>
|
||||
<data name="buttonОК.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
@@ -1030,7 +1051,7 @@
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>532, 503</value>
|
||||
<value>542, 503</value>
|
||||
</data>
|
||||
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
|
||||
@@ -163,4 +163,19 @@
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Настройки</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Text" xml:space="preserve">
|
||||
<value>Указать путь к Java</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Text" xml:space="preserve">
|
||||
<value>Свой путь к Apktool</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Тема</value>
|
||||
</data>
|
||||
<data name="checkBox6.Text" xml:space="preserve">
|
||||
<value>Режим отладки</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Аргументы JVM</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Tùy chỉnh lệnh JVM</value>
|
||||
</data>
|
||||
<data name="checkBox6.Text" xml:space="preserve">
|
||||
<value>Chế độ gỡ lỗi</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items" xml:space="preserve">
|
||||
<value>Tự động</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items1" xml:space="preserve">
|
||||
<value>Sáng</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items2" xml:space="preserve">
|
||||
<value>Tối</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Giao diện</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="useCustomApktoolChk.TabIndex" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Text" xml:space="preserve">
|
||||
<value>Vị trí apktool tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Việc di chuyển các tệp trong quá trình xử lý vào thư mục tạm có thể mất thời gian, vui lòng kiên nhẫn chờ đợi</value>
|
||||
</data>
|
||||
<data name="checkBox5.Text" xml:space="preserve">
|
||||
<value>Hỗ trợ tên tệp UTF-8 (bật khi tên tệp bị lỗi hiển thị)</value>
|
||||
</data>
|
||||
<data name="checkBox4.Text" xml:space="preserve">
|
||||
<value>Vị trí Java tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="checkBox3.Text" xml:space="preserve">
|
||||
<value>Vị trí bộ đệm tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>Âm báo hoàn thành</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>Xóa nhật ký trước khi thực hiện</value>
|
||||
</data>
|
||||
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
|
||||
<value>Kiểm tra cập nhật khi khởi động</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Chung</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Text" xml:space="preserve">
|
||||
<value>Ngôn ngữ</value>
|
||||
</data>
|
||||
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
|
||||
<value>Bỏ qua thư mục đầu ra tùy chỉnh của menu chuột phải</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.Text" xml:space="preserve">
|
||||
<value>Yêu cầu quyền quản trị</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Text" xml:space="preserve">
|
||||
<value>Cài đặt</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
|
||||
<value>Gỡ cài đặt</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Text" xml:space="preserve">
|
||||
<value>Menu chuột phải</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value>Chung</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Text" xml:space="preserve">
|
||||
<value>Hủy</value>
|
||||
</data>
|
||||
<data name="buttonОК.Text" xml:space="preserve">
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Cài đặt</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>自定义 JVM 命令</value>
|
||||
</data>
|
||||
<data name="checkBox6.Text" xml:space="preserve">
|
||||
<value>调试模式</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items1" xml:space="preserve">
|
||||
<value>浅色</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items2" xml:space="preserve">
|
||||
<value>深色</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>主题</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="useCustomApktoolChk.TabIndex" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Text" xml:space="preserve">
|
||||
<value>自定义 apktool 位置</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>操作过程的文件移动到缓存目录中需要时间,请耐心等待</value>
|
||||
</data>
|
||||
<data name="checkBox5.Text" xml:space="preserve">
|
||||
<value>UTF-8 文件名支持,中文乱码开启</value>
|
||||
</data>
|
||||
<data name="checkBox4.Text" xml:space="preserve">
|
||||
<value>自定义 Java 位置</value>
|
||||
</data>
|
||||
<data name="checkBox3.Text" xml:space="preserve">
|
||||
<value>自定义缓存位置</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>完成提示音</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>操作前清除日志</value>
|
||||
</data>
|
||||
<data name="checkBoxCheckUpdateStartup.Text" xml:space="preserve">
|
||||
<value>启动时检查更新</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>常规</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
|
||||
<value>忽略右键菜单的自定义输出目录</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.Text" xml:space="preserve">
|
||||
<value>需要管理员权限</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Text" xml:space="preserve">
|
||||
<value>安装</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Text" xml:space="preserve">
|
||||
<value>卸载</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Text" xml:space="preserve">
|
||||
<value>右键菜单</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value>常规</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Text" xml:space="preserve">
|
||||
<value>取消</value>
|
||||
</data>
|
||||
<data name="buttonОК.Text" xml:space="preserve">
|
||||
<value>确定</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>设置</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,4 +1,5 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@@ -15,19 +16,25 @@ namespace APKToolGUI.Handlers
|
||||
public AdbControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
main.killAdbBtn.Click += killAdbBtn_Click;
|
||||
main.installApkBtn.Click += installApkBtn_Click;
|
||||
main.refreshDevicesBtn.Click += refreshDevicesBtn_Click;
|
||||
main.selApkAdbBtn.Click += selApkAdbBtn_Click;
|
||||
main.devicesListBox.SelectedValueChanged += devicesListBox_SelectedValueChanged;
|
||||
main.killAdbBtn.Click += KillAdbBtn_Click;
|
||||
main.installApkBtn.Click += InstallApkBtn_Click;
|
||||
main.refreshDevicesBtn.Click += RefreshDevicesBtn_Click;
|
||||
main.selApkAdbBtn.Click += SelApkAdbBtn_Click;
|
||||
main.devicesListBox.SelectedValueChanged += DevicesListBox_SelectedValueChanged;
|
||||
main.overrideAbiComboBox.SelectedIndexChanged += OverrideAbiComboBox_SelectedIndexChanged;
|
||||
}
|
||||
|
||||
private async void refreshDevicesBtn_Click(object sender, EventArgs e)
|
||||
private void OverrideAbiComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
Settings.Default.Adb_OverrideAbi = main.overrideAbiComboBox.SelectedIndex;
|
||||
}
|
||||
|
||||
private async void RefreshDevicesBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
await main.ListDevices();
|
||||
}
|
||||
|
||||
private async void killAdbBtn_Click(object sender, EventArgs e)
|
||||
private async void KillAdbBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MessageBox.Show(Language.ConfirmKillingAdbServer, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
@@ -36,7 +43,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private async void installApkBtn_Click(object sender, EventArgs e)
|
||||
private async void InstallApkBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = main.apkPathAdbTxtBox.Text;
|
||||
if (File.Exists(inputFile))
|
||||
@@ -47,7 +54,7 @@ namespace APKToolGUI.Handlers
|
||||
MessageBox.Show(Language.ErrorSelectedFileNotExist, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
private void selApkAdbBtn_Click(object sender, EventArgs e)
|
||||
private void SelApkAdbBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -58,7 +65,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void devicesListBox_SelectedValueChanged(object sender, EventArgs e)
|
||||
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);
|
||||
|
||||
@@ -14,81 +14,60 @@ namespace APKToolGUI.Handlers
|
||||
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;
|
||||
main.selApkFileInfoBtn.Click += SelApkFileInfoBtn_Click;
|
||||
main.psLinkBtn.Click += PsLinkBtn_Click;
|
||||
main.apkComboLinkBtn.Click += ApkComboLinkBtn_Click;
|
||||
main.apkPureLinkBtn.Click += ApkPureLinkBtn_Click;
|
||||
main.apkGkLinkBtn.Click += ApkGkLinkBtn_Click;
|
||||
main.apkSupportLinkBtn.Click += ApkSupportLinkBtn_Click;
|
||||
main.apkMirrorLinkBtn.Click += ApkMirrorLinkBtn_Click;
|
||||
}
|
||||
|
||||
private void selApkFileInfoBtn_Click(object sender, EventArgs e)
|
||||
private async void SelApkFileInfoBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
await main.GetApkInfo(ofd.FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void psLinkBtn_Click(object sender, EventArgs e)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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,12 +19,12 @@ namespace APKToolGUI.Handlers
|
||||
public BaksmaliControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
main.baksmaliBrowseOutputBtn.Click += baksmaliBrowseOutputBtn_Click;
|
||||
main.baksmaliBrowseInputDexBtn.Click += baksmaliBrowseInputDexBtn_Click;
|
||||
main.decSmaliBtn.Click += decSmaliBtn_Click;
|
||||
main.baksmaliBrowseOutputBtn.Click += BaksmaliBrowseOutputBtn_Click;
|
||||
main.baksmaliBrowseInputDexBtn.Click += BaksmaliBrowseInputDexBtn_Click;
|
||||
main.decSmaliBtn.Click += DecSmaliBtn_Click;
|
||||
}
|
||||
|
||||
internal void baksmaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
internal void BaksmaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -35,7 +35,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void baksmaliBrowseInputDexBtn_Click(object sender, EventArgs e)
|
||||
internal void BaksmaliBrowseInputDexBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -46,7 +46,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void decSmaliBtn_Click(object sender, EventArgs e)
|
||||
internal async void DecSmaliBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.baksmaliUseOutputChkBox.Checked)
|
||||
{
|
||||
|
||||
@@ -21,14 +21,14 @@ 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;
|
||||
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)
|
||||
internal void Button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -43,7 +43,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
internal void Button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
@@ -54,7 +54,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e)
|
||||
internal void Button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -65,7 +65,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e)
|
||||
internal void Button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -76,7 +76,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_BUILD_Build_Click(object sender, EventArgs e)
|
||||
internal async void Button_BUILD_Build_Click(object sender, EventArgs e)
|
||||
{
|
||||
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
|
||||
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
|
||||
|
||||
@@ -19,13 +19,13 @@ 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;
|
||||
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)
|
||||
internal void Button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
@@ -36,7 +36,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e)
|
||||
internal void Button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
@@ -50,16 +50,18 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e)
|
||||
internal async void Button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Android Package (*.apk;*.xapk;*.zip;*.apkm;*.apks)|*.apk;*.xapk;*.zip;*.apkm;*.apks";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_DECODE_InputAppPath.Text = ofd.FileName;
|
||||
|
||||
if (!Settings.Default.Decode_DontParseApkInfo)
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
await main.GetApkInfo(ofd.FileName);
|
||||
|
||||
if (main.checkBox_DECODE_OutputDirectory.Checked)
|
||||
{
|
||||
@@ -69,7 +71,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_DECODE_Decode_Click(object sender, EventArgs e)
|
||||
internal async void Button_DECODE_Decode_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = main.textBox_DECODE_InputAppPath.Text;
|
||||
if (File.Exists(inputFile))
|
||||
@@ -96,14 +98,7 @@ namespace APKToolGUI.Handlers
|
||||
|
||||
if (inputFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
|
||||
{
|
||||
if (Settings.Default.Decode_UseApkEditorMergeApk)
|
||||
{
|
||||
await main.MergeUsingApkEditor(inputFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
await main.Merge(inputFile);
|
||||
}
|
||||
await main.MergeAndDecompile(inputFile);
|
||||
}
|
||||
else
|
||||
await main.Decompile(inputFile);
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace APKToolGUI.Handlers
|
||||
private static FormMain main;
|
||||
|
||||
string[] apks = { ".apk", ".xapk", ".zip", ".apks", ".apkm" };
|
||||
string[] apk = { ".apk" };
|
||||
|
||||
public DragDropHandlers(FormMain Main)
|
||||
{
|
||||
@@ -37,14 +38,19 @@ namespace APKToolGUI.Handlers
|
||||
Register(main.button_BUILD_Build, main.comPanel, comEventHandler, null);
|
||||
|
||||
DragEventHandler alignEventHandler = new DragEventHandler((sender, e) => { DropApkToAlign(e); });
|
||||
Register(main.zipalignPanel, null, alignEventHandler, apks);
|
||||
Register(main.textBox_ZIPALIGN_InputFile, main.zipalignPanel, alignEventHandler, apks);
|
||||
Register(main.button_ZIPALIGN_Align, main.zipalignPanel, alignEventHandler, apks);
|
||||
Register(main.zipalignPanel, null, alignEventHandler, apk);
|
||||
Register(main.textBox_ZIPALIGN_InputFile, main.zipalignPanel, alignEventHandler, apk);
|
||||
Register(main.button_ZIPALIGN_Align, main.zipalignPanel, alignEventHandler, apk);
|
||||
|
||||
DragEventHandler signEventHandler = new DragEventHandler((sender, e) => { DropApkToSign(e); });
|
||||
Register(main.signPanel, null, signEventHandler, apks);
|
||||
Register(main.textBox_SIGN_InputFile, main.signPanel, signEventHandler, apks);
|
||||
Register(main.button_SIGN_Sign, main.signPanel, signEventHandler, apks);
|
||||
Register(main.signPanel, null, signEventHandler, apk);
|
||||
Register(main.textBox_SIGN_InputFile, main.signPanel, signEventHandler, apk);
|
||||
Register(main.button_SIGN_Sign, main.signPanel, signEventHandler, apk);
|
||||
|
||||
DragEventHandler mergeEventHandler = new DragEventHandler((sender, e) => { DropApkToMerge(e); });
|
||||
Register(main.mergePanel, null, mergeEventHandler, apks);
|
||||
Register(main.splitApkPathTxtBox, main.mergePanel, mergeEventHandler, apks);
|
||||
Register(main.mergeApkBtn, main.mergePanel, mergeEventHandler, apks);
|
||||
|
||||
DragEventHandler baksmaliEventHandler = new DragEventHandler((sender, e) => { DropDexToBaksmali(e); });
|
||||
Register(main.bakSmaliGroupBox, null, baksmaliEventHandler, new string[] { ".dex" });
|
||||
@@ -59,8 +65,8 @@ namespace APKToolGUI.Handlers
|
||||
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" });
|
||||
Register(main.tabPageAdb, null, adbEventHandler, apk);
|
||||
Register(main.installApkBtn, null, adbEventHandler, apk);
|
||||
}
|
||||
|
||||
void Register(Control ctrl, Control extCtrl, DragEventHandler dragHandler, string[] extension)
|
||||
@@ -89,14 +95,7 @@ namespace APKToolGUI.Handlers
|
||||
|
||||
if (apkFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
|
||||
{
|
||||
if (Settings.Default.Decode_UseApkEditorMergeApk)
|
||||
{
|
||||
await main.MergeUsingApkEditor(apkFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
await main.Merge(apkFile);
|
||||
}
|
||||
await main.MergeAndDecompile(apkFile);
|
||||
}
|
||||
else
|
||||
await main.Decompile(apkFile);
|
||||
@@ -155,6 +154,22 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropApkToMerge(DragEventArgs e)
|
||||
{
|
||||
string[] apkFiles = null;
|
||||
if (e.DropManyByEnd(file => apkFiles = file, apks))
|
||||
{
|
||||
main.mergePanel.BackColor = PanelBackColor();
|
||||
|
||||
foreach (var apkFile in apkFiles)
|
||||
{
|
||||
main.splitApkPathTxtBox.Text = apkFile;
|
||||
|
||||
await main.Merge(apkFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropDexToBaksmali(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
@@ -188,14 +203,14 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void DropApkToGetInfo(DragEventArgs e)
|
||||
private async void DropApkToGetInfo(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(file => apkFile = file, apks))
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = apkFile;
|
||||
main.fileTxtBox.Text = apkFile;
|
||||
main.basicInfoTabPage.BackColor = PanelBackColor();
|
||||
main.GetApkInfo(apkFile);
|
||||
await main.GetApkInfo(apkFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,14 +20,14 @@ 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;
|
||||
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)
|
||||
internal void Button_IF_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.clearFwBeforeDecodeChkBox.Checked = false;
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
@@ -39,7 +39,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_IF_BrowseInputFramePath_Click(object sender, EventArgs e)
|
||||
internal void Button_IF_BrowseInputFramePath_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.clearFwBeforeDecodeChkBox.Checked = false;
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
@@ -56,7 +56,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_IF_InstallFramework_Click(object sender, EventArgs e)
|
||||
internal async void Button_IF_InstallFramework_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.checkBox_IF_FramePath.Checked)
|
||||
{
|
||||
@@ -89,14 +89,14 @@ namespace APKToolGUI.Handlers
|
||||
});
|
||||
}
|
||||
|
||||
internal async void clearFwBtn_Click(object sender, EventArgs e)
|
||||
internal async void ClearFwBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.Running(Language.ClearingFramework);
|
||||
|
||||
await main.ClearFramework();
|
||||
}
|
||||
|
||||
internal void openFwFolderBtn_Click(object sender, EventArgs e)
|
||||
internal void OpenFwFolderBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.checkBox_IF_FramePath.Checked && Directory.Exists(main.textBox_IF_FrameDir.Text))
|
||||
Process.Start("explorer.exe", main.textBox_IF_FrameDir.Text);
|
||||
|
||||
@@ -5,10 +5,7 @@ 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;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
@@ -18,29 +15,46 @@ namespace APKToolGUI.Handlers
|
||||
public MainWindowEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
main.clearLogToolStripMenuItem.Click += clearLogToolStripMenuItem_Click;
|
||||
main.copyToolStripMenuItem.Click += copyToolStripMenuItem_Click;
|
||||
main.openAndroidMainfestBtn.Click += openAndroidMainfestBtn_Click;
|
||||
main.openApktoolYmlBtn.Click += openApktoolYmlBtn_Click;
|
||||
main.compileOutputOpenDirBtn.Click += compiledApkOpenDirBtn_Click;
|
||||
main.button_OpenMainActivity.Click += button_OpenMainActivity_Click;
|
||||
main.decApkOpenDirBtn.Click += decApkOpenDirBtn_Click;
|
||||
main.decOutOpenDirBtn.Click += decOutOpenDirBtn_Click;
|
||||
main.comApkOpenDir.Click += comApkOpenDir_Click;
|
||||
main.signApkOpenDirBtn.Click += signApkOpenDirBtn_Click;
|
||||
main.alignApkOpenDirBtn.Click += alignApkOpenDirBtn_Click;
|
||||
main.clearLogToolStripMenuItem.Click += ClearLogToolStripMenuItem_Click;
|
||||
main.copyToolStripMenuItem.Click += CopyToolStripMenuItem_Click;
|
||||
main.openAndroidMainfestBtn.Click += OpenAndroidMainfestBtn_Click;
|
||||
main.openApktoolYmlBtn.Click += OpenApktoolYmlBtn_Click;
|
||||
main.compileOutputOpenDirBtn.Click += CompiledApkOpenDirBtn_Click;
|
||||
main.button_OpenMainActivity.Click += Button_OpenMainActivity_Click;
|
||||
main.decApkOpenDirBtn.Click += DecApkOpenDirBtn_Click;
|
||||
main.decOutOpenDirBtn.Click += DecOutOpenDirBtn_Click;
|
||||
main.comApkOpenDir.Click += ComApkOpenDir_Click;
|
||||
main.signApkOpenDirBtn.Click += SignApkOpenDirBtn_Click;
|
||||
main.alignApkOpenDirBtn.Click += AlignApkOpenDirBtn_Click;
|
||||
main.mergeApkBtn.Click += MergeApkBtn_Click;
|
||||
main.selSplitApkBtn.Click += SelSplitApkBtn_Click;
|
||||
}
|
||||
|
||||
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
internal void SelSplitApkBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.logTxtBox.Text = "";
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Split APK Package (*.xapk;*.zip;*.apkm;*.apks)|*.xapk;*.zip;*.apkm;*.apks";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.splitApkPathTxtBox.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
internal async void MergeApkBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Clipboard.SetText(main.logTxtBox.SelectedText);
|
||||
main.Save();
|
||||
if (!File.Exists(Settings.Default.SplitApk_InputFile))
|
||||
{
|
||||
main.ShowMessage(Language.SplitApkNotFound, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
await main.Merge(Settings.Default.SplitApk_InputFile);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -48,8 +62,24 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearLogToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.logTxtBox.Text = "";
|
||||
}
|
||||
|
||||
internal void decApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
private void CopyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Windows.Forms.Clipboard.SetText(main.logTxtBox.SelectedText);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
internal void DecApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
|
||||
Process.Start("explorer.exe", main.textBox_BUILD_InputProjectDir.Text);
|
||||
@@ -59,7 +89,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void decOutOpenDirBtn_Click(object sender, EventArgs e)
|
||||
internal void DecOutOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(Settings.Default.Decode_OutputDir))
|
||||
Process.Start("explorer.exe", Settings.Default.Decode_OutputDir);
|
||||
@@ -69,7 +99,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void openAndroidMainfestBtn_Click(object sender, EventArgs e)
|
||||
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"));
|
||||
@@ -77,7 +107,7 @@ namespace APKToolGUI.Handlers
|
||||
main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist);
|
||||
}
|
||||
|
||||
private void openApktoolYmlBtn_Click(object sender, EventArgs e)
|
||||
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"));
|
||||
@@ -85,7 +115,7 @@ namespace APKToolGUI.Handlers
|
||||
main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist);
|
||||
}
|
||||
|
||||
private void compiledApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
private void CompiledApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(Settings.Default.Build_OutputAppPath))
|
||||
{
|
||||
@@ -95,7 +125,7 @@ namespace APKToolGUI.Handlers
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
|
||||
}
|
||||
|
||||
private void button_OpenMainActivity_Click(object sender, EventArgs e)
|
||||
private void Button_OpenMainActivity_Click(object sender, EventArgs e)
|
||||
{
|
||||
string decPath = main.textBox_BUILD_InputProjectDir.Text;
|
||||
if (Directory.Exists(decPath))
|
||||
@@ -147,7 +177,7 @@ namespace APKToolGUI.Handlers
|
||||
main.ToLog(ApktoolEventType.Error, Language.DecompiledAPKNotExist);
|
||||
}
|
||||
|
||||
internal void comApkOpenDir_Click(object sender, EventArgs e)
|
||||
internal void ComApkOpenDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
|
||||
|
||||
@@ -169,11 +199,11 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void signApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
internal void SignApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = Settings.Default.Sign_InputFile;
|
||||
string outputFile = inputFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
if (Settings.Default.Sign_UseOutputDir)
|
||||
outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (File.Exists(outputFile))
|
||||
@@ -184,7 +214,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void alignApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
internal void AlignApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = Settings.Default.Zipalign_InputFile;
|
||||
|
||||
|
||||
@@ -18,24 +18,24 @@ namespace APKToolGUI.Handlers
|
||||
public MenuItemHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
main.saveLogToFileToolStripMenuItem.Click += saveLogItem_Click;
|
||||
main.settingsToolStripMenuItem.Click += menuItemSettings_Click;
|
||||
main.exitToolStripMenuItem.Click += menuItemExit_Click;
|
||||
main.openTempFolderToolStripMenuItem.Click += openTempFolderToolStripMenuItem_Click;
|
||||
main.checkForUpdateToolStripMenuItem.Click += menuItemCheckUpdate_Click;
|
||||
main.aboutToolStripMenuItem.Click += menuItemAbout_Click;
|
||||
main.apktoolIssuesToolStripMenuItem.Click += apktoolIssuesLinkItem_Click;
|
||||
main.baksmaliIssuesToolStripMenuItem.Click += baksmaliIssuesLinkItem_Click;
|
||||
main.reportAnIsuueToolStripMenuItem.Click += reportAnIsuueToolStripMenuItem_Click;
|
||||
main.newInsToolStripMenuItem.Click += newInsToolStripMenuItem_Click;
|
||||
main.saveLogToFileToolStripMenuItem.Click += SaveLogItem_Click;
|
||||
main.settingsToolStripMenuItem.Click += MenuItemSettings_Click;
|
||||
main.exitToolStripMenuItem.Click += MenuItemExit_Click;
|
||||
main.openTempFolderToolStripMenuItem.Click += OpenTempFolderToolStripMenuItem_Click;
|
||||
main.checkForUpdateToolStripMenuItem.Click += MenuItemCheckUpdate_Click;
|
||||
main.aboutToolStripMenuItem.Click += MenuItemAbout_Click;
|
||||
main.apktoolIssuesToolStripMenuItem.Click += ApktoolIssuesLinkItem_Click;
|
||||
main.baksmaliIssuesToolStripMenuItem.Click += BaksmaliIssuesLinkItem_Click;
|
||||
main.reportAnIsuueToolStripMenuItem.Click += ReportAnIsuueToolStripMenuItem_Click;
|
||||
main.newInsToolStripMenuItem.Click += NewInsToolStripMenuItem_Click;
|
||||
}
|
||||
|
||||
private void newInsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
private void NewInsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||
}
|
||||
|
||||
private void saveLogItem_Click(object sender, EventArgs e)
|
||||
private void SaveLogItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var sfd = new SaveFileDialog())
|
||||
{
|
||||
@@ -50,7 +50,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void menuItemSettings_Click(object sender, EventArgs e)
|
||||
private void MenuItemSettings_Click(object sender, EventArgs e)
|
||||
{
|
||||
Theme theme = (Theme)Settings.Default.Theme;
|
||||
|
||||
@@ -64,23 +64,28 @@ namespace APKToolGUI.Handlers
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
private void menuItemExit_Click(object sender, EventArgs e)
|
||||
private void MenuItemExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
private void openTempFolderToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
private void OpenTempFolderToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(Program.TEMP_PATH))
|
||||
Process.Start("explorer.exe", Program.TEMP_PATH);
|
||||
else
|
||||
{
|
||||
Directory.CreateDirectory(Program.TEMP_PATH);
|
||||
Process.Start("explorer.exe", Program.TEMP_PATH);
|
||||
}
|
||||
}
|
||||
|
||||
private void menuItemCheckUpdate_Click(object sender, EventArgs e)
|
||||
private void MenuItemCheckUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.updateCheker.CheckAsync();
|
||||
}
|
||||
|
||||
private void menuItemAbout_Click(object sender, EventArgs e)
|
||||
private void MenuItemAbout_Click(object sender, EventArgs e)
|
||||
{
|
||||
Theme theme = (Theme)Settings.Default.Theme;
|
||||
|
||||
@@ -93,17 +98,17 @@ namespace APKToolGUI.Handlers
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
private void apktoolIssuesLinkItem_Click(object sender, EventArgs e)
|
||||
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)
|
||||
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)
|
||||
private void ReportAnIsuueToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Process.Start("https://github.com/AndnixSH/APKToolGUI/issues/new/choose");
|
||||
}
|
||||
|
||||
@@ -22,20 +22,19 @@ 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;
|
||||
main.button_SIGN_BrowsePublicKey.Click += Button_SIGN_BrowsePublicKey_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 += SchemeComboBox_SelectedIndexChanged;
|
||||
main.schemev2ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged;
|
||||
main.schemev3ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged;
|
||||
main.schemev4ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged;
|
||||
main.button_SIGN_Sign.Click += Button_SIGN_Sign_Click;
|
||||
main.selectKeyStoreFileBtn.Click += SelectKeyStoreFileBtn_Click;
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e)
|
||||
internal void Button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -50,7 +49,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e)
|
||||
internal void Button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -65,7 +64,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
internal void Button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -76,7 +75,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
internal async void Button_SIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -85,7 +84,7 @@ namespace APKToolGUI.Handlers
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_SIGN_InputFile.Text = ofd.FileName;
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
await main.GetApkInfo(ofd.FileName);
|
||||
main.textBox_SIGN_OutputFile.Text =
|
||||
String.Format("{0}{1}{2}_signed{3}",
|
||||
Path.GetDirectoryName(main.textBox_SIGN_InputFile.Text),
|
||||
@@ -96,7 +95,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_SIGN_Sign_Click(object sender, EventArgs e)
|
||||
internal async void Button_SIGN_Sign_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -125,7 +124,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void selectKeyStoreFileBtn_Click(object sender, EventArgs e)
|
||||
internal void SelectKeyStoreFileBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -135,7 +134,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private void schemeComboBoxChanged(object sender, EventArgs e)
|
||||
private void SchemeComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
Settings.Default.Sign_Schemev1 = main.schemev1ComboBox.SelectedIndex;
|
||||
Settings.Default.Sign_Schemev2 = main.schemev2ComboBox.SelectedIndex;
|
||||
|
||||
@@ -19,12 +19,12 @@ namespace APKToolGUI.Handlers
|
||||
public SmaliControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
main.smaliBrowseOutputBtn.Click += smaliBrowseOutputBtn_Click;
|
||||
main.smaliBrowseInputDirBtn.Click += smaliBrowseInputDirBtn_Click;
|
||||
main.comSmaliBtn.Click += comSmaliBtn_Click;
|
||||
main.smaliBrowseOutputBtn.Click += SmaliBrowseOutputBtn_Click;
|
||||
main.smaliBrowseInputDirBtn.Click += SmaliBrowseInputDirBtn_Click;
|
||||
main.comSmaliBtn.Click += ComSmaliBtn_Click;
|
||||
}
|
||||
|
||||
internal void smaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
internal void SmaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -35,7 +35,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void smaliBrowseInputDirBtn_Click(object sender, EventArgs e)
|
||||
internal void SmaliBrowseInputDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -46,7 +46,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void comSmaliBtn_Click(object sender, EventArgs e)
|
||||
internal async void ComSmaliBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.smaliUseOutputChkBox.Checked)
|
||||
{
|
||||
@@ -63,7 +63,7 @@ namespace APKToolGUI.Handlers
|
||||
return;
|
||||
}
|
||||
|
||||
main.Smali(Settings.Default.Smali_InputDir);
|
||||
await main.Smali(Settings.Default.Smali_InputDir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,10 +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;
|
||||
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
|
||||
@@ -36,12 +36,12 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void checkBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e)
|
||||
internal void CheckBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckAlignSwitch = !main.checkBox_ZIPALIGN_CheckAlignment.Checked;
|
||||
}
|
||||
|
||||
internal void button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
internal void Button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
@@ -52,7 +52,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
internal async void Button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
@@ -66,7 +66,7 @@ namespace APKToolGUI.Handlers
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_ZIPALIGN_InputFile.Text = ofd.FileName;
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
await main.GetApkInfo(ofd.FileName);
|
||||
if (!main.checkBox_ZIPALIGN_CheckAlignment.Checked)
|
||||
main.textBox_ZIPALIGN_OutputFile.Text = String.Format("{0}\\{1}_zipaligned{2}",
|
||||
Path.GetDirectoryName(ofd.FileName),
|
||||
@@ -76,7 +76,7 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_ZIPALIGN_Align_Click(object sender, EventArgs e)
|
||||
internal async void Button_ZIPALIGN_Align_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!File.Exists(main.textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Java
|
||||
|
||||
public JarProcess(string javaPath, string jarPath)
|
||||
{
|
||||
JavaPath = javaPath.Equals("java") ? "" : javaPath;
|
||||
JavaPath = string.IsNullOrWhiteSpace(javaPath) ? "java" : javaPath;
|
||||
JarPath = jarPath;
|
||||
Initialize();
|
||||
}
|
||||
@@ -38,8 +38,9 @@ namespace Java
|
||||
if (Settings.Default.UseCustomJVMArgs)
|
||||
customArgs = Settings.Default.CustomJVMArgs;
|
||||
|
||||
StartInfo.Arguments = String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args);
|
||||
Debug.WriteLine(String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args));
|
||||
string jvmArgs = string.IsNullOrWhiteSpace(customArgs) ? string.Empty : customArgs.Trim() + " ";
|
||||
StartInfo.Arguments = String.Format("{0}-jar \"{1}\" {2}", jvmArgs, JarPath, args);
|
||||
Debug.WriteLine(StartInfo.Arguments);
|
||||
return base.Start();
|
||||
}
|
||||
|
||||
|
||||
+27
-9
@@ -150,6 +150,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can't detect APKEditor version.
|
||||
/// </summary>
|
||||
internal static string CantDetectApkeditorVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("CantDetectApkeditorVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can't detect apktool version..
|
||||
/// </summary>
|
||||
@@ -735,15 +744,6 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <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>
|
||||
@@ -1104,6 +1104,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to .
|
||||
/// </summary>
|
||||
internal static string SetLanguageRestartApplication {
|
||||
get {
|
||||
return ResourceManager.GetString("SetLanguageRestartApplication", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Settings.
|
||||
/// </summary>
|
||||
@@ -1185,6 +1194,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Split APK is not selected.
|
||||
/// </summary>
|
||||
internal static string SplitApkNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("SplitApkNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to System language.
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>Über</value>
|
||||
</data>
|
||||
<data name="APKToolVersion" xml:space="preserve">
|
||||
<value>Apktool-Version</value>
|
||||
</data>
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<value>Auf Aktualisierung prüfen</value>
|
||||
</data>
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<value>Debug-Modus</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Beenden</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>Datei</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>Hilfe</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<value>Java ist nicht oder nicht korrekt installiert. Java installieren oder einen eigenen Speicherort in den Einstellungen festlegen.</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>Einstellungen für das Fehlerlesen</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>Eine neue Version ist verfügbar. Möchtest du aktualisieren?</value>
|
||||
</data>
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<value>Aktualisierung verfügbar</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>Dekompilierungsordner nicht ausgewählt!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>Datei zum Dekompilieren nicht ausgewählt!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>Datei zum Signieren nicht ausgewählt!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>Framework nicht ausgewählt!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>Fehler beim Einstellungen speichern!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>Damit die Änderungen wirksam werden, musst du das Programm neu starten. Willst du es jetzt tun?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>Datei wird nicht gefunden</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>Der Ordner existiert nicht</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Fehler</value>
|
||||
</data>
|
||||
<data name="Build" xml:space="preserve">
|
||||
<value>Build</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>Dekompilieren</value>
|
||||
</data>
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<value>Framework installieren</value>
|
||||
</data>
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<value>Signieren</value>
|
||||
</data>
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<value>Systemsprache</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<value>Möchtest du das Kontextmenü wirklich installieren?</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<value>Möchtest du das Kontextmenü wirklich entfernen?</value>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>Fertig</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>Apktool-Version wird nicht erkannt</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Dekompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>Fehlerhafte Aktualisierungsprüfung:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Signieren erfolgreich abgeschlossen. Datei gespeichert unter "{0}"</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>Abgleichen</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>Kompilieren fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>Fehler bei der Eingabe des Framework-Tags</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>Ausgewählte Datei nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>Fehler bei Auswahl des Framework-Verzeichnisses</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>Fehler bei Auswahl der Framework-Datei. Datei existiert nicht.</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>Signieren fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>Fehler - Framework-Installation wird nicht gestartet</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>Framework installieren</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>Signieren</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>Eingabedatei nicht gefunden</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>Privater Schlüssel - nicht gefunden</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>Öffentlicher Schlüssel - nicht gefunden</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>ZIP archivieren</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>Ausgewähltes Dekompilierungsverzeichnis konnte nicht erstellt werden, da es ungültige Zeichen enthält.</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>Dekompilierungsverzeichnis nicht ausgewählt</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>Ausgewähltes Framework-Verzeichnis nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>Dekompilieren</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>Dekompilieren fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>Ausführbare Datei</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>Ziel-SDK auf 29 geändert</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>Version parsen nicht möglich</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>AndroidManifest.xml repariert</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>Alle Apk-Tool-Dummys entfernt</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>APK ausgewählt:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>Ausgewählter Ordner nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>AndroidManifest.xml nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>Dekompiliertes APK-Verzeichnis existiert nicht</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>Hauptaktivität gefunden in "{0}"</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>MainActivity konnte nicht gefunden werden, manuell suchen.</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>Framework bereinigen</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Kompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zipaligning fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zipalign erfolgreich abgeschlossen. Datei gespeichert unter "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>Framework-Fehler bereinigen</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>Framework Fehlerbereinigung</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>Alles fertig!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>Framework erfolgreich installiert</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>Framework-Verzeichnis nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>Dex dekompilieren</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>Ausgewählter Ausgabeordner nicht vorhanden</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>Dex dekompilieren</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>Wird als Administrator ausgeführt. Drag & Drop wird möglicherweise nicht unterstützt</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>Drag & Drop wird unterstützt</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>Verzeichnis ist kein Android-Paket</value>
|
||||
</data>
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<value>Baksmali</value>
|
||||
</data>
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<value>Smali</value>
|
||||
</data>
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<value>APK kompilieren</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>DEX kompilieren</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>APK dekompilieren</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>DEX dekompilieren</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>APK-Info anzeigen</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>Ordner ist keine dekompilierte APK</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>Ordner ist kein dekompilierte DEX</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>Erforderliche Dateien fehlen</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>APK signieren</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>Textdatei</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>Zipalign APK</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>Unsignierte APK erstellen</value>
|
||||
</data>
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<value>Ordner META-INF existiert nicht. Übersprungen</value>
|
||||
</data>
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<value>Fehler beim Abrufen von APK-Informationen</value>
|
||||
</data>
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<value>Eingabeverzeichnis: {0}</value>
|
||||
</data>
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<value>Eingabedatei: {0}</value>
|
||||
</data>
|
||||
<data name="DeleteFile" xml:space="preserve">
|
||||
<value>Datei löschen "{0}"</value>
|
||||
</data>
|
||||
<data name="CopyFileToTemp" xml:space="preserve">
|
||||
<value>Datei "{0}" in temporäres Verzeichnis "{1}" kopieren</value>
|
||||
</data>
|
||||
<data name="CopyFolderToTemp" xml:space="preserve">
|
||||
<value>Dekompilierten Apk-Ordner "{0}" in temporäre Verzeichnis "{1}" kopieren</value>
|
||||
</data>
|
||||
<data name="DecodeDesDirExists" xml:space="preserve">
|
||||
<value>Zielverzeichnis "{0}" existiert bereits. Aktivieren "Löschen des Zielverzeichnisses erzwingen", wenn du es überschreiben möchtest.</value>
|
||||
</data>
|
||||
<data name="MoveTempApkFileToOutput" xml:space="preserve">
|
||||
<value>Temporären Ordner "{0}" in das Ausgabeverzeichnis "{1}" verschieben</value>
|
||||
</data>
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>Temporäre Apk "{0}" in das Ausgabeverzeichnis "{1}" verschieben</value>
|
||||
</data>
|
||||
<data name="ParsingApkInfo" xml:space="preserve">
|
||||
<value>APK-Informationen parsen …</value>
|
||||
</data>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>Ein Neustart ist erforderlich, um die Änderungen zu übernehmen. Möchtest du die Anwendung neu starten?</value>
|
||||
</data>
|
||||
<data name="DecompilingAllApkFiles" xml:space="preserve">
|
||||
<value>Alle APK-Dateien dekompilieren</value>
|
||||
</data>
|
||||
<data name="DetectedAsBase" xml:space="preserve">
|
||||
<value>{0} als Basis erkannt</value>
|
||||
</data>
|
||||
<data name="DetectedAsSplit" xml:space="preserve">
|
||||
<value>{0} als gesplittet erkannt</value>
|
||||
</data>
|
||||
<data name="ExtractingAllApkFiles" xml:space="preserve">
|
||||
<value>Alle APK-Dateien extrahieren</value>
|
||||
</data>
|
||||
<data name="MergeFinishedMoveDir" xml:space="preserve">
|
||||
<value>Zusammenführen abgeschlossen. Verzeichnis verschieben nach "{0}"</value>
|
||||
</data>
|
||||
<data name="MergingApk" xml:space="preserve">
|
||||
<value>APK zusammenführen</value>
|
||||
</data>
|
||||
<data name="MovingBasedirectory" xml:space="preserve">
|
||||
<value>Basisverzeichnis verschieben nach "{0}"</value>
|
||||
</data>
|
||||
<data name="DirNotExist" xml:space="preserve">
|
||||
<value>Verzeichnis "{0}" existiert nicht</value>
|
||||
</data>
|
||||
<data name="TempDirectory" xml:space="preserve">
|
||||
<value>Temp-Verzeichnis: "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorMerging" xml:space="preserve">
|
||||
<value>Zusammenführen fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="MergingApkEditor" xml:space="preserve">
|
||||
<value>APK mit APKEditor.jar zusammenführen</value>
|
||||
</data>
|
||||
<data name="Aborted" xml:space="preserve">
|
||||
<value>Abgebrochen</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>Sicher, dass du den Vorgang abbrechen willst?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>Geräte erkennen …</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Bitte warten …</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>Sicher, dass du den ADB-Server beenden willst? Möglicherweise musst du dein Gerät neu anschließen oder den Emulator neu starten.</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>Kein Gerät ausgewählt</value>
|
||||
</data>
|
||||
<data name="DeviceSelected" xml:space="preserve">
|
||||
<value>Gerät ausgewählt "{0}"</value>
|
||||
</data>
|
||||
<data name="DevicesFound" xml:space="preserve">
|
||||
<value>{0} Gerät gefunden</value>
|
||||
</data>
|
||||
<data name="InstallApkFailed" xml:space="preserve">
|
||||
<value>APK Installation fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="InstallApkSuccessful" xml:space="preserve">
|
||||
<value>APK Installation erfolgreich</value>
|
||||
</data>
|
||||
<data name="InstallingApk" xml:space="preserve">
|
||||
<value>APK installieren</value>
|
||||
</data>
|
||||
<data name="InstallingApkPath" xml:space="preserve">
|
||||
<value>APK installieren "{0}"</value>
|
||||
</data>
|
||||
<data name="NoDevicesFound" xml:space="preserve">
|
||||
<value>Keine Geräte gefunden. Vergewissere dich, dass dein Gerät mit dem Computer verbunden ist und das ADB-Debugging aktiviert ist. Wenn du einen Emulator verwendest, starte ihn neu und warte, bis er hochgefahren ist</value>
|
||||
</data>
|
||||
<data name="TimeEnded" xml:space="preserve">
|
||||
<value>Beendet: {0}</value>
|
||||
</data>
|
||||
<data name="TimeStarted" xml:space="preserve">
|
||||
<value>Gestartet: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>Es ist erforderlich, den Framework-Cache nach einer Änderung der Apktool-Version zu löschen, um unerwartete Fehler zu vermeiden. Möchtest du ihn jetzt löschen?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>Temp-Ordner löschen</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>Ordner löschen: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>Verzeichnis "{0}" existiert nicht</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>Kompilier-Ausgabeordner öffnen</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>Dekompilier-Ausgabeordner öffnen</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Apktool.yml repariert</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Datei "{0}" nach "{1}" kopieren</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Split-APK nicht ausgewählt</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>APKEditor Version wird nicht erkannt</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value>Sprache installiert. Programm neu starten?</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -429,9 +429,6 @@
|
||||
<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>
|
||||
@@ -462,9 +459,6 @@
|
||||
<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>
|
||||
@@ -516,4 +510,7 @@
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>A váratlan hibák elkerülése érdekében az Apktool verziójának módosítása után törölni kell a framework gyorsítótárát. Szeretné most törölni?</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value>A nyelv be van állítva. Újra akarja indítani az alkalmazást?</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>バージョン情報</value>
|
||||
</data>
|
||||
<data name="APKToolVersion" xml:space="preserve">
|
||||
<value>Apktool のバージョン</value>
|
||||
</data>
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<value>更新を確認する</value>
|
||||
</data>
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<value>デバッグモード</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>終了</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>ファイル</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>ヘルプ</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>設定</value>
|
||||
</data>
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<value>Java がインストールされていないか、正しくインストールされていません。 Java をインストールするか、設定でカスタムの場所を設定してください。</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>設定の読み取りエラーです!</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>新しいバージョン利用可能です。 更新しますか?</value>
|
||||
</data>
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<value>利用可能な更新はありません。</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>デコード先のフォルダーが未選択です!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>デコードするファイルが未選択です!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>署名用のファイルが未選択です!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>フレームワークが未選択です!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>設定の保存エラーです!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>設定を有効化するにはプログラムを再起動してください。 今すぐしますか?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>ファイルが見つかりません</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>フォルダーが存在しません</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>エラー</value>
|
||||
</data>
|
||||
<data name="Build" xml:space="preserve">
|
||||
<value>ビルド</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>デコード</value>
|
||||
</data>
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<value>フレームワークをインストール</value>
|
||||
</data>
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<value>署名</value>
|
||||
</data>
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<value>システムの言語</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<value>コンテキストメニューをインストールしますか?</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<value>コンテキストメニューを削除しますか?</value>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>完了</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>apktool のバージョンを検出できません。</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>デコンパイルが正常に完了しました。 出力先のディレクトリ: {0}</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>更新の確認でエラーが発生しました:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>署名は正常に完了しました。 ファイルの保存先: {0}</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>最適化中</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>コンパイルに失敗しました</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>フレームワークタグの入力エラーです。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>選択したファイルは存在しません。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>フレームワークディレクトリの選択中にエラーが発生しました。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>フレームワークファイルの選択中にエラーが発生しました。 ファイルが存在しません。</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>署名に失敗しました。</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>エラーが発生しました。 フレームワークのインストールが開始されていません。</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>フレームワークをインストール</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>署名</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>入力先のファイルがありません。</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>秘密鍵がありません。</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>公開鍵がありません。</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>ZIP アーカイブ</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>無効な文字が含まれているため、選択したデコンパイルディレクトリを作成できませんでした。</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>デコンパイルディレクトリが未選択です。</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>選択したフレームワークディレクトリが存在しません。</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>デコード中</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>デコンパイルに失敗しました</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>実行可能なファイル</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>ターゲット SDK を 29 に変更する</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>バージョンの解析に失敗しました</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>AndroidManifest.xml を修正しました</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>すべての ApkTook ダミーを削除しました</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>選択した APK:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>選択したフォルダーは存在しません。</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>AndroidManifest.xml が存在しません</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>デコンパイルされた APK ディレクトリが存在しません</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>「{0}」でメインアクティビティが見つかりました</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>メインアクティビティが見つかりませんでした。 手動で検索してください</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>フレームワークを消去</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>コンパイルが正常に完了しました。 出力先ディレクトリ: {0}</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zipaligning に失敗しました</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zipalign が正常に完了しました。 ファイルは「{0}」に保存されました</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>フレームワークの消去でエラーが発生しました</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>フレームワークキャッシュを消去しました</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>すべて完了しました!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>フレームワークが正常にインストールされました</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>フレームワークディレクトリが存在しません</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>DEX をデコンパイル中</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>選択した出力先フォルダーが存在しません。</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>DEX をコンパイル中</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>管理者として実行中です。 ドラッグ & ドロップはサポートされていない可能性があります</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>ドラッグ & ドロップはサポートされています</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>このディレクトリは Android パッケージではありません</value>
|
||||
</data>
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<value>Baksmali</value>
|
||||
</data>
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<value>Smali</value>
|
||||
</data>
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<value>APK をコンパイル</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>DEX を組み立て</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>APK をデコンパイル</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>DEX を分解</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>APK 情報を表示</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>このフォルダーはデコンパイルされた APK ではありません</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>このフォルダーはデコンパイルされた DEX ではありません</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>必要なファイルが見つかりません</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>APK を署名</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>テキストファイル</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>APK を最適化</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>未署名の APK を作成</value>
|
||||
</data>
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<value>META-INF フォルダーがありません。 スキップしました</value>
|
||||
</data>
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<value>アプリ情報の取得中にエラーが発生しました</value>
|
||||
</data>
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<value>入力先のディレクトリ: {0}</value>
|
||||
</data>
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<value>入力ファイル: {0}</value>
|
||||
</data>
|
||||
<data name="DeleteFile" xml:space="preserve">
|
||||
<value>「{0}」のファイルを削除</value>
|
||||
</data>
|
||||
<data name="CopyFileToTemp" xml:space="preserve">
|
||||
<value>「{0}」のファイルを一時ディレクトリ「{1}」にコピーします</value>
|
||||
</data>
|
||||
<data name="CopyFolderToTemp" xml:space="preserve">
|
||||
<value>デコンパイルされた apk フォルダー「{0}」を一時ディレクトリの「{1}」コピーします</value>
|
||||
</data>
|
||||
<data name="DecodeDesDirExists" xml:space="preserve">
|
||||
<value>宛先のディレクトリ「{0}」は既に存在します。 上書きする場合は「宛先のディレクトリを強制的に削除」を有効化してください。</value>
|
||||
</data>
|
||||
<data name="MoveTempApkFileToOutput" xml:space="preserve">
|
||||
<value>一時フォルダー「{0}」を出力先ディレクトリ「{1}」に移動します</value>
|
||||
</data>
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>一時 APK「{0}」を出力先ディレクトリ「{1}」に移動します</value>
|
||||
</data>
|
||||
<data name="ParsingApkInfo" xml:space="preserve">
|
||||
<value>APK 情報を解析中です...</value>
|
||||
</data>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>変更を適用するには再起動が必要です。 アプリを再起動しますか?</value>
|
||||
</data>
|
||||
<data name="DecompilingAllApkFiles" xml:space="preserve">
|
||||
<value>すべての APK ファイルをデコンパイル中</value>
|
||||
</data>
|
||||
<data name="DetectedAsBase" xml:space="preserve">
|
||||
<value>{0} がベースとして検出されました</value>
|
||||
</data>
|
||||
<data name="DetectedAsSplit" xml:space="preserve">
|
||||
<value>{0} が分割として検出されました</value>
|
||||
</data>
|
||||
<data name="ExtractingAllApkFiles" xml:space="preserve">
|
||||
<value>すべての APK ファイルを展開中</value>
|
||||
</data>
|
||||
<data name="MergeFinishedMoveDir" xml:space="preserve">
|
||||
<value>統合が完了しました。 ディレクトリを「{0}」に移動中です</value>
|
||||
</data>
|
||||
<data name="MergingApk" xml:space="preserve">
|
||||
<value>APK を統合中</value>
|
||||
</data>
|
||||
<data name="MovingBasedirectory" xml:space="preserve">
|
||||
<value>ベースディレクトリを「{0}」に移動中です</value>
|
||||
</data>
|
||||
<data name="DirNotExist" xml:space="preserve">
|
||||
<value>ディレクトリ「{0}」は存在しません</value>
|
||||
</data>
|
||||
<data name="TempDirectory" xml:space="preserve">
|
||||
<value>一時ディレクトリ: {0}</value>
|
||||
</data>
|
||||
<data name="ErrorMerging" xml:space="preserve">
|
||||
<value>統合に失敗しました</value>
|
||||
</data>
|
||||
<data name="MergingApkEditor" xml:space="preserve">
|
||||
<value>APKEditor.jar を使用して APK を統合する</value>
|
||||
</data>
|
||||
<data name="Aborted" xml:space="preserve">
|
||||
<value>中断しました</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>プロセスをキャンセルしますか?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>デバイスを取得中です...</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>お待ちください...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>ADB サーバーを強制終了しますか? デバイスを再接続するか、エミュレーターを再起動する必要があるかもしれません</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>デバイスが未選択です</value>
|
||||
</data>
|
||||
<data name="DeviceSelected" xml:space="preserve">
|
||||
<value>選択されたデバイス: {0}</value>
|
||||
</data>
|
||||
<data name="DevicesFound" xml:space="preserve">
|
||||
<value>{0} 件のデバイスを検出</value>
|
||||
</data>
|
||||
<data name="InstallApkFailed" xml:space="preserve">
|
||||
<value>APK のインストールに失敗しました</value>
|
||||
</data>
|
||||
<data name="InstallApkSuccessful" xml:space="preserve">
|
||||
<value>APK のインストールに成功しました</value>
|
||||
</data>
|
||||
<data name="InstallingApk" xml:space="preserve">
|
||||
<value>APK をインストール中</value>
|
||||
</data>
|
||||
<data name="InstallingApkPath" xml:space="preserve">
|
||||
<value>APK「{0}」をインストール中です</value>
|
||||
</data>
|
||||
<data name="NoDevicesFound" xml:space="preserve">
|
||||
<value>デバイスはありません。 adb デバイスが ON になっている状態でデバイスがコンピューターに接続されていることを確認してください。 エミュレーターを使用する場合は、再起動して起動まで待機します</value>
|
||||
</data>
|
||||
<data name="TimeEnded" xml:space="preserve">
|
||||
<value>終了時間: {0}</value>
|
||||
</data>
|
||||
<data name="TimeStarted" xml:space="preserve">
|
||||
<value>開始時間: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>予期しないエラーを回避するには、Apktook のバージョンを変更後にフレームワークキャッシュを消去する必要があります。 今すぐに消去しますか?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>一時フォルダーを削除中</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>削除するフォルダー: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>ディレクトリ「{0}」は存在しません</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>コンパイル出力先フォルダーを開く</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>デコンパイル出力先フォルダーを開く</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>apktool.yml を修正しました</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>「{0}」のファイルを「{1}」にコピー</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>分割 APK は未選択です</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value> APKEditor バージョンの検出ができません</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
</root>
|
||||
@@ -462,9 +462,6 @@
|
||||
<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>
|
||||
@@ -537,4 +534,13 @@
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Copy file "{0}" to "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Split APK is not selected</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>Can't detect APKEditor version</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
</root>
|
||||
@@ -429,9 +429,6 @@
|
||||
<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>
|
||||
@@ -462,9 +459,6 @@
|
||||
<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>
|
||||
@@ -516,4 +510,37 @@
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>После изменения версии Apktool необходимо очистить кеш. Вы хотите очистить его сейчас?</value>
|
||||
</data>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>Для применения изменений требуется перезапуск. Перезапустить приложение сейчас?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>Очистка временной папки</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>Удаление папки: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>Директория "{0}" не существует</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>Открыть папку скомпилированных файлов</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>Открыть папку декомпилированных файлов</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Исправлен apktool.yml</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Копирование файла "{0}" в "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Split APK не выбран</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>Не удалось определить версию APKEditor</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value>Язык установлен. Хотите перезапустить программу?</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>Hakkında</value>
|
||||
</data>
|
||||
<data name="APKToolVersion" xml:space="preserve">
|
||||
<value>Apktool sürümü</value>
|
||||
</data>
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<value>Güncellemeleri kontrol et</value>
|
||||
</data>
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<value>Hata ayıklama modu</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Çıkış</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>Dosya</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>Yardım</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Ayarlar</value>
|
||||
</data>
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<value>Java yüklü değil veya yanlış yüklenmiş. Lütfen Java’yı yükleyin veya Ayarlar’dan özel konumu ayarlayın</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>Ayarlar okunurken hata oluştu!</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>Yeni bir sürüm mevcut. Güncellemek ister misiniz?</value>
|
||||
</data>
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<value>Güncelleme mevcut değil.</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>Çözümleme klasörü seçilmedi!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>Çözümleme için dosya seçilmedi!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>İmzalama için dosya seçilmedi!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>Çerçeve seçilmedi!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>Ayarlar kaydedilirken hata oluştu!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>Değişikliklerin etkili olması için programı yeniden başlatmanız gerekiyor. Şimdi yapmak ister misiniz?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>Dosya bulunamadı</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>Klasör mevcut değil</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Hata</value>
|
||||
</data>
|
||||
<data name="Build" xml:space="preserve">
|
||||
<value>Derle</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>Çözümle</value>
|
||||
</data>
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<value>Çerçeveyi yükle</value>
|
||||
</data>
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<value>İmzala</value>
|
||||
</data>
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<value>Sistem dili</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<value>Bağlam menüsünü gerçekten yüklemek istiyor musunuz?</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<value>Bağlam menüsünü gerçekten kaldırmak istiyor musunuz?</value>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>Tamamlandı</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>Apktool sürümü tespit edilemedi.</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Çözümleme başarıyla tamamlandı. Çıkış dizini "{0}".</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>Güncelleme kontrolü hatası:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>İmzalama başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi.</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>Hizalama</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>Derleme başarısız</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>Çerçeve etiketi girilirken hata oluştu.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>Seçilen dosya mevcut değil.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>Çerçeve dizini seçilirken hata oluştu.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>Çerçeve dosyası seçilirken hata oluştu. Dosya mevcut değil.</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>İmzalama başarısız.</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>Hata. Çerçeve kurulumu başlatılmadı.</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>Çerçeve yükleniyor</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>İmzalanıyor</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>Giriş dosyası bulunamadı.</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>Özel anahtar bulunamadı.</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>Genel anahtar bulunamadı.</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>ZIP arşivleri</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>Seçilen çözümleme dizini, geçersiz karakterler içerdiği için oluşturulamadı.</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>Çözümleme dizini seçilmedi.</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>Seçilen çerçeve dizini mevcut değil.</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>Çözümleniyor</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>Çözümleme başarısız</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>Çalıştırılabilir dosya</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>Hedef SDK 29’a değiştirildi</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>Sürüm ayrıştırılamadı</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>AndroidManifest.xml düzeltildi</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>Tüm ApkTool kuklaları kaldırıldı</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>APK Seçildi:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>Seçilen klasör mevcut değil.</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>AndroidManifest.xml mevcut değil</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>Çözümlenmiş APK dizini mevcut değil</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>Ana aktivite "{0}" içinde bulundu</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>MainActivity bulunamadı. Lütfen manuel olarak bulun</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>Çerçeve temizleniyor</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Derleme başarıyla tamamlandı. Çıkış dizini "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zipalign başarısız</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zipalign başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>Çerçeve temizlenirken hata oluştu</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>Çerçeve önbelleği temizlendi</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>Hepsi tamamlandı!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>Çerçeve başarıyla yüklendi</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>Çerçeve dizini mevcut değil</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>Dex çözümlemesi yapılıyor</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>Seçilen çıkış klasörü mevcut değil.</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>Dex derleniyor</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>Yönetici olarak çalışıyorsunuz. Sürükle ve bırak desteklenmeyebilir</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>Sürükle ve bırak destekleniyor</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>Bu dizin bir Android paketi değil</value>
|
||||
</data>
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<value>Baksmali</value>
|
||||
</data>
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<value>Smali</value>
|
||||
</data>
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<value>APK’yı derle</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>DEX’i birleştir</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>APK’yı çözümle</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>DEX’i parçala</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>APK Bilgilerini Görüntüle</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>Bu klasör çözümlenmiş bir APK değil</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>Bu klasör çözümlenmiş bir DEX değil</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>Gerekli dosyalar eksik</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>APK’yı imzala</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>Metin dosyası</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>APK’yı zipalign yap</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>İmzasız APK oluşturuluyor</value>
|
||||
</data>
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<value>META-INF klasörü mevcut değil. Atlandı</value>
|
||||
</data>
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<value>APK bilgileri alınırken hata oluştu</value>
|
||||
</data>
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<value>Giriş dizini: {0}</value>
|
||||
</data>
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<value>Giriş dosyası: {0}</value>
|
||||
</data>
|
||||
<data name="DeleteFile" xml:space="preserve">
|
||||
<value>"{0}" dosyasını sil</value>
|
||||
</data>
|
||||
<data name="CopyFileToTemp" xml:space="preserve">
|
||||
<value>"{0}" dosyasını "{1}" geçici dizinine kopyala</value>
|
||||
</data>
|
||||
<data name="CopyFolderToTemp" xml:space="preserve">
|
||||
<value>Çözümlenmiş apk klasörünü "{0}" "{1}" geçici dizinine kopyala</value>
|
||||
</data>
|
||||
<data name="DecodeDesDirExists" xml:space="preserve">
|
||||
<value>Hedef dizin "{0}" zaten mevcut. Üzerine yazmak istiyorsanız "Hedef dizini zorla sil" seçeneğini etkinleştirin.</value>
|
||||
</data>
|
||||
<data name="MoveTempApkFileToOutput" xml:space="preserve">
|
||||
<value>Geçici klasörü "{0}" çıkış dizinine "{1}" taşı</value>
|
||||
</data>
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>Geçici apk’yı "{0}" çıkış dizinine "{1}" taşı</value>
|
||||
</data>
|
||||
<data name="ParsingApkInfo" xml:space="preserve">
|
||||
<value>APK Bilgileri Ayrıştırılıyor...</value>
|
||||
</data>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>Değişiklikleri uygulamak için yeniden başlatma gerekiyor. Uygulamayı şimdi yeniden başlatmak ister misiniz?</value>
|
||||
</data>
|
||||
<data name="DecompilingAllApkFiles" xml:space="preserve">
|
||||
<value>Tüm APK dosyaları çözümleniyor</value>
|
||||
</data>
|
||||
<data name="DetectedAsBase" xml:space="preserve">
|
||||
<value>{0} temel olarak algılandı</value>
|
||||
</data>
|
||||
<data name="DetectedAsSplit" xml:space="preserve">
|
||||
<value>{0} bölünmüş olarak algılandı</value>
|
||||
</data>
|
||||
<data name="ExtractingAllApkFiles" xml:space="preserve">
|
||||
<value>Tüm APK dosyaları çıkarılıyor</value>
|
||||
</data>
|
||||
<data name="MergeFinishedMoveDir" xml:space="preserve">
|
||||
<value>Birleştirme tamamlandı. Dizin "{0}" konumuna taşınıyor</value>
|
||||
</data>
|
||||
<data name="MergingApk" xml:space="preserve">
|
||||
<value>APK birleştiriliyor</value>
|
||||
</data>
|
||||
<data name="MovingBasedirectory" xml:space="preserve">
|
||||
<value>Temel dizin "{0}" konumuna taşınıyor</value>
|
||||
</data>
|
||||
<data name="DirNotExist" xml:space="preserve">
|
||||
<value>"{0}" dizini mevcut değil</value>
|
||||
</data>
|
||||
<data name="TempDirectory" xml:space="preserve">
|
||||
<value>Geçici dizin: "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorMerging" xml:space="preserve">
|
||||
<value>Birleştirme başarısız</value>
|
||||
</data>
|
||||
<data name="MergingApkEditor" xml:space="preserve">
|
||||
<value>APK, APKEditor.jar kullanılarak birleştiriliyor</value>
|
||||
</data>
|
||||
<data name="Aborted" xml:space="preserve">
|
||||
<value>İptal edildi</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>İşlemi iptal etmek istediğinizden emin misiniz?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>Cihazlar alınıyor...</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Lütfen bekleyin...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>ADB sunucusunu sonlandırmak istediğinizden emin misiniz? Cihazınızı yeniden bağlamanız veya emülatörü yeniden başlatmanız gerekebilir</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>Cihaz seçilmedi</value>
|
||||
</data>
|
||||
<data name="DeviceSelected" xml:space="preserve">
|
||||
<value>Cihaz seçildi "{0}"</value>
|
||||
</data>
|
||||
<data name="DevicesFound" xml:space="preserve">
|
||||
<value>{0} cihaz bulundu</value>
|
||||
</data>
|
||||
<data name="InstallApkFailed" xml:space="preserve">
|
||||
<value>APK Kurulumu başarısız</value>
|
||||
</data>
|
||||
<data name="InstallApkSuccessful" xml:space="preserve">
|
||||
<value>APK Kurulumu başarılı</value>
|
||||
</data>
|
||||
<data name="InstallingApk" xml:space="preserve">
|
||||
<value>APK yükleniyor</value>
|
||||
</data>
|
||||
<data name="InstallingApkPath" xml:space="preserve">
|
||||
<value>"{0}" APK’sı yükleniyor</value>
|
||||
</data>
|
||||
<data name="NoDevicesFound" xml:space="preserve">
|
||||
<value>Cihaz bulunamadı. Cihazınızın bilgisayara bağlı olduğundan ve adb hata ayıklamasının açık olduğundan emin olun. Emülatör kullanıyorsanız, yeniden başlatın ve açılmasını bekleyin</value>
|
||||
</data>
|
||||
<data name="TimeEnded" xml:space="preserve">
|
||||
<value>Bitiş zamanı: {0}</value>
|
||||
</data>
|
||||
<data name="TimeStarted" xml:space="preserve">
|
||||
<value>Başlangıç zamanı: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>Apktool sürümü değiştirildikten sonra beklenmedik hataları önlemek için çerçeve önbelleğini temizlemek gerekiyor. Şimdi temizlemek ister misiniz?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>Geçici klasör temizleniyor</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>Klasör siliniyor: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>"{0}" dizini mevcut değil</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>Derleme çıkış klasörünü aç</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>Çözümleme çıkış klasörünü aç</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>apktool.yml düzeltildi</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>"{0}" dosyasını "{1}" konumuna kopyala</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Bölünmüş APK seçilmedi</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>APKEditor sürümü tespit edilemedi</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>Giới thiệu</value>
|
||||
</data>
|
||||
<data name="APKToolVersion" xml:space="preserve">
|
||||
<value>Phiên bản Apktool</value>
|
||||
</data>
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<value>Kiểm tra cập nhật</value>
|
||||
</data>
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<value>Chế độ gỡ lỗi</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Thoát</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>Tệp</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>Trợ giúp</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Cài đặt</value>
|
||||
</data>
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<value>Java chưa được cài đặt hoặc đã cài đặt không đúng. Vui lòng cài đặt Java hoặc đặt vị trí tùy chỉnh trong Cài đặt</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>Lỗi đọc cài đặt!</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>Có phiên bản mới. Bạn có muốn cập nhật không?</value>
|
||||
</data>
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<value>Không có bản cập nhật nào.</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>Thư mục dịch ngược chưa được chọn!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>Tệp để dịch ngược chưa được chọn!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>Tệp để ký chưa được chọn!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>Framework chưa được chọn!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>Lỗi lưu cài đặt!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>Để các thay đổi có hiệu lực, bạn phải khởi động lại chương trình. Bạn có muốn thực hiện ngay bây giờ không?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>Không tìm thấy tệp</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>Thư mục không tồn tại</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Lỗi</value>
|
||||
</data>
|
||||
<data name="Build" xml:space="preserve">
|
||||
<value>Biên dịch</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>Dịch ngược</value>
|
||||
</data>
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<value>Cài đặt framework</value>
|
||||
</data>
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<value>Ký</value>
|
||||
</data>
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<value>Ngôn ngữ hệ thống</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<value>Bạn có thực sự muốn cài đặt menu ngữ cảnh không?</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<value>Bạn có thực sự muốn xóa menu ngữ cảnh không?</value>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>Hoàn tất</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>Không thể phát hiện phiên bản apktool.</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Dịch ngược thành công. Thư mục đầu ra "{0}".</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>Lỗi kiểm tra cập nhật:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Ký thành công. Tệp đã được lưu vào "{0}".</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>Đang căn chỉnh</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>Biên dịch thất bại</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>Lỗi nhập thẻ framework.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>Tệp đã chọn không tồn tại.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>Lỗi chọn thư mục framework.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>Lỗi chọn tệp framework. Tệp không tồn tại.</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>Ký thất bại.</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>Lỗi. Việc cài đặt framework chưa được bắt đầu.</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>Đang cài đặt framework</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>Đang ký</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>Không tìm thấy tệp đầu vào.</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>Không tìm thấy khóa riêng.</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>Không tìm thấy khóa công khai.</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>Tệp nén ZIP</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>Thư mục dịch ngược đã chọn không thể được tạo vì chứa các ký tự không hợp lệ.</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>Thư mục dịch ngược chưa được chọn.</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>Thư mục framework đã chọn không tồn tại.</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>Đang dịch ngược</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>Dịch ngược thất bại</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>Tệp thực thi</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>Đã thay đổi target SDK thành 29</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>Phân tích phiên bản thất bại</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>Đã sửa tệp AndroidManifest.xml</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>Đã xóa tất cả các tệp giả của ApkTool</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>APK đã chọn:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>Thư mục đã chọn không tồn tại.</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>Tệp AndroidManifest.xml không tồn tại</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>Thư mục APK đã dịch ngược không tồn tại</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>Đã tìm thấy activity chính trong "{0}"</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>Không thể tìm thấy MainActivity. Vui lòng tìm thủ công</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>Đang xóa Framework</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Biên dịch thành công. Thư mục đầu ra "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zipalign thất bại</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zipalign thành công. Tệp đã được lưu vào "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>Lỗi xóa framework</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>Đã xóa bộ nhớ đệm của Framework</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>Đã xong tất cả!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>Framework đã được cài đặt thành công</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>Thư mục Framework không tồn tại</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>Đang dịch ngược dex</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>Thư mục đầu ra đã chọn không tồn tại.</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>Đang biên dịch dex</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>Bạn đang chạy với quyền quản trị viên. Kéo và thả có thể không được hỗ trợ</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>Kéo và thả được hỗ trợ</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>Thư mục này không phải là một gói Android</value>
|
||||
</data>
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<value>Baksmali</value>
|
||||
</data>
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<value>Smali</value>
|
||||
</data>
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<value>Zipalign</value>
|
||||
</data>
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<value>Biên dịch APK</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>Biên dịch DEX</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>Dịch ngược APK</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>Dịch ngược DEX</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>Xem thông tin APK</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>Thư mục này không phải là một APK đã được dịch ngược</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>Thư mục này không phải là một DEX đã được dịch ngược</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>Các tệp cần thiết bị thiếu</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>Ký APK</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>Tệp văn bản</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>Zipalign APK</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>Đang tạo APK chưa ký</value>
|
||||
</data>
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<value>Thư mục META-INF không tồn tại. Đã bỏ qua</value>
|
||||
</data>
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<value>Đã xảy ra lỗi khi lấy thông tin APK</value>
|
||||
</data>
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<value>Thư mục đầu vào: {0}</value>
|
||||
</data>
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<value>Tệp đầu vào: {0}</value>
|
||||
</data>
|
||||
<data name="DeleteFile" xml:space="preserve">
|
||||
<value>Xóa tệp "{0}"</value>
|
||||
</data>
|
||||
<data name="CopyFileToTemp" xml:space="preserve">
|
||||
<value>Sao chép tệp "{0}" vào thư mục tạm "{1}"</value>
|
||||
</data>
|
||||
<data name="CopyFolderToTemp" xml:space="preserve">
|
||||
<value>Sao chép thư mục apk đã dịch ngược "{0}" vào thư mục tạm "{1}"</value>
|
||||
</data>
|
||||
<data name="DecodeDesDirExists" xml:space="preserve">
|
||||
<value>Thư mục đích "{0}" đã tồn tại. Bật "Buộc xóa thư mục đích" nếu bạn muốn ghi đè lên nó.</value>
|
||||
</data>
|
||||
<data name="MoveTempApkFileToOutput" xml:space="preserve">
|
||||
<value>Di chuyển thư mục tạm "{0}" đến thư mục đầu ra "{1}"</value>
|
||||
</data>
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>Di chuyển apk tạm "{0}" đến thư mục đầu ra "{1}"</value>
|
||||
</data>
|
||||
<data name="ParsingApkInfo" xml:space="preserve">
|
||||
<value>Đang phân tích thông tin APK...</value>
|
||||
</data>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>Cần khởi động lại để áp dụng các thay đổi. Bạn có muốn khởi động lại ứng dụng không?</value>
|
||||
</data>
|
||||
<data name="DecompilingAllApkFiles" xml:space="preserve">
|
||||
<value>Đang dịch ngược tất cả các tệp APK</value>
|
||||
</data>
|
||||
<data name="DetectedAsBase" xml:space="preserve">
|
||||
<value>{0} được phát hiện là base</value>
|
||||
</data>
|
||||
<data name="DetectedAsSplit" xml:space="preserve">
|
||||
<value>{0} được phát hiện là split</value>
|
||||
</data>
|
||||
<data name="ExtractingAllApkFiles" xml:space="preserve">
|
||||
<value>Đang giải nén tất cả các tệp APK</value>
|
||||
</data>
|
||||
<data name="MergeFinishedMoveDir" xml:space="preserve">
|
||||
<value>Hợp nhất hoàn tất. Đang di chuyển thư mục đến "{0}"</value>
|
||||
</data>
|
||||
<data name="MergingApk" xml:space="preserve">
|
||||
<value>Đang hợp nhất APK</value>
|
||||
</data>
|
||||
<data name="MovingBasedirectory" xml:space="preserve">
|
||||
<value>Đang di chuyển thư mục base đến "{0}"</value>
|
||||
</data>
|
||||
<data name="DirNotExist" xml:space="preserve">
|
||||
<value>Thư mục "{0}" không tồn tại</value>
|
||||
</data>
|
||||
<data name="TempDirectory" xml:space="preserve">
|
||||
<value>Thư mục tạm: "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorMerging" xml:space="preserve">
|
||||
<value>Hợp nhất thất bại</value>
|
||||
</data>
|
||||
<data name="MergingApkEditor" xml:space="preserve">
|
||||
<value>Đang hợp nhất APK bằng APKEditor.jar</value>
|
||||
</data>
|
||||
<data name="Aborted" xml:space="preserve">
|
||||
<value>Đã hủy</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>Bạn có chắc muốn hủy tiến trình không?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>Đang lấy danh sách thiết bị...</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Vui lòng đợi...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>Bạn có chắc muốn tắt máy chủ ADB không? Bạn có thể cần kết nối lại thiết bị hoặc khởi động lại trình giả lập</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>Thiết bị chưa được chọn</value>
|
||||
</data>
|
||||
<data name="DeviceSelected" xml:space="preserve">
|
||||
<value>Đã chọn thiết bị "{0}"</value>
|
||||
</data>
|
||||
<data name="DevicesFound" xml:space="preserve">
|
||||
<value>Đã tìm thấy {0} thiết bị</value>
|
||||
</data>
|
||||
<data name="InstallApkFailed" xml:space="preserve">
|
||||
<value>Cài đặt APK thất bại</value>
|
||||
</data>
|
||||
<data name="InstallApkSuccessful" xml:space="preserve">
|
||||
<value>Cài đặt APK thành công</value>
|
||||
</data>
|
||||
<data name="InstallingApk" xml:space="preserve">
|
||||
<value>Đang cài đặt APK</value>
|
||||
</data>
|
||||
<data name="InstallingApkPath" xml:space="preserve">
|
||||
<value>Đang cài đặt APK "{0}"</value>
|
||||
</data>
|
||||
<data name="NoDevicesFound" xml:space="preserve">
|
||||
<value>Không tìm thấy thiết bị nào. Hãy chắc chắn rằng thiết bị của bạn được kết nối với máy tính và đã bật chế độ gỡ lỗi adb. Nếu bạn sử dụng trình giả lập, hãy khởi động lại và đợi cho đến khi nó khởi động xong</value>
|
||||
</data>
|
||||
<data name="TimeEnded" xml:space="preserve">
|
||||
<value>Thời gian kết thúc: {0}</value>
|
||||
</data>
|
||||
<data name="TimeStarted" xml:space="preserve">
|
||||
<value>Thời gian bắt đầu: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>Cần phải xóa bộ nhớ đệm của framework sau khi thay đổi phiên bản Apktool để tránh các lỗi không mong muốn. Bạn có muốn xóa ngay bây giờ không?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>Đang xóa thư mục tạm</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>Đang xóa thư mục: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>Thư mục "{0}" không tồn tại</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>Mở thư mục đầu ra biên dịch</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>Mở thư mục đầu ra dịch ngược</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Đã sửa tệp apktool.yml</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Sao chép tệp "{0}" đến "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Split APK chưa được chọn</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>Không thể phát hiện phiên bản APKEditor</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
@@ -59,353 +59,353 @@
|
||||
: 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">
|
||||
<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">
|
||||
<data name="APKToolVersion" xml:space="preserve">
|
||||
<value>Apktool 版本</value>
|
||||
</data>
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<data name="CheckForUpdate" xml:space="preserve">
|
||||
<value>检查更新</value>
|
||||
</data>
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<data name="DebugMode" xml:space="preserve">
|
||||
<value>调试模式</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="File" xml:space="preserve">
|
||||
<data name="File" xml:space="preserve">
|
||||
<value>文件</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>帮助</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>设置</value>
|
||||
</data>
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<data name="ErrorJavaDetect" xml:space="preserve">
|
||||
<value>Java 没有安装或安装不正确。该程序将被关闭。</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>读取设置时出错!</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>新版本已经推出。你想更新吗?</value>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>新版本可用。是否要更新?</value>
|
||||
</data>
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<data name="UpdateNoUpdates" xml:space="preserve">
|
||||
<value>没有更新可用。</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>未选择反编译文件夹!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>未选择用于反编译的文件!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>未选择用于签名的文件!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>Framework 未选择!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>保存设置时出错!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>为了使这些更改生效,你必须重新启动程序。你想立即重启吗?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>未找到文件</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>文件夹不存在</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>错误</value>
|
||||
</data>
|
||||
<data name="Build" xml:space="preserve">
|
||||
<data name="Build" xml:space="preserve">
|
||||
<value>构建</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>反编译</value>
|
||||
</data>
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<data name="InstallFramework" xml:space="preserve">
|
||||
<value>安装 Framework</value>
|
||||
</data>
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<data name="Sign" xml:space="preserve">
|
||||
<value>签名</value>
|
||||
</data>
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<data name="SystemLanguage" xml:space="preserve">
|
||||
<value>系统语言</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<data name="DoYouRealyWantToInstallCM" xml:space="preserve">
|
||||
<value>你真的想安装上下文菜单吗?</value>
|
||||
</data>
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<data name="DoYouRealyWantToRemoveCM" xml:space="preserve">
|
||||
<value>你真的想删除上下文菜单吗?</value>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>完成</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>无法检测 apktool 版本。</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>反编译成功完成。输出目录"{0}"。</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>检查更新错误:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>签名成功完成。文件保存到"{0}"。</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>正在对齐</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>编译失败</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>输入 Framework 标签错误。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>所选文件不存在。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>选择 Framework 目录错误。</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>选择 Framework 文件时出错。该文件不存在。</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>签名失败。</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>错误。Framework 安装没有开始。</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>正在安装 Framework</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>正在签名</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>未找到输入文件。</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>未找到私钥。</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>未找到公钥。</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>ZIP 存档</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>所选的反编译目录无法创建,因为包含无效的字符。</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>未选择反编译目录。</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>所选的 Framework 目录不存在。</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>正在反编译</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>反编译失败</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>可执行文件</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>更改目标 SDK 到 29</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>分析版本失败</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>修复 AndroidManifest.xml</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>删除所有 ApkTool 假象</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>APK 选择:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>所选的文件夹不存在。</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>AndroidManifest.xml 不存在</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>反编译的 APK 目录不存在</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>在"{0}"发现主要 Activity</value>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>在 "{0}" 找到主要 Activity</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>无法找到 MainActivity。请手动找到它</value>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>找不到 MainActivity。请手动查找</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>正在清理 Framework</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>编译成功完成。输出目录"{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zip 对齐失败</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zip 对齐成功完成。文件保存到 "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>清除 Framework 错误</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>Framework 缓存已清除</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>全部完成!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>Framework 已成功安装</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>Framework 目录不存在</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>正在反编译 dex</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>所选的输出文件夹不存在。</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>正在编译 dex</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>您正在以管理员身份运行。不支持拖放。</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>支持拖放</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>此目录不是安卓软件包</value>
|
||||
</data>
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<data name="Baksmali" xml:space="preserve">
|
||||
<value>Baksmali</value>
|
||||
</data>
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<data name="Smali" xml:space="preserve">
|
||||
<value>Smali</value>
|
||||
</data>
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<data name="Zipalign" xml:space="preserve">
|
||||
<value>Zip 对齐</value>
|
||||
</data>
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<data name="CompileApk" xml:space="preserve">
|
||||
<value>编译 APK</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>编译 DEX</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>反编译 APK</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>反编译 DEX</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>获取 APK 信息</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>此文件夹不是已反编译的 APK</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>此文件夹不是反编译的 DEX</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>缺少必需的文件</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>签名 APK</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>文本文件</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>Zip 对齐 APK</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>创建未签名的 APK</value>
|
||||
</data>
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<data name="MetainfNotExist" xml:space="preserve">
|
||||
<value>META-INF 文件夹不存在。已跳过</value>
|
||||
</data>
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<data name="ErrorGettingApkInfo" xml:space="preserve">
|
||||
<value>获取 APK 信息时发生错误</value>
|
||||
</data>
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<data name="InputDirectory" xml:space="preserve">
|
||||
<value>输入目录:{0}</value>
|
||||
</data>
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<data name="InputFile" xml:space="preserve">
|
||||
<value>输入文件:{0}</value>
|
||||
</data>
|
||||
<data name="DeleteFile" xml:space="preserve">
|
||||
@@ -451,7 +451,7 @@
|
||||
<value>正在合并 APK</value>
|
||||
</data>
|
||||
<data name="MovingBasedirectory" xml:space="preserve">
|
||||
<value>正在基本模块目录到 "{0}"</value>
|
||||
<value>将基目录移动到 "{0}"</value>
|
||||
</data>
|
||||
<data name="DirNotExist" xml:space="preserve">
|
||||
<value>目录 "{0}" 不存在</value>
|
||||
@@ -462,9 +462,6 @@
|
||||
<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>使用 APKEditor.jar 合并 APK</value>
|
||||
</data>
|
||||
@@ -481,7 +478,7 @@
|
||||
<value>请稍候...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>您确定要终止 ADB 服务器吗? 您可能需要重新连接您的设备或重新启动模拟器</value>
|
||||
<value>您确定要终止 ADB 服务吗? 您可能需要重新连接设备或重新启动模拟器</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>未选择设备</value>
|
||||
@@ -514,6 +511,33 @@
|
||||
<value>开始时间: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>更改 Apktool 版本后需要清除框架缓存以避免意外错误。 你想现在清除它吗?</value>
|
||||
<value>更改 Apktool 版本后需要清除 Framework 缓存以避免意外错误。 你想现在清除它吗?</value>
|
||||
</data>
|
||||
</root>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>清除临时文件夹</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>正在删除文件夹: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>目录 "{0}" 不存在</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>打开编译输出文件夹</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>打开反编译输出文件夹</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Apktool.yml 已修复</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>复制文件 "{0}" 到 "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>未选择拆分的 APK</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>无法检测 APKEditor 版本</value>
|
||||
</data>
|
||||
</root>
|
||||
+27
-27
@@ -10,6 +10,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
@@ -17,7 +18,7 @@ namespace APKToolGUI
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// Главная точка входа для приложения.
|
||||
/// Main entry point for the application.
|
||||
/// </summary>
|
||||
[DllImport("Shcore.dll")]
|
||||
static extern int SetProcessDpiAwareness(int PROCESS_DPI_AWARENESS);
|
||||
@@ -118,14 +119,7 @@ namespace APKToolGUI
|
||||
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;
|
||||
}
|
||||
return OSVersion.GetOSVersion().Version.Major >= 10;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,38 +135,44 @@ namespace APKToolGUI
|
||||
public static void SetLanguage()
|
||||
{
|
||||
String settingsCulture = Settings.Default.Culture;
|
||||
if (settingsCulture.Equals("Auto"))
|
||||
{
|
||||
// Let .NET handle the resource fallback process.
|
||||
// It will automatically use the system's language if a satellite assembly is available,
|
||||
// otherwise it will fall back to the neutral language defined in the main assembly (English).
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
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;
|
||||
}
|
||||
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.GetCultureInfo(settingsCulture);
|
||||
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
|
||||
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
|
||||
}
|
||||
catch
|
||||
catch (System.Globalization.CultureNotFoundException ex)
|
||||
{
|
||||
|
||||
Debug.WriteLine($"[Program] Invalid culture '{settingsCulture}': {ex.Message}");
|
||||
// Fall back to system default culture
|
||||
}
|
||||
catch (ArgumentException ex)
|
||||
{
|
||||
Debug.WriteLine($"[Program] Failed to set culture: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private static bool FilesCheck()
|
||||
{
|
||||
// проверка файлов
|
||||
// File verification
|
||||
List<String> missigFiles = MissingFilesCheck();
|
||||
if (missigFiles.Count > 0)
|
||||
{
|
||||
String files = Environment.NewLine;
|
||||
StringBuilder filesBuilder = new StringBuilder();
|
||||
filesBuilder.AppendLine();
|
||||
foreach (String file in missigFiles)
|
||||
{
|
||||
files += file + Environment.NewLine;
|
||||
filesBuilder.AppendLine(file);
|
||||
}
|
||||
MessageBox.Show(Language.RequiredFilesMissing + files, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
MessageBox.Show(Language.RequiredFilesMissing + filesBuilder.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
//Application.Exit();
|
||||
return false;
|
||||
}
|
||||
@@ -244,7 +244,7 @@ namespace APKToolGUI
|
||||
if (Settings.Default.UseCustomTempDir)
|
||||
return Path.Combine(Settings.Default.TempDir);
|
||||
else
|
||||
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME);
|
||||
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "Temp");
|
||||
}
|
||||
|
||||
public static string RandTempDirectory()
|
||||
|
||||
@@ -2,35 +2,35 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Управление общими сведениями о сборке осуществляется с помощью
|
||||
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
|
||||
// связанные со сборкой.
|
||||
// General information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("APK Tool GUI")]
|
||||
[assembly: AssemblyDescription("GUI for apktool, signapk and zipalign utilities.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("APK Tool GUI")]
|
||||
[assembly: AssemblyCopyright("Original owner: INFINUM, 2012-2015 | Maintained by: AndnixSH, 2022-2023")]
|
||||
[assembly: AssemblyCopyright("Original owner: INFINUM, 2012-2015 | Maintained by: AndnixSH, 2022-2025")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
|
||||
// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
|
||||
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("49ccb60c-22a6-4a25-a4bf-9208712ad928")]
|
||||
|
||||
// Сведения о версии сборки состоят из следующих четырех значений:
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Основной номер версии
|
||||
// Дополнительный номер версии
|
||||
// Номер построения
|
||||
// Редакция
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
|
||||
// используя "*", как показано ниже:
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.3.0.1")]
|
||||
[assembly: AssemblyFileVersion("3.3.0.1")]
|
||||
[assembly: AssemblyVersion("3.3.2.1")]
|
||||
[assembly: AssemblyFileVersion("3.3.2.1")]
|
||||
|
||||
+120
-16
@@ -12,7 +12,7 @@ namespace APKToolGUI.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -843,7 +843,7 @@ 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.DefaultSettingValueAttribute("4")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public decimal Decode_ApiLevel {
|
||||
get {
|
||||
@@ -1011,7 +1011,7 @@ 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.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Build_UseAapt2 {
|
||||
get {
|
||||
@@ -1037,6 +1037,7 @@ 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)]
|
||||
@@ -1050,6 +1051,7 @@ 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)]
|
||||
@@ -1063,6 +1065,7 @@ 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)]
|
||||
@@ -1076,6 +1079,7 @@ 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)]
|
||||
@@ -1089,6 +1093,7 @@ 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)]
|
||||
@@ -1102,6 +1107,7 @@ 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)]
|
||||
@@ -1115,19 +1121,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Decode_UseApkEditorMergeApk {
|
||||
get {
|
||||
return ((bool)(this["Decode_UseApkEditorMergeApk"]));
|
||||
}
|
||||
set {
|
||||
this["Decode_UseApkEditorMergeApk"] = 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)]
|
||||
@@ -1141,6 +1135,7 @@ 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)]
|
||||
@@ -1154,6 +1149,7 @@ 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)]
|
||||
@@ -1167,6 +1163,7 @@ 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)]
|
||||
@@ -1180,6 +1177,7 @@ 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)]
|
||||
@@ -1193,6 +1191,7 @@ 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)]
|
||||
@@ -1206,6 +1205,7 @@ 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)]
|
||||
@@ -1219,6 +1219,7 @@ 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)]
|
||||
@@ -1232,6 +1233,7 @@ 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)]
|
||||
@@ -1245,6 +1247,7 @@ 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)]
|
||||
@@ -1258,6 +1261,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.n" +
|
||||
"io.zipfs.allowDotZipEntry=true")]
|
||||
@@ -1270,5 +1274,105 @@ namespace APKToolGUI.Properties {
|
||||
this["CustomJVMArgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[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 SplitApk_InputFile {
|
||||
get {
|
||||
return ((string)(this["SplitApk_InputFile"]));
|
||||
}
|
||||
set {
|
||||
this["SplitApk_InputFile"] = 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 UseApkeditor {
|
||||
get {
|
||||
return ((bool)(this["UseApkeditor"]));
|
||||
}
|
||||
set {
|
||||
this["UseApkeditor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int Adb_OverrideAbi {
|
||||
get {
|
||||
return ((int)(this["Adb_OverrideAbi"]));
|
||||
}
|
||||
set {
|
||||
this["Adb_OverrideAbi"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool Adb_SetOverrideAbi {
|
||||
get {
|
||||
return ((bool)(this["Adb_SetOverrideAbi"]));
|
||||
}
|
||||
set {
|
||||
this["Adb_SetOverrideAbi"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("4")]
|
||||
public decimal Build_Jobs {
|
||||
get {
|
||||
return ((decimal)(this["Build_Jobs"]));
|
||||
}
|
||||
set {
|
||||
this["Build_Jobs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("4")]
|
||||
public decimal Decode_Jobs {
|
||||
get {
|
||||
return ((decimal)(this["Decode_Jobs"]));
|
||||
}
|
||||
set {
|
||||
this["Decode_Jobs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool Decode_SetJobs {
|
||||
get {
|
||||
return ((bool)(this["Decode_SetJobs"]));
|
||||
}
|
||||
set {
|
||||
this["Decode_SetJobs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool Build_SetJobs {
|
||||
get {
|
||||
return ((bool)(this["Build_SetJobs"]));
|
||||
}
|
||||
set {
|
||||
this["Build_SetJobs"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_ApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">29</Value>
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_ApiLevel" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">29</Value>
|
||||
@@ -216,64 +216,85 @@
|
||||
<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>
|
||||
<Value Profile="(Default)">False</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" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="UseCustomTempDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="TempDir" Roaming="true" Type="System.String" Scope="User">
|
||||
<Setting Name="TempDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="UseCustomJavaExe" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="UseCustomJavaExe" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="AutoDeleteIdsigFile" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="AutoDeleteIdsigFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Utf8FilenameSupport" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Utf8FilenameSupport" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_OverwriteInputFile" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Sign_OverwriteInputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_UseApkEditorMergeApk" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_SetVendor" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Adb_SetVendor" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_SelectedApkPath" Roaming="true" Type="System.String" Scope="User">
|
||||
<Setting Name="Adb_SelectedApkPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Sign_InstallApkAfterSign" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Sign_InstallApkAfterSign" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseCustomApktool" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="UseCustomApktool" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ApktoolPath" Roaming="true" Type="System.String" Scope="User">
|
||||
<Setting Name="ApktoolPath" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Theme" Roaming="true" Type="System.Int32" Scope="User">
|
||||
<Setting Name="Theme" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="DebugMode" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="DebugMode" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_NetSecConf" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Build_NetSecConf" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_DontParseApkInfo" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_DontParseApkInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseCustomJVMArgs" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="UseCustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CustomJVMArgs" Roaming="true" Type="System.String" Scope="User">
|
||||
<Setting Name="CustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</Value>
|
||||
</Setting>
|
||||
<Setting Name="SplitApk_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="UseApkeditor" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_OverrideAbi" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_SetOverrideAbi" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_Jobs" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_Jobs" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_SetJobs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_SetJobs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -8,7 +8,7 @@ using System.Reflection;
|
||||
using Microsoft.WindowsAPICodePack.Shell;
|
||||
using APKToolGUI.Languages;
|
||||
|
||||
namespace APKEasyTool
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class TaskBarJumpList
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@ namespace APKToolGUI.Utils
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Error Loading File.", "Error!", MessageBoxButtons.OK);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,13 +13,12 @@ namespace APKToolGUI.Utils
|
||||
{
|
||||
public class CMD
|
||||
{
|
||||
public static string output;
|
||||
static public Process p = new Process();
|
||||
|
||||
public static string ProcessStartWithOutput(string FileName, string Arguments)
|
||||
{
|
||||
Log.d("CMD: " + FileName + " " + Arguments);
|
||||
|
||||
string result = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
using (Process process = new Process())
|
||||
@@ -33,13 +32,14 @@ namespace APKToolGUI.Utils
|
||||
process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("utf-8");
|
||||
process.Start();
|
||||
result = process.StandardOutput.ReadToEnd().Trim();
|
||||
process.WaitForExit(4000);
|
||||
process.WaitForExit();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.WriteLine("Start", e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace APKToolGUI.Utils
|
||||
{
|
||||
if (mf.Contains("<application"))
|
||||
{
|
||||
return StringExt.Regex(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
return StringExt.RegexExtract(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
@@ -31,11 +31,11 @@ namespace APKToolGUI.Utils
|
||||
foreach (string mf in Manifest)
|
||||
{
|
||||
if (String.IsNullOrEmpty(packageName))
|
||||
packageName = StringExt.Regex(@"(?<=package=\"")(.*?)(?=\"")", mf);
|
||||
packageName = StringExt.RegexExtract(@"(?<=package=\"")(.*?)(?=\"")", mf);
|
||||
|
||||
if (mf.Contains("<activity"))
|
||||
{
|
||||
mainActivity = StringExt.Regex(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
mainActivity = StringExt.RegexExtract(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
}
|
||||
if (mf.Contains("android.intent.action.MAIN"))
|
||||
{
|
||||
|
||||
@@ -38,6 +38,12 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
public static void CheckDragEnter(this DragEventArgs e, params string[] extensions)
|
||||
{
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (files.Length == 0)
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
return;
|
||||
}
|
||||
|
||||
if (extensions == null && Directory.Exists(files[0]))
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
@@ -49,12 +55,18 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
public static bool CheckDragOver(this DragEventArgs e, params string[] extensions)
|
||||
{
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (files.Length == 0)
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
return false;
|
||||
}
|
||||
|
||||
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)))
|
||||
else if (extensions != null && files.Length == 1 && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Move;
|
||||
return true;
|
||||
@@ -68,6 +80,11 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
public static bool CheckManyDragOver(this DragEventArgs e, params string[] extensions)
|
||||
{
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (files.Length == 0)
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (extensions == null && Directory.Exists(files[0]))
|
||||
{
|
||||
@@ -87,6 +104,9 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
public static bool DropOneByEnd(this DragEventArgs e, Action<string> onSuccess, params string[] extensions)
|
||||
{
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (files.Length == 0)
|
||||
return false;
|
||||
|
||||
if (extensions == null && Directory.Exists(files[0]))
|
||||
{
|
||||
onSuccess(files[0]);
|
||||
@@ -103,6 +123,9 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
|
||||
public static bool DropManyByEnd(this DragEventArgs e, Action<string[]> onSuccess, params string[] extensions)
|
||||
{
|
||||
if (extensions == null || extensions.Length == 0)
|
||||
return false;
|
||||
|
||||
foreach (string apk in extensions)
|
||||
{
|
||||
Debug.WriteLine(apk);
|
||||
|
||||
+1
-13
@@ -12,17 +12,6 @@ namespace APKToolGUI.Utils
|
||||
/// </summary>
|
||||
public static class Log
|
||||
{
|
||||
#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 (!Settings.Default.DebugMode) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
@@ -40,7 +29,7 @@ namespace APKToolGUI.Utils
|
||||
public static void d(string s)
|
||||
{
|
||||
if (!Settings.Default.DebugMode) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -69,6 +58,5 @@ namespace APKToolGUI.Utils
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Error, s);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,15 +33,18 @@ namespace APKToolGUI.Utils
|
||||
return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));
|
||||
}
|
||||
|
||||
public static string GetRelativePath(string relativeTo, string path)
|
||||
public static string GetRelativePath(string basePath, string fullPath)
|
||||
{
|
||||
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)
|
||||
// Ensure both paths are absolute
|
||||
basePath = Path.GetFullPath(basePath);
|
||||
fullPath = Path.GetFullPath(fullPath);
|
||||
|
||||
if (!fullPath.StartsWith(basePath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
rel = $".{Path.DirectorySeparatorChar}{rel}";
|
||||
throw new ArgumentException("The fullPath is not within the basePath.");
|
||||
}
|
||||
return rel;
|
||||
|
||||
return fullPath.Substring(basePath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,23 +14,45 @@ namespace APKToolGUI.Utils
|
||||
public static void KillAllProcessesSpawnedBy(UInt32 parentProcessId)
|
||||
{
|
||||
// NOTE: Process Ids are reused!
|
||||
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
|
||||
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(
|
||||
"SELECT * " +
|
||||
"FROM Win32_Process " +
|
||||
"WHERE ParentProcessId=" + parentProcessId);
|
||||
ManagementObjectCollection collection = searcher.Get();
|
||||
if (collection.Count > 0)
|
||||
"WHERE ParentProcessId=" + parentProcessId))
|
||||
{
|
||||
foreach (var item in collection)
|
||||
using (ManagementObjectCollection collection = searcher.Get())
|
||||
{
|
||||
UInt32 childProcessId = (UInt32)item["ProcessId"];
|
||||
if ((int)childProcessId != Process.GetCurrentProcess().Id)
|
||||
if (collection.Count > 0)
|
||||
{
|
||||
Debug.WriteLine($"Kill child process {childProcessId}");
|
||||
KillAllProcessesSpawnedBy(childProcessId);
|
||||
foreach (var item in collection)
|
||||
{
|
||||
UInt32 childProcessId = (UInt32)item["ProcessId"];
|
||||
if ((int)childProcessId != Process.GetCurrentProcess().Id)
|
||||
{
|
||||
Debug.WriteLine($"Kill child process {childProcessId}");
|
||||
|
||||
Process childProcess = Process.GetProcessById((int)childProcessId);
|
||||
childProcess.Kill();
|
||||
// Recursively kill child processes
|
||||
KillAllProcessesSpawnedBy(childProcessId);
|
||||
|
||||
// Kill and dispose the child process
|
||||
try
|
||||
{
|
||||
using (Process childProcess = Process.GetProcessById((int)childProcessId))
|
||||
{
|
||||
childProcess.Kill();
|
||||
}
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
// Process already exited
|
||||
Debug.WriteLine($"Process {childProcessId} already exited");
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
// Process is terminating or has exited
|
||||
Debug.WriteLine($"Process {childProcessId} is terminating: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public static class StringExt
|
||||
{
|
||||
static readonly Random random = new Random();
|
||||
|
||||
public static string Regex(string text, string match)
|
||||
[ThreadStatic]
|
||||
private static Random threadRandom;
|
||||
|
||||
private static Random ThreadRandom
|
||||
{
|
||||
Regex myRegex = new Regex(text);
|
||||
Match matched = myRegex.Match(match);
|
||||
get
|
||||
{
|
||||
if (threadRandom == null)
|
||||
threadRandom = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId));
|
||||
return threadRandom;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extracts a string from the input using the provided regex pattern.
|
||||
/// </summary>
|
||||
/// <param name="pattern">The regex pattern to match.</param>
|
||||
/// <param name="input">The input string to search.</param>
|
||||
/// <returns>The matched string or empty string if no match found.</returns>
|
||||
public static string RegexExtract(string pattern, string input)
|
||||
{
|
||||
Regex regex = new Regex(pattern);
|
||||
Match matched = regex.Match(input);
|
||||
return matched.ToString();
|
||||
}
|
||||
|
||||
@@ -23,14 +42,14 @@ namespace APKToolGUI.Utils
|
||||
{
|
||||
const string chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
return new string(Enumerable.Repeat(chars, length)
|
||||
.Select(s => s[random.Next(s.Length)]).ToArray());
|
||||
.Select(s => s[ThreadRandom.Next(s.Length)]).ToArray());
|
||||
}
|
||||
|
||||
public static string RandStrWithCaps(int length)
|
||||
{
|
||||
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
return new string(Enumerable.Repeat(chars, length)
|
||||
.Select(s => s[random.Next(s.Length)]).ToArray());
|
||||
.Select(s => s[ThreadRandom.Next(s.Length)]).ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -64,8 +83,14 @@ namespace APKToolGUI.Utils
|
||||
if (text.Length < 1) return text;
|
||||
return text.Remove(text.ToString().LastIndexOf(character), character.Length);
|
||||
}
|
||||
catch
|
||||
catch (ArgumentOutOfRangeException ex)
|
||||
{
|
||||
Debug.WriteLine($"[StringExt] Character not found in text: {ex.Message}");
|
||||
return text;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[StringExt] Failed to remove last character: {ex.Message}");
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Documents;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
@@ -145,15 +146,6 @@ namespace APKToolGUI.Utils
|
||||
|
||||
public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false)
|
||||
{
|
||||
//using (ZipFile zip = ZipFile.Read(path))
|
||||
//{
|
||||
// bool chkresult2 = zip.Any(entry => entry.FileName.Contains(folderName));
|
||||
// if (chkresult2)
|
||||
// {
|
||||
// zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
// zip.ExtractSelectedEntries("name = *", folderName, destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
// }
|
||||
//}
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
@@ -163,5 +155,6 @@ namespace APKToolGUI.Utils
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+44
-7
@@ -185,7 +185,7 @@
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Decode_ApiLevel" serializeAs="String">
|
||||
<value>29</value>
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="Build_ApiLevel" serializeAs="String">
|
||||
<value>29</value>
|
||||
@@ -221,7 +221,7 @@
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_UseAapt2" serializeAs="String">
|
||||
<value>True</value>
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="PlaySoundWhenDone" serializeAs="String">
|
||||
<value>False</value>
|
||||
@@ -244,9 +244,6 @@
|
||||
<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>
|
||||
@@ -280,6 +277,30 @@
|
||||
<setting name="CustomJVMArgs" serializeAs="String">
|
||||
<value>-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</value>
|
||||
</setting>
|
||||
<setting name="SplitApk_InputFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="UseApkeditor" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Adb_OverrideAbi" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Adb_SetOverrideAbi" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_Jobs" serializeAs="String">
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="Decode_Jobs" serializeAs="String">
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="Decode_SetJobs" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_SetJobs" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</APKToolGUI.Properties.Settings>
|
||||
</userSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup>
|
||||
@@ -287,7 +308,7 @@
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.3.0" newVersion="6.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="WinCopies.WindowsAPICodePack.Win32Native" publicKeyToken="ac0f4cf54a027a4d" culture="neutral" />
|
||||
@@ -299,7 +320,23 @@
|
||||
</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" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.HashCode" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.10" newVersion="9.0.0.10" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Permissions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.10" newVersion="9.0.0.10" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
+19
-12
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="Costura.Fody" version="6.0.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="DarkNet" version="2.3.0" targetFramework="net48" />
|
||||
<package id="DotNetZip" version="1.16.0" targetFramework="net48" />
|
||||
<package id="Fody" version="6.8.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="Fody" version="6.9.3" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="Microsoft.Bcl.HashCode" version="6.0.0" targetFramework="net48" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="7.0.4" targetFramework="net48" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="Microsoft-WindowsAPICodePack-Core" version="1.1.5" targetFramework="net48" />
|
||||
@@ -12,54 +12,61 @@
|
||||
<package id="Ookii.Dialogs.WinForms" version="4.0.0" targetFramework="net48" />
|
||||
<package id="OSVersionExt" version="3.0.0" targetFramework="net48" />
|
||||
<package id="PortableSettingsProvider" version="0.2.5" targetFramework="net48" />
|
||||
<package id="ProDotNetZip" version="1.20.0" targetFramework="net48" />
|
||||
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
|
||||
<package id="ResourceLoader" version="3.2.4" targetFramework="net48" />
|
||||
<package id="ResourceLoader" version="3.3.1" targetFramework="net48" />
|
||||
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
|
||||
<package id="System.Buffers" version="4.6.1" targetFramework="net48" />
|
||||
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Collections.Immutable" version="9.0.10" 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="7.0.2" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Formats.Nrbf" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
|
||||
<package id="System.Memory" version="4.6.3" targetFramework="net48" />
|
||||
<package id="System.Net.Http" version="4.3.4" targetFramework="net48" />
|
||||
<package id="System.Net.Primitives" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
|
||||
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net48" />
|
||||
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection.Metadata" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Resources.Extensions" version="7.0.0" targetFramework="net48" />
|
||||
<package id="System.Resources.Extensions" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net48" />
|
||||
<package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.AccessControl" version="6.0.1" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net48" />
|
||||
<package id="System.Security.Permissions" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
|
||||
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Text.Encoding.CodePages" version="9.0.10" targetFramework="net48" />
|
||||
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.ValueTuple" version="4.6.1" targetFramework="net48" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
|
||||
</packages>
|
||||
@@ -10,28 +10,28 @@ It is a tool for reverse engineering 3rd party, closed, binary Android apps. It
|
||||
# Download links
|
||||
https://github.com/AndnixSH/APKToolGUI/releases
|
||||
|
||||
Any such report from your antivirus is a false positive and is due to how the application works. You must manually add APKToolGUI.exe to your antivirus's whitelist/exclusion list.
|
||||
Any alert from your antivirus regarding this application is a **false positive**, caused by how the application operates. To resolve this, manually add **APKToolGUI.exe** to your antivirus’s whitelist or exclusion list.
|
||||
|
||||
If you don't believe this then try to compile the app by yourself or simply don't use it until you can confirm it is safe by working directly with your antiirus provider.
|
||||
If you remain unsure, you can compile the app yourself or refrain from using it until you confirm its safety with your antivirus provider.
|
||||
|
||||
# Requirements
|
||||
- Windows 7 32-bit/64-bit and above
|
||||
- [Java](https://www.java.com/en/) or [JDK](https://www.oracle.com/java/technologies/downloads/) 8 or above. Using latest JDK is not really necessary, it tends to cause unexpected issues. Java 8 and 17 (long-term support release) is enough. Use 64-bit version if your system is 64-bit
|
||||
- [Java](https://www.java.com/en/) or [JDK](https://www.oracle.com/java/technologies/downloads/) 8 or above. Using latest JDK is not really necessary. Java 8 and 25 (long-term support release) is enough. 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 8 and above already have it preinstalled)
|
||||
|
||||
# Features
|
||||
- Decompile APK
|
||||
- Decompile and merge split APK/XAPK/APKS/ZIP/APKM using build-in split merging or APKEditor.jar (Default)
|
||||
- Compile APK
|
||||
- Decompile & compile APK using Apktool
|
||||
- Decompile APK/XAPK/APKS/ZIP/APKM & compile APK using APKEditor.jar. Automatically detect if APK was decompiled using Apktool or APKEditor
|
||||
- Merge XAPK/APKS/ZIP/APKM using APKEditor.jar
|
||||
- Sign APK
|
||||
- Zipalign APK
|
||||
- Adb
|
||||
- ADB
|
||||
- Framework
|
||||
- Drag and drop
|
||||
- APK info
|
||||
- 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
|
||||
- All other features from [Apktool](https://ibotpeaches.github.io/Apktool/documentation/).
|
||||
- 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
|
||||
@@ -39,11 +39,12 @@ If you don't believe this then try to compile the app by yourself or simply don'
|
||||
- Long path support (Windows 10 and above)
|
||||
|
||||
# Languages
|
||||
- Brazilian Portuguese (Incomplete)
|
||||
- English
|
||||
- Brazilian Portuguese (Incomplete)
|
||||
- Hungary (Incomplete)
|
||||
- Russian (Incomplete)
|
||||
- Chinese Simplified (Incomplete)
|
||||
- German
|
||||
|
||||
### 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
|
||||
@@ -60,6 +61,8 @@ https://user-images.githubusercontent.com/40742924/227244601-6f796141-ac2d-4c60-
|
||||
|
||||
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
|
||||
|
||||
3rd party tools can't be translated.
|
||||
|
||||
Make pull request when you are done
|
||||
|
||||
# Issues
|
||||
@@ -72,50 +75,57 @@ For Framework/system apps related issues, check on [XDA Forum](https://forum.xda
|
||||
Anything else, [create a new issue](https://github.com/AndnixSH/APKToolGUI/issues)
|
||||
|
||||
# FAQ
|
||||
##### Q: Can it be ported to other OS like Linux?
|
||||
A: Notthing is impossible, but it's not easy as long as Microsoft not supporting WinForm for other platforms, making .NET Core useless, unlike Java FX that supports other platforms since decades. If you know, feel free to open an issue. Until then, use [WineHQ](https://www.winehq.org/) or similar to run exe
|
||||
##### Can it be ported to macOS or Linux?
|
||||
Microsoft has not made it easy to port, and .NET Core remains impractical for this purpose. While I could use Avalonia UI as an alternative, I currently don’t have the time to port the entire project. Pull requests are welcome!
|
||||
|
||||
##### Q: How to update Apktool?
|
||||
A: Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder
|
||||
In the meantime, you can use [WineHQ](https://www.winehq.org/) or similar tools to run the .exe file.
|
||||
|
||||
##### Q: How to update Baksmali/Smali?
|
||||
A: Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/downloads/) and replace it on Resources folder
|
||||
##### How to update Apktool?
|
||||
Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder
|
||||
|
||||
##### Q: How to reset?
|
||||
A: Simply delete the config.xml file from the directory of the executeable
|
||||
##### How to update Baksmali/Smali?
|
||||
Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/downloads/) and replace it on Resources folder
|
||||
|
||||
##### Q: Can you make an automatic APK injecting tool?
|
||||
A: No, I'm not interested.
|
||||
##### How to reset?
|
||||
Simply delete the config.xml file from the directory of the executeable
|
||||
|
||||
##### Q: Can you implement to convert APK to AAB?
|
||||
A: No, apktool is about recompiling, not converting to other formats. AAB is only used for distributing an application to Play Store, so it is not directly installable. If you really want to convert APK to ABB, try APK2AAB tool https://github.com/sensei-z/APK2AAB
|
||||
##### Can you help me with modding APKs in general?
|
||||
No, I do not provide support for APK modding.
|
||||
|
||||
##### 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)
|
||||
##### Can you make an automatic APK injecting tool?
|
||||
No, I'm not interested.
|
||||
|
||||
##### Q: Can you help me with modding APK in general?
|
||||
A: Sorry, I don't offer support with it.
|
||||
##### Can you implement APK to AAB conversion?
|
||||
No, APKTool is designed for decompiling and recompiling APKs, not for converting between formats. AAB (Android App Bundle) is used exclusively for distributing apps on the Google Play Store and is not directly installable on devices.
|
||||
|
||||
##### Q: Can you implement features to protect/pack/obfuscate APK?
|
||||
A: No, APK protection is beyond the scope of this tool
|
||||
If you need to convert an APK to AAB, you can try using a tool like [APK2AAB](https://github.com/sensei-z/APK2AAB)
|
||||
|
||||
##### Q: Can you implement features 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
|
||||
##### Can you implement features to protect, pack, or obfuscate APKs?
|
||||
No, APK protection is beyond the scope of this tool.
|
||||
|
||||
##### Can you implement features to deobfuscate, unpack APKs, or bypass anti-cheat/security?
|
||||
No, these features are also beyond the scope of this tool. I do not support or condone bypassing such protections.
|
||||
|
||||
# Development
|
||||
This project is written in C#
|
||||
|
||||
Use Visual Studio 2019 and above. NET Framework 4.8 SDK is required
|
||||
Use Visual Studio 2022 and above. NET Framework 4.8 SDK is required
|
||||
|
||||
# Contributing
|
||||
|
||||
Contributions are welcome! Please ensure you:
|
||||
- Submit pull requests with clear, detailed descriptions.
|
||||
- Open an issue to discuss significant changes before implementing them.
|
||||
- Do not submit pull requests for bypass or protection features.
|
||||
|
||||
# Credits
|
||||
- AndnixSH
|
||||
- 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.
|
||||
|
||||
# License
|
||||
The original repo does not have a license but I have permission from the author to use ane distriute this project as open source, without license. He doesn't seems to know much about licensing. For this project, I'll just add license as unlicensed
|
||||
The original repo does not have a license but I have permission from the author to use ane distribute this project as "open source"... I don't know what license to use so I'll just add license as unlicensed
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user