mirror of
https://github.com/AndnixSH/APKToolGUI.git
synced 2026-05-04 11:02:27 +00:00
Compare commits
132 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | |||
| 9e81f5b791 | |||
| ec6fd42592 | |||
| 07e4026aba | |||
| 1072739a97 | |||
| de4f176cf7 | |||
| 75e05668ab | |||
| c897d959a3 | |||
| 58314b84e0 | |||
| 906b2ea6d6 | |||
| 926ba9e1e6 | |||
| efc7ec1539 | |||
| 2ab52ee4a3 | |||
| 7bc8fb1d80 | |||
| d4b21606b6 | |||
| 71b18764d4 | |||
| e408c422de | |||
| fa9c063968 | |||
| e1509bc235 | |||
| da7685c40e | |||
| afa73115bc | |||
| 6ef981bd25 | |||
| 353467c461 | |||
| c6184f4eed | |||
| 4a47d23b77 | |||
| c2233ac843 | |||
| a5e3ea133c | |||
| 68f27e1231 | |||
| 2a5312628f | |||
| a5c80a2c73 | |||
| ae20b2167c | |||
| 5e8051b86a | |||
| 08bc04a9b0 | |||
| 9f89c5bab0 | |||
| dfee2d8c93 | |||
| 5eb9b3ba9f | |||
| b8615ec982 | |||
| 926ab509d0 | |||
| 1edcb5b836 | |||
| 165155407d | |||
| 3d02b40128 | |||
| e4559a45b7 | |||
| 91bb1c8838 | |||
| 745863555a | |||
| 684fb02074 | |||
| 2a0f4cd90a | |||
| 83fb485c26 | |||
| ee0fa89598 | |||
| ab629c24f3 | |||
| a45b671961 | |||
| 7725d3c28c | |||
| 041a70daa4 | |||
| 6a00b05eb4 |
@@ -28,6 +28,7 @@ body:
|
||||
description: |
|
||||
A clear and concise description of what the bug is.
|
||||
Feel free to upload/attach link to screenshot or video
|
||||
Only place logs in 'Logs' box
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -64,7 +65,7 @@ body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: APK
|
||||
description: If this APK can be freely shared, please upload/attach a link to it.
|
||||
description: If this APK can be freely shared, please upload/attach a link to it. Please warn with "NSFW" where applicable, if the APK or the link contains adult content
|
||||
placeholder: |
|
||||
https://apkcombo.com/downloader/
|
||||
validations:
|
||||
@@ -90,7 +91,8 @@ body:
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating System and version
|
||||
placeholder: Windows 11 2h22
|
||||
label: Operating system and version
|
||||
placeholder: |
|
||||
(Example: Windows 11 2h22)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?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\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')" />
|
||||
@@ -81,8 +81,11 @@
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CustomMarshalers" />
|
||||
<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="DarkNet, Version=2.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DarkNet.2.3.0\lib\net452\DarkNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Build.Framework" />
|
||||
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
||||
@@ -92,22 +95,25 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.4.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Core.1.1.4\lib\net48\Microsoft.WindowsAPICodePack.dll</HintPath>
|
||||
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.5.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Core.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.4.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Shell.1.1.4\lib\net48\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
|
||||
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.5.0, Culture=neutral, PublicKeyToken=8985beaab7ea3f04, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft-WindowsAPICodePack-Shell.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Ookii.Dialogs.WinForms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=66aa232afad40158, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Ookii.Dialogs.WinForms.4.0.0\lib\net462\Ookii.Dialogs.WinForms.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PortableSettingsProvider, Version=0.2.4.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\PortableSettingsProvider.0.2.4\lib\net45\PortableSettingsProvider.dll</HintPath>
|
||||
<Reference Include="OSVersionExt, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OSVersionExt.3.0.0\lib\net462\OSVersionExt.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PortableSettingsProvider, Version=0.2.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\PortableSettingsProvider.0.2.5\lib\net45\PortableSettingsProvider.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="ResourceLoader, Version=3.2.4.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ResourceLoader.3.2.4\lib\netstandard2.0\ResourceLoader.dll</HintPath>
|
||||
<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">
|
||||
@@ -115,8 +121,11 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
<Reference Include="System.Buffers, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.6.0\lib\net462\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Collections.Immutable.9.0.0\lib\net462\System.Collections.Immutable.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.configuration" />
|
||||
@@ -127,14 +136,17 @@
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<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.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.9.0.0\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.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Formats.Nrbf.9.0.0\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>
|
||||
@@ -177,8 +189,8 @@
|
||||
<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.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.6.0\lib\net462\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||
@@ -191,24 +203,27 @@
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.6.0\lib\net462\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Resources.Extensions, Version=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.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.Metadata.9.0.0\lib\net462\System.Reflection.Metadata.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Resources.Extensions.9.0.0\lib\net462\System.Resources.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
|
||||
<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.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.0\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>
|
||||
@@ -251,6 +266,9 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
@@ -268,24 +286,8 @@
|
||||
<Reference Include="WindowsFormsIntegration" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AndroidRes\AndroidResourceMerger.cs" />
|
||||
<Compile Include="AndroidRes\AndroidResources.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidAttribute.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidBool.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidInteger.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidPlural.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidPublic.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidString.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidStyle.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidStyleable.cs" />
|
||||
<Compile Include="AndroidRes\Model\AndroidTypedItem.cs" />
|
||||
<Compile Include="AndroidRes\Model\GenericArrayTypes.cs" />
|
||||
<Compile Include="AndroidRes\Model\GenericTypes.cs" />
|
||||
<Compile Include="AndroidRes\Model\Generic\AndroidGeneric.cs" />
|
||||
<Compile Include="AndroidRes\Model\Generic\AndroidGenericArray.cs" />
|
||||
<Compile Include="AndroidRes\Model\Generic\AndroidResource.cs" />
|
||||
<Compile Include="AndroidRes\Util\ClassExtensions.cs" />
|
||||
<Compile Include="AndroidRes\Util\Log.cs" />
|
||||
<Compile Include="TaskBar\TaskBarJumpList.cs" />
|
||||
<Compile Include="Utils\Log.cs" />
|
||||
<Compile Include="ApkTool\AaptParser.cs" />
|
||||
<Compile Include="ApkTool\ApkFixer.cs" />
|
||||
<Compile Include="ApkTool\Apktool.cs">
|
||||
@@ -317,6 +319,7 @@
|
||||
<Compile Include="Handlers\SignControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\SmaliControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\ZipalignControlEventHandlers.cs" />
|
||||
<Compile Include="Controls\DarkTheme.cs" />
|
||||
<Compile Include="Utils\AdminUtils.cs" />
|
||||
<Compile Include="Utils\BitmapUtils.cs" />
|
||||
<Compile Include="Utils\CMD.cs" />
|
||||
@@ -362,28 +365,58 @@
|
||||
<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.zh-CN.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.vi-VN.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
@@ -413,6 +446,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="android-thin.ico" />
|
||||
<Content Include="ILLink\ILLink.Descriptors.LibraryBuild.xml" />
|
||||
<None Include="Resources\info.png" />
|
||||
<None Include="Resources\waiting.png" />
|
||||
<None Include="Resources\warning.png" />
|
||||
@@ -455,16 +489,16 @@
|
||||
<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\Fody.6.6.4\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.6.4\build\Fody.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.9.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.9.0\build\Fody.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" />
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
|
||||
<Import Project="..\packages\Fody.6.6.4\build\Fody.targets" Condition="Exists('..\packages\Fody.6.6.4\build\Fody.targets')" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\packages\Fody.6.9.0\build\Fody.targets" Condition="Exists('..\packages\Fody.6.9.0\build\Fody.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -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,265 +0,0 @@
|
||||
using APKToolGUI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace APKSMerger.Util
|
||||
{
|
||||
/// <summary>
|
||||
/// simple logging wrapper class
|
||||
/// </summary>
|
||||
public static class Log
|
||||
{
|
||||
/// <summary>
|
||||
/// should very verbose logs (Log.vv) be written?
|
||||
/// </summary>
|
||||
public static bool LogVeryVerbose { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// should verbose logs (Log.v) be written?
|
||||
/// </summary>
|
||||
public static bool LogVerbose { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// should debug logs (Log.d) be written?
|
||||
/// </summary>
|
||||
public static bool LogDebug { get; set; } = true;
|
||||
|
||||
#region direct logs
|
||||
/// <summary>
|
||||
/// log message with level VERY VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void vv(string s)
|
||||
{
|
||||
if (!LogVeryVerbose) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void v(string s)
|
||||
{
|
||||
if (!LogVerbose) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level DEBUG (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void d(string s)
|
||||
{
|
||||
if (!LogDebug) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level INFO
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void i(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level WARNING
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void w(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Warning, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level ERROR
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void e(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Error, s);
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// start a new async log session
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static AsyncLogSession StartAsync()
|
||||
{
|
||||
return new AsyncLogSession();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// writes a direct log message
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
/// <param name="color">color to log in, null is default</param>
|
||||
static void WriteLogDirect(string s, ConsoleColor? color = null)
|
||||
{
|
||||
//set color
|
||||
ConsoleColor iColor = Console.ForegroundColor;
|
||||
if (color.HasValue)
|
||||
{
|
||||
Console.ForegroundColor = color.Value;
|
||||
}
|
||||
|
||||
//write log
|
||||
Console.WriteLine(s);
|
||||
|
||||
//restore color
|
||||
if (color.HasValue)
|
||||
{
|
||||
Console.ForegroundColor = iColor;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// async log sesssion
|
||||
/// </summary>
|
||||
public class AsyncLogSession : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// lock object to ensure only one object commits at a time
|
||||
/// </summary>
|
||||
static readonly object _CommitLock = new object();
|
||||
|
||||
/// <summary>
|
||||
/// Tag to include when logging
|
||||
/// </summary>
|
||||
Stack<string> tags = new Stack<string>();
|
||||
|
||||
/// <summary>
|
||||
/// contains all pending log entries
|
||||
/// </summary>
|
||||
Queue<string> pending = new Queue<string>();
|
||||
|
||||
#region log functions
|
||||
/// <summary>
|
||||
/// log message with level VERY VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void vv(string s)
|
||||
{
|
||||
if (!LogVeryVerbose) return;
|
||||
|
||||
EnqueueMessage($"[VV]{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void v(string s)
|
||||
{
|
||||
if (!LogVerbose) return;
|
||||
|
||||
EnqueueMessage($"[V]{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level DEBUG (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void d(string s)
|
||||
{
|
||||
if (!LogDebug) return;
|
||||
|
||||
EnqueueMessage($"[D]{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level INFO
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void i(string s)
|
||||
{
|
||||
EnqueueMessage($"[I]{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level WARNING
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void w(string s)
|
||||
{
|
||||
EnqueueMessage($"[W]{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level ERROR
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public void e(string s)
|
||||
{
|
||||
EnqueueMessage($"[E]{s}");
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// enqueue a message in the message queue
|
||||
/// </summary>
|
||||
/// <param name="s">the message to enqueue</param>
|
||||
void EnqueueMessage(string s)
|
||||
{
|
||||
pending.Enqueue($"{GetTag()}:{s}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// push a tag onto the tags stack
|
||||
/// </summary>
|
||||
/// <param name="t">the tag to push</param>
|
||||
public void PushTag(string t)
|
||||
{
|
||||
tags.Push(t);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// pop the last tag of the tags stack
|
||||
/// </summary>
|
||||
public void PopTag()
|
||||
{
|
||||
// tags.TryPop(out _);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// get the current tag
|
||||
/// </summary>
|
||||
/// <returns>current tag, or string.Empty if no tag</returns>
|
||||
public string GetTag()
|
||||
{
|
||||
string tag;
|
||||
// if (!tags.TryPeek(out tag))
|
||||
tag = string.Empty;
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// commit all pending log entries
|
||||
/// </summary>
|
||||
public void Commit()
|
||||
{
|
||||
lock (_CommitLock)
|
||||
{
|
||||
while (pending.Count > 0)
|
||||
{
|
||||
WriteLogDirect(pending.Dequeue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// same as calling .Commit(). used for using() syntax
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
Commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Documents;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
@@ -83,6 +85,8 @@ namespace APKToolGUI.Utils
|
||||
new string[] { "\r\n", "\r", "\n" },
|
||||
StringSplitOptions.None);
|
||||
|
||||
List<string> nativecode = new List<string> { };
|
||||
List<string> nativecode2 = new List<string> { };
|
||||
foreach (string line in lines)
|
||||
{
|
||||
switch (line.Split(':')[0])
|
||||
@@ -124,13 +128,16 @@ namespace APKToolGUI.Utils
|
||||
var densities = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
Densities = string.Join(", ", densities);
|
||||
break;
|
||||
case "alt-native-code":
|
||||
nativecode2 = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
break;
|
||||
case "native-code":
|
||||
var nativecode = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
NativeCode = string.Join(", ", nativecode);
|
||||
nativecode = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
List<string> combinedList = nativecode2.Concat(nativecode).ToList();
|
||||
NativeCode += string.Join(", ", combinedList);
|
||||
ApkFile = file;
|
||||
PlayStoreLink = "https://play.google.com/store/apps/details?id=" + PackageName;
|
||||
ApkComboLink = "https://apkcombo.com/a/" + PackageName;
|
||||
@@ -190,76 +197,81 @@ namespace APKToolGUI.Utils
|
||||
}
|
||||
}
|
||||
|
||||
//https://apilevels.com/
|
||||
public string SdkToAndroidVer(string sdk)
|
||||
{
|
||||
switch (sdk)
|
||||
{
|
||||
case "35":
|
||||
return sdk + ": Android 15";
|
||||
case "34":
|
||||
return sdk + ": Android 14";
|
||||
case "33":
|
||||
return "31: Android 13";
|
||||
return sdk + ": Android 14";
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Java;
|
||||
using Microsoft.Build.Framework.XamlTypes;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
@@ -18,7 +19,7 @@ namespace APKToolGUI
|
||||
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
|
||||
@@ -78,12 +79,31 @@ 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);
|
||||
|
||||
processAdb.EnableRaisingEvents = false;
|
||||
@@ -98,6 +118,8 @@ namespace APKToolGUI
|
||||
|
||||
public string GetDevices()
|
||||
{
|
||||
Log.d("ADB: " + adbFileName + " " + Keys.Devices);
|
||||
|
||||
Process process = new Process();
|
||||
process.EnableRaisingEvents = true;
|
||||
process.StartInfo.FileName = adbFileName;
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
using System.IO;
|
||||
using APKToolGUI.Utils;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -11,9 +12,11 @@ namespace APKToolGUI
|
||||
{
|
||||
public new event ApkEditorExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
public ApkEditor(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
this._jarPath = jarPath;
|
||||
base.Exited += ApkEditor_Exited;
|
||||
OutputDataReceived += ApkEditor_OutputDataReceived;
|
||||
ErrorDataReceived += ApkEditor_ErrorDataReceived; //Output makes process way slower
|
||||
@@ -86,6 +89,8 @@ namespace APKToolGUI
|
||||
|
||||
string args = String.Format("m {0} {1} -f", inputFile, keyOutputDir);
|
||||
|
||||
Log.d("ApkEditor CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
|
||||
BeginOutputReadLine();
|
||||
@@ -97,6 +102,62 @@ 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 class ApkEditorExitedEventArgs : EventArgs
|
||||
|
||||
@@ -12,9 +12,9 @@ namespace APKToolGUI.ApkTool
|
||||
{
|
||||
public class ApkFixer
|
||||
{
|
||||
public static bool FixAndroidManifest(string path)
|
||||
public static bool FixAndroidManifest(string decompilePath)
|
||||
{
|
||||
string manifestPath = Path.Combine(path, "AndroidManifest.xml");
|
||||
string manifestPath = Path.Combine(decompilePath, "AndroidManifest.xml");
|
||||
if (File.Exists(manifestPath))
|
||||
{
|
||||
string maniFestText = File.ReadAllText(manifestPath);
|
||||
@@ -24,17 +24,29 @@ namespace APKToolGUI.ApkTool
|
||||
maniFestText = maniFestText.Replace("android:useEmbeddedDex=\"true\"", "");
|
||||
maniFestText = maniFestText.Replace("android:manageSpace=\"true\"", "");
|
||||
maniFestText = maniFestText.Replace("android:localeConfig=\"@xml/locales_config\"", "");
|
||||
maniFestText = maniFestText.Replace("<queries>\r\n <intent>\r\n <action android:name=\"android.intent.action.MAIN\"/>\r\n </intent>\r\n </queries>", "");
|
||||
maniFestText = maniFestText.Replace("<intent> <action android:name=\"android.intent.action.MAIN\"/> </intent>", "");
|
||||
maniFestText = maniFestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK");
|
||||
|
||||
File.WriteAllText(Path.Combine(path, "AndroidManifest.xml"), maniFestText);
|
||||
File.WriteAllText(manifestPath, maniFestText);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool FixApktoolYml(string decompilePath)
|
||||
{
|
||||
string ymlPath = Path.Combine(decompilePath, "apktool.yml");
|
||||
if (File.Exists(ymlPath))
|
||||
{
|
||||
string yml = File.ReadAllText(ymlPath);
|
||||
yml = yml.Replace("sparseResources: true", "sparseResources: false");
|
||||
|
||||
File.WriteAllText(ymlPath, yml);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool RemoveApkToolDummies(string path)
|
||||
{
|
||||
string resPath = Path.Combine(path, "res", "values");
|
||||
@@ -45,24 +57,5 @@ namespace APKToolGUI.ApkTool
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool ChangeSdkTo29(string path)
|
||||
{
|
||||
string ymlPath = Path.Combine(path, "apktool.yml");
|
||||
if (File.Exists(ymlPath))
|
||||
{
|
||||
string ymll = File.ReadAllText(ymlPath);
|
||||
|
||||
int sdk = 30;
|
||||
int.TryParse(StringExt.Regex(@"(?<= targetSdkVersion: \')(.*?)(?=\')", ymll), out sdk);
|
||||
if (sdk >= 30)
|
||||
{
|
||||
ymll = ymll.Replace("targetSdkVersion: '" + sdk + "'", "targetSdkVersion: '29'");
|
||||
File.WriteAllText(ymlPath, ymll);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace APKToolGUI
|
||||
public const string OutputDir = " -o"; //The name of folder that gets written. Default is apk.out
|
||||
public const string OnlyMainClasses = " -only-main-classes"; //Only disassemble the main dex classes (classes[0-9]*.dex) in the root.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
public const string Jobs = " -j"; // Sets the number of threads to use.
|
||||
}
|
||||
|
||||
static class BuildKeys
|
||||
@@ -46,6 +47,8 @@ namespace APKToolGUI
|
||||
public const string NoCrunch = " -nc"; // Disable crunching of resource files during the build step.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
public const string UseAapt2 = " --use-aapt2"; //Upgrades apktool to use experimental aapt2 binary.
|
||||
public const string NetSecConf = " --net-sec-conf"; //Add a generic Network Security Configuration file in the output APK
|
||||
public const string Jobs = " -j"; // Sets the number of threads to use.
|
||||
}
|
||||
|
||||
static class InstallFrameworkKeys
|
||||
@@ -86,8 +89,10 @@ namespace APKToolGUI
|
||||
}
|
||||
}
|
||||
|
||||
string _jarPath;
|
||||
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
|
||||
{
|
||||
_jarPath = jarPath;
|
||||
Exited += Apktool_Exited;
|
||||
OutputDataReceived += Apktool_OutputDataReceived;
|
||||
ErrorDataReceived += Apktool_ErrorDataReceived;
|
||||
@@ -135,10 +140,14 @@ 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)
|
||||
apiLevel = 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}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
@@ -167,7 +176,8 @@ namespace APKToolGUI
|
||||
|
||||
public int Build(string inputFolder, string outputFile)
|
||||
{
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null;
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null, netSecConf = null;
|
||||
|
||||
if (Settings.Default.Build_ForceAll)
|
||||
keyForceAll = BuildKeys.ForceAll;
|
||||
if (Settings.Default.Build_CopyOriginal)
|
||||
@@ -179,14 +189,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)
|
||||
apiLevel = String.Format("{0} {1}", BuildKeys.Jobs, Settings.Default.Build_Jobs);
|
||||
if (Settings.Default.Build_UseAapt2)
|
||||
useAapt2 = BuildKeys.UseAapt2;
|
||||
if (Settings.Default.Build_NetSecConf)
|
||||
netSecConf = BuildKeys.NetSecConf;
|
||||
keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, outputFile);
|
||||
|
||||
string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{useAapt2}{keyOutputAppPath} \"{inputFolder}\"");
|
||||
string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{useAapt2}{netSecConf}{keyOutputAppPath} \"{inputFolder}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
@@ -207,6 +223,8 @@ namespace APKToolGUI
|
||||
|
||||
string args = String.Format($"if{keyFrameDir}{keyTag} \"{inputPath}\"");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
@@ -224,6 +242,8 @@ namespace APKToolGUI
|
||||
|
||||
string args = String.Format($"empty-framework-dir {EmptyFrameworkKeys.ForceDelete} {keyFramePath}");
|
||||
|
||||
Log.d("Apktool CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
|
||||
@@ -11,9 +11,11 @@ namespace APKToolGUI
|
||||
{
|
||||
public new event BaksmaliExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
public Baksmali(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
_jarPath = jarPath;
|
||||
base.Exited += Baksmali_Exited;
|
||||
OutputDataReceived += Baksmali_OutputDataReceived;
|
||||
ErrorDataReceived += Baksmali_ErrorDataReceived;
|
||||
@@ -86,6 +88,9 @@ namespace APKToolGUI
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("d {0} {1}", inputFile, keyOutputDir);
|
||||
|
||||
Log.v("Baksmali CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
|
||||
@@ -3,6 +3,7 @@ using Java;
|
||||
using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using System.IO.Packaging;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -40,9 +41,11 @@ namespace APKToolGUI
|
||||
}
|
||||
}
|
||||
|
||||
string _jarPath;
|
||||
public Signapk(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
_jarPath = jarPath;
|
||||
Exited += Signapk_Exited;
|
||||
OutputDataReceived += Signapk_OutputDataReceived;
|
||||
ErrorDataReceived += Signapk_ErrorDataReceived;
|
||||
@@ -125,6 +128,9 @@ namespace APKToolGUI
|
||||
v4 = "--v4-signing-enabled false";
|
||||
|
||||
string args = String.Format("sign {0} {1} {2} {3} {4} {5} {6} \"{7}\"", key, alias, v1, v2, v3, v4, outputDir, lastSourceApk);
|
||||
|
||||
Log.v("Signapk CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
@@ -133,6 +139,19 @@ namespace APKToolGUI
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public string GetSignature(string apkFile)
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
apktoolJar.EnableRaisingEvents = false;
|
||||
apktoolJar.Start($"verify --print-certs \"{apkFile}\"");
|
||||
string version = apktoolJar.StandardOutput.ReadToEnd();
|
||||
version += apktoolJar.StandardError.ReadToEnd();
|
||||
apktoolJar.WaitForExit();
|
||||
return version;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e);
|
||||
|
||||
@@ -11,9 +11,11 @@ namespace APKToolGUI
|
||||
{
|
||||
public new event SmaliExitedEventHandler Exited;
|
||||
|
||||
string _jarPath;
|
||||
public Smali(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
_jarPath = jarPath;
|
||||
base.Exited += Smali_Exited;
|
||||
}
|
||||
|
||||
@@ -83,6 +85,9 @@ namespace APKToolGUI
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("a {0} {1}", inputFile, keyOutputDir);
|
||||
|
||||
Log.v("Smali CMD: " + _jarPath + " " + args);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
|
||||
@@ -30,8 +30,10 @@ namespace APKToolGUI
|
||||
public event EventHandler Exited;
|
||||
public int ExitCode { get { return processZipalign.ExitCode; } }
|
||||
|
||||
string _zipalignFileName;
|
||||
public Zipalign(string zipalignFileName)
|
||||
{
|
||||
_zipalignFileName = zipalignFileName;
|
||||
processZipalign = new Process();
|
||||
processZipalign.EnableRaisingEvents = true;
|
||||
processZipalign.StartInfo.FileName = zipalignFileName;
|
||||
@@ -92,7 +94,7 @@ namespace APKToolGUI
|
||||
|
||||
string args = String.Format("{0}{1}{2}{3} {4} \"{5}\" {6}", keyCheckOnly, keyOverwriteOutputFile, keyVerbose, keyRecompress, Settings.Default.Zipalign_AlignmentInBytes, input, keyOutputFile);
|
||||
|
||||
Debug.WriteLine("Zipalign: " + args);
|
||||
Log.v("Zipalign: " + _zipalignFileName + " " + args);
|
||||
|
||||
processZipalign.StartInfo.Arguments = args;
|
||||
processZipalign.Start();
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Controls
|
||||
{
|
||||
internal class DarkTheme
|
||||
{
|
||||
public static Color bgColor = Color.FromArgb(32, 32, 32);
|
||||
public static Color txtBoxColor = Color.FromArgb(64, 64, 64);
|
||||
public static Color btnColor = Color.FromArgb(51, 51, 51);
|
||||
public static Color btnBorderColor = Color.FromArgb(155, 155, 155);
|
||||
public static Color tabBorderColor = Color.FromArgb(45, 45, 45);
|
||||
public static Color menuItemHoverColor = Color.FromArgb(51, 51, 51);
|
||||
public static Color menuItemSelectedColor = Color.FromArgb(41, 41, 41);
|
||||
public static Color separatorColor = Color.FromArgb(62, 62, 62);
|
||||
|
||||
public static void SetTheme(Control.ControlCollection container, Form form)
|
||||
{
|
||||
form.BackColor = bgColor;
|
||||
form.ForeColor = Color.White;
|
||||
foreach (Control component in container)
|
||||
{
|
||||
Debug.WriteLine(component.GetType());
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
|
||||
SetThemeTabControl(component, container);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetThemeTabControl(Control component, Control.ControlCollection container)
|
||||
{
|
||||
if (component is TabControl)
|
||||
{
|
||||
((TabControl)component).DrawMode = TabDrawMode.OwnerDrawFixed;
|
||||
|
||||
foreach (Control tabControl in component.Controls)
|
||||
{
|
||||
SetThemeTabControl(tabControl, container);
|
||||
|
||||
//Debug.WriteLine("tabPage " + tabControl.GetType());
|
||||
|
||||
((TabControl)component).DrawItem += (sender, e) =>
|
||||
{
|
||||
// Set Border header
|
||||
e.Graphics.FillRectangle(new SolidBrush(tabBorderColor), e.Bounds);
|
||||
Rectangle paddedBounds = e.Bounds;
|
||||
|
||||
paddedBounds.Inflate(0, 0);
|
||||
|
||||
// Set the rectangle for the tab button
|
||||
Rectangle tabRect = ((TabControl)component).GetTabRect(e.Index);
|
||||
|
||||
// Draw the border color
|
||||
using (Pen borderPen = new Pen(tabBorderColor, 7))
|
||||
{
|
||||
e.Graphics.DrawRectangle(borderPen, tabRect);
|
||||
}
|
||||
|
||||
StringFormat stringFlags = new StringFormat();
|
||||
stringFlags.Alignment = StringAlignment.Center;
|
||||
stringFlags.LineAlignment = StringAlignment.Center;
|
||||
|
||||
e.Graphics.DrawString(((TabControl)component).TabPages[e.Index].Text, FormMain.Instance.Font, SystemBrushes.HighlightText, tabRect, stringFlags);
|
||||
|
||||
//set Tabcontrol border
|
||||
Graphics g = e.Graphics;
|
||||
Pen p = new Pen(tabBorderColor, 8);
|
||||
g.DrawRectangle(p, tabControl.Bounds.X, tabControl.Bounds.Y, tabControl.Bounds.Width, tabControl.Bounds.Height);
|
||||
|
||||
SolidBrush fillbrush = new SolidBrush(bgColor);
|
||||
|
||||
//draw rectangle behind the tabs
|
||||
Rectangle lasttabrect = ((TabControl)component).GetTabRect(((TabControl)component).TabPages.Count - 1);
|
||||
Rectangle background = new Rectangle();
|
||||
background.Location = new Point(lasttabrect.Right, 0);
|
||||
|
||||
//pad the rectangle to cover the 1 pixel line between the top of the tabpage and the start of the tabs
|
||||
background.Size = new Size(((TabControl)component).Right - background.Left, lasttabrect.Height + 1);
|
||||
e.Graphics.FillRectangle(fillbrush, background);
|
||||
};
|
||||
|
||||
foreach (Control tabPage in tabControl.Controls)
|
||||
{
|
||||
SetThemeTabControl(tabPage, container);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (component is Panel)
|
||||
{
|
||||
foreach (Control control in component.Controls)
|
||||
{
|
||||
SetThemeTabControl(control, container);
|
||||
}
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
}
|
||||
if (component is MenuStrip menuStrip)
|
||||
{
|
||||
((MenuStrip)component).Renderer = new ToolStripProfessionalRenderer(new MenuItemColorTable());
|
||||
|
||||
foreach (ToolStripItem item in menuStrip.Items)
|
||||
{
|
||||
if (item is ToolStripMenuItem toolStripMenuItem)
|
||||
{
|
||||
foreach (ToolStripMenuItem dditem in toolStripMenuItem.DropDownItems.OfType<ToolStripMenuItem>())
|
||||
{
|
||||
dditem.BackColor = bgColor;
|
||||
dditem.ForeColor = Color.White;
|
||||
//Debug.WriteLine(dditem.Text);
|
||||
}
|
||||
foreach (ToolStripSeparator toolStripSeparator in toolStripMenuItem.DropDownItems.OfType<ToolStripSeparator>())
|
||||
{
|
||||
toolStripSeparator.BackColor = Color.Blue;
|
||||
toolStripSeparator.ForeColor = Color.Blue;
|
||||
Debug.WriteLine(toolStripSeparator.Name);
|
||||
}
|
||||
|
||||
toolStripMenuItem.BackColor = bgColor;
|
||||
toolStripMenuItem.ForeColor = Color.White;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (component is GroupBox)
|
||||
{
|
||||
foreach (Control control in component.Controls)
|
||||
{
|
||||
SetThemeTabControl(control, container);
|
||||
}
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
}
|
||||
else if (component is ComboBox)
|
||||
{
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
((ComboBox)component).FlatStyle = FlatStyle.Flat;
|
||||
}
|
||||
else if (component is Button)
|
||||
{
|
||||
component.BackColor = btnColor;
|
||||
component.ForeColor = Color.White;
|
||||
((Button)component).FlatStyle = FlatStyle.Flat;
|
||||
((Button)component).FlatAppearance.BorderColor = btnBorderColor;
|
||||
|
||||
}
|
||||
else if (component is TextBox)
|
||||
{
|
||||
component.BackColor = txtBoxColor;
|
||||
component.ForeColor = Color.White;
|
||||
((TextBox)component).BorderStyle = BorderStyle.FixedSingle;
|
||||
}
|
||||
else if (component is RichTextBox)
|
||||
{
|
||||
if (component.Name == "logTxtBox")
|
||||
((RichTextBox)component).BorderStyle = BorderStyle.None;
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
}
|
||||
else
|
||||
{
|
||||
component.BackColor = bgColor;
|
||||
component.ForeColor = Color.White;
|
||||
}
|
||||
}
|
||||
|
||||
public class MenuItemColorTable : ProfessionalColorTable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the starting color of the gradient used when
|
||||
/// a top-level System.Windows.Forms.ToolStripMenuItem is pressed.
|
||||
/// </summary>
|
||||
public override Color MenuItemPressedGradientBegin => menuItemSelectedColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the end color of the gradient used when a top-level
|
||||
/// System.Windows.Forms.ToolStripMenuItem is pressed.
|
||||
/// </summary>
|
||||
public override Color MenuItemPressedGradientEnd => menuItemSelectedColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the border color to use with a
|
||||
/// System.Windows.Forms.ToolStripMenuItem.
|
||||
/// </summary>
|
||||
public override Color MenuItemBorder => menuItemSelectedColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the starting color of the gradient used when the
|
||||
/// System.Windows.Forms.ToolStripMenuItem is selected.
|
||||
/// </summary>
|
||||
public override Color MenuItemSelectedGradientBegin => menuItemSelectedColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the end color of the gradient used when the
|
||||
/// System.Windows.Forms.ToolStripMenuItem is selected.
|
||||
/// </summary>
|
||||
public override Color MenuItemSelectedGradientEnd => menuItemSelectedColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the border color to use with a
|
||||
/// System.Windows.Forms.ToolStripMenuItem.
|
||||
/// </summary>
|
||||
public override Color MenuItemSelected => menuItemHoverColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the solid background color of the
|
||||
/// System.Windows.Forms.ToolStripDropDown.
|
||||
/// </summary>
|
||||
public override Color ToolStripDropDownBackground => bgColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the starting color of the gradient used in the image
|
||||
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
|
||||
/// </summary>
|
||||
public override Color ImageMarginGradientBegin => bgColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the middle color of the gradient used in the image
|
||||
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
|
||||
/// </summary>
|
||||
public override Color ImageMarginGradientMiddle => bgColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the end color of the gradient used in the image
|
||||
/// margin of a System.Windows.Forms.ToolStripDropDownMenu.
|
||||
/// </summary>
|
||||
public override Color ImageMarginGradientEnd => bgColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the color to use to for shadow effects on
|
||||
/// the System.Windows.Forms.ToolStripSeparator.
|
||||
/// </summary>
|
||||
public override Color SeparatorDark => separatorColor;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the color that is the border color to use
|
||||
/// on a System.Windows.Forms.MenuStrip.
|
||||
/// </summary>
|
||||
public override Color MenuBorder => menuItemHoverColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
@@ -90,6 +90,7 @@
|
||||
// linkLabel1
|
||||
//
|
||||
resources.ApplyResources(this.linkLabel1, "linkLabel1");
|
||||
this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue;
|
||||
this.linkLabel1.Name = "linkLabel1";
|
||||
this.linkLabel1.TabStop = true;
|
||||
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using APKToolGUI.Controls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
@@ -13,6 +14,10 @@ namespace APKToolGUI
|
||||
public FormAboutBox()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
if (Program.IsDarkTheme())
|
||||
DarkTheme.SetTheme(Controls, this);
|
||||
|
||||
this.Text = String.Format("{0} {1}", this.Text, AssemblyTitle);
|
||||
this.labelProductName.Text = AssemblyProduct;
|
||||
this.labelVersion.Text = String.Format("{0} {1}", labelVersion.Text, AssemblyVersion);
|
||||
|
||||
@@ -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>
|
||||
<!--
|
||||
Sơ đồ Microsoft ResX
|
||||
|
||||
Phiên bản 2.0
|
||||
|
||||
Mục tiêu chính của định dạng này là cho phép một định dạng XML đơn giản
|
||||
đọc được chủ yếu bằng tay. Việc tạo và phân tích cú pháp các
|
||||
kiểu dữ liệu khác nhau được thực hiện thông qua các lớp TypeConverter
|
||||
liên kết với các kiểu dữ liệu.
|
||||
|
||||
Ví dụ:
|
||||
|
||||
... tiêu đề & sơ đồ ado.net/XML ...
|
||||
<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>đây là chuỗi dài của tôi</value><comment>đây là một bình luận</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>[đối tượng .NET Framework được tuần tự hóa mã hóa mime base64]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[chuỗi mã hóa mime base64 đại diện cho mảng byte của đối tượng .NET Framework]</value>
|
||||
<comment>Đây là một bình luận</comment>
|
||||
</data>
|
||||
|
||||
Có bất kỳ số lượng hàng "resheader" nào chứa đơn giản
|
||||
các cặp tên/giá trị.
|
||||
|
||||
Mỗi hàng dữ liệu chứa một tên và giá trị. Hàng cũng chứa một
|
||||
kiểu hoặc mimetype. Kiểu tương ứng với một lớp .NET hỗ trợ
|
||||
chuyển đổi văn bản/giá trị thông qua kiến trúc TypeConverter.
|
||||
Các lớp không hỗ trợ điều này được tuần tự hóa và lưu trữ với
|
||||
mimetype được đặt.
|
||||
|
||||
mimetype được sử dụng cho các đối tượng được tuần tự hóa và cho biết
|
||||
ResXResourceReader cách khôi phục đối tượng. Hiện tại điều này không
|
||||
có thể mở rộng. Đối với một mimetype nhất định, giá trị phải được đặt cho phù hợp:
|
||||
|
||||
Lưu ý - application/x-microsoft.net.object.binary.base64 là định dạng
|
||||
mà ResXResourceWriter sẽ tạo ra, tuy nhiên trình đọc có thể
|
||||
đọc bất kỳ định dạng nào được liệt kê bên dưới.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : Đối tượng phải được tuần tự hóa với
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : Đối tượng phải được tuần tự hóa với
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : Đối tượng phải được tuần tự hóa thành một mảng byte
|
||||
: sử dụng System.ComponentModel.TypeConverter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
-->
|
||||
<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>Phản hồi 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
+279
-101
@@ -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,6 +69,8 @@
|
||||
this.tabPageApkInfo = new System.Windows.Forms.TabPage();
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.basicInfoTabPage = new System.Windows.Forms.TabPage();
|
||||
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();
|
||||
@@ -106,11 +113,11 @@
|
||||
this.fullInfoTextBox = new System.Windows.Forms.RichTextBox();
|
||||
this.tabPageDecode = new System.Windows.Forms.TabPage();
|
||||
this.groupBox_DECODE_Options = new System.Windows.Forms.GroupBox();
|
||||
this.checkBox_DECODE_UseApkEditorMerge = new System.Windows.Forms.CheckBox();
|
||||
this.decJobsLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.checkBox3 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox7 = new System.Windows.Forms.CheckBox();
|
||||
this.decApiLvlUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.decSetApiLvlChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.checkBox_DECODE_FixError = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox_DECODE_OnlyMainClasses = new System.Windows.Forms.CheckBox();
|
||||
this.textBox_DECODE_FrameDir = new System.Windows.Forms.TextBox();
|
||||
@@ -127,12 +134,13 @@
|
||||
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();
|
||||
this.buildSetApiLvlChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.label23 = new System.Windows.Forms.Label();
|
||||
this.createUnsignApkChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.signAfterBuildChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.zipalignAfterBuildChkBox = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox_BUILD_NoCrunch = new System.Windows.Forms.CheckBox();
|
||||
@@ -222,30 +230,38 @@
|
||||
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.setVendorChkBox = new System.Windows.Forms.CheckBox();
|
||||
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();
|
||||
this.devicesListBox = new System.Windows.Forms.ListBox();
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.toolStripStatusLabelStateImage = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolStripStatusLabelStateText = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar();
|
||||
this.progressBar = new System.Windows.Forms.ToolStripProgressBar();
|
||||
this.contextMenuStripLog = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.clearLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.logTxtBox = new System.Windows.Forms.RichTextBox();
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
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();
|
||||
@@ -255,6 +271,7 @@
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.tabControlMain.SuspendLayout();
|
||||
this.tabPageMain.SuspendLayout();
|
||||
this.mergePanel.SuspendLayout();
|
||||
this.signPanel.SuspendLayout();
|
||||
this.zipalignPanel.SuspendLayout();
|
||||
this.comPanel.SuspendLayout();
|
||||
@@ -266,9 +283,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();
|
||||
@@ -302,10 +321,12 @@
|
||||
this.tabControlMain.Controls.Add(this.tabPageAdb);
|
||||
this.tabControlMain.Name = "tabControlMain";
|
||||
this.tabControlMain.SelectedIndex = 0;
|
||||
this.tabControlMain.SelectedIndexChanged += new System.EventHandler(this.tabControlMain_SelectedIndexChanged);
|
||||
//
|
||||
// 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);
|
||||
@@ -322,6 +343,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");
|
||||
@@ -536,12 +593,14 @@
|
||||
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.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);
|
||||
@@ -583,6 +642,17 @@
|
||||
this.basicInfoTabPage.Name = "basicInfoTabPage";
|
||||
this.basicInfoTabPage.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// sigTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.sigTxtBox, "sigTxtBox");
|
||||
this.sigTxtBox.Name = "sigTxtBox";
|
||||
this.sigTxtBox.ReadOnly = true;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// launchActivityTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.launchActivityTxtBox, "launchActivityTxtBox");
|
||||
@@ -819,11 +889,11 @@
|
||||
//
|
||||
// groupBox_DECODE_Options
|
||||
//
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_UseApkEditorMerge);
|
||||
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.decApiLvlUpDown);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.decSetApiLvlChkBox);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.label6);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.label5);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_FixError);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_OnlyMainClasses);
|
||||
this.groupBox_DECODE_Options.Controls.Add(this.textBox_DECODE_FrameDir);
|
||||
@@ -842,14 +912,33 @@
|
||||
this.groupBox_DECODE_Options.Name = "groupBox_DECODE_Options";
|
||||
this.groupBox_DECODE_Options.TabStop = false;
|
||||
//
|
||||
// checkBox_DECODE_UseApkEditorMerge
|
||||
// decJobsLvlUpDown
|
||||
//
|
||||
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;
|
||||
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");
|
||||
this.checkBox7.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_DontParseApkInfo;
|
||||
this.checkBox7.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_DontParseApkInfo", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox7.Name = "checkBox7";
|
||||
this.checkBox7.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// decApiLvlUpDown
|
||||
//
|
||||
@@ -866,18 +955,6 @@
|
||||
this.decSetApiLvlChkBox.Name = "decSetApiLvlChkBox";
|
||||
this.decSetApiLvlChkBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// checkBox_DECODE_FixError
|
||||
//
|
||||
resources.ApplyResources(this.checkBox_DECODE_FixError, "checkBox_DECODE_FixError");
|
||||
@@ -885,6 +962,7 @@
|
||||
this.checkBox_DECODE_FixError.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBox_DECODE_FixError.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_FixError", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox_DECODE_FixError.Name = "checkBox_DECODE_FixError";
|
||||
this.toolTip1.SetToolTip(this.checkBox_DECODE_FixError, resources.GetString("checkBox_DECODE_FixError.ToolTip"));
|
||||
this.checkBox_DECODE_FixError.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox_DECODE_OnlyMainClasses
|
||||
@@ -894,22 +972,23 @@
|
||||
this.checkBox_DECODE_OnlyMainClasses.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBox_DECODE_OnlyMainClasses.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_OnlyMainClasses", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox_DECODE_OnlyMainClasses.Name = "checkBox_DECODE_OnlyMainClasses";
|
||||
this.toolTip1.SetToolTip(this.checkBox_DECODE_OnlyMainClasses, resources.GetString("checkBox_DECODE_OnlyMainClasses.ToolTip"));
|
||||
this.checkBox_DECODE_OnlyMainClasses.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
@@ -923,9 +1002,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;
|
||||
//
|
||||
@@ -947,10 +1026,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;
|
||||
//
|
||||
@@ -1004,12 +1083,13 @@
|
||||
//
|
||||
// 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);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.buildSetApiLvlChkBox);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.label23);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.createUnsignApkChkBox);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.label16);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.signAfterBuildChkBox);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.zipalignAfterBuildChkBox);
|
||||
this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_NoCrunch);
|
||||
@@ -1028,6 +1108,34 @@
|
||||
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");
|
||||
this.checkBox_BUILD_NetSecConf.Checked = global::APKToolGUI.Properties.Settings.Default.Build_NetSecConf;
|
||||
this.checkBox_BUILD_NetSecConf.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_NetSecConf", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox_BUILD_NetSecConf.Name = "checkBox_BUILD_NetSecConf";
|
||||
this.checkBox_BUILD_NetSecConf.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// useAapt2ChkBox
|
||||
//
|
||||
resources.ApplyResources(this.useAapt2ChkBox, "useAapt2ChkBox");
|
||||
@@ -1052,26 +1160,15 @@
|
||||
this.buildSetApiLvlChkBox.Name = "buildSetApiLvlChkBox";
|
||||
this.buildSetApiLvlChkBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label23
|
||||
//
|
||||
resources.ApplyResources(this.label23, "label23");
|
||||
this.label23.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.label23.Name = "label23";
|
||||
//
|
||||
// createUnsignApkChkBox
|
||||
//
|
||||
resources.ApplyResources(this.createUnsignApkChkBox, "createUnsignApkChkBox");
|
||||
this.createUnsignApkChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_CreateUnsignedApk;
|
||||
this.createUnsignApkChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_CreateUnsignedApk", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.createUnsignApkChkBox.Name = "createUnsignApkChkBox";
|
||||
this.toolTip1.SetToolTip(this.createUnsignApkChkBox, resources.GetString("createUnsignApkChkBox.ToolTip"));
|
||||
this.createUnsignApkChkBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label16
|
||||
//
|
||||
resources.ApplyResources(this.label16, "label16");
|
||||
this.label16.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.label16.Name = "label16";
|
||||
//
|
||||
// signAfterBuildChkBox
|
||||
//
|
||||
resources.ApplyResources(this.signAfterBuildChkBox, "signAfterBuildChkBox");
|
||||
@@ -1100,9 +1197,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;
|
||||
//
|
||||
@@ -1117,17 +1214,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;
|
||||
//
|
||||
@@ -1137,6 +1234,7 @@
|
||||
this.checkBox_BUILD_OutputAppPath.Checked = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath;
|
||||
this.checkBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox_BUILD_OutputAppPath.Name = "checkBox_BUILD_OutputAppPath";
|
||||
this.toolTip1.SetToolTip(this.checkBox_BUILD_OutputAppPath, resources.GetString("checkBox_BUILD_OutputAppPath.ToolTip"));
|
||||
this.checkBox_BUILD_OutputAppPath.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox_BUILD_CopyOriginal
|
||||
@@ -1149,10 +1247,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;
|
||||
//
|
||||
@@ -1166,19 +1264,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;
|
||||
//
|
||||
@@ -1323,8 +1421,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;
|
||||
@@ -1337,8 +1435,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;
|
||||
//
|
||||
@@ -1353,14 +1451,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;
|
||||
//
|
||||
@@ -1408,8 +1506,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;
|
||||
//
|
||||
@@ -1427,15 +1525,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;
|
||||
//
|
||||
@@ -1448,7 +1546,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);
|
||||
@@ -1459,6 +1556,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;
|
||||
//
|
||||
@@ -1508,8 +1606,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;
|
||||
//
|
||||
@@ -1581,7 +1679,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);
|
||||
@@ -1590,6 +1687,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;
|
||||
//
|
||||
@@ -1611,10 +1709,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;
|
||||
//
|
||||
@@ -1626,9 +1724,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;
|
||||
//
|
||||
@@ -1647,10 +1745,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;
|
||||
//
|
||||
@@ -1710,8 +1808,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;
|
||||
//
|
||||
@@ -1755,8 +1853,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;
|
||||
//
|
||||
@@ -1782,13 +1880,15 @@
|
||||
// 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.setVendorChkBox);
|
||||
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);
|
||||
this.tabPageAdb.Controls.Add(this.devicesListBox);
|
||||
@@ -1796,6 +1896,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;
|
||||
@@ -1825,6 +1937,20 @@
|
||||
this.refreshDevicesBtn.Name = "refreshDevicesBtn";
|
||||
this.refreshDevicesBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// selApkAdbBtn
|
||||
//
|
||||
resources.ApplyResources(this.selApkAdbBtn, "selApkAdbBtn");
|
||||
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");
|
||||
@@ -1833,16 +1959,10 @@
|
||||
this.setVendorChkBox.Name = "setVendorChkBox";
|
||||
this.setVendorChkBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// selApkAdbBtn
|
||||
//
|
||||
resources.ApplyResources(this.selApkAdbBtn, "selApkAdbBtn");
|
||||
this.selApkAdbBtn.Name = "selApkAdbBtn";
|
||||
this.selApkAdbBtn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
@@ -1853,8 +1973,8 @@
|
||||
//
|
||||
// devicesListBox
|
||||
//
|
||||
this.devicesListBox.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.devicesListBox, "devicesListBox");
|
||||
this.devicesListBox.FormattingEnabled = true;
|
||||
this.devicesListBox.Name = "devicesListBox";
|
||||
//
|
||||
// statusStrip1
|
||||
@@ -1863,7 +1983,7 @@
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripStatusLabelStateImage,
|
||||
this.toolStripStatusLabelStateText,
|
||||
this.toolStripProgressBar1});
|
||||
this.progressBar});
|
||||
resources.ApplyResources(this.statusStrip1, "statusStrip1");
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.SizingGrip = false;
|
||||
@@ -1883,14 +2003,14 @@
|
||||
this.toolStripStatusLabelStateText.Spring = true;
|
||||
this.toolStripStatusLabelStateText.Click += new System.EventHandler(this.toolStripStatusLabelStateText_Click);
|
||||
//
|
||||
// toolStripProgressBar1
|
||||
// progressBar
|
||||
//
|
||||
this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||
resources.ApplyResources(this.toolStripProgressBar1, "toolStripProgressBar1");
|
||||
this.toolStripProgressBar1.MarqueeAnimationSpeed = 30;
|
||||
this.toolStripProgressBar1.Name = "toolStripProgressBar1";
|
||||
this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
|
||||
this.toolStripProgressBar1.Click += new System.EventHandler(this.toolStripProgressBar1_Click);
|
||||
this.progressBar.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||
resources.ApplyResources(this.progressBar, "progressBar");
|
||||
this.progressBar.MarqueeAnimationSpeed = 30;
|
||||
this.progressBar.Name = "progressBar";
|
||||
this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
|
||||
this.progressBar.Click += new System.EventHandler(this.toolStripProgressBar1_Click);
|
||||
//
|
||||
// contextMenuStripLog
|
||||
//
|
||||
@@ -1913,8 +2033,8 @@
|
||||
//
|
||||
// logTxtBox
|
||||
//
|
||||
this.logTxtBox.ContextMenuStrip = this.contextMenuStripLog;
|
||||
resources.ApplyResources(this.logTxtBox, "logTxtBox");
|
||||
this.logTxtBox.ContextMenuStrip = this.contextMenuStripLog;
|
||||
this.logTxtBox.HideSelection = false;
|
||||
this.logTxtBox.Name = "logTxtBox";
|
||||
this.logTxtBox.ReadOnly = true;
|
||||
@@ -1925,6 +2045,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";
|
||||
@@ -1932,33 +2053,72 @@
|
||||
// fileToolStripMenuItem
|
||||
//
|
||||
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.newInsToolStripMenuItem,
|
||||
this.saveLogToFileToolStripMenuItem,
|
||||
this.settingsToolStripMenuItem,
|
||||
this.toolStripMenuItem1,
|
||||
this.openTempFolderToolStripMenuItem,
|
||||
this.clearTempFolderToolStripMenuItem,
|
||||
this.toolStripMenuItem2,
|
||||
this.exitToolStripMenuItem});
|
||||
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
||||
resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem");
|
||||
//
|
||||
// newInsToolStripMenuItem
|
||||
//
|
||||
this.newInsToolStripMenuItem.Name = "newInsToolStripMenuItem";
|
||||
resources.ApplyResources(this.newInsToolStripMenuItem, "newInsToolStripMenuItem");
|
||||
//
|
||||
// saveLogToFileToolStripMenuItem
|
||||
//
|
||||
this.saveLogToFileToolStripMenuItem.Name = "saveLogToFileToolStripMenuItem";
|
||||
resources.ApplyResources(this.saveLogToFileToolStripMenuItem, "saveLogToFileToolStripMenuItem");
|
||||
//
|
||||
// settingsToolStripMenuItem
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
|
||||
resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem");
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
|
||||
//
|
||||
// openTempFolderToolStripMenuItem
|
||||
//
|
||||
this.openTempFolderToolStripMenuItem.Name = "openTempFolderToolStripMenuItem";
|
||||
resources.ApplyResources(this.openTempFolderToolStripMenuItem, "openTempFolderToolStripMenuItem");
|
||||
//
|
||||
// clearTempFolderToolStripMenuItem
|
||||
//
|
||||
this.clearTempFolderToolStripMenuItem.Name = "clearTempFolderToolStripMenuItem";
|
||||
resources.ApplyResources(this.clearTempFolderToolStripMenuItem, "clearTempFolderToolStripMenuItem");
|
||||
this.clearTempFolderToolStripMenuItem.Click += new System.EventHandler(this.clearTempFolderToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2");
|
||||
//
|
||||
// exitToolStripMenuItem
|
||||
//
|
||||
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[] {
|
||||
@@ -2011,13 +2171,13 @@
|
||||
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);
|
||||
@@ -2035,10 +2195,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);
|
||||
@@ -2077,7 +2239,7 @@
|
||||
internal System.Windows.Forms.TabPage tabPageZipAlign;
|
||||
internal System.Windows.Forms.StatusStrip statusStrip1;
|
||||
internal System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText;
|
||||
internal System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;
|
||||
internal System.Windows.Forms.ToolStripProgressBar progressBar;
|
||||
internal System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage;
|
||||
internal System.Windows.Forms.ContextMenuStrip contextMenuStripLog;
|
||||
internal System.Windows.Forms.ToolStripMenuItem clearLogToolStripMenuItem;
|
||||
@@ -2159,8 +2321,6 @@
|
||||
internal System.Windows.Forms.Button openAndroidMainfestBtn;
|
||||
internal System.Windows.Forms.CheckBox checkBox_DECODE_OnlyMainClasses;
|
||||
internal System.Windows.Forms.CheckBox checkBox_BUILD_NoCrunch;
|
||||
internal System.Windows.Forms.Label label6;
|
||||
internal System.Windows.Forms.Label label5;
|
||||
internal System.Windows.Forms.CheckBox checkBox_DECODE_FixError;
|
||||
internal System.Windows.Forms.TabPage tabPageApkInfo;
|
||||
internal System.Windows.Forms.RichTextBox permTxtBox;
|
||||
@@ -2198,7 +2358,6 @@
|
||||
internal System.Windows.Forms.CheckBox clearFwBeforeDecodeChkBox;
|
||||
internal System.Windows.Forms.Button clearFwBtn;
|
||||
internal System.Windows.Forms.GroupBox groupBox1;
|
||||
internal System.Windows.Forms.Label label16;
|
||||
internal System.Windows.Forms.CheckBox signAfterBuildChkBox;
|
||||
internal System.Windows.Forms.CheckBox signAfterZipalignChkBox;
|
||||
internal System.Windows.Forms.CheckBox zipalignOutputDirChkBox;
|
||||
@@ -2212,7 +2371,6 @@
|
||||
internal System.Windows.Forms.Button selectKeyStoreFileBtn;
|
||||
internal System.Windows.Forms.TextBox aliasTxtBox;
|
||||
internal System.Windows.Forms.CheckBox useAliasChkBox;
|
||||
internal System.Windows.Forms.Label label23;
|
||||
internal System.Windows.Forms.CheckBox createUnsignApkChkBox;
|
||||
internal System.Windows.Forms.ComboBox schemev4ComboBox;
|
||||
internal System.Windows.Forms.Label label27;
|
||||
@@ -2270,7 +2428,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;
|
||||
@@ -2285,7 +2442,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;
|
||||
@@ -2294,6 +2450,28 @@
|
||||
internal System.Windows.Forms.ToolStripMenuItem openTempFolderToolStripMenuItem;
|
||||
internal System.Windows.Forms.ToolStripMenuItem reportAnIsuueToolStripMenuItem;
|
||||
public System.Windows.Forms.ToolStripMenuItem saveLogToFileToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearTempFolderToolStripMenuItem;
|
||||
internal System.Windows.Forms.CheckBox checkBox_BUILD_NetSecConf;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+361
-289
@@ -14,11 +14,14 @@ using System.Collections.Generic;
|
||||
using APKToolGUI.Handlers;
|
||||
using Microsoft.WindowsAPICodePack.Taskbar;
|
||||
using System.Media;
|
||||
using APKSMerger.AndroidRes;
|
||||
using Ionic.Zip;
|
||||
using System.Linq;
|
||||
using System.Windows.Interop;
|
||||
using System.Security.Cryptography;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using APKToolGUI.Controls;
|
||||
using Dark.Net;
|
||||
using APKEasyTool;
|
||||
using System.IO.Compression;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -52,6 +55,9 @@ namespace APKToolGUI
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
if (Program.IsDarkTheme())
|
||||
DarkTheme.SetTheme(Controls, this);
|
||||
|
||||
Text += " - v" + ProductVersion;
|
||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
||||
|
||||
@@ -85,6 +91,12 @@ namespace APKToolGUI
|
||||
schemev4ComboBox.SelectedIndex = v4;
|
||||
Settings.Default.Sign_Schemev4 = v4;
|
||||
|
||||
int overrideAbi = (overrideAbiComboBox.Items.Count + 1 > Settings.Default.Adb_OverrideAbi) ? Settings.Default.Adb_OverrideAbi : 0;
|
||||
overrideAbiComboBox.SelectedIndex = overrideAbi;
|
||||
Settings.Default.Adb_OverrideAbi = overrideAbi;
|
||||
|
||||
useAPKEditorForDecompilingItem.Checked = Settings.Default.UseApkeditor;
|
||||
|
||||
new DecodeControlEventHandlers(this);
|
||||
new BuildControlEventHandlers(this);
|
||||
new SignControlEventHandlers(this);
|
||||
@@ -97,6 +109,7 @@ namespace APKToolGUI
|
||||
new ApkinfoControlEventHandlers(this);
|
||||
new MainWindowEventHandlers(this);
|
||||
new MenuItemHandlers(this);
|
||||
new TaskBarJumpList(Handle);
|
||||
}
|
||||
|
||||
private async void FormMain_Shown(object sender, EventArgs e)
|
||||
@@ -120,10 +133,16 @@ namespace APKToolGUI
|
||||
{
|
||||
ToLog(ApktoolEventType.None, javaVersion);
|
||||
string apktoolVersion = apktool.GetVersion();
|
||||
string apkeditorVersion = apkeditor.GetVersion();
|
||||
if (!String.IsNullOrWhiteSpace(apktoolVersion))
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.APKToolVersion + " \"{0}\"", apktoolVersion));
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.APKToolVersion + " {0}", apktoolVersion));
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.CantDetectApktoolVersion);
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(apkeditorVersion))
|
||||
ToLog(ApktoolEventType.None, apkeditorVersion);
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.CantDetectApkeditorVersion);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorJavaDetect);
|
||||
@@ -152,13 +171,8 @@ namespace APKToolGUI
|
||||
if (updateInterval.Days > 0 && Settings.Default.CheckForUpdateAtStartup)
|
||||
updateCheker.CheckAsync(true);
|
||||
});
|
||||
|
||||
ToStatus(Language.Done, Resources.done);
|
||||
|
||||
string decApkPath = Settings.Default.Decode_InputAppPath;
|
||||
|
||||
await GetApkInfo(decApkPath);
|
||||
|
||||
RunCmdArgs();
|
||||
|
||||
await ListDevices();
|
||||
@@ -180,16 +194,8 @@ namespace APKToolGUI
|
||||
case "decapk":
|
||||
if (file.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
|
||||
{
|
||||
if (Settings.Default.Decode_UseApkEditorMergeApk)
|
||||
{
|
||||
if (await MergeUsingApkEditor(file) == 0)
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (await Merge(file) == 0)
|
||||
Close();
|
||||
}
|
||||
if (await MergeAndDecompile(file) == 0)
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -217,11 +223,11 @@ namespace APKToolGUI
|
||||
if (await Smali(file) == 0)
|
||||
Close();
|
||||
break;
|
||||
case "apkinfo":
|
||||
await GetApkInfo(file);
|
||||
case "viewinfo":
|
||||
tabControlMain.SelectedIndex = 1;
|
||||
await GetApkInfo(file);
|
||||
break;
|
||||
default: //Fix when running app as Release from Visual studio
|
||||
default:
|
||||
IgnoreOutputDirContextMenu = false;
|
||||
break;
|
||||
}
|
||||
@@ -245,7 +251,7 @@ namespace APKToolGUI
|
||||
try
|
||||
{
|
||||
string splitPath = Path.Combine(Program.TEMP_PATH, "SplitInfo");
|
||||
string arch = null;
|
||||
string arch = "";
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
@@ -254,31 +260,35 @@ namespace APKToolGUI
|
||||
{
|
||||
Directory.CreateDirectory(splitPath);
|
||||
|
||||
using (ZipFile zipDest = ZipFile.Read(file))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(file))
|
||||
{
|
||||
bool mainApkFound = false;
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
|
||||
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||
{
|
||||
if (!mainApkFound && !entry.FileName.Contains("config.") && entry.FileName.EndsWith(".apk"))
|
||||
if (!mainApkFound && !entry.FullName.Contains("config.") && entry.FullName.EndsWith(".apk"))
|
||||
{
|
||||
Debug.WriteLine("Found main APK" + entry.FileName);
|
||||
entry.Extract(splitPath, ExtractExistingFileAction.OverwriteSilently);
|
||||
file = Path.Combine(splitPath, entry.FileName);
|
||||
Debug.WriteLine("Found main APK: " + entry.FullName);
|
||||
string extractPath = Path.Combine(splitPath, entry.FullName);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(extractPath));
|
||||
entry.ExtractToFile(extractPath, true);
|
||||
file = extractPath;
|
||||
mainApkFound = true;
|
||||
}
|
||||
if (entry.FileName.Contains("lib/armeabi-v7a"))
|
||||
|
||||
if (entry.FullName.Contains("lib/armeabi-v7a"))
|
||||
{
|
||||
arch += "armeabi-v7a, ";
|
||||
}
|
||||
if (entry.FileName.Contains("lib/arm64-v8a"))
|
||||
if (entry.FullName.Contains("lib/arm64-v8a"))
|
||||
{
|
||||
arch += "arm64-v8a, ";
|
||||
}
|
||||
if (entry.FileName.Contains("lib/x86"))
|
||||
if (entry.FullName.Contains("lib/x86"))
|
||||
{
|
||||
arch += "x86, ";
|
||||
}
|
||||
if (entry.FileName.Contains("lib/x86_64"))
|
||||
if (entry.FullName.Contains("lib/x86_64"))
|
||||
{
|
||||
arch += "x86_64, ";
|
||||
}
|
||||
@@ -288,8 +298,10 @@ namespace APKToolGUI
|
||||
});
|
||||
|
||||
bool parsed = false;
|
||||
string signature = null;
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
signature = signapk.GetSignature(file);
|
||||
aapt = new AaptParser();
|
||||
parsed = aapt.Parse(file);
|
||||
});
|
||||
@@ -301,6 +313,7 @@ namespace APKToolGUI
|
||||
apkIconPicBox.Image.Dispose();
|
||||
apkIconPicBox.Image = null;
|
||||
}
|
||||
sigTxtBox.Text = signature;
|
||||
fileTxtBox.Text = aapt.ApkFile;
|
||||
appTxtBox.Text = aapt.AppName;
|
||||
packNameTxtBox.Text = aapt.PackageName;
|
||||
@@ -331,7 +344,6 @@ namespace APKToolGUI
|
||||
apkIconPicBox.Image = BitmapUtils.LoadBitmap(icon);
|
||||
}
|
||||
}
|
||||
|
||||
DirectoryUtils.Delete(splitPath);
|
||||
}
|
||||
}
|
||||
@@ -388,7 +400,7 @@ namespace APKToolGUI
|
||||
{
|
||||
BeginInvoke(new MethodInvoker(delegate
|
||||
{
|
||||
toolStripStatusLabelStateText.Text = message;
|
||||
toolStripStatusLabelStateText.Text = message.Replace("\n", "").Replace("\r", "");
|
||||
toolStripStatusLabelStateImage.Image = statusImage;
|
||||
}));
|
||||
}
|
||||
@@ -416,30 +428,45 @@ namespace APKToolGUI
|
||||
if (String.IsNullOrWhiteSpace(message) || message.Contains("_JAVA_OPTIONS"))
|
||||
return;
|
||||
|
||||
Color color = Color.Black;
|
||||
|
||||
switch (eventType)
|
||||
{
|
||||
case ApktoolEventType.None:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.Black);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.White;
|
||||
break;
|
||||
case ApktoolEventType.Success:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.DarkGreen);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.LightGreen;
|
||||
else
|
||||
color = Color.DarkGreen;
|
||||
break;
|
||||
case ApktoolEventType.Infomation:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.Blue);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.LightBlue;
|
||||
else
|
||||
color = Color.Blue;
|
||||
break;
|
||||
case ApktoolEventType.Error:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.Red);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.LightPink;
|
||||
else
|
||||
color = Color.Red;
|
||||
break;
|
||||
case ApktoolEventType.Warning:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.DarkOrange);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.DarkOrange;
|
||||
else
|
||||
color = Color.Orange;
|
||||
break;
|
||||
case ApktoolEventType.Unknown:
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, Color.Red);
|
||||
break;
|
||||
default:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Color.Blue);
|
||||
if (Program.IsDarkTheme())
|
||||
color = Color.White;
|
||||
break;
|
||||
}
|
||||
|
||||
ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, color);
|
||||
}
|
||||
|
||||
internal void Running(string msg)
|
||||
@@ -447,7 +474,8 @@ namespace APKToolGUI
|
||||
Invoke(new Action(delegate ()
|
||||
{
|
||||
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate, Handle);
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
progressBar.Visible = true;
|
||||
ActionButtonsEnabled = false;
|
||||
ClearLog();
|
||||
}));
|
||||
@@ -479,16 +507,30 @@ namespace APKToolGUI
|
||||
|
||||
TaskbarManager.Instance.SetProgressValue(1, 1);
|
||||
if (statusStrip1.InvokeRequired)
|
||||
statusStrip1.BeginInvoke(new Action(delegate { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; }));
|
||||
statusStrip1.BeginInvoke(new Action(delegate { progressBar.Style = ProgressBarStyle.Continuous; }));
|
||||
else
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
|
||||
Invoke(new Action(delegate ()
|
||||
{
|
||||
progressBar.Visible = false;
|
||||
}));
|
||||
|
||||
ActionButtonsEnabled = true;
|
||||
|
||||
ToStatus(Language.Done, Resources.done);
|
||||
}
|
||||
|
||||
internal void Error(string msg)
|
||||
internal void Error(Exception ex)
|
||||
{
|
||||
#if DEBUG
|
||||
Error(ex.ToString());
|
||||
#else
|
||||
Error(ex.Message);
|
||||
#endif
|
||||
}
|
||||
|
||||
internal void Error(string msg, string status = null)
|
||||
{
|
||||
isRunning = false;
|
||||
|
||||
@@ -505,13 +547,21 @@ namespace APKToolGUI
|
||||
|
||||
TaskbarManager.Instance.SetProgressValue(1, 1);
|
||||
if (statusStrip1.InvokeRequired)
|
||||
statusStrip1.BeginInvoke(new Action(delegate { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; }));
|
||||
statusStrip1.BeginInvoke(new Action(delegate { progressBar.Style = ProgressBarStyle.Continuous; }));
|
||||
else
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
|
||||
Invoke(new Action(delegate ()
|
||||
{
|
||||
progressBar.Visible = false;
|
||||
}));
|
||||
|
||||
ActionButtonsEnabled = true;
|
||||
|
||||
ToStatus(msg, Resources.error);
|
||||
if (status == null)
|
||||
ToStatus(msg, Resources.error);
|
||||
else
|
||||
ToStatus(status, Resources.error);
|
||||
}
|
||||
|
||||
internal void ClearLog()
|
||||
@@ -521,108 +571,6 @@ namespace APKToolGUI
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Merge APK
|
||||
internal async Task<int> Merge(string inputSplitApk)
|
||||
{
|
||||
int code = 0;
|
||||
|
||||
Running(Language.MergingApk);
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputSplitApk));
|
||||
|
||||
string apkFileName = Path.GetFileName(inputSplitApk);
|
||||
|
||||
string tempApk = Path.Combine(Program.TEMP_PATH, "dec.apk");
|
||||
|
||||
string extractedSplitDir = Path.Combine(Program.TEMP_PATH, "SplitApk");
|
||||
string decompileDir = Path.Combine(Program.TEMP_PATH, "Decompiled");
|
||||
string mergedDir = Path.Combine(Program.TEMP_PATH, "Merged");
|
||||
|
||||
string outputDir = PathUtils.GetDirectoryNameWithoutExtension(inputSplitApk);
|
||||
if (Settings.Default.Decode_UseOutputDir && !IgnoreOutputDirContextMenu)
|
||||
outputDir = Path.Combine(Settings.Default.Decode_OutputDir, Path.GetFileNameWithoutExtension(inputSplitApk));
|
||||
|
||||
try
|
||||
{
|
||||
DirectoryUtils.Delete(extractedSplitDir);
|
||||
Directory.CreateDirectory(extractedSplitDir);
|
||||
DirectoryUtils.Delete(mergedDir);
|
||||
Directory.CreateDirectory(mergedDir);
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
if (Settings.Default.Framework_ClearBeforeDecode)
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, Language.ClearingFramework);
|
||||
if (apktool.ClearFramework() == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Success, Language.FrameworkCacheCleared);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorClearingFw);
|
||||
}
|
||||
|
||||
//Extract all apk files
|
||||
ToLog(ApktoolEventType.None, Language.ExtractingAllApkFiles);
|
||||
ZipUtils.ExtractAll(inputSplitApk, extractedSplitDir, true);
|
||||
|
||||
//Decompile all apk files
|
||||
ToLog(ApktoolEventType.None, Language.DecompilingAllApkFiles);
|
||||
|
||||
List<DirectoryInfo> splitDirs = new List<DirectoryInfo>();
|
||||
var apkfiles = Directory.EnumerateFiles(extractedSplitDir, "*.apk");
|
||||
|
||||
foreach (string apk in apkfiles)
|
||||
{
|
||||
string output = Path.Combine(decompileDir, Path.GetFileNameWithoutExtension(apk));
|
||||
|
||||
code = apktool.Decompile(apk, output);
|
||||
if (code != 0)
|
||||
{
|
||||
Error(Language.ErrorDecompiling);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Directory.Exists(Path.Combine(output, "smali")) || File.Exists(Path.Combine(output, "classes.dex")))
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, String.Format(Language.DetectedAsBase, apk));
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.MovingBasedirectory, decompileDir));
|
||||
DirectoryUtils.Move(output, mergedDir);
|
||||
continue;
|
||||
}
|
||||
|
||||
DirectoryInfo splitI = new DirectoryInfo(output);
|
||||
ToLog(ApktoolEventType.Infomation, String.Format(Language.DetectedAsSplit, apk));
|
||||
splitDirs.Add(splitI);
|
||||
}
|
||||
|
||||
AndroidMerger merger = new AndroidMerger();
|
||||
DirectoryInfo baseDir = new DirectoryInfo(mergedDir);
|
||||
|
||||
Dictionary<string, string> locales, abis;
|
||||
|
||||
ToLog(ApktoolEventType.None, Language.MergingApk);
|
||||
merger.CollectCapabilities(out locales, out abis, baseDir, splitDirs.ToArray());
|
||||
merger.MergeSplits(baseDir, splitDirs.ToArray());
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.MergeFinishedMoveDir, outputDir));
|
||||
DirectoryUtils.Move(mergedDir, outputDir);
|
||||
});
|
||||
|
||||
Done();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
ToLog(ApktoolEventType.Error, ex.ToString());
|
||||
Error(ex.Message);
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ApkEditor
|
||||
private void InitializeApkEditor()
|
||||
{
|
||||
@@ -638,10 +586,10 @@ namespace APKToolGUI
|
||||
|
||||
void ApkEditorOutputDataRecieved(object sender, ApkEditorDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, e.Message);
|
||||
ToLog(ApktoolEventType.None, e.Message);
|
||||
}
|
||||
|
||||
internal async Task<int> MergeUsingApkEditor(string inputSplitApk)
|
||||
internal async Task<int> MergeAndDecompile(string inputSplitApk)
|
||||
{
|
||||
int code = 0;
|
||||
|
||||
@@ -692,7 +640,10 @@ namespace APKToolGUI
|
||||
code = apkeditor.Merge(extractedDir, tempApk);
|
||||
if (code == 0)
|
||||
{
|
||||
code = apktool.Decompile(tempApk, tempDecApk);
|
||||
if (useAPKEditorForDecompilingItem.Checked)
|
||||
code = apkeditor.Decompile(tempApk, tempDecApk);
|
||||
else
|
||||
code = apktool.Decompile(tempApk, tempDecApk);
|
||||
|
||||
if (code == 0)
|
||||
{
|
||||
@@ -717,10 +668,10 @@ namespace APKToolGUI
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.DecompilingSuccessfullyCompleted, outputDir));
|
||||
if (Settings.Default.Decode_FixError)
|
||||
{
|
||||
if (ApkFixer.ChangeSdkTo29(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.ChangedTargetSdkTo29);
|
||||
if (ApkFixer.FixAndroidManifest(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.FixAndroidManifest);
|
||||
if (ApkFixer.FixApktoolYml(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.FixApktoolYml);
|
||||
if (ApkFixer.RemoveApkToolDummies(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.RemoveApkToolDummies);
|
||||
}
|
||||
@@ -742,8 +693,52 @@ namespace APKToolGUI
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
ToLog(ApktoolEventType.Error, ex.Message);
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
internal async Task<int> Merge(string inputSplitApk)
|
||||
{
|
||||
int code = 0;
|
||||
|
||||
Running(Language.MergingApk);
|
||||
|
||||
string apkFileName = Path.GetFileName(inputSplitApk);
|
||||
string tempFile = Path.Combine(Program.TEMP_PATH, "tempsplit");
|
||||
string tempFileMerged = Path.Combine(Program.TEMP_PATH, "tempsplitmerged");
|
||||
|
||||
string outputFile = PathUtils.GetDirectoryNameWithoutExtension(inputSplitApk) + " merged.apk";
|
||||
|
||||
try
|
||||
{
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputSplitApk));
|
||||
|
||||
ToLog(ApktoolEventType.None, Language.MergingApkEditor);
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputSplitApk, tempFile));
|
||||
FileUtils.Copy(inputSplitApk, tempFile, true);
|
||||
|
||||
code = apkeditor.Merge(tempFile, tempFileMerged);
|
||||
if (code == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkToOutput, tempFile, outputFile));
|
||||
FileUtils.Move(tempFileMerged, outputFile, true);
|
||||
Done();
|
||||
}
|
||||
else
|
||||
{
|
||||
Error(Language.ErrorMerging);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
Error(ex);
|
||||
}
|
||||
|
||||
return code;
|
||||
@@ -796,93 +791,6 @@ namespace APKToolGUI
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
internal async Task<int> Decompile(string inputApk)
|
||||
{
|
||||
int code = 0;
|
||||
|
||||
Running(Language.Decoding);
|
||||
|
||||
string apkFileName = Path.GetFileName(inputApk);
|
||||
string outputDir = PathUtils.GetDirectoryNameWithoutExtension(inputApk);
|
||||
if (Settings.Default.Decode_UseOutputDir && !IgnoreOutputDirContextMenu)
|
||||
outputDir = Path.Combine(Settings.Default.Decode_OutputDir, Path.GetFileNameWithoutExtension(inputApk));
|
||||
|
||||
string tempApk = Path.Combine(Program.TEMP_PATH, "dec.apk");
|
||||
string outputTempDir = tempApk.Replace(".apk", "");
|
||||
|
||||
try
|
||||
{
|
||||
if (!Settings.Default.Decode_Force && Directory.Exists(outputDir))
|
||||
{
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DecodeDesDirExists, outputDir));
|
||||
return 1;
|
||||
}
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
DirectoryUtils.Delete(outputTempDir);
|
||||
|
||||
if (Settings.Default.Framework_ClearBeforeDecode)
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, Language.ClearingFramework);
|
||||
if (apktool.ClearFramework() == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Success, Language.FrameworkCacheCleared);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorClearingFw);
|
||||
}
|
||||
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputApk, tempApk));
|
||||
|
||||
FileUtils.Copy(inputApk, tempApk, true);
|
||||
|
||||
code = apktool.Decompile(tempApk, outputTempDir);
|
||||
}
|
||||
else
|
||||
code = apktool.Decompile(inputApk, outputDir);
|
||||
|
||||
if (code == 0)
|
||||
{
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkFileToOutput, outputTempDir, outputDir));
|
||||
DirectoryUtils.Delete(outputDir);
|
||||
DirectoryUtils.Copy(outputTempDir, outputDir);
|
||||
}
|
||||
|
||||
textBox_BUILD_InputProjectDir.BeginInvoke(new Action(delegate
|
||||
{
|
||||
textBox_BUILD_InputProjectDir.Text = outputDir;
|
||||
}));
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.DecompilingSuccessfullyCompleted, outputDir));
|
||||
if (Settings.Default.Decode_FixError)
|
||||
{
|
||||
if (ApkFixer.ChangeSdkTo29(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.ChangedTargetSdkTo29);
|
||||
if (ApkFixer.FixAndroidManifest(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.FixAndroidManifest);
|
||||
if (ApkFixer.RemoveApkToolDummies(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.RemoveApkToolDummies);
|
||||
}
|
||||
|
||||
Done();
|
||||
}
|
||||
else
|
||||
Error(Language.ErrorDecompiling);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
Error(ex.ToString());
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
internal async Task<int> ClearFramework()
|
||||
{
|
||||
int code = 0;
|
||||
@@ -904,13 +812,107 @@ namespace APKToolGUI
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
code = 1;
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
internal async Task<int> Decompile(string inputApk)
|
||||
{
|
||||
Debug.WriteLine(useAPKEditorForDecompilingItem.Checked);
|
||||
|
||||
int code = 0;
|
||||
|
||||
Running(Language.Decoding);
|
||||
|
||||
string apkFileName = Path.GetFileName(inputApk);
|
||||
string outputDir = PathUtils.GetDirectoryNameWithoutExtension(inputApk);
|
||||
if (Settings.Default.Decode_UseOutputDir && !IgnoreOutputDirContextMenu)
|
||||
outputDir = Path.Combine(Settings.Default.Decode_OutputDir, Path.GetFileNameWithoutExtension(inputApk));
|
||||
|
||||
string tempApk = Path.Combine(Program.TEMP_PATH, "dec.apk");
|
||||
string outputTempDir = tempApk.Replace(".apk", "");
|
||||
string outputDecDir = outputDir;
|
||||
|
||||
try
|
||||
{
|
||||
if (!Settings.Default.Decode_Force && Directory.Exists(outputDir))
|
||||
{
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DecodeDesDirExists, outputDir));
|
||||
return 1;
|
||||
}
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
if (Settings.Default.Framework_ClearBeforeDecode && !Settings.Default.UseApkeditor)
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, Language.ClearingFramework);
|
||||
if (apktool.ClearFramework() == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Success, Language.FrameworkCacheCleared);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorClearingFw);
|
||||
}
|
||||
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
DirectoryUtils.Delete(outputTempDir);
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputApk, tempApk));
|
||||
|
||||
FileUtils.Copy(inputApk, tempApk, true);
|
||||
|
||||
inputApk = tempApk;
|
||||
outputDecDir = outputTempDir;
|
||||
}
|
||||
|
||||
if (useAPKEditorForDecompilingItem.Checked)
|
||||
code = apkeditor.Decompile(inputApk, outputDecDir);
|
||||
else
|
||||
code = apktool.Decompile(inputApk, outputDecDir);
|
||||
|
||||
if (code == 0)
|
||||
{
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkFileToOutput, outputTempDir, outputDir));
|
||||
DirectoryUtils.Delete(outputDir);
|
||||
DirectoryUtils.Copy(outputTempDir, outputDir);
|
||||
}
|
||||
|
||||
textBox_BUILD_InputProjectDir.BeginInvoke(new Action(delegate
|
||||
{
|
||||
textBox_BUILD_InputProjectDir.Text = outputDir;
|
||||
}));
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.DecompilingSuccessfullyCompleted, outputDir));
|
||||
if (Settings.Default.Decode_FixError && !useAPKEditorForDecompilingItem.Checked)
|
||||
{
|
||||
if (ApkFixer.FixAndroidManifest(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.FixAndroidManifest);
|
||||
if (ApkFixer.FixApktoolYml(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.FixApktoolYml);
|
||||
if (ApkFixer.RemoveApkToolDummies(outputDir))
|
||||
ToLog(ApktoolEventType.None, Language.RemoveApkToolDummies);
|
||||
}
|
||||
|
||||
Done();
|
||||
}
|
||||
else
|
||||
Error(Language.ErrorDecompiling);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
Error(ex.ToString(), Language.ErrorDecompiling);
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
internal async Task<int> Build(string inputFolder)
|
||||
{
|
||||
int code = 0;
|
||||
@@ -923,6 +925,7 @@ namespace APKToolGUI
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
string outputFile = inputFolder + " compiled.apk";
|
||||
string outputUnsignedApk = inputFolder + " unsigned.apk";
|
||||
if (Settings.Default.Build_SignAfterBuild)
|
||||
outputFile = inputFolder + " signed.apk";
|
||||
if (Settings.Default.Build_UseOutputAppPath && !IgnoreOutputDirContextMenu)
|
||||
@@ -937,6 +940,8 @@ namespace APKToolGUI
|
||||
string tempDecApkFolder = Path.Combine(Program.TEMP_PATH, "dec");
|
||||
string outputTempApk = tempDecApkFolder + ".apk";
|
||||
|
||||
bool isDecompiledUsingApkEditor = File.Exists(Path.Combine(inputFolder, "path-map.json"));
|
||||
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.CopyFolderToTemp, inputFolder, tempDecApkFolder));
|
||||
@@ -947,12 +952,31 @@ namespace APKToolGUI
|
||||
outputFile = outputTempApk;
|
||||
}
|
||||
|
||||
code = apktool.Build(inputFolder, outputFile);
|
||||
if (isDecompiledUsingApkEditor)
|
||||
code = apkeditor.Build(inputFolder, outputFile);
|
||||
else
|
||||
code = apktool.Build(inputFolder, outputFile);
|
||||
|
||||
if (code == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.CompilingSuccessfullyCompleted, outputFile));
|
||||
|
||||
if (Settings.Default.Build_CreateUnsignedApk)
|
||||
{
|
||||
ToStatus(Language.CreateUnsignedApk, Resources.waiting);
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.CreateUnsignedApk + " ]=====");
|
||||
|
||||
if (Directory.Exists(Path.Combine(inputFolder, "original", "META-INF")))
|
||||
{
|
||||
string unsignedApkPath = Path.Combine(Path.GetDirectoryName(outputCompiledApkFile), Path.GetFileName(outputUnsignedApk));
|
||||
ZipUtils.UpdateDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
|
||||
ToLog(ApktoolEventType.Infomation, String.Format(Language.CopyFileTo, outputFile, unsignedApkPath));
|
||||
File.Copy(outputFile, unsignedApkPath, true);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Warning, Language.MetainfNotExist);
|
||||
}
|
||||
|
||||
if (Settings.Default.Build_ZipalignAfterBuild)
|
||||
{
|
||||
ToStatus(Language.Aligning, Resources.waiting);
|
||||
@@ -962,20 +986,6 @@ namespace APKToolGUI
|
||||
if (zipalign.Align(outputFile, outputFile) == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, Language.Done);
|
||||
if (Settings.Default.Build_CreateUnsignedApk)
|
||||
{
|
||||
ToStatus(Language.CreateUnsignedApk, Resources.waiting);
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.CreateUnsignedApk + " ]=====");
|
||||
|
||||
if (Directory.Exists(Path.Combine(inputFolder, "original", "META-INF")))
|
||||
{
|
||||
ZipUtils.UpdateDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
|
||||
File.Copy(outputFile, Path.Combine(Path.GetDirectoryName(outputFile), Path.GetFileName(inputFolder) + " unsigned.apk"), true);
|
||||
ToLog(ApktoolEventType.None, Language.Done);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Warning, Language.MetainfNotExist);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1001,18 +1011,21 @@ namespace APKToolGUI
|
||||
}
|
||||
|
||||
string device = selAdbDeviceLbl.Text;
|
||||
if (!String.IsNullOrEmpty(device) && Settings.Default.Sign_InstallApkAfterSign)
|
||||
if (Settings.Default.Sign_InstallApkAfterSign)
|
||||
{
|
||||
ToStatus(Language.InstallingApk, Resources.waiting);
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]=====");
|
||||
if (!String.IsNullOrEmpty(device))
|
||||
{
|
||||
ToStatus(Language.InstallingApk, Resources.waiting);
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]=====");
|
||||
|
||||
if (adb.Install(device, outputFile) == 0)
|
||||
ToLog(ApktoolEventType.None, Language.InstallApkSuccessful);
|
||||
if (adb.Install(device, outputFile) == 0)
|
||||
ToLog(ApktoolEventType.None, Language.InstallApkSuccessful);
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.InstallApkFailed);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.InstallApkFailed); ;
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile));
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile));
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorSigning);
|
||||
@@ -1034,7 +1047,7 @@ namespace APKToolGUI
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
code = 1;
|
||||
}
|
||||
|
||||
@@ -1090,7 +1103,7 @@ namespace APKToolGUI
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
ToLog(ApktoolEventType.Error, ex.Message);
|
||||
Error(ex);
|
||||
}
|
||||
|
||||
return code;
|
||||
@@ -1139,7 +1152,7 @@ namespace APKToolGUI
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
code = 1;
|
||||
}
|
||||
|
||||
@@ -1197,6 +1210,23 @@ namespace APKToolGUI
|
||||
code = zipalign.Align(inputFile, outputDir);
|
||||
if (code == 0)
|
||||
{
|
||||
if (Settings.Default.Zipalign_SignAfterZipAlign)
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.Signing + " ]=====");
|
||||
if (signapk.Sign(outputDir, outputDir) == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, Language.Done);
|
||||
|
||||
if (Settings.Default.AutoDeleteIdsigFile)
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.DeleteFile, outputDir + ".idsig"));
|
||||
FileUtils.Delete(outputDir + ".idsig");
|
||||
}
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.ErrorSigning);
|
||||
}
|
||||
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.ZipalignFileSavedTo, outputDir));
|
||||
if (Settings.Default.Utf8FilenameSupport)
|
||||
{
|
||||
@@ -1212,7 +1242,7 @@ namespace APKToolGUI
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
code = 1;
|
||||
}
|
||||
|
||||
@@ -1275,18 +1305,21 @@ namespace APKToolGUI
|
||||
|
||||
string device = selAdbDeviceLbl.Text;
|
||||
|
||||
if (!String.IsNullOrEmpty(device) && Settings.Default.Sign_InstallApkAfterSign)
|
||||
if (Settings.Default.Sign_InstallApkAfterSign)
|
||||
{
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]=====");
|
||||
if (adb.Install(device, outputFile) == 0)
|
||||
if (!string.IsNullOrEmpty(device))
|
||||
{
|
||||
ToLog(ApktoolEventType.Success, Language.InstallApkSuccessful);
|
||||
ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]=====");
|
||||
if (adb.Install(device, outputFile) == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Success, Language.InstallApkSuccessful);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.InstallApkFailed);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, Language.InstallApkFailed);
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile));
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile));
|
||||
|
||||
if (Settings.Default.AutoDeleteIdsigFile)
|
||||
{
|
||||
@@ -1309,7 +1342,7 @@ namespace APKToolGUI
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
}
|
||||
|
||||
return code;
|
||||
@@ -1412,19 +1445,46 @@ namespace APKToolGUI
|
||||
catch (Exception ex)
|
||||
{
|
||||
code = 1;
|
||||
ToLog(ApktoolEventType.Error, ex.ToString());
|
||||
Error(ex.Message);
|
||||
Error(ex);
|
||||
}
|
||||
|
||||
AdbActionButtonsEnabled = true;
|
||||
|
||||
return code;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Main menu event handlers
|
||||
|
||||
#endregion
|
||||
|
||||
#region Form handlers
|
||||
private async void clearTempFolderToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Running(Language.ClearTempFolder);
|
||||
try
|
||||
{
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
foreach (var subDir in new DirectoryInfo(Program.TEMP_MAIN).EnumerateDirectories())
|
||||
{
|
||||
ToLog(ApktoolEventType.None, String.Format(Language.DeletingFolder, subDir));
|
||||
DirectoryUtils.Delete(subDir.FullName);
|
||||
}
|
||||
Directory.CreateDirectory(Program.TEMP_PATH);
|
||||
});
|
||||
Done();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private async void tabControlMain_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (tabControlMain.SelectedIndex == 1 && String.IsNullOrEmpty(appTxtBox.Text) && Environment.GetCommandLineArgs().Length == 1)
|
||||
{
|
||||
await GetApkInfo(Settings.Default.Decode_InputAppPath);
|
||||
}
|
||||
}
|
||||
|
||||
private void FormMain_Activated(object sender, EventArgs e)
|
||||
{
|
||||
if (!isRunning)
|
||||
@@ -1497,6 +1557,14 @@ namespace APKToolGUI
|
||||
}));
|
||||
else
|
||||
comSmaliBtn.Enabled = value;
|
||||
|
||||
if (mergeApkBtn.InvokeRequired)
|
||||
mergeApkBtn.BeginInvoke(new Action(delegate
|
||||
{
|
||||
mergeApkBtn.Enabled = value;
|
||||
}));
|
||||
else
|
||||
mergeApkBtn.Enabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1511,8 +1579,11 @@ namespace APKToolGUI
|
||||
apkPathAdbTxtBox.Enabled = value;
|
||||
selApkAdbBtn.Enabled = value;
|
||||
setVendorChkBox.Enabled = value;
|
||||
overrideAbiCheckBox.Enabled = value;
|
||||
overrideAbiComboBox.Enabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal void ShowMessage(string message, MessageBoxIcon status)
|
||||
{
|
||||
MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, status);
|
||||
@@ -1526,6 +1597,8 @@ namespace APKToolGUI
|
||||
Settings.Default.Sign_Schemev2 = schemev2ComboBox.SelectedIndex;
|
||||
Settings.Default.Sign_Schemev3 = schemev3ComboBox.SelectedIndex;
|
||||
Settings.Default.Sign_Schemev4 = schemev4ComboBox.SelectedIndex;
|
||||
Settings.Default.Adb_OverrideAbi = overrideAbiComboBox.SelectedIndex;
|
||||
Settings.Default.UseApkeditor = useAPKEditorForDecompilingItem.Checked;
|
||||
Settings.Default.Save();
|
||||
}
|
||||
#endregion
|
||||
@@ -1563,6 +1636,5 @@ namespace APKToolGUI
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
+980
-513
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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>
|
||||
+155
-101
@@ -32,29 +32,34 @@
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.customApkToolTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.themeComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.customApktoolBtn = new System.Windows.Forms.Button();
|
||||
this.useCustomApktoolChk = new System.Windows.Forms.CheckBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.checkBox5 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox4 = new System.Windows.Forms.CheckBox();
|
||||
this.customTempLocationTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
|
||||
this.buttonCustomTempLocation = new System.Windows.Forms.Button();
|
||||
this.checkBox3 = new System.Windows.Forms.CheckBox();
|
||||
this.buttonCustomJavaLocation = new System.Windows.Forms.Button();
|
||||
this.checkBox2 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
|
||||
this.groupBoxLanguage = new System.Windows.Forms.GroupBox();
|
||||
this.comboBox1 = new System.Windows.Forms.ComboBox();
|
||||
this.groupBoxContextMenu = new System.Windows.Forms.GroupBox();
|
||||
this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox();
|
||||
this.labelAdminRights = new System.Windows.Forms.Label();
|
||||
this.buttonAddContextMenu = new System.Windows.Forms.Button();
|
||||
this.buttonRemoveContextMenu = new System.Windows.Forms.Button();
|
||||
this.buttonCancel = new System.Windows.Forms.Button();
|
||||
this.buttonОК = new System.Windows.Forms.Button();
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.checkBox7 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox6 = new System.Windows.Forms.CheckBox();
|
||||
this.customApkToolTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.useCustomApktoolChk = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox5 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox4 = new System.Windows.Forms.CheckBox();
|
||||
this.customTempLocationTxtBox = new System.Windows.Forms.TextBox();
|
||||
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
|
||||
this.checkBox3 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox2 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
|
||||
this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox();
|
||||
this.tabControl1.SuspendLayout();
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
@@ -71,16 +76,21 @@
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||
this.tabPage1.Controls.Add(this.groupBox1);
|
||||
this.tabPage1.Controls.Add(this.groupBoxLanguage);
|
||||
this.tabPage1.Controls.Add(this.groupBoxContextMenu);
|
||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.textBox1);
|
||||
this.groupBox1.Controls.Add(this.checkBox7);
|
||||
this.groupBox1.Controls.Add(this.checkBox6);
|
||||
this.groupBox1.Controls.Add(this.themeComboBox);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.customApkToolTxtBox);
|
||||
this.groupBox1.Controls.Add(this.customApktoolBtn);
|
||||
this.groupBox1.Controls.Add(this.useCustomApktoolChk);
|
||||
@@ -98,13 +108,20 @@
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// customApkToolTxtBox
|
||||
// themeComboBox
|
||||
//
|
||||
resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox");
|
||||
this.customApkToolTxtBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.customApkToolTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "ApktoolPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.customApkToolTxtBox.Name = "customApkToolTxtBox";
|
||||
this.customApkToolTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.ApktoolPath;
|
||||
this.themeComboBox.FormattingEnabled = true;
|
||||
this.themeComboBox.Items.AddRange(new object[] {
|
||||
resources.GetString("themeComboBox.Items"),
|
||||
resources.GetString("themeComboBox.Items1"),
|
||||
resources.GetString("themeComboBox.Items2")});
|
||||
resources.ApplyResources(this.themeComboBox, "themeComboBox");
|
||||
this.themeComboBox.Name = "themeComboBox";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// customApktoolBtn
|
||||
//
|
||||
@@ -113,52 +130,12 @@
|
||||
this.customApktoolBtn.UseVisualStyleBackColor = true;
|
||||
this.customApktoolBtn.Click += new System.EventHandler(this.customApktoolBtn_Click);
|
||||
//
|
||||
// useCustomApktoolChk
|
||||
//
|
||||
resources.ApplyResources(this.useCustomApktoolChk, "useCustomApktoolChk");
|
||||
this.useCustomApktoolChk.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomApktool;
|
||||
this.useCustomApktoolChk.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomApktool", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.useCustomApktoolChk.Name = "useCustomApktoolChk";
|
||||
this.useCustomApktoolChk.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// checkBox5
|
||||
//
|
||||
resources.ApplyResources(this.checkBox5, "checkBox5");
|
||||
this.checkBox5.Checked = global::APKToolGUI.Properties.Settings.Default.Utf8FilenameSupport;
|
||||
this.checkBox5.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Utf8FilenameSupport", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox5.Name = "checkBox5";
|
||||
this.checkBox5.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox4
|
||||
//
|
||||
resources.ApplyResources(this.checkBox4, "checkBox4");
|
||||
this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJavaExe;
|
||||
this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox4.Name = "checkBox4";
|
||||
this.checkBox4.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// customTempLocationTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.customTempLocationTxtBox, "customTempLocationTxtBox");
|
||||
this.customTempLocationTxtBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.customTempLocationTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "TempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.customTempLocationTxtBox.Name = "customTempLocationTxtBox";
|
||||
this.customTempLocationTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.TempDir;
|
||||
//
|
||||
// textBoxCustomJavaLocation
|
||||
//
|
||||
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
|
||||
this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
|
||||
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
|
||||
//
|
||||
// buttonCustomTempLocation
|
||||
//
|
||||
resources.ApplyResources(this.buttonCustomTempLocation, "buttonCustomTempLocation");
|
||||
@@ -166,14 +143,6 @@
|
||||
this.buttonCustomTempLocation.UseVisualStyleBackColor = true;
|
||||
this.buttonCustomTempLocation.Click += new System.EventHandler(this.buttonCustomTempLocation_Click);
|
||||
//
|
||||
// checkBox3
|
||||
//
|
||||
resources.ApplyResources(this.checkBox3, "checkBox3");
|
||||
this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomTempDir;
|
||||
this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomTempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox3.Name = "checkBox3";
|
||||
this.checkBox3.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// buttonCustomJavaLocation
|
||||
//
|
||||
resources.ApplyResources(this.buttonCustomJavaLocation, "buttonCustomJavaLocation");
|
||||
@@ -181,32 +150,6 @@
|
||||
this.buttonCustomJavaLocation.UseVisualStyleBackColor = true;
|
||||
this.buttonCustomJavaLocation.Click += new System.EventHandler(this.buttonCustomJavaLocation_Click);
|
||||
//
|
||||
// checkBox2
|
||||
//
|
||||
resources.ApplyResources(this.checkBox2, "checkBox2");
|
||||
this.checkBox2.Checked = global::APKToolGUI.Properties.Settings.Default.PlaySoundWhenDone;
|
||||
this.checkBox2.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "PlaySoundWhenDone", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox2.Name = "checkBox2";
|
||||
this.checkBox2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox1
|
||||
//
|
||||
resources.ApplyResources(this.checkBox1, "checkBox1");
|
||||
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
|
||||
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxCheckUpdateStartup
|
||||
//
|
||||
resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup");
|
||||
this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup;
|
||||
this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup";
|
||||
this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBoxLanguage
|
||||
//
|
||||
resources.ApplyResources(this.groupBoxLanguage, "groupBoxLanguage");
|
||||
@@ -216,8 +159,8 @@
|
||||
//
|
||||
// comboBox1
|
||||
//
|
||||
resources.ApplyResources(this.comboBox1, "comboBox1");
|
||||
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
resources.ApplyResources(this.comboBox1, "comboBox1");
|
||||
this.comboBox1.FormattingEnabled = true;
|
||||
this.comboBox1.Name = "comboBox1";
|
||||
//
|
||||
@@ -231,14 +174,6 @@
|
||||
this.groupBoxContextMenu.Name = "groupBoxContextMenu";
|
||||
this.groupBoxContextMenu.TabStop = false;
|
||||
//
|
||||
// ignoreOutputContextMenuBox
|
||||
//
|
||||
resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox");
|
||||
this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu;
|
||||
this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox";
|
||||
this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// labelAdminRights
|
||||
//
|
||||
resources.ApplyResources(this.labelAdminRights, "labelAdminRights");
|
||||
@@ -272,6 +207,120 @@
|
||||
this.buttonОК.UseVisualStyleBackColor = true;
|
||||
this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click);
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
resources.ApplyResources(this.textBox1, "textBox1");
|
||||
this.textBox1.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "CustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Text = global::APKToolGUI.Properties.Settings.Default.CustomJVMArgs;
|
||||
//
|
||||
// checkBox7
|
||||
//
|
||||
resources.ApplyResources(this.checkBox7, "checkBox7");
|
||||
this.checkBox7.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJVMArgs;
|
||||
this.checkBox7.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox7.Name = "checkBox7";
|
||||
this.checkBox7.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox6
|
||||
//
|
||||
resources.ApplyResources(this.checkBox6, "checkBox6");
|
||||
this.checkBox6.Checked = global::APKToolGUI.Properties.Settings.Default.DebugMode;
|
||||
this.checkBox6.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DebugMode", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox6.Name = "checkBox6";
|
||||
this.checkBox6.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// customApkToolTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox");
|
||||
this.customApkToolTxtBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.customApkToolTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "ApktoolPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.customApkToolTxtBox.Name = "customApkToolTxtBox";
|
||||
this.customApkToolTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.ApktoolPath;
|
||||
//
|
||||
// useCustomApktoolChk
|
||||
//
|
||||
resources.ApplyResources(this.useCustomApktoolChk, "useCustomApktoolChk");
|
||||
this.useCustomApktoolChk.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomApktool;
|
||||
this.useCustomApktoolChk.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomApktool", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.useCustomApktoolChk.Name = "useCustomApktoolChk";
|
||||
this.useCustomApktoolChk.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox5
|
||||
//
|
||||
resources.ApplyResources(this.checkBox5, "checkBox5");
|
||||
this.checkBox5.Checked = global::APKToolGUI.Properties.Settings.Default.Utf8FilenameSupport;
|
||||
this.checkBox5.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Utf8FilenameSupport", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox5.Name = "checkBox5";
|
||||
this.checkBox5.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox4
|
||||
//
|
||||
resources.ApplyResources(this.checkBox4, "checkBox4");
|
||||
this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJavaExe;
|
||||
this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox4.Name = "checkBox4";
|
||||
this.checkBox4.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// customTempLocationTxtBox
|
||||
//
|
||||
resources.ApplyResources(this.customTempLocationTxtBox, "customTempLocationTxtBox");
|
||||
this.customTempLocationTxtBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.customTempLocationTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "TempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.customTempLocationTxtBox.Name = "customTempLocationTxtBox";
|
||||
this.customTempLocationTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.TempDir;
|
||||
//
|
||||
// textBoxCustomJavaLocation
|
||||
//
|
||||
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
|
||||
this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
|
||||
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
|
||||
//
|
||||
// checkBox3
|
||||
//
|
||||
resources.ApplyResources(this.checkBox3, "checkBox3");
|
||||
this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomTempDir;
|
||||
this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomTempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox3.Name = "checkBox3";
|
||||
this.checkBox3.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox2
|
||||
//
|
||||
resources.ApplyResources(this.checkBox2, "checkBox2");
|
||||
this.checkBox2.Checked = global::APKToolGUI.Properties.Settings.Default.PlaySoundWhenDone;
|
||||
this.checkBox2.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "PlaySoundWhenDone", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox2.Name = "checkBox2";
|
||||
this.checkBox2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox1
|
||||
//
|
||||
resources.ApplyResources(this.checkBox1, "checkBox1");
|
||||
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
|
||||
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxCheckUpdateStartup
|
||||
//
|
||||
resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup");
|
||||
this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup;
|
||||
this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup";
|
||||
this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ignoreOutputContextMenuBox
|
||||
//
|
||||
resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox");
|
||||
this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu;
|
||||
this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox";
|
||||
this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// FormSettings
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@@ -323,5 +372,10 @@
|
||||
private System.Windows.Forms.TextBox customApkToolTxtBox;
|
||||
private System.Windows.Forms.Button customApktoolBtn;
|
||||
private System.Windows.Forms.CheckBox useCustomApktoolChk;
|
||||
private System.Windows.Forms.ComboBox themeComboBox;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.CheckBox checkBox6;
|
||||
private System.Windows.Forms.CheckBox checkBox7;
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,10 @@ using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Shapes;
|
||||
using static APKToolGUI.UpdateChecker;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Controls;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -18,11 +22,15 @@ namespace APKToolGUI
|
||||
string currentLanguage;
|
||||
bool currentUseApktoolChk;
|
||||
string currentApktoolPath;
|
||||
int currentTheme;
|
||||
|
||||
public FormSettings()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
if (Program.IsDarkTheme())
|
||||
DarkTheme.SetTheme(Controls, this);
|
||||
|
||||
currentUseApktoolChk = useCustomApktoolChk.Checked;
|
||||
currentApktoolPath = customApkToolTxtBox.Text;
|
||||
|
||||
@@ -31,6 +39,10 @@ namespace APKToolGUI
|
||||
SetButtonShield(buttonAddContextMenu, true);
|
||||
SetButtonShield(buttonRemoveContextMenu, true);
|
||||
}
|
||||
|
||||
int themeInt = (themeComboBox.Items.Count + 1 > Settings.Default.Theme) ? Settings.Default.Theme : 0;
|
||||
themeComboBox.SelectedIndex = themeInt;
|
||||
currentTheme = themeInt;
|
||||
}
|
||||
|
||||
#region GUI
|
||||
@@ -71,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)
|
||||
@@ -101,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 { }
|
||||
@@ -114,19 +134,33 @@ namespace APKToolGUI
|
||||
|
||||
private void SaveSettings()
|
||||
{
|
||||
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
|
||||
Properties.Settings.Default.Culture = "Auto";
|
||||
else
|
||||
Properties.Settings.Default.Culture = StringExt.Regex(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString());
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (!comboBox1.SelectedItem.ToString().Contains(currentLanguage))
|
||||
if (MessageBox.Show(Language.SetLanguageRestartApplication, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
Application.Restart();
|
||||
|
||||
if (currentUseApktoolChk != useCustomApktoolChk.Checked || currentApktoolPath != customApkToolTxtBox.Text)
|
||||
try
|
||||
{
|
||||
FormMain.Instance.SetApktoolPath();
|
||||
if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString()))
|
||||
Settings.Default.Culture = "Auto";
|
||||
else
|
||||
Settings.Default.Culture = StringExt.Regex(@"(?<=\[)(.*?)(?=\])", 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();
|
||||
|
||||
if (currentUseApktoolChk != useCustomApktoolChk.Checked || currentApktoolPath != customApkToolTxtBox.Text)
|
||||
{
|
||||
FormMain.Instance.SetApktoolPath();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.e(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,8 +206,7 @@ namespace APKToolGUI
|
||||
DirectoryUtils.Delete(Program.TEMP_PATH);
|
||||
|
||||
//Create new temp folder
|
||||
|
||||
Program.TEMP_PATH = Program.TempDirectory();
|
||||
Program.TEMP_PATH = Program.RandTempDirectory();
|
||||
Directory.CreateDirectory(Program.TEMP_PATH);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -121,20 +121,170 @@
|
||||
<data name="tabControl1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="tabPage1.AutoScroll" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="textBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>274, 139</value>
|
||||
</data>
|
||||
<data name="textBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>239, 22</value>
|
||||
</data>
|
||||
<data name="textBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>20</value>
|
||||
</data>
|
||||
<data name="textBox1.WordWrap" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>textBox1.Name" xml:space="preserve">
|
||||
<value>textBox1</value>
|
||||
</data>
|
||||
<data name=">>textBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBox1.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>textBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="checkBox7.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="checkBox7.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="checkBox7.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 141</value>
|
||||
</data>
|
||||
<data name="checkBox7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>147, 17</value>
|
||||
</data>
|
||||
<data name="checkBox7.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Custom JVM arguments</value>
|
||||
</data>
|
||||
<data name=">>checkBox7.Name" xml:space="preserve">
|
||||
<value>checkBox7</value>
|
||||
</data>
|
||||
<data name=">>checkBox7.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>checkBox7.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox7.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="checkBox6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="checkBox6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="checkBox6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 265</value>
|
||||
</data>
|
||||
<data name="checkBox6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>93, 17</value>
|
||||
</data>
|
||||
<data name="checkBox6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="checkBox6.Text" xml:space="preserve">
|
||||
<value>Debug mode</value>
|
||||
</data>
|
||||
<data name=">>checkBox6.Name" xml:space="preserve">
|
||||
<value>checkBox6</value>
|
||||
</data>
|
||||
<data name=">>checkBox6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>checkBox6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox6.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items1" xml:space="preserve">
|
||||
<value>Light</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Items2" xml:space="preserve">
|
||||
<value>Dark</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>276, 234</value>
|
||||
</data>
|
||||
<data name="themeComboBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>153, 21</value>
|
||||
</data>
|
||||
<data name="themeComboBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name=">>themeComboBox.Name" xml:space="preserve">
|
||||
<value>themeComboBox</value>
|
||||
</data>
|
||||
<data name=">>themeComboBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>themeComboBox.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>themeComboBox.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 239</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>41, 13</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Theme</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<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>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="customApkToolTxtBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>203, 180</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>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="customApkToolTxtBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
@@ -151,7 +301,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>customApkToolTxtBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
@@ -163,7 +313,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>421, 180</value>
|
||||
<value>483, 205</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -184,7 +334,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>customApktoolBtn.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -193,7 +343,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 182</value>
|
||||
<value>9, 207</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>153, 17</value>
|
||||
@@ -214,7 +364,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>useCustomApktoolChk.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -223,7 +373,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>24, 160</value>
|
||||
<value>6, 185</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>349, 13</value>
|
||||
@@ -244,7 +394,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="checkBox5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -253,7 +403,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="checkBox5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 140</value>
|
||||
<value>9, 165</value>
|
||||
</data>
|
||||
<data name="checkBox5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>147, 17</value>
|
||||
@@ -274,7 +424,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox5.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="checkBox4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -283,7 +433,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="checkBox4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 114</value>
|
||||
<value>9, 115</value>
|
||||
</data>
|
||||
<data name="checkBox4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>134, 17</value>
|
||||
@@ -304,16 +454,16 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox4.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<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>203, 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>
|
||||
@@ -331,16 +481,16 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>customTempLocationTxtBox.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<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>203, 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>
|
||||
@@ -358,7 +508,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>textBoxCustomJavaLocation.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.AccessibleName" xml:space="preserve">
|
||||
<value>buttonCustomTempLocation</value>
|
||||
@@ -373,7 +523,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>421, 86</value>
|
||||
<value>483, 86</value>
|
||||
</data>
|
||||
<data name="buttonCustomTempLocation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -394,7 +544,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>buttonCustomTempLocation.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="checkBox3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -403,7 +553,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="checkBox3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 89</value>
|
||||
<value>9, 90</value>
|
||||
</data>
|
||||
<data name="checkBox3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>139, 17</value>
|
||||
@@ -424,7 +574,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox3.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
@@ -436,7 +586,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>421, 112</value>
|
||||
<value>483, 112</value>
|
||||
</data>
|
||||
<data name="buttonCustomJavaLocation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 23</value>
|
||||
@@ -457,7 +607,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>buttonCustomJavaLocation.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="checkBox2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -487,7 +637,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox2.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="checkBox1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -517,7 +667,7 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBox1.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="checkBoxCheckUpdateStartup.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -547,13 +697,13 @@
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>checkBoxCheckUpdateStartup.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 6</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>454, 217</value>
|
||||
<value>521, 299</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
@@ -576,17 +726,14 @@
|
||||
<data name="groupBoxLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="comboBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="comboBox1.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>System</value>
|
||||
</data>
|
||||
<data name="comboBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>129, 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>
|
||||
@@ -604,10 +751,10 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 229</value>
|
||||
<value>8, 311</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>454, 47</value>
|
||||
<value>522, 47</value>
|
||||
</data>
|
||||
<data name="groupBoxLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
@@ -663,9 +810,6 @@
|
||||
<data name=">>ignoreOutputContextMenuBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
@@ -696,9 +840,6 @@
|
||||
<data name=">>labelAdminRights.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>System</value>
|
||||
</data>
|
||||
@@ -706,7 +847,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>276, 18</value>
|
||||
<value>343, 18</value>
|
||||
</data>
|
||||
<data name="buttonAddContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 23</value>
|
||||
@@ -732,9 +873,6 @@
|
||||
<data name=">>buttonAddContextMenu.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>System</value>
|
||||
</data>
|
||||
@@ -742,7 +880,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>365, 18</value>
|
||||
<value>432, 18</value>
|
||||
</data>
|
||||
<data name="buttonRemoveContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 23</value>
|
||||
@@ -766,10 +904,10 @@
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 282</value>
|
||||
<value>8, 364</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>454, 74</value>
|
||||
<value>523, 74</value>
|
||||
</data>
|
||||
<data name="groupBoxContextMenu.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
@@ -796,7 +934,7 @@
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>466, 360</value>
|
||||
<value>535, 442</value>
|
||||
</data>
|
||||
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@@ -823,7 +961,7 @@
|
||||
<value>0, 1</value>
|
||||
</data>
|
||||
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>474, 386</value>
|
||||
<value>543, 468</value>
|
||||
</data>
|
||||
<data name="tabControl1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@@ -850,7 +988,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>392, 393</value>
|
||||
<value>461, 475</value>
|
||||
</data>
|
||||
<data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
@@ -883,7 +1021,7 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonОК.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>311, 393</value>
|
||||
<value>380, 475</value>
|
||||
</data>
|
||||
<data name="buttonОК.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
@@ -913,7 +1051,10 @@
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>473, 421</value>
|
||||
<value>542, 503</value>
|
||||
</data>
|
||||
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterParent</value>
|
||||
|
||||
@@ -0,0 +1,251 @@
|
||||
<?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>126, 17</value>
|
||||
</data>
|
||||
<data name="checkBox7.Text" xml:space="preserve">
|
||||
<value>Lệnh JVM tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="checkBox6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 271</value>
|
||||
</data>
|
||||
<data name="checkBox6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 17</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="themeComboBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>275, 243</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 244</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>57, 13</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Giao diện</value>
|
||||
</data>
|
||||
<data name="customApkToolTxtBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>274, 216</value>
|
||||
</data>
|
||||
<data name="customApktoolBtn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>483, 216</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 218</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>144, 17</value>
|
||||
</data>
|
||||
<data name="useCustomApktoolChk.Text" xml:space="preserve">
|
||||
<value>Vị trí apktool tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>391, 26</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Việc di chuyển tệp trong quá trình thao tác vào thư mục tạm cần thời gian,
|
||||
vui lòng kiên nhẫn chờ đợi</value>
|
||||
</data>
|
||||
<data name="checkBox5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>294, 17</value>
|
||||
</data>
|
||||
<data name="checkBox5.Text" xml:space="preserve">
|
||||
<value>Hỗ trợ tên tệp UTF-8, bật để giải quyết lỗi tiếng Việt</value>
|
||||
</data>
|
||||
<data name="checkBox4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>125, 17</value>
|
||||
</data>
|
||||
<data name="checkBox4.Text" xml:space="preserve">
|
||||
<value>Vị trí Java tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="checkBox3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>174, 17</value>
|
||||
</data>
|
||||
<data name="checkBox3.Text" xml:space="preserve">
|
||||
<value>Vị trí bộ nhớ cache tùy chỉnh</value>
|
||||
</data>
|
||||
<data name="checkBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>123, 17</value>
|
||||
</data>
|
||||
<data name="checkBox2.Text" xml:space="preserve">
|
||||
<value>Âm thanh hoàn tất</value>
|
||||
</data>
|
||||
<data name="checkBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 17</value>
|
||||
</data>
|
||||
<data name="checkBox1.Text" xml:space="preserve">
|
||||
<value>Xóa nhật ký trước khi thực hiện thao tác</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>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.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>310, 17</value>
|
||||
</data>
|
||||
<data name="ignoreOutputContextMenuBox.Text" xml:space="preserve">
|
||||
<value>Bỏ qua thư mục đầu ra tùy chỉnh trong menu ngữ cảnh</value>
|
||||
</data>
|
||||
<data name="labelAdminRights.Text" xml:space="preserve">
|
||||
<value>Cần quyền quản trị viên</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 ngữ cảnh</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;
|
||||
@@ -20,6 +21,12 @@ namespace APKToolGUI.Handlers
|
||||
main.refreshDevicesBtn.Click += refreshDevicesBtn_Click;
|
||||
main.selApkAdbBtn.Click += selApkAdbBtn_Click;
|
||||
main.devicesListBox.SelectedValueChanged += devicesListBox_SelectedValueChanged;
|
||||
main.overrideAbiComboBox.SelectedIndexChanged += ComboBoxChanged;
|
||||
}
|
||||
|
||||
private void ComboBoxChanged(object sender, EventArgs e)
|
||||
{
|
||||
Settings.Default.Adb_OverrideAbi = main.overrideAbiComboBox.SelectedIndex;
|
||||
}
|
||||
|
||||
private async void refreshDevicesBtn_Click(object sender, EventArgs e)
|
||||
|
||||
@@ -54,10 +54,15 @@ namespace APKToolGUI.Handlers
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Android Package (*.apk;*.xapk;*.zip*.apkm;*.apks)|*.apk;*.xapk;*.zip*.apkm;*.apks";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_DECODE_InputAppPath.Text = ofd.FileName;
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
|
||||
if (!Settings.Default.Decode_DontParseApkInfo)
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
|
||||
if (main.checkBox_DECODE_OutputDirectory.Checked)
|
||||
{
|
||||
main.textBox_DECODE_OutputDirectory.Text = Path.Combine(Path.GetDirectoryName(main.textBox_DECODE_InputAppPath.Text), Path.GetFileNameWithoutExtension(main.textBox_DECODE_InputAppPath.Text));
|
||||
@@ -93,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);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using APKToolGUI.ApkTool;
|
||||
using APKToolGUI.Controls;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
@@ -19,6 +20,7 @@ namespace APKToolGUI.Handlers
|
||||
private static FormMain main;
|
||||
|
||||
string[] apks = { ".apk", ".xapk", ".zip", ".apks", ".apkm" };
|
||||
string[] apk = { ".apk" };
|
||||
|
||||
public DragDropHandlers(FormMain Main)
|
||||
{
|
||||
@@ -36,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" });
|
||||
@@ -58,17 +65,17 @@ 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)
|
||||
{
|
||||
if (extCtrl == null)
|
||||
extCtrl = ctrl;
|
||||
ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = Color.White);
|
||||
ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = PanelBackColor());
|
||||
ctrl.DragEnter += new DragEventHandler((sender, e) => e.CheckDragEnter(extension));
|
||||
ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckManyDragOver(extension)) extCtrl.BackColor = Color.LightGreen; });
|
||||
ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckManyDragOver(extension)) extCtrl.BackColor = PanelHoverBackColor(); });
|
||||
ctrl.DragDrop += dragHandler;
|
||||
}
|
||||
|
||||
@@ -77,24 +84,18 @@ namespace APKToolGUI.Handlers
|
||||
string[] apkFiles = null;
|
||||
if (e.DropManyByEnd(file => apkFiles = file, apks))
|
||||
{
|
||||
main.decPanel.BackColor = Color.White;
|
||||
main.decPanel.BackColor = PanelBackColor();
|
||||
|
||||
foreach (var apkFile in apkFiles)
|
||||
{
|
||||
main.textBox_DECODE_InputAppPath.Text = apkFile;
|
||||
|
||||
await main.GetApkInfo(apkFile);
|
||||
if (!Settings.Default.Decode_DontParseApkInfo)
|
||||
await main.GetApkInfo(apkFile);
|
||||
|
||||
if (apkFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm"))
|
||||
{
|
||||
if (Settings.Default.Decode_UseApkEditorMergeApk)
|
||||
{
|
||||
await main.MergeUsingApkEditor(apkFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
await main.Merge(apkFile);
|
||||
}
|
||||
await main.MergeAndDecompile(apkFile);
|
||||
}
|
||||
else
|
||||
await main.Decompile(apkFile);
|
||||
@@ -105,14 +106,14 @@ namespace APKToolGUI.Handlers
|
||||
private async void DropDirToCom(DragEventArgs e)
|
||||
{
|
||||
string[] folders = null;
|
||||
if (e.DropManyByEnd(file => folders = file, null))
|
||||
if (e.DropManyByEnd(file => folders = file, ""))
|
||||
{
|
||||
foreach (var folder in folders)
|
||||
{
|
||||
if (File.Exists(Path.Combine(folder, "AndroidManifest.xml")))
|
||||
{
|
||||
main.textBox_BUILD_InputProjectDir.Text = folder;
|
||||
main.comPanel.BackColor = Color.White;
|
||||
main.comPanel.BackColor = PanelBackColor();
|
||||
await main.Build(folder);
|
||||
}
|
||||
else
|
||||
@@ -126,7 +127,7 @@ namespace APKToolGUI.Handlers
|
||||
string[] apkFiles = null;
|
||||
if (e.DropManyByEnd(file => apkFiles = file, apks))
|
||||
{
|
||||
main.zipalignPanel.BackColor = Color.White;
|
||||
main.zipalignPanel.BackColor = PanelBackColor();
|
||||
|
||||
foreach (var apkFile in apkFiles)
|
||||
{
|
||||
@@ -142,7 +143,7 @@ namespace APKToolGUI.Handlers
|
||||
string[] apkFiles = null;
|
||||
if (e.DropManyByEnd(file => apkFiles = file, apks))
|
||||
{
|
||||
main.signPanel.BackColor = Color.White;
|
||||
main.signPanel.BackColor = PanelBackColor();
|
||||
|
||||
foreach (var apkFile in apkFiles)
|
||||
{
|
||||
@@ -153,13 +154,29 @@ 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;
|
||||
if (e.DropOneByEnd(file => apkFile = file, ".dex"))
|
||||
{
|
||||
main.baksmaliBrowseInputDexTxtBox.Text = apkFile;
|
||||
main.bakSmaliGroupBox.BackColor = Color.White;
|
||||
main.bakSmaliGroupBox.BackColor = PanelBackColor();
|
||||
await main.Baksmali(apkFile);
|
||||
}
|
||||
}
|
||||
@@ -170,18 +187,18 @@ namespace APKToolGUI.Handlers
|
||||
if (e.DropOneByEnd(file => dir = file, null))
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = dir;
|
||||
main.smaliGroupBox.BackColor = Color.White;
|
||||
main.smaliGroupBox.BackColor = PanelBackColor();
|
||||
await main.Smali(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private async void DropApkToInstall(DragEventArgs e)
|
||||
{
|
||||
string dir = null;
|
||||
if (e.DropOneByEnd(file => dir = file, ".apk"))
|
||||
{
|
||||
main.apkPathAdbTxtBox.Text = dir;
|
||||
main.tabPageAdb.BackColor = Color.White;
|
||||
main.tabPageAdb.BackColor = PanelBackColor();
|
||||
await main.Install(dir);
|
||||
}
|
||||
}
|
||||
@@ -192,9 +209,23 @@ namespace APKToolGUI.Handlers
|
||||
if (e.DropOneByEnd(file => apkFile = file, apks))
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = apkFile;
|
||||
main.basicInfoTabPage.BackColor = Color.White;
|
||||
main.basicInfoTabPage.BackColor = PanelBackColor();
|
||||
main.GetApkInfo(apkFile);
|
||||
}
|
||||
}
|
||||
|
||||
Color PanelBackColor()
|
||||
{
|
||||
if (Program.IsDarkTheme())
|
||||
return DarkTheme.bgColor;
|
||||
return Color.White;
|
||||
}
|
||||
|
||||
Color PanelHoverBackColor()
|
||||
{
|
||||
if (Program.IsDarkTheme())
|
||||
return Color.Gray;
|
||||
return Color.LightGreen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
@@ -29,6 +26,40 @@ namespace APKToolGUI.Handlers
|
||||
main.comApkOpenDir.Click += comApkOpenDir_Click;
|
||||
main.signApkOpenDirBtn.Click += signApkOpenDirBtn_Click;
|
||||
main.alignApkOpenDirBtn.Click += alignApkOpenDirBtn_Click;
|
||||
main.mergeApkBtn.Click += mergeApkBtn_Click;
|
||||
main.selSplitApkBtn.Click += selSplitApkBtn_Click;
|
||||
}
|
||||
|
||||
internal void selSplitApkBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Split APK Package (*.xapk;*.zip*.apkm;*.apks)|*.xapk;*.zip*.apkm;*.apks";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.splitApkPathTxtBox.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal async void mergeApkBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
main.Save();
|
||||
if (!File.Exists(Settings.Default.SplitApk_InputFile))
|
||||
{
|
||||
main.ShowMessage(Language.SplitApkNotFound, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
await main.Merge(Settings.Default.SplitApk_InputFile);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
@@ -40,7 +71,7 @@ namespace APKToolGUI.Handlers
|
||||
{
|
||||
try
|
||||
{
|
||||
Clipboard.SetText(main.logTxtBox.SelectedText);
|
||||
System.Windows.Forms.Clipboard.SetText(main.logTxtBox.SelectedText);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -48,7 +79,6 @@ namespace APKToolGUI.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal void decApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using Dark.Net;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
@@ -25,8 +27,14 @@ namespace APKToolGUI.Handlers
|
||||
main.apktoolIssuesToolStripMenuItem.Click += apktoolIssuesLinkItem_Click;
|
||||
main.baksmaliIssuesToolStripMenuItem.Click += baksmaliIssuesLinkItem_Click;
|
||||
main.reportAnIsuueToolStripMenuItem.Click += reportAnIsuueToolStripMenuItem_Click;
|
||||
|
||||
main.newInsToolStripMenuItem.Click += newInsToolStripMenuItem_Click;
|
||||
}
|
||||
|
||||
private void newInsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||
}
|
||||
|
||||
private void saveLogItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var sfd = new SaveFileDialog())
|
||||
@@ -44,7 +52,15 @@ namespace APKToolGUI.Handlers
|
||||
|
||||
private void menuItemSettings_Click(object sender, EventArgs e)
|
||||
{
|
||||
Theme theme = (Theme)Settings.Default.Theme;
|
||||
|
||||
if (Program.IsWin10OrAbove())
|
||||
DarkNet.Instance.SetCurrentProcessTheme(theme);
|
||||
|
||||
FormSettings frm = new FormSettings();
|
||||
|
||||
if (Program.IsWin10OrAbove())
|
||||
DarkNet.Instance.SetWindowThemeForms(frm, theme);
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
@@ -57,6 +73,11 @@ namespace APKToolGUI.Handlers
|
||||
{
|
||||
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)
|
||||
@@ -66,7 +87,14 @@ namespace APKToolGUI.Handlers
|
||||
|
||||
private void menuItemAbout_Click(object sender, EventArgs e)
|
||||
{
|
||||
Theme theme = (Theme)Settings.Default.Theme;
|
||||
|
||||
if (Program.IsWin10OrAbove())
|
||||
DarkNet.Instance.SetCurrentProcessTheme(theme);
|
||||
|
||||
FormAboutBox frm = new FormAboutBox();
|
||||
if (Program.IsWin10OrAbove())
|
||||
DarkNet.Instance.SetWindowThemeForms(frm, theme);
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<linker>
|
||||
<assembly fullname="System.Diagnostics.DiagnosticSource">
|
||||
<type fullname="System.Diagnostics.Metrics.MetricsEventSource">
|
||||
<!-- Used by System.Private.CoreLib via reflection to init the EventSource -->
|
||||
<method name="GetInstance" />
|
||||
</type>
|
||||
</assembly>
|
||||
</linker>
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using APKToolGUI.Properties;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -32,8 +33,13 @@ namespace Java
|
||||
public new bool Start(string args)
|
||||
{
|
||||
EnableRaisingEvents = true;
|
||||
StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
|
||||
Debug.WriteLine(String.Format("-jar \"{0}\" {1}", JarPath, args));
|
||||
string customArgs = null;
|
||||
|
||||
if (Settings.Default.UseCustomJVMArgs)
|
||||
customArgs = Settings.Default.CustomJVMArgs;
|
||||
|
||||
StartInfo.Arguments = String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args);
|
||||
Debug.WriteLine(String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args));
|
||||
return base.Start();
|
||||
}
|
||||
|
||||
@@ -78,8 +84,21 @@ namespace Java
|
||||
javaProcess.Start();
|
||||
string output = javaProcess.StandardError.ReadToEnd();
|
||||
javaProcess.WaitForExit(3000);
|
||||
|
||||
//I use _JAVA_OPTIONS so I want the prompt removed
|
||||
if (output.Contains("_JAVA_OPTIONS"))
|
||||
{
|
||||
int n = 2;
|
||||
string[] lines = output
|
||||
.Split(Environment.NewLine.ToCharArray())
|
||||
.Skip(n)
|
||||
.ToArray();
|
||||
|
||||
output = string.Join(Environment.NewLine, lines);
|
||||
}
|
||||
|
||||
if (!String.IsNullOrEmpty(output))
|
||||
return output = output.Remove(output.LastIndexOf(Environment.NewLine));
|
||||
return output.Replace("\r\n\r\n", "\n").Trim();
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
+85
-4
@@ -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>
|
||||
@@ -195,6 +204,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Clearing temp folder.
|
||||
/// </summary>
|
||||
internal static string ClearTempFolder {
|
||||
get {
|
||||
return ResourceManager.GetString("ClearTempFolder", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Compile APK.
|
||||
/// </summary>
|
||||
@@ -240,6 +258,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Copy file "{0}" to "{1}".
|
||||
/// </summary>
|
||||
internal static string CopyFileTo {
|
||||
get {
|
||||
return ResourceManager.GetString("CopyFileTo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Copy file "{0}" to temp directory "{1}".
|
||||
/// </summary>
|
||||
@@ -393,6 +420,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Deleting folder: {0}.
|
||||
/// </summary>
|
||||
internal static string DeletingFolder {
|
||||
get {
|
||||
return ResourceManager.GetString("DeletingFolder", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0} detected as base.
|
||||
/// </summary>
|
||||
@@ -438,6 +474,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The directory "{0}" does not exist.
|
||||
/// </summary>
|
||||
internal static string DirectoryNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("DirectoryNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Directory "{0}" does not exist.
|
||||
/// </summary>
|
||||
@@ -735,6 +780,15 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fixed apktool.yml.
|
||||
/// </summary>
|
||||
internal static string FixApktoolYml {
|
||||
get {
|
||||
return ResourceManager.GetString("FixApktoolYml", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Folder does not exist.
|
||||
/// </summary>
|
||||
@@ -781,7 +835,7 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Get APK Info.
|
||||
/// Looks up a localized string similar to View APK Info.
|
||||
/// </summary>
|
||||
internal static string GetApkInfo {
|
||||
get {
|
||||
@@ -996,6 +1050,24 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Open compile output folder.
|
||||
/// </summary>
|
||||
internal static string OpenComFolder {
|
||||
get {
|
||||
return ResourceManager.GetString("OpenComFolder", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Open decompile output folder.
|
||||
/// </summary>
|
||||
internal static string OpenDecFolder {
|
||||
get {
|
||||
return ResourceManager.GetString("OpenDecFolder", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Parsing APK Info....
|
||||
/// </summary>
|
||||
@@ -1033,11 +1105,11 @@ namespace APKToolGUI.Languages {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The language is set. Do you want to restart the application?.
|
||||
/// Looks up a localized string similar to Restart is required to apply changes. Do you want to restart the application?.
|
||||
/// </summary>
|
||||
internal static string SetLanguageRestartApplication {
|
||||
internal static string RestartApplicationPrompt {
|
||||
get {
|
||||
return ResourceManager.GetString("SetLanguageRestartApplication", resourceCulture);
|
||||
return ResourceManager.GetString("RestartApplicationPrompt", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1122,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,549 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
Das Hauptziel dieses Formats ist es, ein einfaches XML-Format zu ermöglichen
|
||||
das größtenteils für den Menschen lesbar ist. Die Erzeugung und das Parsen der
|
||||
verschiedenen Datentypen erfolgt durch die TypeConverter-Klassen
|
||||
die mit den Datentypen verbunden sind.
|
||||
|
||||
Beispiel:
|
||||
|
||||
… 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="ExtractOrigSignature" xml:space="preserve">
|
||||
<value>Originale Signatur extrahieren</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>
|
||||
@@ -373,7 +373,7 @@
|
||||
<value>Disassemble DEX</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>Get APK Info</value>
|
||||
<value>View APK Info</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>This folder is not a decompiled APK</value>
|
||||
@@ -429,8 +429,8 @@
|
||||
<data name="ParsingApkInfo" xml:space="preserve">
|
||||
<value>Parsing APK Info...</value>
|
||||
</data>
|
||||
<data name="SetLanguageRestartApplication" xml:space="preserve">
|
||||
<value>The language is set. Do you want to restart the application?</value>
|
||||
<data name="RestartApplicationPrompt" xml:space="preserve">
|
||||
<value>Restart is required to apply changes. Do you want to restart the application?</value>
|
||||
</data>
|
||||
<data name="DecompilingAllApkFiles" xml:space="preserve">
|
||||
<value>Decompiling all APK files</value>
|
||||
@@ -516,4 +516,31 @@
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>It is required to clear framework cache after changing Apktool version to avoid unexpected errors. Do you want to clear it now?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>Clearing temp folder</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>Deleting folder: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>The directory "{0}" does not exist</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>Open compile output folder</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>Open decompile output folder</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Fixed apktool.yml</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Copy file "{0}" to "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Split APK is not selected</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>Can't detect APKEditor version</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Sơ đồ Microsoft ResX
|
||||
|
||||
Phiên bản 2.0
|
||||
|
||||
Mục tiêu chính của định dạng này là cho phép một định dạng XML đơn giản
|
||||
đọc được chủ yếu bằng tay. Việc tạo và phân tích cú pháp các
|
||||
kiểu dữ liệu khác nhau được thực hiện thông qua các lớp TypeConverter
|
||||
liên kết với các kiểu dữ liệu.
|
||||
|
||||
Ví dụ:
|
||||
|
||||
... tiêu đề & sơ đồ ado.net/XML ...
|
||||
<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>đây là chuỗi dài của tôi</value><comment>đây là một bình luận</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>[đối tượng .NET Framework được tuần tự hóa mã hóa mime base64]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[chuỗi mã hóa mime base64 đại diện cho mảng byte của đối tượng .NET Framework]</value>
|
||||
<comment>Đây là một bình luận</comment>
|
||||
</data>
|
||||
|
||||
Có bất kỳ số lượng hàng "resheader" nào chứa đơn giản
|
||||
các cặp tên/giá trị.
|
||||
|
||||
Mỗi hàng dữ liệu chứa một tên và giá trị. Hàng cũng chứa một
|
||||
kiểu hoặc mimetype. Kiểu tương ứng với một lớp .NET hỗ trợ
|
||||
chuyển đổi văn bản/giá trị thông qua kiến trúc TypeConverter.
|
||||
Các lớp không hỗ trợ điều này được tuần tự hóa và lưu trữ với
|
||||
mimetype được đặt.
|
||||
|
||||
mimetype được sử dụng cho các đối tượng được tuần tự hóa và cho biết
|
||||
ResXResourceReader cách khôi phục đối tượng. Hiện tại điều này không
|
||||
có thể mở rộng. Đối với một mimetype nhất định, giá trị phải được đặt cho phù hợp:
|
||||
|
||||
Lưu ý - application/x-microsoft.net.object.binary.base64 là định dạng
|
||||
mà ResXResourceWriter sẽ tạo ra, tuy nhiên trình đọc có thể
|
||||
đọc bất kỳ định dạng nào được liệt kê bên dưới.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : Đối tượng phải được tuần tự hóa với
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : Đối tượng phải được tuần tự hóa với
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : Đối tượng phải được tuần tự hóa thành một mảng byte
|
||||
: sử dụng System.ComponentModel.TypeConverter
|
||||
: và sau đó được mã hóa bằng mã hóa base64.
|
||||
-->
|
||||
<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 chính xác. Chương trình sẽ bị đóng.</value>
|
||||
</data>
|
||||
<data name="ErrorReadSettings" xml:space="preserve">
|
||||
<value>Lỗi khi đọc cài đặt!</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersion" xml:space="preserve">
|
||||
<value>Phiên bản mới đã được phát hành. 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 khả dụng.</value>
|
||||
</data>
|
||||
<data name="WarningDecodingFolderNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn thư mục giải mã!</value>
|
||||
</data>
|
||||
<data name="WarningFileForDecodingNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn tệp để giải mã!</value>
|
||||
</data>
|
||||
<data name="WarningFileForSigningNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn tệp để ký!</value>
|
||||
</data>
|
||||
<data name="WarningFrameworkNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn Framework!</value>
|
||||
</data>
|
||||
<data name="ErrorSaveSettings" xml:space="preserve">
|
||||
<value>Lỗi khi lưu cài đặt!</value>
|
||||
</data>
|
||||
<data name="NeedRestart" xml:space="preserve">
|
||||
<value>Để những thay đổi này có hiệu lực, bạn phải khởi động lại chương trình. Bạn có muốn khởi động lại ngay bây giờ không?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>Tệp không tìm thấy</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>Xây dựng</value>
|
||||
</data>
|
||||
<data name="Decode" xml:space="preserve">
|
||||
<value>Giải mã</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 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 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>Giải mã hoàn tất 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ý hoàn tất 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>Lỗi biên dịch</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 khi chọn tệp Framework. Tệp này không tồn tại.</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>Lỗi ký.</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>Lỗi. Việc cài đặt Framework chưa 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>Lưu trữ ZIP</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>Không thể tạo thư mục giải mã đã chọn vì chứa ký tự không hợp lệ.</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn thư mục giải mã.</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 giải mã</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>Lỗi giải mã</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>Lỗi phân tích phiên bản</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>Sửa AndroidManifest.xml</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>Xóa tất cả các đối tượng giả 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>AndroidManifest.xml không tồn tại</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>Thư mục APK đã giải mã 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 hoàn tất thành công. Thư mục đầu ra "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Lỗi Zip căn chỉnh</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zip căn chỉnh hoàn tất 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>Bộ nhớ đệm Framework đã được xóa</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>Đã hoàn tất!</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 giải mã 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 tư cách quản trị viên. Kéo và thả không được hỗ trợ.</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>Hỗ trợ kéo và thả</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>Thư mục này không phải là 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>Zip căn chỉnh</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>Giải mã APK</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>Giải mã DEX</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>Lấy thông tin APK</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>Thư mục này không phải là APK đã giải mã</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>Thư mục này không phải là DEX đã giải mã</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>Thiếu tệp cần thiết</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>Zip căn chỉnh APK</value>
|
||||
</data>
|
||||
<data name="CreateUnsignedApk" xml:space="preserve">
|
||||
<value>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>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 đã giải mã "{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. Nếu bạn muốn ghi đè lên nó, hãy bật "Buộc xóa thư mục đích".</value>
|
||||
</data>
|
||||
<data name="MoveTempApkFileToOutput" xml:space="preserve">
|
||||
<value>Di chuyển thư mục tạm "{0}" vào thư mục đầu ra "{1}"</value>
|
||||
</data>
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>Di chuyển apk tạm "{0}" vào 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 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 giải mã tất cả các tệp APK</value>
|
||||
</data>
|
||||
<data name="DetectedAsBase" xml:space="preserve">
|
||||
<value>{0} được phát hiện là mô-đun cơ sở</value>
|
||||
</data>
|
||||
<data name="DetectedAsSplit" xml:space="preserve">
|
||||
<value>{0} được phát hiện là tệp chia nhỏ</value>
|
||||
</data>
|
||||
<data name="ExtractingAllApkFiles" xml:space="preserve">
|
||||
<value>Đang trích xuất tất cả các tệp APK</value>
|
||||
</data>
|
||||
<data name="MergeFinishedMoveDir" xml:space="preserve">
|
||||
<value>Hoàn tất hợp nhất. 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 mô-đun cơ sở đế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>Lỗi hợp nhất</value>
|
||||
</data>
|
||||
<data name="ExtractOrigSignature" xml:space="preserve">
|
||||
<value>Trích xuất chữ ký gốc</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>Đã bị hủy bỏ</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>Bạn có chắc chắn muốn hủy bỏ quy trình này không?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>Đang lấy thiết bị...</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Vui lòng chờ...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>Bạn có chắc chắn muốn chấm dứt máy chủ ADB không? Bạn có thể cần phải kết nối lại thiết bị của mình hoặc khởi động lại trình giả lập</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>Chưa chọn thiết bị</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ị. Hãy đảm bảo rằng thiết bị của bạn đã được kết nối với máy tính và gỡ lỗi adb đã được bật. Nếu bạn đang sử dụng trình giả lập, hãy khởi động lại và chờ nó khởi động</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 xóa bộ nhớ cache framework sau khi thay đổi phiên bản Apktool để tránh lỗi không mong muốn. Bạn có muốn xóa nó ngay bây giờ không?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>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 đã giải mã</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Apktool.yml đã được sửa</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>Sao chép tệp "{0}" vào "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>Chưa chọn APK chia nhỏ</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>Không thể phát hiện phiên bản APKEditor</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">
|
||||
@@ -426,4 +426,121 @@
|
||||
<data name="MoveTempApkToOutput" xml:space="preserve">
|
||||
<value>移动临时 apk"{0}" 到输出目录 "{1}"</value>
|
||||
</data>
|
||||
</root>
|
||||
<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="ExtractOrigSignature" xml:space="preserve">
|
||||
<value>提取原始签名</value>
|
||||
</data>
|
||||
<data name="MergingApkEditor" xml:space="preserve">
|
||||
<value>使用 APKEditor.jar 合并 APK</value>
|
||||
</data>
|
||||
<data name="Aborted" xml:space="preserve">
|
||||
<value>已终止</value>
|
||||
</data>
|
||||
<data name="CancelProcess" xml:space="preserve">
|
||||
<value>您确定要取消该进程吗?</value>
|
||||
</data>
|
||||
<data name="GettingDevices" xml:space="preserve">
|
||||
<value>正在获取设备...</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>请稍候...</value>
|
||||
</data>
|
||||
<data name="ConfirmKillingAdbServer" xml:space="preserve">
|
||||
<value>您确定要终止 ADB 服务吗? 您可能需要重新连接设备或重新启动模拟器</value>
|
||||
</data>
|
||||
<data name="DeviceNotSelected" xml:space="preserve">
|
||||
<value>未选择设备</value>
|
||||
</data>
|
||||
<data name="DeviceSelected" xml:space="preserve">
|
||||
<value>已选择 "{0}" 设备</value>
|
||||
</data>
|
||||
<data name="DevicesFound" xml:space="preserve">
|
||||
<value>发现 {0} 设备</value>
|
||||
</data>
|
||||
<data name="InstallApkFailed" xml:space="preserve">
|
||||
<value>APK 安装失败</value>
|
||||
</data>
|
||||
<data name="InstallApkSuccessful" xml:space="preserve">
|
||||
<value>APK 安装成功</value>
|
||||
</data>
|
||||
<data name="InstallingApk" xml:space="preserve">
|
||||
<value>正在安装 APK</value>
|
||||
</data>
|
||||
<data name="InstallingApkPath" xml:space="preserve">
|
||||
<value>正在安装 APK "{0}"</value>
|
||||
</data>
|
||||
<data name="NoDevicesFound" xml:space="preserve">
|
||||
<value>未找到设备。 确保您的设备已连接到计算机并打开了 adb 调试。 如果您使用模拟器,请重新启动它并等待它启动</value>
|
||||
</data>
|
||||
<data name="TimeEnded" xml:space="preserve">
|
||||
<value>结束时间: {0}</value>
|
||||
</data>
|
||||
<data name="TimeStarted" xml:space="preserve">
|
||||
<value>开始时间: {0}</value>
|
||||
</data>
|
||||
<data name="ClearFrameworkPrompt" xml:space="preserve">
|
||||
<value>更改 Apktool 版本后需要清除 Framework 缓存以避免意外错误。 你想现在清除它吗?</value>
|
||||
</data>
|
||||
<data name="ClearTempFolder" xml:space="preserve">
|
||||
<value>清除临时文件夹</value>
|
||||
</data>
|
||||
<data name="DeletingFolder" xml:space="preserve">
|
||||
<value>正在删除文件夹: {0}</value>
|
||||
</data>
|
||||
<data name="DirectoryNotExist" xml:space="preserve">
|
||||
<value>目录 "{0}" 不存在</value>
|
||||
</data>
|
||||
<data name="OpenComFolder" xml:space="preserve">
|
||||
<value>打开编译输出文件夹</value>
|
||||
</data>
|
||||
<data name="OpenDecFolder" xml:space="preserve">
|
||||
<value>打开反编译输出文件夹</value>
|
||||
</data>
|
||||
<data name="FixApktoolYml" xml:space="preserve">
|
||||
<value>Apktool.yml 已修复</value>
|
||||
</data>
|
||||
<data name="CopyFileTo" xml:space="preserve">
|
||||
<value>复制文件 "{0}" 到 "{1}"</value>
|
||||
</data>
|
||||
<data name="SplitApkNotFound" xml:space="preserve">
|
||||
<value>未选择拆分的 APK</value>
|
||||
</data>
|
||||
<data name="CantDetectApkeditorVersion" xml:space="preserve">
|
||||
<value>无法检测 APKEditor 版本</value>
|
||||
</data>
|
||||
</root>
|
||||
+71
-13
@@ -2,6 +2,8 @@
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Bluegrams.Application;
|
||||
using Dark.Net;
|
||||
using OSVersionExtension;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
@@ -28,13 +30,17 @@ namespace APKToolGUI
|
||||
{
|
||||
try
|
||||
{
|
||||
//Debug.WriteLine(Application.ProductName);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
if (Environment.OSVersion.Version.Major == 6)
|
||||
{
|
||||
SetProcessDPIAware();
|
||||
}
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
PortableSettingsProvider.SettingsFileName = "config.xml";
|
||||
PortableSettingsProvider.ApplyProvider(Settings.Default);
|
||||
|
||||
if (arg.Length == 1)
|
||||
{
|
||||
@@ -46,6 +52,26 @@ namespace APKToolGUI
|
||||
case "rcm":
|
||||
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove);
|
||||
break;
|
||||
case "opendecfolder":
|
||||
if (Settings.Default.Decode_UseOutputDir)
|
||||
{
|
||||
string outDir = Settings.Default.Decode_OutputDir;
|
||||
if (Directory.Exists(outDir))
|
||||
Process.Start(outDir);
|
||||
else
|
||||
MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
break;
|
||||
case "opencomfolder":
|
||||
if (Settings.Default.Build_UseOutputAppPath)
|
||||
{
|
||||
string outDir = Settings.Default.Build_OutputAppPath;
|
||||
if (Directory.Exists(outDir))
|
||||
Process.Start(outDir);
|
||||
else
|
||||
MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -65,13 +91,20 @@ namespace APKToolGUI
|
||||
}
|
||||
if (FilesCheck() == true)
|
||||
{
|
||||
PortableSettingsProvider.SettingsFileName = "config.xml";
|
||||
PortableSettingsProvider.ApplyProvider(Settings.Default);
|
||||
|
||||
TEMP_PATH = TempDirectory();
|
||||
TEMP_PATH = RandTempDirectory();
|
||||
TEMP_MAIN = TempDirectory();
|
||||
Directory.CreateDirectory(TEMP_PATH);
|
||||
|
||||
Application.Run(new FormMain());
|
||||
Theme theme = (Theme)Settings.Default.Theme;
|
||||
if (IsWin10OrAbove())
|
||||
DarkNet.Instance.SetCurrentProcessTheme(theme);
|
||||
|
||||
Form mainForm = new FormMain();
|
||||
|
||||
if (IsWin10OrAbove())
|
||||
DarkNet.Instance.SetWindowThemeForms(mainForm, theme);
|
||||
|
||||
Application.Run(mainForm);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -82,6 +115,29 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static bool IsDarkTheme()
|
||||
{
|
||||
if (IsWin10OrAbove())
|
||||
return DarkNet.Instance.EffectiveCurrentProcessThemeIsDark;
|
||||
else if (Settings.Default.Theme == 2)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void SetLanguage()
|
||||
{
|
||||
String settingsCulture = Settings.Default.Culture;
|
||||
@@ -137,7 +193,6 @@ namespace APKToolGUI
|
||||
AAPT2_PATH,
|
||||
SIGNAPK_KEYPRIVATE,
|
||||
SIGNAPK_KEYPUBLIC,
|
||||
AAPT2JNI_PATH,
|
||||
APKEDITOR_PATH,
|
||||
ADB_PATH,
|
||||
ADBWINAPI_PATH,
|
||||
@@ -187,15 +242,19 @@ namespace APKToolGUI
|
||||
//Generate new every new instance to avoid conflict
|
||||
//We want to keep obfuscated path short as possible to prevent long path error
|
||||
if (Settings.Default.UseCustomTempDir)
|
||||
return Path.Combine(Settings.Default.TempDir, StringExt.RandStrWithCaps(5));
|
||||
return Path.Combine(Settings.Default.TempDir);
|
||||
else
|
||||
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, StringExt.RandStrWithCaps(5));
|
||||
return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "Temp");
|
||||
}
|
||||
|
||||
public static string RandTempDirectory()
|
||||
{
|
||||
return Path.Combine(TempDirectory(), StringExt.RandStrWithCaps(5));
|
||||
}
|
||||
|
||||
public static string ASSEMBLY_NAME { get { return AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Name; } }
|
||||
public static string APP_NAME { get { return "APK Tool GUI"; } }
|
||||
|
||||
public static string TEMP_PATH { get; set; }
|
||||
public static string TEMP_MAIN { get; set; }
|
||||
public static string LOCAL_APPDATA_PATH { get { return Environment.GetEnvironmentVariable("LocalAppData"); } }
|
||||
public static string APP_PATH { get { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } }
|
||||
public static string RES_PATH { get { return Path.Combine(APP_PATH, "Resources"); } }
|
||||
@@ -208,7 +267,6 @@ namespace APKToolGUI
|
||||
public static string ZIPALIGN_PATH { get { return Path.Combine(RES_PATH, "zipalign.exe"); } }
|
||||
public static string AAPT_PATH { get { return Path.Combine(RES_PATH, "aapt.exe"); } }
|
||||
public static string AAPT2_PATH { get { return Path.Combine(RES_PATH, "aapt2.exe"); } }
|
||||
public static string AAPT2JNI_PATH { get { return Path.Combine(RES_PATH, "libaapt2_jni.dll"); } }
|
||||
public static string APKEDITOR_PATH { get { return Path.Combine(RES_PATH, "apkeditor.jar"); } }
|
||||
public static string ADB_PATH { get { return Path.Combine(RES_PATH, "adb.exe"); } }
|
||||
public static string ADBWINAPI_PATH { get { return Path.Combine(RES_PATH, "AdbWinApi.dll"); } }
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
||||
[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-2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
|
||||
// используя "*", как показано ниже:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.2.1.0")]
|
||||
[assembly: AssemblyFileVersion("3.2.1.0")]
|
||||
[assembly: AssemblyVersion("3.3.1.3")]
|
||||
[assembly: AssemblyFileVersion("3.3.1.3")]
|
||||
|
||||
+209
-14
@@ -12,7 +12,7 @@ namespace APKToolGUI.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.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 {
|
||||
@@ -1037,8 +1037,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool UseCustomTempDir {
|
||||
get {
|
||||
return ((bool)(this["UseCustomTempDir"]));
|
||||
@@ -1049,8 +1051,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public string TempDir {
|
||||
get {
|
||||
return ((string)(this["TempDir"]));
|
||||
@@ -1061,8 +1065,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool UseCustomJavaExe {
|
||||
get {
|
||||
return ((bool)(this["UseCustomJavaExe"]));
|
||||
@@ -1073,8 +1079,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool AutoDeleteIdsigFile {
|
||||
get {
|
||||
return ((bool)(this["AutoDeleteIdsigFile"]));
|
||||
@@ -1085,8 +1093,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Utf8FilenameSupport {
|
||||
get {
|
||||
return ((bool)(this["Utf8FilenameSupport"]));
|
||||
@@ -1097,8 +1107,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Sign_OverwriteInputFile {
|
||||
get {
|
||||
return ((bool)(this["Sign_OverwriteInputFile"]));
|
||||
@@ -1109,20 +1121,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool Decode_UseApkEditorMergeApk {
|
||||
get {
|
||||
return ((bool)(this["Decode_UseApkEditorMergeApk"]));
|
||||
}
|
||||
set {
|
||||
this["Decode_UseApkEditorMergeApk"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.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 Adb_SetVendor {
|
||||
get {
|
||||
return ((bool)(this["Adb_SetVendor"]));
|
||||
@@ -1133,8 +1135,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public string Adb_SelectedApkPath {
|
||||
get {
|
||||
return ((string)(this["Adb_SelectedApkPath"]));
|
||||
@@ -1145,8 +1149,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Sign_InstallApkAfterSign {
|
||||
get {
|
||||
return ((bool)(this["Sign_InstallApkAfterSign"]));
|
||||
@@ -1157,8 +1163,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool UseCustomApktool {
|
||||
get {
|
||||
return ((bool)(this["UseCustomApktool"]));
|
||||
@@ -1169,8 +1177,10 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public string ApktoolPath {
|
||||
get {
|
||||
return ((string)(this["ApktoolPath"]));
|
||||
@@ -1179,5 +1189,190 @@ namespace APKToolGUI.Properties {
|
||||
this["ApktoolPath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public int Theme {
|
||||
get {
|
||||
return ((int)(this["Theme"]));
|
||||
}
|
||||
set {
|
||||
this["Theme"] = 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 DebugMode {
|
||||
get {
|
||||
return ((bool)(this["DebugMode"]));
|
||||
}
|
||||
set {
|
||||
this["DebugMode"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public bool Build_NetSecConf {
|
||||
get {
|
||||
return ((bool)(this["Build_NetSecConf"]));
|
||||
}
|
||||
set {
|
||||
this["Build_NetSecConf"] = 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 Decode_DontParseApkInfo {
|
||||
get {
|
||||
return ((bool)(this["Decode_DontParseApkInfo"]));
|
||||
}
|
||||
set {
|
||||
this["Decode_DontParseApkInfo"] = 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 UseCustomJVMArgs {
|
||||
get {
|
||||
return ((bool)(this["UseCustomJVMArgs"]));
|
||||
}
|
||||
set {
|
||||
this["UseCustomJVMArgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[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")]
|
||||
[global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)]
|
||||
public string CustomJVMArgs {
|
||||
get {
|
||||
return ((string)(this["CustomJVMArgs"]));
|
||||
}
|
||||
set {
|
||||
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>
|
||||
@@ -221,41 +221,80 @@
|
||||
<Setting Name="PlaySoundWhenDone" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseCustomTempDir" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="UseCustomTempDir" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="TempDir" 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" 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" 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" 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" 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" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_SetVendor" 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" 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" 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" 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" 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" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="DebugMode" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_NetSecConf" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_DontParseApkInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseCustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CustomJVMArgs" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</Value>
|
||||
</Setting>
|
||||
<Setting Name="SplitApk_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="UseApkeditor" Provider="Bluegrams.Application.PortableSettingsProvider" Roaming="true" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_OverrideAbi" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Adb_SetOverrideAbi" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_Jobs" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_Jobs" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_SetJobs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_SetJobs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -28,19 +28,19 @@
|
||||
and Windows will automatically select the most compatible environment. -->
|
||||
|
||||
<!-- Windows Vista -->
|
||||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
|
||||
|
||||
<!-- Windows 7 -->
|
||||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
|
||||
|
||||
<!-- Windows 8 -->
|
||||
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
|
||||
|
||||
<!-- Windows 8.1 -->
|
||||
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
||||
|
||||
<!-- Windows 10 -->
|
||||
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.WindowsAPICodePack.Taskbar;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using Microsoft.WindowsAPICodePack.Shell;
|
||||
using APKToolGUI.Languages;
|
||||
|
||||
namespace APKEasyTool
|
||||
{
|
||||
public class TaskBarJumpList
|
||||
{
|
||||
private JumpList list;
|
||||
|
||||
/// <summary>
|
||||
/// Creating a JumpList for the application
|
||||
/// </summary>
|
||||
/// <param name="windowHandle"></param>
|
||||
public TaskBarJumpList(IntPtr windowHandle)
|
||||
{
|
||||
list = JumpList.CreateJumpListForIndividualWindow(TaskbarManager.Instance.ApplicationId, windowHandle);
|
||||
list.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
|
||||
BuildList();
|
||||
}
|
||||
|
||||
public void AddToRecent(string destination)
|
||||
{
|
||||
//Call JumpList.AddToRecent(destination); because of bug
|
||||
JumpList.AddToRecent(destination);
|
||||
list.Refresh();
|
||||
}
|
||||
|
||||
public void AddTasks(string titleValue, string args)
|
||||
{
|
||||
JumpListLink jumpListLink = new JumpListLink(Assembly.GetEntryAssembly().Location, titleValue);
|
||||
jumpListLink.IconReference = new IconReference(Assembly.GetEntryAssembly().Location, 3);
|
||||
jumpListLink.Arguments = args;
|
||||
|
||||
list.AddUserTasks(jumpListLink);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds the Jumplist
|
||||
/// </summary>
|
||||
private void BuildList()
|
||||
{
|
||||
JumpListCustomCategory userActionsCategory = new JumpListCustomCategory("Actions");
|
||||
|
||||
AddTasks(Language.OpenDecFolder, "opendecfolder");
|
||||
AddTasks(Language.OpenComFolder, "opencomfolder");
|
||||
|
||||
list.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ namespace APKToolGUI.Utils
|
||||
|
||||
public static string ProcessStartWithOutput(string FileName, string Arguments)
|
||||
{
|
||||
// Debug.WriteLine("CMD: " + FileName + " " + Arguments);
|
||||
Log.d("CMD: " + FileName + " " + Arguments);
|
||||
string result = string.Empty;
|
||||
try
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Markup;
|
||||
|
||||
namespace SaveToGameWpf.Logic.Utils
|
||||
{
|
||||
@@ -39,7 +40,7 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (extensions == null && Directory.Exists(files[0]))
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
else if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
else
|
||||
e.Effect = DragDropEffects.None;
|
||||
@@ -73,7 +74,7 @@ namespace SaveToGameWpf.Logic.Utils
|
||||
e.Effect = DragDropEffects.Move;
|
||||
return true;
|
||||
}
|
||||
else if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Move;
|
||||
return true;
|
||||
|
||||
@@ -3,6 +3,7 @@ using Microsoft.Win32;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Utils;
|
||||
using Microsoft.Build.Framework.XamlTypes;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -24,13 +25,13 @@ namespace APKToolGUI
|
||||
try
|
||||
{
|
||||
#region Add context menu to registry
|
||||
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(Program.APP_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
apkToolGUIFolderShell.SetValue("Icon", executablePath);
|
||||
apkToolGUIFolderShell.SetValue("MUIVerb", Program.APP_NAME);
|
||||
apkToolGUIFolderShell.SetValue("MUIVerb", Application.ProductName);
|
||||
apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build;APKToolGUI.Smali");
|
||||
apkToolGUIFolderShell.Close();
|
||||
|
||||
CreateFileAssociationsSubKey(executablePath, ".apk", "APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign");
|
||||
CreateFileAssociationsSubKey(executablePath, ".apk", "APKToolGUI.Apkinfo;APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign");
|
||||
CreateFileAssociationsSubKey(executablePath, ".xapk", "APKToolGUI.Decompile");
|
||||
CreateFileAssociationsSubKey(executablePath, ".apks", "APKToolGUI.Decompile");
|
||||
CreateFileAssociationsSubKey(executablePath, ".zip", "APKToolGUI.Decompile");
|
||||
@@ -85,7 +86,7 @@ namespace APKToolGUI
|
||||
RegistryKey apkinfo = shell.CreateSubKey("APKToolGUI.Apkinfo", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
apkinfo.SetValue("", Language.GetApkInfo, RegistryValueKind.String);
|
||||
apkinfo.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
apkinfo.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"apkinfo\" \"%1\"", RegistryValueKind.String);
|
||||
apkinfo.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"viewinfo\" \"%1\"", RegistryValueKind.String);
|
||||
apkinfo.Close();
|
||||
|
||||
shell.Close();
|
||||
@@ -103,10 +104,10 @@ namespace APKToolGUI
|
||||
{
|
||||
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
|
||||
|
||||
RegistryKey shell = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\" + fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey(Program.APP_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
RegistryKey shell = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\" + fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
|
||||
shell.SetValue("Icon", "\"" + executablePath + "\"");
|
||||
shell.SetValue("MUIVerb", Program.APP_NAME);
|
||||
shell.SetValue("MUIVerb", Application.ProductName);
|
||||
shell.SetValue("SubCommands", subCommands);
|
||||
shell.Close();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
using APKToolGUI;
|
||||
using APKToolGUI.Properties;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
/// <summary>
|
||||
/// simple logging wrapper class
|
||||
/// </summary>
|
||||
public static class Log
|
||||
{
|
||||
/// <summary>
|
||||
/// log message with level VERBOSE (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void v(string s)
|
||||
{
|
||||
if (!Settings.Default.DebugMode) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.None, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level DEBUG (may be disabled)
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void d(string s)
|
||||
{
|
||||
if (!Settings.Default.DebugMode) return;
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level INFO
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void i(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Infomation, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level WARNING
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void w(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Warning, s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// log message with level ERROR
|
||||
/// </summary>
|
||||
/// <param name="s">the string to log</param>
|
||||
public static void e(string s)
|
||||
{
|
||||
FormMain.Instance.ToLog(ApktoolEventType.Error, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,165 +1,143 @@
|
||||
using Ionic.Zip;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public class ZipUtils
|
||||
{
|
||||
public static void ExtractAllStream(string path, string embeddedZip)
|
||||
{
|
||||
Assembly _assembly = Assembly.GetExecutingAssembly();
|
||||
Stream _zipFileStream = _assembly.GetManifestResourceStream(embeddedZip);
|
||||
using (ZipFile zipFile = ZipFile.Read(_zipFileStream))
|
||||
{
|
||||
zipFile.ExtractAll(path);
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetFileName(string path, string fileNameContains, string folderContains = "")
|
||||
{
|
||||
using (ZipFile zipDest = ZipFile.Read(path))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
{
|
||||
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
|
||||
return Path.GetFileName(entry.FileName);
|
||||
}
|
||||
var entry = archive.Entries
|
||||
.FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
|
||||
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
|
||||
return entry != null ? Path.GetFileName(entry.FullName) : string.Empty;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetFileNameWithoutExtension(string path, string fileNameContains, string folderContains = "")
|
||||
{
|
||||
using (ZipFile zipDest = ZipFile.Read(path))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
{
|
||||
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
|
||||
return Path.GetFileNameWithoutExtension(entry.FileName);
|
||||
}
|
||||
var entry = archive.Entries
|
||||
.FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
|
||||
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
|
||||
return entry != null ? Path.GetFileNameWithoutExtension(entry.FullName) : string.Empty;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static bool Exists(string path, string fileNameContains, string folderContains = "")
|
||||
{
|
||||
using (ZipFile zipDest = ZipFile.Read(path))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
{
|
||||
if (entry.FileName.Contains(fileNameContains) && String.IsNullOrEmpty(folderContains))
|
||||
return true;
|
||||
else if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
|
||||
return true;
|
||||
}
|
||||
return archive.Entries.Any(e => e.FullName.Contains(fileNameContains) &&
|
||||
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void AddFile(string zipFile, string fileName, string directoryPathInArchive = "")
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(zipFile))
|
||||
using (FileStream fs = new FileStream(zipFile, FileMode.OpenOrCreate))
|
||||
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.AddFile(fileName, directoryPathInArchive);
|
||||
else
|
||||
zip.AddFile(fileName);
|
||||
zip.Save();
|
||||
string entryName = string.IsNullOrEmpty(directoryPathInArchive) ? fileName : $"{directoryPathInArchive}/{Path.GetFileName(fileName)}";
|
||||
archive.CreateEntryFromFile(fileName, entryName);
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateFile(string zipFile, string fileName, string directoryPathInArchive = "")
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(zipFile))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.UpdateFile(fileName, directoryPathInArchive);
|
||||
else
|
||||
zip.UpdateFile(fileName);
|
||||
zip.Save();
|
||||
}
|
||||
RemoveFile(zipFile, fileName);
|
||||
AddFile(zipFile, fileName, directoryPathInArchive);
|
||||
}
|
||||
|
||||
public static void RemoveFile(string zipFile, string fileName)
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(zipFile))
|
||||
using (FileStream fs = new FileStream(zipFile, FileMode.OpenOrCreate))
|
||||
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
|
||||
{
|
||||
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
|
||||
if (chkresult2)
|
||||
{
|
||||
zip.RemoveEntry(fileName);
|
||||
zip.Save();
|
||||
}
|
||||
var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
|
||||
entry?.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public static void ExtractFile(string path, string fileName, string destination)
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
|
||||
if (chkresult2)
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = true;
|
||||
ZipEntry e = zip[fileName];
|
||||
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
}
|
||||
var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
|
||||
entry?.ExtractToFile(Path.Combine(destination, Path.GetFileName(entry.FullName)), true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void ExtractAll(string path, string destination, bool flattenFoldersOnExtract = false)
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
zip.ExtractAll(destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
foreach (var entry in archive.Entries)
|
||||
{
|
||||
string fullPath = flattenFoldersOnExtract
|
||||
? Path.Combine(destination, Path.GetFileName(entry.FullName))
|
||||
: Path.Combine(destination, entry.FullName);
|
||||
string directoryPath = Path.GetDirectoryName(fullPath);
|
||||
if (!string.IsNullOrEmpty(directoryPath)) Directory.CreateDirectory(directoryPath);
|
||||
entry.ExtractToFile(fullPath, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "")
|
||||
public static void AddDirectory(string path, string directoryPath, string directoryPathInArchive = "")
|
||||
{
|
||||
ZipFile zip = new ZipFile();
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.AddDirectory(fileName, directoryPathInArchive);
|
||||
else
|
||||
zip.AddDirectory(fileName);
|
||||
zip.Save(path);
|
||||
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
|
||||
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
|
||||
{
|
||||
foreach (string filePath in Directory.GetFiles(directoryPath, "*.*", SearchOption.AllDirectories))
|
||||
{
|
||||
string entryName = string.IsNullOrEmpty(directoryPathInArchive)
|
||||
? filePath.Substring(directoryPath.Length + 1)
|
||||
: Path.Combine(directoryPathInArchive, filePath.Substring(directoryPath.Length + 1));
|
||||
archive.CreateEntryFromFile(filePath, entryName.Replace("\\", "/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateDirectory(string path, string dirName, string directoryPathInArchive = "")
|
||||
public static void UpdateDirectory(string path, string directoryPath, string directoryPathInArchive = "")
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
|
||||
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.UpdateDirectory(dirName, directoryPathInArchive);
|
||||
else
|
||||
zip.UpdateDirectory(dirName);
|
||||
zip.Save();
|
||||
foreach (string filePath in Directory.GetFiles(directoryPath, "*.*", SearchOption.AllDirectories))
|
||||
{
|
||||
string entryName = string.IsNullOrEmpty(directoryPathInArchive)
|
||||
? filePath.Substring(directoryPath.Length + 1)
|
||||
: Path.Combine(directoryPathInArchive, filePath.Substring(directoryPath.Length + 1));
|
||||
RemoveFile(path, entryName.Replace("\\", "/"));
|
||||
archive.CreateEntryFromFile(filePath, entryName.Replace("\\", "/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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))
|
||||
using (ZipArchive archive = ZipFile.OpenRead(path))
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
foreach (ZipEntry e in zip.Where(x => x.FileName.Contains(folderName)))
|
||||
foreach (ZipArchiveEntry entry in archive.Entries.Where(e => e.FullName.Contains(folderName)))
|
||||
{
|
||||
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
string extractPath = flattenFoldersOnExtract
|
||||
? Path.Combine(destination, Path.GetFileName(entry.FullName))
|
||||
: Path.Combine(destination, entry.FullName);
|
||||
|
||||
string directoryPath = Path.GetDirectoryName(extractPath);
|
||||
if (!string.IsNullOrEmpty(directoryPath))
|
||||
{
|
||||
Directory.CreateDirectory(directoryPath);
|
||||
}
|
||||
|
||||
entry.ExtractToFile(extractPath, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+53
-6
@@ -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>
|
||||
@@ -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>
|
||||
@@ -262,6 +259,48 @@
|
||||
<setting name="ApktoolPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Theme" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="DebugMode" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_NetSecConf" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Decode_DontParseApkInfo" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="UseCustomJVMArgs" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="CustomJVMArgs" serializeAs="String">
|
||||
<value>-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true</value>
|
||||
</setting>
|
||||
<setting name="SplitApk_InputFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="UseApkeditor" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Adb_OverrideAbi" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Adb_SetOverrideAbi" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_Jobs" serializeAs="String">
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="Decode_Jobs" serializeAs="String">
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="Decode_SetJobs" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_SetJobs" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</APKToolGUI.Properties.Settings>
|
||||
</userSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup>
|
||||
@@ -269,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.1.0" newVersion="6.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="WinCopies.WindowsAPICodePack.Win32Native" publicKeyToken="ac0f4cf54a027a4d" culture="neutral" />
|
||||
@@ -281,7 +320,15 @@
|
||||
</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.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.HashCode" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
+19
-13
@@ -1,26 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="DotNetZip" version="1.16.0" targetFramework="net48" />
|
||||
<package id="Fody" version="6.6.4" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="7.0.1" targetFramework="net48" />
|
||||
<package id="DarkNet" version="2.3.0" targetFramework="net48" />
|
||||
<package id="Fody" version="6.9.0" 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.4" targetFramework="net48" />
|
||||
<package id="Microsoft-WindowsAPICodePack-Shell" version="1.1.4" targetFramework="net48" />
|
||||
<package id="Microsoft-WindowsAPICodePack-Core" version="1.1.5" targetFramework="net48" />
|
||||
<package id="Microsoft-WindowsAPICodePack-Shell" version="1.1.5" targetFramework="net48" />
|
||||
<package id="NETStandard.Library" version="2.0.3" targetFramework="net48" />
|
||||
<package id="Ookii.Dialogs.WinForms" version="4.0.0" targetFramework="net48" />
|
||||
<package id="PortableSettingsProvider" version="0.2.4" targetFramework="net48" />
|
||||
<package id="OSVersionExt" version="3.0.0" targetFramework="net48" />
|
||||
<package id="PortableSettingsProvider" version="0.2.5" targetFramework="net48" />
|
||||
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
|
||||
<package id="ResourceLoader" version="3.2.4" targetFramework="net48" />
|
||||
<package id="ResourceLoader" version="3.3.1" targetFramework="net48" />
|
||||
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
|
||||
<package id="System.Buffers" version="4.6.0" targetFramework="net48" />
|
||||
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Collections.Immutable" version="9.0.0" targetFramework="net48" />
|
||||
<package id="System.Console" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="7.0.2" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="9.0.0" 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.0" 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" />
|
||||
@@ -30,19 +34,20 @@
|
||||
<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.0" targetFramework="net48" />
|
||||
<package id="System.Net.Http" version="4.3.4" targetFramework="net48" />
|
||||
<package id="System.Net.Primitives" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
|
||||
<package id="System.Numerics.Vectors" version="4.6.0" targetFramework="net48" />
|
||||
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Reflection.Metadata" version="9.0.0" 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.0" targetFramework="net48" />
|
||||
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" 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" />
|
||||
@@ -58,6 +63,7 @@
|
||||
<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.5.0" targetFramework="net48" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
|
||||
</packages>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,24 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <https://unlicense.org>
|
||||
@@ -10,24 +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.
|
||||
|
||||
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.
|
||||
|
||||
# Requirements
|
||||
- Windows 7 32-bit/64-bit and above
|
||||
- [Java Runtime Environment](https://www.java.com/en/)/[Java SE Development Kit](https://www.oracle.com/java/technologies/downloads/) 8 and above. Highly recommended to use 64-bit version if your system is 64-bit
|
||||
- [.NET Framework 4.8](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48) (Windows 10 and above have it preinstalled)
|
||||
- [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
|
||||
- [.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 and 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
|
||||
@@ -35,11 +39,12 @@ https://github.com/AndnixSH/APKToolGUI/releases
|
||||
- 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
|
||||
@@ -56,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
|
||||
@@ -69,7 +76,7 @@ Anything else, [create a new issue](https://github.com/AndnixSH/APKToolGUI/issue
|
||||
|
||||
# FAQ
|
||||
##### Q: Can it be ported to other OS like Linux?
|
||||
A: Maybe, but it's not easy since Microsoft is dumb for not supporting it for .NET Core, unlike Java FX which supported all platforms. If you know, feel free to open an issue
|
||||
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
|
||||
|
||||
##### Q: How to update Apktool?
|
||||
A: Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder
|
||||
@@ -80,20 +87,11 @@ A: Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/down
|
||||
##### Q: How to reset?
|
||||
A: Simply delete the config.xml file from the directory of the executeable
|
||||
|
||||
##### Q: Why this tool is a virus?
|
||||
A: It just a false positive, anti-virus always flag tools/softwares like this as virus. Don't always believe what your anti-virus are telling you. Try to compile the source by yourself and you will see
|
||||
|
||||
##### Q: Can you make an automatic APK injecting tool?
|
||||
A: No, that's out of scope of this tool, and I'm not interested.
|
||||
A: No, I'm not interested.
|
||||
|
||||
##### Q: Can you implement to convert APK to AAB?
|
||||
A: No, apktool is about recompiling, not about converting to other formats. AAB is only used for distributing an application to Play Store. It is not directly installable.
|
||||
|
||||
##### Q: Can you implement an option to protect/pack/obfuscate APK?
|
||||
A: No, APK protection is beyond the scope of this tool
|
||||
|
||||
##### Q: Can you implement an option to deobfuscate/unpack APK or bypass anti-cheat/security?
|
||||
A: No, they are also beyond the scope of this tool. I don't condone bypassing such protections
|
||||
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
|
||||
|
||||
##### 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)
|
||||
@@ -101,6 +99,12 @@ A: Download from [Apkcombo's APK downloader](https://apkcombo.com/downloader/),
|
||||
##### Q: Can you help me with modding APK in general?
|
||||
A: Sorry, I don't offer support with it.
|
||||
|
||||
##### Q: Can you implement features to protect/pack/obfuscate APK?
|
||||
A: No, APK protection is beyond the scope of this tool
|
||||
|
||||
##### 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
|
||||
|
||||
# Development
|
||||
This project is written in C#
|
||||
|
||||
@@ -111,7 +115,9 @@ Use Visual Studio 2019 and above. NET Framework 4.8 SDK is required
|
||||
- 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 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.
Binary file not shown.
@@ -1,9 +1,70 @@
|
||||
3.3.1.3
|
||||
- Updated APKTool to 2.10.0, APKEditor to 1.4.0 and all other tools
|
||||
- Minor fixes of drag and drop on merge APK section
|
||||
- Support window resizing
|
||||
- Fixed issue decompiling split apk using Apkeditor
|
||||
|
||||
3.3.1.2
|
||||
- Option to override ABI for ADB
|
||||
- Fixed Target SDK showing wrong API level
|
||||
- Target SDK will detect up to API level 35/Android 15
|
||||
|
||||
3.3.1.1
|
||||
- Fixed buttons not ungraying after ADB installation
|
||||
- Fixed "Merge APK" button not greying out during the process
|
||||
- Updated German language
|
||||
|
||||
3.3.1.0
|
||||
- Updated dependencies
|
||||
- Print exceptions
|
||||
- Support decompiling/compiling using ApkEditor
|
||||
- Adjust settings saving
|
||||
- Merge split APK to single APK without decompiling
|
||||
- Added german language
|
||||
- Updated Apktool to 2.9.3
|
||||
- Updated APKeditor to 1.3.4
|
||||
- Print APKEditor version
|
||||
|
||||
3.3.0.1
|
||||
- Fixed an issue that caused installation fail after compiling
|
||||
|
||||
3.3.0.0
|
||||
- Updated Simplified Chinese translation
|
||||
- Removed android.intent.action.MAIN from "Fix ApkTool errors after decompile"
|
||||
- Updated tools (apktool.jar (2.8.1), APKEditor.jar (1.3.2), aapt.exe (SDK 34), aapt2.exe (SDK 34), adb.exe (34.0.4-10411341), apksigner.jar (SDK 34), zipalign.exe (SDK 34))
|
||||
- Added debug mode to print more logs
|
||||
- Fixed java version
|
||||
- "Fix ApkTool errors after decompile" No longer change target SDK to 29
|
||||
- Added option to clear temp folder
|
||||
- Improve dark theme a bit
|
||||
- Added option to not parse APK info when selecting APK for decompiling
|
||||
- Fixed sign after zipalign
|
||||
- Added option to open new Instance
|
||||
- Added jump list
|
||||
- Parse alt-native-code from aapt
|
||||
- Added custom JVM args
|
||||
- All settings portable
|
||||
- Move labels to tooltips to keep UI clean
|
||||
- Change sparseResources to false for "Fix ApkTool errors after decompile"
|
||||
- Fix crash when drag and dropping APK file
|
||||
|
||||
If you are using Java 20 and encountered "Invalid CEN header (invalid zip64 extra data field size)" error, enable "custom JVM arguments" in settings to temporary fix this issue. See issue #13 on Github repo
|
||||
|
||||
3.2.2.0
|
||||
- Dark theme (Currently there is no dark scrollbar, and tabs looks quite ugly)
|
||||
- Fix crash when dropping decompiled APK on compile panel
|
||||
- Added View APK info in context menu (You must reinstall context menu)
|
||||
- Fixed attempting to install APK even it's disabled
|
||||
- Updated APKEditor.jar to 1.2.0
|
||||
|
||||
3.2.1.0
|
||||
- Fixed an error when decompiling split APK for the second time
|
||||
- Updated Russian language
|
||||
- Updated Hungarian language
|
||||
- Updated dependencies
|
||||
- Make log output read only
|
||||
- Updated resources: aapt.exe, aapt2.exe, apksigner.jar, zipalign.exe, adb.exe
|
||||
- Removed libaapt2_jni.dll
|
||||
|
||||
3.2.0.0
|
||||
- Added split APK merging (Build-in and APKEditor.jar) for decompilation. APKEditor.jar is set to default
|
||||
|
||||
Reference in New Issue
Block a user