Updated to 3.0.0.0
Reviving the project :)
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<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')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
@@ -10,8 +12,9 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>APKToolGUI</RootNamespace>
|
||||
<AssemblyName>APKToolGUI</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<AssemblyInfoFilePath>Properties\AssemblyInfo.cs</AssemblyInfoFilePath>
|
||||
@@ -20,6 +23,8 @@
|
||||
<UpdateAssemblyInfoVersion>False</UpdateAssemblyInfoVersion>
|
||||
<AssemblyVersionSettings>None.None.None.Increment</AssemblyVersionSettings>
|
||||
<AssemblyFileVersionSettings>None.None.None.Increment</AssemblyFileVersionSettings>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
@@ -40,27 +45,27 @@
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<OutputPath>D:\Portable Apps\APK Tool GUI\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<OutputPath>D:\Portable Apps\APK Tool GUI\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>android.ico</ApplicationIcon>
|
||||
<ApplicationIcon>android-thin.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetZone>LocalIntranet</TargetZone>
|
||||
@@ -72,9 +77,170 @@
|
||||
<PropertyGroup />
|
||||
<PropertyGroup />
|
||||
<ItemGroup>
|
||||
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<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>
|
||||
<Reference Include="Microsoft.Build.Framework" />
|
||||
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</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>
|
||||
<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>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
|
||||
<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>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.6.0.0\lib\net461\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<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.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>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<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>
|
||||
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Resources.Extensions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Resources.Extensions.6.0.0\lib\net461\System.Resources.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<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>
|
||||
<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>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
@@ -82,84 +248,97 @@
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Apktool.cs">
|
||||
<Compile Include="ApkTool\AaptParser.cs" />
|
||||
<Compile Include="ApkTool\ApkFixer.cs" />
|
||||
<Compile Include="ApkTool\Apktool.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Signapk.cs">
|
||||
<Compile Include="ApkTool\Smali.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Zipalign.cs" />
|
||||
<Compile Include="ExplorerContextMenu.cs" />
|
||||
<Compile Include="FormAboutBox.cs">
|
||||
<Compile Include="ApkTool\Baksmali.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ApkTool\Signapk.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ApkTool\Zipalign.cs" />
|
||||
<Compile Include="Handlers\BaksmaliControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\BuildControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\DecodeControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\DragDropHandlers.cs" />
|
||||
<Compile Include="Handlers\FrameworkControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\SignControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\SmaliControlEventHandlers.cs" />
|
||||
<Compile Include="Handlers\ZipalignControlEventHandlers.cs" />
|
||||
<Compile Include="Utils\AdminUtils.cs" />
|
||||
<Compile Include="Utils\CMD.cs" />
|
||||
<Compile Include="Utils\CommonUtils.cs" />
|
||||
<Compile Include="Utils\DirectoryUtils.cs" />
|
||||
<Compile Include="Utils\DragDropUtils.cs" />
|
||||
<Compile Include="Utils\ExplorerContextMenu.cs" />
|
||||
<Compile Include="Forms\FormAboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormAboutBox.Designer.cs">
|
||||
<Compile Include="Forms\FormAboutBox.Designer.cs">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormBuild.cs">
|
||||
<Compile Include="Forms\FormMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormBuild.Designer.cs">
|
||||
<DependentUpon>FormBuild.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormDecode.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormDecode.Designer.cs">
|
||||
<DependentUpon>FormDecode.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormMain.Designer.cs">
|
||||
<Compile Include="Forms\FormMain.Designer.cs">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormSettings.cs">
|
||||
<Compile Include="Forms\FormSettings.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormSettings.Designer.cs">
|
||||
<Compile Include="Forms\FormSettings.Designer.cs">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Java\JarProcess.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Java\JavaUtils.cs" />
|
||||
<Compile Include="PortableSettingsProvider.cs" />
|
||||
<Compile Include="Utils\PathUtils.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Language.Designer.cs">
|
||||
<Compile Include="Languages\Language.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Language.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UpdateChecker.cs" />
|
||||
<EmbeddedResource Include="FormAboutBox.resx">
|
||||
<Compile Include="Utils\StringExt.cs" />
|
||||
<Compile Include="Web\UpdateChecker.cs" />
|
||||
<Compile Include="Utils\ZipUtils.cs" />
|
||||
<Compile Include="Web\WebDownload.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormAboutBox.ru.resx">
|
||||
<EmbeddedResource Include="Forms\FormAboutBox.ru.resx">
|
||||
<DependentUpon>FormAboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormBuild.resx">
|
||||
<DependentUpon>FormBuild.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormDecode.resx">
|
||||
<DependentUpon>FormDecode.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormMain.resx">
|
||||
<EmbeddedResource Include="Forms\FormMain.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormMain.ru.resx">
|
||||
<EmbeddedResource Include="Forms\FormMain.ru.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormSettings.resx">
|
||||
<EmbeddedResource Include="Forms\FormSettings.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormSettings.ru.resx">
|
||||
<EmbeddedResource Include="Forms\FormSettings.ru.resx">
|
||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Language.ru.resx" />
|
||||
<EmbeddedResource Include="Languages\Language.ru.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
@@ -170,11 +349,12 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Language.resx">
|
||||
<EmbeddedResource Include="Languages\Language.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Language.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\app.manifest" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
@@ -187,14 +367,21 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="android.ico" />
|
||||
<Content Include="android-thin.ico" />
|
||||
<None Include="Resources\apkaio.png" />
|
||||
<None Include="Resources\info.png" />
|
||||
<None Include="Resources\waiting.png" />
|
||||
<None Include="Resources\android-thin.ico" />
|
||||
<None Include="Resources\Info1.png" />
|
||||
<None Include="Resources\Done.png" />
|
||||
<None Include="Resources\GUI.png" />
|
||||
<None Include="Resources\exclamation-red-frame-icon.png" />
|
||||
<None Include="Resources\warning.png" />
|
||||
<None Include="Resources\Error.png" />
|
||||
<None Include="Resources\playstore.png" />
|
||||
<None Include="Resources\apkpure.png" />
|
||||
<None Include="Resources\apkcombo.png" />
|
||||
<None Include="Resources\apkpure.ico" />
|
||||
<None Include="Resources\apkcombo.ico" />
|
||||
<None Include="Resources\playstore-2.png" />
|
||||
<None Include="Resources\playstore.ico" />
|
||||
<None Include="Resources\android-thin.ico" />
|
||||
<None Include="Resources\Done.png" />
|
||||
<None Include="Resources\android.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -222,8 +409,21 @@
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>xcopy $(ProjectDir)tools $(ProjectDir)$(OutDir)bin /Y /I /S</PreBuildEvent>
|
||||
<PreBuildEvent>xcopy "$(ProjectDir)tools" "$(OutDir)Resources" /Y /I /S</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\packages\Fody.6.6.0\build\Fody.targets" Condition="Exists('..\packages\Fody.6.6.0\build\Fody.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Fody.6.6.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.6.0\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props'))" />
|
||||
</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')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public class AaptParser
|
||||
{
|
||||
public string ApkFile;
|
||||
|
||||
public string AppName;
|
||||
|
||||
public string PackageName;
|
||||
|
||||
public string VersionName;
|
||||
|
||||
public string VersionCode;
|
||||
|
||||
public string SdkVersion;
|
||||
|
||||
public string TargetSdkVersion;
|
||||
|
||||
public string LaunchableActivity;
|
||||
|
||||
public string Permissions;
|
||||
|
||||
public string Screens;
|
||||
|
||||
public string Locales;
|
||||
|
||||
public string Densities;
|
||||
|
||||
public string PlayStoreLink;
|
||||
|
||||
public string ApkComboLink;
|
||||
|
||||
public string ApkPureLink;
|
||||
|
||||
public string ApkAioLink;
|
||||
|
||||
public string AppIcon = null;
|
||||
|
||||
public bool Parse(string file)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
string info = ParseApkInfo(file);
|
||||
if (!String.IsNullOrEmpty(info))
|
||||
{
|
||||
string[] lines = info.Split(
|
||||
new string[] { "\r\n", "\r", "\n" },
|
||||
StringSplitOptions.None);
|
||||
|
||||
foreach (string line in lines)
|
||||
{
|
||||
switch (line.Split(':')[0])
|
||||
{
|
||||
case "package":
|
||||
PackageName = StringExt.Regex(@"(?<=package: name=\')(.*?)(?=\')", line);
|
||||
VersionName = StringExt.Regex(@"(?<=versionName=\')(.*?)(?=\')", line);
|
||||
VersionCode = StringExt.Regex(@"(?<=versionCode=\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "uses-permission":
|
||||
Permissions += StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line) + "\n";
|
||||
break;
|
||||
case "sdkVersion":
|
||||
SdkVersion += SdkToAndroidVer(StringExt.Regex(@"(?<=sdkVersion:\')(.*?)(?=\')", line));
|
||||
break;
|
||||
case "targetSdkVersion":
|
||||
TargetSdkVersion = SdkToAndroidVer(StringExt.Regex(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line));
|
||||
break;
|
||||
case "application-label":
|
||||
AppName = StringExt.Regex(@"(?<=application-label:\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "application":
|
||||
AppIcon = GetIcon(file, StringExt.Regex(@"(?<=icon=\')(.*?)(?=\')", line));
|
||||
break;
|
||||
case "launchable-activity":
|
||||
LaunchableActivity = StringExt.Regex(@"(?<=name=\')(.*?)(?=\')", line);
|
||||
break;
|
||||
case "supports-screens":
|
||||
var screens = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
Screens = string.Join(", ", screens);
|
||||
break;
|
||||
case "locales":
|
||||
var locales = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
Locales = string.Join(", ", locales);
|
||||
break;
|
||||
case "densities":
|
||||
var densities = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast<Match>().Select(m => m.Value).ToList();
|
||||
Densities = string.Join(", ", densities);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ApkFile = file;
|
||||
PlayStoreLink = "https://play.google.com/store/apps/details?id=" + PackageName;
|
||||
ApkComboLink = "https://apkcombo.com/a/" + PackageName;
|
||||
ApkPureLink = "https://apkpure.com/a/" + PackageName;
|
||||
ApkAioLink = "https://apkaio.com/app/" + PackageName;
|
||||
|
||||
result = true;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private string ParseApkInfo(string path)
|
||||
{
|
||||
//For some reason, aapt2 hangs, so we will only use aapt2 when aapt1 fails to read UTF-8 character
|
||||
string apkinfo = CMD.ProcessStartWithOutput(Program.AAPT_PATH, "dump badging \"" + path + "\"");
|
||||
if (String.IsNullOrEmpty(apkinfo))
|
||||
{
|
||||
string apkinfo2 = CMD.ProcessStartWithOutput(Program.AAPT2_PATH, "dump badging \"" + path + "\"");
|
||||
if (!String.IsNullOrEmpty(apkinfo2))
|
||||
{
|
||||
return apkinfo2;
|
||||
}
|
||||
else
|
||||
return "";
|
||||
}
|
||||
else
|
||||
return apkinfo;
|
||||
}
|
||||
|
||||
string[] iconFolder = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" };
|
||||
|
||||
private string GetIcon(string apkPath, string iconPath)
|
||||
{
|
||||
iconPath = iconPath.Replace(".xml", ".png");
|
||||
|
||||
if (iconPath.Contains("anydpi-v26"))
|
||||
{
|
||||
foreach (string folder in iconFolder)
|
||||
{
|
||||
string icon = iconPath.Replace("mipmap-anydpi-v26", folder).Replace("drawable-anydpi-v26", folder);
|
||||
|
||||
if (ZipUtils.Exists(apkPath, icon))
|
||||
{
|
||||
Debug.WriteLine("Icon path " + icon);
|
||||
return icon;
|
||||
}
|
||||
}
|
||||
return iconPath.Replace("mipmap-anydpi-v26", "mipmap-xhdpi").Replace(".xml", ".png");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("Icon path " + iconPath);
|
||||
return iconPath;
|
||||
}
|
||||
}
|
||||
|
||||
public string SdkToAndroidVer(string sdk)
|
||||
{
|
||||
switch (sdk)
|
||||
{
|
||||
case "31":
|
||||
return "31: Android 12.0";
|
||||
case "30":
|
||||
return "30: Android 11.0";
|
||||
case "29":
|
||||
return "29: Android 10.0";
|
||||
case "28":
|
||||
return "28: Android 9.0 (Pie)";
|
||||
case "27":
|
||||
return "27: Android 8.1 (Oreo MR1)";
|
||||
case "26":
|
||||
return "26: Android 8.0 (Oreo)";
|
||||
case "25":
|
||||
return "25: Android 7.1 (Nougat MR1)";
|
||||
case "24":
|
||||
return "24: Android 7.0 (Nougat)";
|
||||
case "23":
|
||||
return "23: Android 6.0 (Marshmallow)";
|
||||
case "22":
|
||||
return "22: Android 5.1 (Lollipop MR1)";
|
||||
case "21":
|
||||
return "21: Android 5.0 (Lollipop)";
|
||||
case "20":
|
||||
return "20: Android 4.4W (KitKat Watch)";
|
||||
case "19":
|
||||
return "19: Android 4.4 (KitKat)";
|
||||
case "18":
|
||||
return "18: Android 4.3 (Jelly Bean MR2)";
|
||||
case "17":
|
||||
return "17: Android 4.2 (Jelly Bean MR1)";
|
||||
case "16":
|
||||
return "16: Android 4.1 (Jelly Bean)";
|
||||
case "15":
|
||||
return "15: Android 4.0.3 (Ice Cream Sandwich MR1)";
|
||||
case "14":
|
||||
return "14: Android 4.0 (Ice Cream Sandwich)";
|
||||
case "13":
|
||||
return "13: Android 3.2 (Honeycomb MR2)";
|
||||
case "12":
|
||||
return "12: Android 3.1 (Honeycomb MR1)";
|
||||
case "11":
|
||||
return "11: Android 3.0 (Honeycomb)";
|
||||
case "10":
|
||||
return "10: Android 2.3.3 Gingerbread MR1";
|
||||
case "9":
|
||||
return "9: Android 2.3 (Gingerbread)";
|
||||
case "8":
|
||||
return "8: Android 2.2 (Froyo)";
|
||||
case "7":
|
||||
return "7: Android 2.1 (Eclair MR1)";
|
||||
case "6":
|
||||
return "6: Android 2.0.1 (Eclair 0.1)";
|
||||
case "5":
|
||||
return "5: Android 2.0 (Eclair)";
|
||||
case "4":
|
||||
return "4: Android 1.6 (Donut)";
|
||||
case "3":
|
||||
return "3: Android 1.5 (Cupcake)";
|
||||
case "2":
|
||||
return "2: Android 1.1 (Base 1.1)";
|
||||
case "1":
|
||||
return "1: Android 1.0 (Base)";
|
||||
default:
|
||||
return sdk;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
|
||||
using APKToolGUI.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.ApkTool
|
||||
{
|
||||
public class ApkFixer
|
||||
{
|
||||
public static bool FixAndroidManifest(string path)
|
||||
{
|
||||
string manifestPath = Path.Combine(path, "AndroidManifest.xml");
|
||||
if (File.Exists(manifestPath))
|
||||
{
|
||||
string text = File.ReadAllText(manifestPath);
|
||||
text = text.Replace("android:isSplitRequired=\"true\"", "");
|
||||
text = text.Replace("android:extractNativeLibs=\"false\"", "");
|
||||
text = text.Replace("android:useEmbeddedDex=\"true\"", "");
|
||||
File.WriteAllText(Path.Combine(path, "AndroidManifest.xml"), text);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool RemoveApkToolDummies(string path)
|
||||
{
|
||||
string resPath = Path.Combine(path, "res", "values");
|
||||
if (Directory.Exists(resPath))
|
||||
{
|
||||
DirectoryUtils.ReplaceinFilesRegex(resPath, "(.*(?:APKTOOL_DUMMY).*)", "");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool ChangeSdkTo29(string path)
|
||||
{
|
||||
string ymlPath = Path.Combine(path, "apktool.yml");
|
||||
if (File.Exists(ymlPath))
|
||||
{
|
||||
string[] Manifest = File.ReadAllLines(ymlPath);
|
||||
string yml = "";
|
||||
foreach (string s in Manifest)
|
||||
{
|
||||
int sdk = 30;
|
||||
int.TryParse(StringExt.Regex(@"(?<= targetSdkVersion: \')(.*?)(?=\')", s), out sdk);
|
||||
if (sdk >= 30)
|
||||
{
|
||||
yml += " targetSdkVersion: '29'\n";
|
||||
return true;
|
||||
}
|
||||
yml += s + "\n";
|
||||
}
|
||||
File.WriteAllText(ymlPath, yml);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,287 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using APKToolGUI.Properties;
|
||||
using Java;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Apktool : JarProcess
|
||||
{
|
||||
enum ApktoolActionType
|
||||
{
|
||||
Decompile,
|
||||
Build,
|
||||
InstallFramework,
|
||||
ClearFramework,
|
||||
Null
|
||||
}
|
||||
|
||||
//Note: I don't use some features and don't use any framework related since I make it simple for game modding purposes
|
||||
static class DecompileKeys
|
||||
{
|
||||
public const string NoSource = " -s"; //Do not decode sources.
|
||||
public const string NoResource = " -r"; //Do not decode resources.
|
||||
public const string NoDebugInfo = " -b"; //don't write out debug info (.local, .param, .line, etc.)
|
||||
public const string Force = " -f"; //Skip changes detection and build all files.
|
||||
public const string FrameworkPath = " -p"; //Uses framework files located in <dir>.
|
||||
public const string KeepBrokenResource = " -k"; //Use if there was an error and some resources were dropped
|
||||
public const string MatchOriginal = " -m"; //Keeps files to closest to original as possible. Prevents rebuild.
|
||||
public const string OutputDir = " -o"; //The name of folder that gets written. Default is apk.out
|
||||
public const string OnlyMainClasses = " -only-main-classes"; //Only disassemble the main dex classes (classes[0-9]*.dex) in the root.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
}
|
||||
|
||||
static class BuildKeys
|
||||
{
|
||||
public const string ForceAll = " -f"; //Skip changes detection and build all files.
|
||||
public const string CopyOriginal = " -c"; //opies original AndroidManifest.xml and META-INF. See project page for more info.
|
||||
public const string Aapt = " -a"; //Loads aapt from specified location.
|
||||
public const string FrameworkPath = " -p"; //Uses framework files located in <dir>.
|
||||
public const string OutputAppPath = " -o"; // The name of apk that gets written. Default is dist/name.apk
|
||||
public const string NoCrunch = " -nc"; // Disable crunching of resource files during the build step.
|
||||
public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS.
|
||||
}
|
||||
|
||||
static class InstallFrameworkKeys
|
||||
{
|
||||
public const string FrameDir = " -p"; //Stores framework files into <dir>.
|
||||
public const string Tag = " -t"; //Tag frameworks using <tag>.
|
||||
}
|
||||
|
||||
ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved;
|
||||
ApktoolDataReceivedEventHandler onApktoolErrorDataRecieved;
|
||||
|
||||
public event ApktoolDataReceivedEventHandler ApktoolOutputDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onApktoolOutputDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onApktoolOutputDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
public event ApktoolDataReceivedEventHandler ApktoolErrorDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onApktoolErrorDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onApktoolErrorDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
|
||||
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
|
||||
{
|
||||
Exited += Apktool_Exited;
|
||||
OutputDataReceived += Apktool_OutputDataReceived;
|
||||
ErrorDataReceived += Apktool_ErrorDataReceived;
|
||||
}
|
||||
|
||||
private void Apktool_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onApktoolErrorDataRecieved != null && e.Data != null)
|
||||
onApktoolErrorDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Apktool_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onApktoolOutputDataRecieved != null && e.Data != null)
|
||||
onApktoolOutputDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Apktool_Exited(object sender, EventArgs e)
|
||||
{
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
}
|
||||
|
||||
public int Decompile(string outputDir)
|
||||
{
|
||||
string inputPath = Settings.Default.Decode_InputAppPath;
|
||||
string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyMatchOriginal = null, keyOutputDir = null, onlyMainClasses = null, noDebugInfo = null, keyKeepBrokenRes = null, apiLevel = null;
|
||||
|
||||
if (Settings.Default.Decode_NoSrc)
|
||||
keyNoSrc = DecompileKeys.NoSource;
|
||||
if (Settings.Default.Decode_NoRes)
|
||||
keyNoRes = DecompileKeys.NoResource;
|
||||
if (Settings.Default.Decode_Force)
|
||||
keyForce = DecompileKeys.Force;
|
||||
if (Settings.Default.Decode_KeepBrokenRes)
|
||||
keyKeepBrokenRes = DecompileKeys.KeepBrokenResource;
|
||||
if (Settings.Default.Decode_MatchOriginal)
|
||||
keyMatchOriginal = DecompileKeys.MatchOriginal;
|
||||
if (Settings.Default.Decode_OnlyMainClasses)
|
||||
onlyMainClasses = DecompileKeys.OnlyMainClasses;
|
||||
if (Settings.Default.Decode_NoDebugInfo)
|
||||
noDebugInfo = DecompileKeys.NoDebugInfo;
|
||||
if (Settings.Default.Decode_UseFramework)
|
||||
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Settings.Default.Decode_FrameDir);
|
||||
if (Settings.Default.Decode_SetApiLevel)
|
||||
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Decode_ApiLevel);
|
||||
keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, outputDir);
|
||||
|
||||
string args = String.Format("d{0}{1}{2}{3}{4}{5}{6}{7}{8}{9} \"{10}\"", keyNoSrc, keyNoRes, keyForce, onlyMainClasses, noDebugInfo, keyMatchOriginal, keyFramePath, keyKeepBrokenRes, keyOutputDir, apiLevel, inputPath);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public int Build(string outputFile)
|
||||
{
|
||||
string decApkDir = Settings.Default.Build_InputDir;
|
||||
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null;
|
||||
if (Settings.Default.Build_ForceAll)
|
||||
keyForceAll = BuildKeys.ForceAll;
|
||||
if (Settings.Default.Build_CopyOriginal)
|
||||
keyCopyOriginal = BuildKeys.CopyOriginal;
|
||||
if (Settings.Default.Build_NoCrunch)
|
||||
noCrunch = BuildKeys.NoCrunch;
|
||||
if (Settings.Default.Build_UseAapt)
|
||||
keyAapt = String.Format("{0} \"{1}\"", BuildKeys.Aapt, Settings.Default.Build_AaptPath);
|
||||
if (Settings.Default.Build_UseFramework)
|
||||
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Settings.Default.Build_FrameDir);
|
||||
if (Settings.Default.Build_SetApiLevel)
|
||||
apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Build_ApiLevel);
|
||||
keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, outputFile);
|
||||
|
||||
string args = String.Format("b{0}{1}{2}{3}{4}{5}{6} \"{7}\"", keyForceAll, keyAapt, keyCopyOriginal, noCrunch, keyFramePath, keyOutputAppPath, apiLevel, decApkDir);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public int InstallFramework()
|
||||
{
|
||||
string inputPath = Settings.Default.InstallFramework_InputFramePath;
|
||||
string keyFrameDir = null, keyTag = null;
|
||||
|
||||
if (Settings.Default.InstallFramework_UseFrameDir)
|
||||
keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.InstallFramework_FrameDir);
|
||||
if (Settings.Default.InstallFramework_UseTag)
|
||||
keyTag = String.Format("{0} \"{1}\"", InstallFrameworkKeys.Tag, Settings.Default.InstallFramework_Tag);
|
||||
|
||||
string args = String.Format("if{0}{1} \"{2}\"", keyFrameDir, keyTag, inputPath);
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public int ClearFramework()
|
||||
{
|
||||
string args = String.Format("empty-framework-dir --force");
|
||||
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
public string GetVersion()
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath))
|
||||
{
|
||||
apktoolJar.EnableRaisingEvents = false;
|
||||
apktoolJar.Start("-version");
|
||||
string version = apktoolJar.StandardOutput.ReadToEnd();
|
||||
apktoolJar.WaitForExit(3000);
|
||||
return version.Replace("\r\n", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ApktoolDataReceivedEventHandler(Object sender, ApktoolDataReceivedEventArgs e);
|
||||
|
||||
public class ApktoolDataReceivedEventArgs : EventArgs
|
||||
{
|
||||
string data;
|
||||
string message;
|
||||
ApktoolEventType eventType;
|
||||
|
||||
public ApktoolDataReceivedEventArgs(string _data)
|
||||
{
|
||||
data = _data;
|
||||
SetData();
|
||||
}
|
||||
public String Message
|
||||
{
|
||||
get
|
||||
{
|
||||
return message;
|
||||
}
|
||||
}
|
||||
public ApktoolEventType EventType
|
||||
{
|
||||
get
|
||||
{
|
||||
return eventType;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetData()
|
||||
{
|
||||
MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$");
|
||||
if (mCol.Count > 0)
|
||||
{
|
||||
switch (mCol[0].Groups[1].Value)
|
||||
{
|
||||
case "W":
|
||||
eventType = ApktoolEventType.Warning;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "Warning":
|
||||
eventType = ApktoolEventType.Warning;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "I":
|
||||
eventType = ApktoolEventType.Information;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "Error":
|
||||
eventType = ApktoolEventType.Error;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "E":
|
||||
eventType = ApktoolEventType.Error;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
default:
|
||||
eventType = ApktoolEventType.Unknown;
|
||||
message = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = ApktoolEventType.Unknown;
|
||||
message = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum ApktoolEventType
|
||||
{
|
||||
Information,
|
||||
Warning,
|
||||
Error,
|
||||
Unknown
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using Java;
|
||||
using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
using System.IO;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Baksmali : JarProcess
|
||||
{
|
||||
public new event BaksmaliExitedEventHandler Exited;
|
||||
|
||||
public Baksmali(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
base.Exited += Baksmali_Exited;
|
||||
OutputDataReceived += Baksmali_OutputDataReceived;
|
||||
ErrorDataReceived += Baksmali_ErrorDataReceived;
|
||||
}
|
||||
|
||||
BaksmaliDataReceivedEventHandler onBaksmaliOutputDataRecieved;
|
||||
BaksmaliDataReceivedEventHandler onBaksmaliErrorDataRecieved;
|
||||
|
||||
public event BaksmaliDataReceivedEventHandler BaksmaliOutputDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onBaksmaliOutputDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onBaksmaliOutputDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
public event BaksmaliDataReceivedEventHandler BaksmaliErrorDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onBaksmaliErrorDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onBaksmaliErrorDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Baksmali_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onBaksmaliErrorDataRecieved != null && e.Data != null)
|
||||
onBaksmaliErrorDataRecieved(this, new BaksmaliDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Baksmali_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onBaksmaliOutputDataRecieved != null && e.Data != null)
|
||||
onBaksmaliOutputDataRecieved(this, new BaksmaliDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
void Baksmali_Exited(object sender, EventArgs e)
|
||||
{
|
||||
if (Exited != null)
|
||||
Exited(this, new BaksmaliExitedEventArgs(ExitCode));
|
||||
}
|
||||
|
||||
public int Disassemble(string output)
|
||||
{
|
||||
string inputFile = String.Format("\"{0}\"", Settings.Default.Baksmali_InputDexFile);
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("d {0} {1}", inputFile, keyOutputDir);
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
}
|
||||
|
||||
public class BaksmaliExitedEventArgs : EventArgs
|
||||
{
|
||||
public BaksmaliExitedEventArgs(int exitCode)
|
||||
{
|
||||
ExitCode = exitCode;
|
||||
}
|
||||
|
||||
public int ExitCode { get; private set; }
|
||||
}
|
||||
|
||||
public delegate void BaksmaliExitedEventHandler(object sender, BaksmaliExitedEventArgs e);
|
||||
|
||||
public delegate void BaksmaliDataReceivedEventHandler(Object sender, BaksmaliDataReceivedEventArgs e);
|
||||
|
||||
public class BaksmaliDataReceivedEventArgs : EventArgs
|
||||
{
|
||||
string message;
|
||||
|
||||
public BaksmaliDataReceivedEventArgs(string _data)
|
||||
{
|
||||
message = _data;
|
||||
}
|
||||
public String Message
|
||||
{
|
||||
get
|
||||
{
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
using System;
|
||||
using Java;
|
||||
using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Signapk : JarProcess
|
||||
{
|
||||
public new event SignapkExitedEventHandler Exited;
|
||||
|
||||
private string lastSourceApk;
|
||||
private string lastOutApk;
|
||||
public bool silent;
|
||||
|
||||
SignapkDataReceivedEventHandler onSignapkOutputDataRecieved;
|
||||
SignapkDataReceivedEventHandler onSignapkErrorDataRecieved;
|
||||
|
||||
public event SignapkDataReceivedEventHandler SignapkOutputDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onSignapkOutputDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onSignapkOutputDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
public event SignapkDataReceivedEventHandler SignapkErrorDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onSignapkErrorDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onSignapkErrorDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
|
||||
public Signapk(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
Exited += Signapk_Exited;
|
||||
OutputDataReceived += Signapk_OutputDataReceived;
|
||||
ErrorDataReceived += Signapk_ErrorDataReceived;
|
||||
}
|
||||
|
||||
private void Signapk_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onSignapkErrorDataRecieved != null && e.Data != null)
|
||||
onSignapkErrorDataRecieved(this, new SignapkDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Signapk_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onSignapkOutputDataRecieved != null && e.Data != null)
|
||||
onSignapkOutputDataRecieved(this, new SignapkDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Signapk_Exited(object sender, EventArgs e)
|
||||
{
|
||||
if (Exited != null)
|
||||
Exited(this, new SignapkExitedEventArgs(base.ExitCode, lastSourceApk, lastOutApk));
|
||||
}
|
||||
|
||||
public int Sign(string input, string output)
|
||||
{
|
||||
lastSourceApk = input;
|
||||
lastOutApk = Settings.Default.Sign_OutputDir;
|
||||
|
||||
//--key : pk file | --cert : pem
|
||||
string key = String.Format("--key \"{0}\" --cert \"{1}\"", Settings.Default.Sign_PrivateKey, Settings.Default.Sign_PublicKey);
|
||||
if (Settings.Default.Sign_UseKeystoreFile)
|
||||
key = String.Format("--ks \"{0}\" --ks-pass pass:{1}", Settings.Default.Sign_KeystoreFilePath, Settings.Default.Sign_KeystorePassword);
|
||||
|
||||
string alias = String.Format("--ks-key-alias CERT");
|
||||
if (Settings.Default.Sign_SetAlias)
|
||||
alias = String.Format("--ks-key-alias {0}", Settings.Default.Sign_Alias);
|
||||
|
||||
string outputDir = null;
|
||||
if (Settings.Default.Sign_UseOutputDir)
|
||||
outputDir = String.Format("--out \"{0}\"", output);
|
||||
|
||||
string v1 = null;
|
||||
if (Settings.Default.Sign_Schemev1 == 1)
|
||||
v1 = "--v1-signing-enabled true";
|
||||
if (Settings.Default.Sign_Schemev1 == 2)
|
||||
v1 = "--v1-signing-enabled false";
|
||||
|
||||
string v2 = null;
|
||||
if (Settings.Default.Sign_Schemev2 == 1)
|
||||
v2 = "--v2-signing-enabled true";
|
||||
if (Settings.Default.Sign_Schemev2 == 2)
|
||||
v2 = "--v2-signing-enabled false";
|
||||
|
||||
string v3 = null;
|
||||
if (Settings.Default.Sign_Schemev3 == 1)
|
||||
v3 = "--v3-signing-enabled true";
|
||||
if (Settings.Default.Sign_Schemev3 == 2)
|
||||
v3 = "--v3-signing-enabled false";
|
||||
|
||||
string v4 = null;
|
||||
if (Settings.Default.Sign_Schemev4 == 1)
|
||||
v4 = "--v4-signing-enabled true";
|
||||
if (Settings.Default.Sign_Schemev4 == 2)
|
||||
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);
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e);
|
||||
|
||||
public class SignapkExitedEventArgs : EventArgs
|
||||
{
|
||||
public SignapkExitedEventArgs(int exitCode, string sourceFilePath, string outFilePath)
|
||||
{
|
||||
ExitCode = exitCode;
|
||||
SourceFilePath = sourceFilePath;
|
||||
OutFilePath = outFilePath;
|
||||
}
|
||||
|
||||
public int ExitCode { get; private set; }
|
||||
|
||||
public string SourceFilePath { get; private set; }
|
||||
|
||||
public string OutFilePath { get; private set; }
|
||||
}
|
||||
|
||||
public delegate void SignapkDataReceivedEventHandler(Object sender, SignapkDataReceivedEventArgs e);
|
||||
|
||||
public class SignapkDataReceivedEventArgs : EventArgs
|
||||
{
|
||||
string message;
|
||||
|
||||
public SignapkDataReceivedEventArgs(string _data)
|
||||
{
|
||||
message = _data;
|
||||
}
|
||||
public String Message
|
||||
{
|
||||
get
|
||||
{
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
using System;
|
||||
using Java;
|
||||
using System.Diagnostics;
|
||||
using APKToolGUI.Properties;
|
||||
using System.IO;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Smali : JarProcess
|
||||
{
|
||||
public new event SmaliExitedEventHandler Exited;
|
||||
|
||||
public Smali(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
base.Exited += Smali_Exited;
|
||||
}
|
||||
|
||||
SmaliDataReceivedEventHandler onSmaliOutputDataRecieved;
|
||||
SmaliDataReceivedEventHandler onSmaliErrorDataRecieved;
|
||||
|
||||
public event SmaliDataReceivedEventHandler SmaliOutputDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onSmaliOutputDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onSmaliOutputDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
public event SmaliDataReceivedEventHandler SmaliErrorDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onSmaliErrorDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onSmaliErrorDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Smali_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onSmaliErrorDataRecieved != null && e.Data != null)
|
||||
onSmaliErrorDataRecieved(this, new SmaliDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Smali_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onSmaliOutputDataRecieved != null && e.Data != null)
|
||||
onSmaliOutputDataRecieved(this, new SmaliDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
void Smali_Exited(object sender, EventArgs e)
|
||||
{
|
||||
if (Exited != null)
|
||||
Exited(this, new SmaliExitedEventArgs(ExitCode));
|
||||
}
|
||||
|
||||
public int Assemble(string output)
|
||||
{
|
||||
string inputFile = String.Format("\"{0}\"", Settings.Default.Smali_InputDir);
|
||||
string keyOutputDir = String.Format("-o \"{0}\"", output);
|
||||
|
||||
string args = String.Format("a {0} {1}", inputFile, keyOutputDir);
|
||||
Start(args);
|
||||
BeginOutputReadLine();
|
||||
BeginErrorReadLine();
|
||||
WaitForExit();
|
||||
CancelOutputRead();
|
||||
CancelErrorRead();
|
||||
return ExitCode;
|
||||
}
|
||||
}
|
||||
|
||||
public class SmaliExitedEventArgs : EventArgs
|
||||
{
|
||||
public SmaliExitedEventArgs(int exitCode)
|
||||
{
|
||||
ExitCode = exitCode;
|
||||
}
|
||||
|
||||
public int ExitCode { get; private set; }
|
||||
}
|
||||
|
||||
public delegate void SmaliExitedEventHandler(object sender, SmaliExitedEventArgs e);
|
||||
|
||||
public delegate void SmaliDataReceivedEventHandler(Object sender, SmaliDataReceivedEventArgs e);
|
||||
|
||||
public class SmaliDataReceivedEventArgs : EventArgs
|
||||
{
|
||||
string message;
|
||||
|
||||
public SmaliDataReceivedEventArgs(string _data)
|
||||
{
|
||||
message = _data;
|
||||
}
|
||||
public String Message
|
||||
{
|
||||
get
|
||||
{
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
using System;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Zipalign
|
||||
{
|
||||
string _zipalignPath;
|
||||
Process processZipalign;
|
||||
static class Keys
|
||||
{
|
||||
@@ -15,7 +17,6 @@ namespace APKToolGUI
|
||||
public const string Recompress = " -z";
|
||||
}
|
||||
|
||||
public ZipalignOptions Options { get; set; }
|
||||
public event DataReceivedEventHandler OutputDataReceived
|
||||
{
|
||||
add { processZipalign.OutputDataReceived += value; }
|
||||
@@ -31,7 +32,6 @@ namespace APKToolGUI
|
||||
|
||||
public Zipalign(string zipalignFileName)
|
||||
{
|
||||
_zipalignPath = zipalignFileName;
|
||||
processZipalign = new Process();
|
||||
processZipalign.EnableRaisingEvents = true;
|
||||
processZipalign.StartInfo.FileName = zipalignFileName;
|
||||
@@ -50,50 +50,47 @@ namespace APKToolGUI
|
||||
Exited(this, new EventArgs());
|
||||
}
|
||||
|
||||
public bool Align(ZipalignOptions options)
|
||||
public int Align(string input, string output)
|
||||
{
|
||||
this.Options = options;
|
||||
string keyCheckOnly = null, keyVerbose = null, keyRecompress = null, keyOverwriteOutputFile = null, keyOutputFile = null;
|
||||
|
||||
if (options.VerboseOut)
|
||||
if (Settings.Default.Zipalign_Verbose)
|
||||
keyVerbose = Keys.VerboseOut;
|
||||
if (options.CheckOnly)
|
||||
if (Settings.Default.Zipalign_CheckOnly)
|
||||
{
|
||||
keyCheckOnly = Keys.CheckOnly;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(options.Recompress)
|
||||
if (Settings.Default.Zipalign_Recompress)
|
||||
keyRecompress = Keys.Recompress;
|
||||
if (options.OverwriteOutputFile)
|
||||
if (Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
{
|
||||
keyOverwriteOutputFile = Keys.OverwriteOutputFile;
|
||||
keyOutputFile = String.Format(" \"{0}\"", options.OutputFile);
|
||||
}
|
||||
//if (Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
keyOutputFile = String.Format(" \"{0}\"", PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk");
|
||||
//else
|
||||
// keyOutputFile = String.Format(" \"{0}\"", output);
|
||||
}
|
||||
|
||||
string args = String.Format("{0}{1}{2}{3} {4} \"{5}\"{6}", keyCheckOnly, keyOverwriteOutputFile, keyVerbose, keyRecompress, options.AlignmentInBytes, options.InputFile, keyOutputFile);
|
||||
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);
|
||||
|
||||
processZipalign.StartInfo.Arguments = args;
|
||||
bool started = processZipalign.Start();
|
||||
processZipalign.Start();
|
||||
processZipalign.BeginOutputReadLine();
|
||||
processZipalign.BeginErrorReadLine();
|
||||
return started;
|
||||
}
|
||||
}
|
||||
processZipalign.WaitForExit();
|
||||
|
||||
public class ZipalignOptions
|
||||
{
|
||||
public ZipalignOptions(string inputFile, int alignmentInBytes)
|
||||
{
|
||||
this.InputFile = inputFile;
|
||||
this.AlignmentInBytes = alignmentInBytes;
|
||||
}
|
||||
//if (!Settings.Default.Zipalign_CheckOnly && Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
//{
|
||||
File.Delete(output);
|
||||
File.Move(PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk", output);
|
||||
//}
|
||||
|
||||
public string InputFile { get; set; }
|
||||
public string OutputFile { get; set; }
|
||||
public int AlignmentInBytes { get; set; }
|
||||
public bool CheckOnly { get; set; }
|
||||
public bool OverwriteOutputFile { get; set; }
|
||||
public bool Recompress { get; set; }
|
||||
public bool VerboseOut { get; set; }
|
||||
return ExitCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,554 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text.RegularExpressions;
|
||||
using Java;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Apktool : JarProcess
|
||||
{
|
||||
enum ApktoolActionType
|
||||
{
|
||||
Decompile,
|
||||
Build,
|
||||
InstallFramework,
|
||||
Null
|
||||
}
|
||||
static class DecompileKeys
|
||||
{
|
||||
public const string NoSource = " -s";
|
||||
public const string NoResource = " -r";
|
||||
public const string Force = " -f";
|
||||
public const string FrameworkPath = " -p";
|
||||
public const string KeepBrokenResource = " -k";
|
||||
public const string MatchOriginal = " -m";
|
||||
public const string OutputDir = " -o";
|
||||
}
|
||||
static class BuildKeys
|
||||
{
|
||||
public const string ForceAll = " -f";
|
||||
public const string CopyOriginal = " -c";
|
||||
public const string Aapt = " -a";
|
||||
public const string FrameworkPath = " -p";
|
||||
public const string OutputAppPath = " -o";
|
||||
}
|
||||
static class InstallFrameworkKeys
|
||||
{
|
||||
public const string FrameDir = " -p";
|
||||
public const string Tag = " -t";
|
||||
}
|
||||
ApktoolActionType lastActionType = ApktoolActionType.Null;
|
||||
string lastFilePath;
|
||||
string lastProjectDir;
|
||||
ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved;
|
||||
ApktoolDataReceivedEventHandler onApktoolErrorDataRecieved;
|
||||
ApktoolEventCompletedEventHandler onBuildCompleted;
|
||||
ApktoolEventCompletedEventHandler onDecompilingCompleted;
|
||||
ApktoolEventCompletedEventHandler onInstallFrameworkCompleted;
|
||||
|
||||
public event ApktoolDataReceivedEventHandler ApktoolOutputDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onApktoolOutputDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onApktoolOutputDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
public event ApktoolDataReceivedEventHandler ApktoolErrorDataRecieved
|
||||
{
|
||||
add
|
||||
{
|
||||
onApktoolErrorDataRecieved += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onApktoolErrorDataRecieved -= value;
|
||||
}
|
||||
}
|
||||
|
||||
public event ApktoolEventCompletedEventHandler BuildCompleted
|
||||
{
|
||||
add
|
||||
{
|
||||
onBuildCompleted += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onBuildCompleted -= value;
|
||||
}
|
||||
}
|
||||
public event ApktoolEventCompletedEventHandler DecompilingCompleted
|
||||
{
|
||||
add
|
||||
{
|
||||
onDecompilingCompleted += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onDecompilingCompleted -= value;
|
||||
}
|
||||
}
|
||||
public event ApktoolEventCompletedEventHandler InstallFrameworkCompleted
|
||||
{
|
||||
add
|
||||
{
|
||||
onInstallFrameworkCompleted += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
onInstallFrameworkCompleted -= value;
|
||||
}
|
||||
}
|
||||
|
||||
public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath)
|
||||
{
|
||||
this.Exited += Apktool_Exited;
|
||||
this.OutputDataReceived += Apktool_OutputDataReceived;
|
||||
this.ErrorDataReceived += Apktool_ErrorDataReceived;
|
||||
}
|
||||
|
||||
private void Apktool_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onApktoolErrorDataRecieved != null && e.Data != null)
|
||||
onApktoolErrorDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Apktool_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (onApktoolOutputDataRecieved != null && e.Data != null)
|
||||
onApktoolOutputDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data));
|
||||
}
|
||||
|
||||
private void Apktool_Exited(object sender, EventArgs e)
|
||||
{
|
||||
this.CancelOutputRead();
|
||||
this.CancelErrorRead();
|
||||
switch (lastActionType)
|
||||
{
|
||||
case ApktoolActionType.Build:
|
||||
if (onBuildCompleted != null)
|
||||
onBuildCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir));
|
||||
lastActionType = ApktoolActionType.Null;
|
||||
break;
|
||||
case ApktoolActionType.Decompile:
|
||||
if (onDecompilingCompleted != null)
|
||||
onDecompilingCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir));
|
||||
lastActionType = ApktoolActionType.Null;
|
||||
break;
|
||||
case ApktoolActionType.InstallFramework:
|
||||
if (onInstallFrameworkCompleted != null)
|
||||
onInstallFrameworkCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir));
|
||||
lastActionType = ApktoolActionType.Null;
|
||||
break;
|
||||
case ApktoolActionType.Null:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Decompile(DecompileOptions options)
|
||||
{
|
||||
lastActionType = ApktoolActionType.Decompile;
|
||||
lastFilePath = options.AppPath;
|
||||
lastProjectDir = options.OutputDirectory;
|
||||
|
||||
string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyKeepBrokenRes = null, keyMatchOriginal = null, keyOutputDir = null;
|
||||
|
||||
if (options.NoSource)
|
||||
keyNoSrc = DecompileKeys.NoSource;
|
||||
if (options.NoResource)
|
||||
keyNoRes = DecompileKeys.NoResource;
|
||||
if (options.Force)
|
||||
keyForce = DecompileKeys.Force;
|
||||
if (options.KeepBrokenResource)
|
||||
keyKeepBrokenRes = DecompileKeys.KeepBrokenResource;
|
||||
if (options.MatchOriginal)
|
||||
keyMatchOriginal = DecompileKeys.MatchOriginal;
|
||||
if (!String.IsNullOrWhiteSpace(options.FrameworkPath))
|
||||
keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, options.FrameworkPath);
|
||||
if (!String.IsNullOrWhiteSpace(options.OutputDirectory))
|
||||
keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, options.OutputDirectory);
|
||||
|
||||
//string args = String.Format("d{0}{1}{2}{3}{4}{5} -o \"{6}\" \"{7}\"", keyNoSrc, keyNoRes, keyForce, keyKeepBrokenRes, keyMatchOriginal, keyFramePath, options.ProjectDirectory, options.AppPath);
|
||||
string args = String.Format("d{0}{1}{2}{3}{4}{5}{6} \"{7}\"", keyNoSrc, keyNoRes, keyForce, keyKeepBrokenRes, keyMatchOriginal, keyFramePath, keyOutputDir, options.AppPath);
|
||||
|
||||
bool started = this.Start(args);
|
||||
this.BeginOutputReadLine();
|
||||
this.BeginErrorReadLine();
|
||||
return started;
|
||||
}
|
||||
|
||||
public bool Build(BuildOptions options)
|
||||
{
|
||||
lastActionType = ApktoolActionType.Build;
|
||||
lastFilePath = options.AppPath;
|
||||
lastProjectDir = options.ProjectDirectory;
|
||||
|
||||
string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, keyFramePath = null, keyOutputAppPath = null;
|
||||
if (options.ForceAll)
|
||||
keyForceAll = BuildKeys.ForceAll;
|
||||
if (options.CopyOriginal)
|
||||
keyCopyOriginal = BuildKeys.CopyOriginal;
|
||||
if (!String.IsNullOrEmpty(options.AaptPath))
|
||||
keyAapt = String.Format("{0} \"{1}\"", BuildKeys.Aapt, options.AaptPath);
|
||||
if (!String.IsNullOrEmpty(options.FrameworkPath))
|
||||
keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, options.FrameworkPath);
|
||||
if (!String.IsNullOrWhiteSpace(options.AppPath))
|
||||
keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, options.AppPath);
|
||||
|
||||
string args = String.Format("b{0}{1}{2}{3}{4} \"{5}\"", keyForceAll, keyAapt, keyCopyOriginal, keyFramePath, keyOutputAppPath, options.ProjectDirectory);
|
||||
|
||||
bool started = this.Start(args);
|
||||
this.BeginOutputReadLine();
|
||||
this.BeginErrorReadLine();
|
||||
return started;
|
||||
}
|
||||
|
||||
public bool InstallFramework(InstallFrameworkOptions options)
|
||||
{
|
||||
lastActionType = ApktoolActionType.InstallFramework;
|
||||
lastFilePath = options.InputFramePath;
|
||||
lastProjectDir = null;
|
||||
|
||||
string keyFrameDir = null, keyTag = null;
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(options.FrameDir))
|
||||
keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, options.FrameDir);
|
||||
if (!String.IsNullOrWhiteSpace(options.Tag))
|
||||
keyTag = String.Format("{0} \"{1}\"", InstallFrameworkKeys.Tag, options.Tag);
|
||||
|
||||
string args = String.Format("if{0}{1} \"{2}\"", keyFrameDir, keyTag, options.InputFramePath);
|
||||
|
||||
bool started = this.Start(args);
|
||||
this.BeginOutputReadLine();
|
||||
this.BeginErrorReadLine();
|
||||
return started;
|
||||
}
|
||||
|
||||
public string GetVersion()
|
||||
{
|
||||
using (JarProcess apktoolJar = new JarProcess(this.JavaPath, this.JarPath))
|
||||
{
|
||||
apktoolJar.EnableRaisingEvents = false;
|
||||
apktoolJar.Start("-version");
|
||||
string version = apktoolJar.StandardOutput.ReadToEnd();
|
||||
apktoolJar.WaitForExit(3000);
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
private static ApktoolEventType GetEventType(string message)
|
||||
{
|
||||
MatchCollection mCol = Regex.Matches(message, @"^(\w+):\s(.+)$");
|
||||
if (mCol.Count > 0)
|
||||
{
|
||||
switch (mCol[0].Groups[1].Value)
|
||||
{
|
||||
case "W":
|
||||
return ApktoolEventType.Warning;
|
||||
case "Warning":
|
||||
return ApktoolEventType.Warning;
|
||||
case "I":
|
||||
return ApktoolEventType.Information;
|
||||
case "Error":
|
||||
return ApktoolEventType.Error;
|
||||
case "E":
|
||||
return ApktoolEventType.Error;
|
||||
default:
|
||||
return ApktoolEventType.Unknown;
|
||||
}
|
||||
}
|
||||
else
|
||||
return ApktoolEventType.Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ApktoolEventCompletedEventHandler(Object sender, ApktoolEventCompletedEventArgs e);
|
||||
|
||||
public class ApktoolEventCompletedEventArgs : EventArgs
|
||||
{
|
||||
private int _exitCode;
|
||||
private string _filePath;
|
||||
private string _projectDir;
|
||||
|
||||
public ApktoolEventCompletedEventArgs(int exitCode, string filePath, string projectDir)
|
||||
{
|
||||
_exitCode = exitCode;
|
||||
_filePath = filePath;
|
||||
_projectDir = projectDir;
|
||||
}
|
||||
|
||||
public int ExitCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return _exitCode;
|
||||
}
|
||||
}
|
||||
public string FilePath
|
||||
{
|
||||
get
|
||||
{
|
||||
return _filePath;
|
||||
}
|
||||
}
|
||||
public string ProjectDir
|
||||
{
|
||||
get
|
||||
{
|
||||
return _projectDir;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ApktoolDataReceivedEventHandler(Object sender, ApktoolDataReceivedEventArgs e);
|
||||
|
||||
public class ApktoolDataReceivedEventArgs : EventArgs
|
||||
{
|
||||
string data;
|
||||
string message;
|
||||
ApktoolEventType eventType;
|
||||
|
||||
public ApktoolDataReceivedEventArgs(string data)
|
||||
{
|
||||
this.data = data;
|
||||
SetData();
|
||||
}
|
||||
public String Message{
|
||||
get{
|
||||
return message;}}
|
||||
public ApktoolEventType EventType{
|
||||
get{
|
||||
return eventType;}}
|
||||
|
||||
private void SetData()
|
||||
{
|
||||
MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$");
|
||||
if (mCol.Count > 0)
|
||||
{
|
||||
switch (mCol[0].Groups[1].Value)
|
||||
{
|
||||
case "W":
|
||||
eventType = ApktoolEventType.Warning;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "Warning":
|
||||
eventType = ApktoolEventType.Warning;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "I":
|
||||
eventType = ApktoolEventType.Information;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "Error":
|
||||
eventType = ApktoolEventType.Error;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
case "E":
|
||||
eventType = ApktoolEventType.Error;
|
||||
message = mCol[0].Groups[2].Value;
|
||||
break;
|
||||
default:
|
||||
eventType = ApktoolEventType.Unknown;
|
||||
message = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = ApktoolEventType.Unknown;
|
||||
message = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum ApktoolEventType
|
||||
{
|
||||
Information,
|
||||
Warning,
|
||||
Error,
|
||||
Unknown
|
||||
}
|
||||
|
||||
public class BuildOptions
|
||||
{
|
||||
public BuildOptions(string projectDir)
|
||||
{
|
||||
this.ProjectDirectory = projectDir;
|
||||
}
|
||||
//public BuildOptions(string projectDir, string apkPath)
|
||||
//{
|
||||
// this.ProjectDirectory = projectDir;
|
||||
// this.AppPath = apkPath;
|
||||
//}
|
||||
public string ProjectDirectory { get; set; }
|
||||
/// <summary>
|
||||
/// The name of apk that gets written.
|
||||
/// </summary>
|
||||
public string AppPath { get; set; }
|
||||
/// <summary>
|
||||
/// Loads aapt from specified location.
|
||||
/// </summary>
|
||||
public string AaptPath { get; set; }
|
||||
/// <summary>
|
||||
/// Skip changes detection and build all files.
|
||||
/// </summary>
|
||||
public bool ForceAll { get; set; }
|
||||
/// <summary>
|
||||
/// Copies original AndroidManifest.xml and META-INF.
|
||||
/// </summary>
|
||||
public bool CopyOriginal { get; set; }
|
||||
/// <summary>
|
||||
/// Uses framework files located in dir.
|
||||
/// </summary>
|
||||
public string FrameworkPath { get; set; }
|
||||
}
|
||||
|
||||
public class DecompileOptions
|
||||
{
|
||||
public DecompileOptions(string apkPath)
|
||||
{
|
||||
this.AppPath = apkPath;
|
||||
this.OutputDirectory = String.Format("{0}\\{1}", System.IO.Path.GetDirectoryName(apkPath), System.IO.Path.GetFileNameWithoutExtension(apkPath));
|
||||
}
|
||||
/// <summary>
|
||||
/// The name of folder that gets written.
|
||||
/// </summary>
|
||||
public string OutputDirectory { get; set; }
|
||||
public string AppPath { get; set; }
|
||||
/// <summary>
|
||||
/// Do not decode sources.
|
||||
/// </summary>
|
||||
public bool NoSource { get; set; }
|
||||
/// <summary>
|
||||
/// Do not decode resources.
|
||||
/// </summary>
|
||||
public bool NoResource { get; set; }
|
||||
/// <summary>
|
||||
/// Force delete destination directory.
|
||||
/// </summary>
|
||||
public bool Force { get; set; }
|
||||
/// <summary>
|
||||
/// Uses framework files located in dir.
|
||||
/// </summary>
|
||||
public string FrameworkPath { get; set; }
|
||||
/// <summary>
|
||||
/// Use if there was an error and some resourceswere dropped, e.g."Invalid config flags detected. Dropping resources",
|
||||
/// but you want to decode them anyway, even with errors. You will have to fix them manually before building.
|
||||
/// </summary>
|
||||
public bool KeepBrokenResource { get; set; }
|
||||
/// <summary>
|
||||
/// Keeps files to closest to original as possible. Prevents rebuild.
|
||||
/// </summary>
|
||||
public bool MatchOriginal { get; set; }
|
||||
}
|
||||
|
||||
public class InstallFrameworkOptions
|
||||
{
|
||||
public InstallFrameworkOptions(string framePath)
|
||||
{
|
||||
this.InputFramePath = framePath;
|
||||
}
|
||||
public string InputFramePath { get; set; }
|
||||
/// <summary>
|
||||
/// Stores framework files into directory
|
||||
/// </summary>
|
||||
public string FrameDir { get; set; }
|
||||
/// <summary>
|
||||
/// Frameworks tag
|
||||
/// </summary>
|
||||
public string Tag { get; set; }
|
||||
}
|
||||
|
||||
//public class ApktoolMessage
|
||||
//{
|
||||
// public ApktoolEventType EventType { get; private set; }
|
||||
// public string Message { get; private set; }
|
||||
// private string data;
|
||||
|
||||
// public ApktoolMessage(string data)
|
||||
// {
|
||||
// this.data = data;
|
||||
// SetData();
|
||||
// }
|
||||
|
||||
// private void SetData()
|
||||
// {
|
||||
// MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$");
|
||||
// if (mCol.Count > 0)
|
||||
// {
|
||||
// switch (mCol[0].Groups[1].Value)
|
||||
// {
|
||||
// case "W":
|
||||
// this.EventType = ApktoolEventType.Warning;
|
||||
// this.Message = mCol[0].Groups[2].Value;
|
||||
// break;
|
||||
// case "Warning":
|
||||
// this.EventType = ApktoolEventType.Warning;
|
||||
// this.Message = mCol[0].Groups[2].Value;
|
||||
// break;
|
||||
// case "I":
|
||||
// this.EventType = ApktoolEventType.Information;
|
||||
// this.Message = mCol[0].Groups[2].Value;
|
||||
// break;
|
||||
// case "Error":
|
||||
// this.EventType = ApktoolEventType.Error;
|
||||
// this.Message = mCol[0].Groups[2].Value;
|
||||
// break;
|
||||
// case "E":
|
||||
// this.EventType = ApktoolEventType.Error;
|
||||
// this.Message = mCol[0].Groups[2].Value;
|
||||
// break;
|
||||
// default:
|
||||
// this.EventType = ApktoolEventType.Unknown;
|
||||
// this.Message = data;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// this.EventType = ApktoolEventType.Unknown;
|
||||
// this.Message = data;
|
||||
// }
|
||||
// }
|
||||
|
||||
// public static ApktoolEventType GetEventType(string data)
|
||||
// {
|
||||
// MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$");
|
||||
// if (mCol.Count > 0)
|
||||
// {
|
||||
// switch (mCol[0].Groups[1].Value)
|
||||
// {
|
||||
// case "W":
|
||||
// return ApktoolEventType.Warning;
|
||||
// case "Warning":
|
||||
// return ApktoolEventType.Warning;
|
||||
// case "I":
|
||||
// return ApktoolEventType.Information;
|
||||
// case "Error":
|
||||
// return ApktoolEventType.Error;
|
||||
// case "E":
|
||||
// return ApktoolEventType.Error;
|
||||
// default:
|
||||
// return ApktoolEventType.Unknown;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// return ApktoolEventType.Unknown;
|
||||
// }
|
||||
|
||||
// public static string GetMessage(string data)
|
||||
// {
|
||||
// MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$");
|
||||
// if (mCol.Count > 0)
|
||||
// return mCol[0].Groups[2].Value;
|
||||
// else
|
||||
// return data;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@@ -1,228 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class ExplorerContextMenu
|
||||
{
|
||||
public static Status Create()
|
||||
{
|
||||
string executablePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
|
||||
if (IsAdmin())
|
||||
{
|
||||
if (Environment.OSVersion.Version >= new Version("6.0.0.0")) // Vista и новее
|
||||
{
|
||||
return CreateVistaAndLater(executablePath);
|
||||
}
|
||||
else if (Environment.OSVersion.Version < new Version("6.0.0.0") && Environment.OSVersion.Version >= new Version("5.1.0.0"))
|
||||
{
|
||||
return CreateXP(executablePath);
|
||||
}
|
||||
else
|
||||
return new Status(false, "Unsupported OS");
|
||||
}
|
||||
else
|
||||
return new Status(false, "Administrator rights are required");
|
||||
}
|
||||
|
||||
public static Status Remove()
|
||||
{
|
||||
if (Environment.OSVersion.Version >= new Version("6.0.0.0")) // Vista и новее
|
||||
{
|
||||
return RemoveVistaAndLater();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Environment.OSVersion.Version < new Version("6.0.0.0") && Environment.OSVersion.Version >= new Version("5.1.0.0"))
|
||||
{
|
||||
return RemoveXP();
|
||||
}
|
||||
else
|
||||
return new Status(false, "Unsupported OS");
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsAdmin()
|
||||
{
|
||||
System.Security.Principal.WindowsIdentity id = System.Security.Principal.WindowsIdentity.GetCurrent();
|
||||
System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(id);
|
||||
|
||||
return p.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
|
||||
}
|
||||
|
||||
private static Status CreateVistaAndLater(string executablePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region Add context menu to registry
|
||||
|
||||
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
apkToolGUIFolderShell.SetValue("Icon", executablePath);
|
||||
apkToolGUIFolderShell.SetValue("MUIVerb", "APKToolGUI");
|
||||
apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build");
|
||||
apkToolGUIFolderShell.Close();
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
|
||||
RegistryKey shellAPK = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
shellAPK.SetValue("Icon", "\"" + executablePath + "\"");
|
||||
shellAPK.SetValue("MUIVerb", "APKToolGUI");
|
||||
shellAPK.SetValue("SubCommands", "APKToolGUI.Decompile;APKToolGUI.InstallFramework;APKToolGUI.Sign");
|
||||
shellAPK.Close();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Add command to registry
|
||||
|
||||
RegistryKey shell;
|
||||
if (Environment.Is64BitOperatingSystem)
|
||||
shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
else
|
||||
shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
|
||||
RegistryKey decompile = shell.CreateSubKey("APKToolGUI.Decompile", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
decompile.SetValue("", Language.Decode, RegistryValueKind.String);
|
||||
decompile.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
decompile.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"d\" \"%1\"");
|
||||
decompile.Close();
|
||||
|
||||
RegistryKey installFramework = shell.CreateSubKey("APKToolGUI.InstallFramework", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
installFramework.SetValue("", Language.InstallFramework, RegistryValueKind.String);
|
||||
installFramework.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
installFramework.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"if\" \"%1\"");
|
||||
installFramework.Close();
|
||||
|
||||
RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
sign.SetValue("", Language.Sign, RegistryValueKind.String);
|
||||
sign.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\"");
|
||||
sign.Close();
|
||||
|
||||
RegistryKey build = shell.CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
build.SetValue("", Language.Build, RegistryValueKind.String);
|
||||
build.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
build.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"b\" \"%1\"", RegistryValueKind.String);
|
||||
build.Close();
|
||||
|
||||
shell.Close();
|
||||
|
||||
#endregion
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
private static Status CreateXP(string executablePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
RegistryKey folderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
folderShell.SetValue("Icon", executablePath);
|
||||
folderShell.SetValue("MUIVerb", Language.Build);
|
||||
folderShell.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"b\" \"%1\"", RegistryValueKind.String);
|
||||
folderShell.Close();
|
||||
|
||||
RegistryKey apk = Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
apk.CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
|
||||
RegistryKey shell = apk.CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
|
||||
RegistryKey decode = shell.CreateSubKey("APKToolGUI.Decode", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
RegistryKey installFramework = shell.CreateSubKey("APKToolGUI.InstallFramework", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
|
||||
decode.SetValue("Icon", executablePath);
|
||||
decode.SetValue("MUIVerb", Language.Decode);
|
||||
decode.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"d\" \"%1\"");
|
||||
decode.Close();
|
||||
|
||||
installFramework.SetValue("Icon", executablePath);
|
||||
installFramework.SetValue("MUIVerb", Language.InstallFramework);
|
||||
installFramework.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"if\" \"%1\"");
|
||||
installFramework.Close();
|
||||
|
||||
sign.SetValue("Icon", executablePath);
|
||||
sign.SetValue("MUIVerb", Language.Sign);
|
||||
sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\"");
|
||||
sign.Close();
|
||||
|
||||
shell.Close();
|
||||
apk.Close();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
private static Status RemoveVistaAndLater()
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKey("APKToolGUI", false);
|
||||
|
||||
RegistryKey shell;
|
||||
if (Environment.Is64BitOperatingSystem)
|
||||
shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
else
|
||||
shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Decompile", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.InstallFramework", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Sign", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Build", false);
|
||||
shell.Close();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
private static Status RemoveXP()
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Build", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Decode", false);
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.InstallFramework", false);
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Sign", false);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
public class Status
|
||||
{
|
||||
public Status(bool result, string message)
|
||||
{
|
||||
Result = result;
|
||||
Message = message;
|
||||
}
|
||||
public bool Result { get; set; }
|
||||
public String Message { get; set; }
|
||||
}
|
||||
|
||||
public enum Action
|
||||
{
|
||||
Create,
|
||||
Remove
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<Costura />
|
||||
</Weavers>
|
||||
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
|
||||
<xs:element name="Weavers">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Costura" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="IncludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
<xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeRuntimeReferences" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls if runtime assemblies are also embedded.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="UseRuntimeReferencePaths" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="DisableCompression" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="DisableCleanup" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="ExcludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="PreloadOrder" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -1,405 +0,0 @@
|
||||
<?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=">>labelCopyright.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="tableLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 265</value>
|
||||
</data>
|
||||
<data name="okButton.Text" xml:space="preserve">
|
||||
<value>&ОК</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="textBoxDescription.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormAboutBox</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.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=">>linkLabel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
|
||||
<value>Center</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelCopyright.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>21</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.Name" xml:space="preserve">
|
||||
<value>labelProductName</value>
|
||||
</data>
|
||||
<data name="labelProductName.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.RowCount" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="labelProductName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterParent</value>
|
||||
</data>
|
||||
<data name="labelVersion.Text" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.Name" xml:space="preserve">
|
||||
<value>textBoxDescription</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelCopyright.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>219, 259</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name="okButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.Name" xml:space="preserve">
|
||||
<value>linkLabel1</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.Name" xml:space="preserve">
|
||||
<value>labelVersion</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.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="labelVersion.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 126</value>
|
||||
</data>
|
||||
<data name="labelProductName.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="linkLabel1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name="okButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>okButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /><Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,46,0039,Percent,53,9961" /><Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.Name" xml:space="preserve">
|
||||
<value>labelCopyright</value>
|
||||
</data>
|
||||
<data name="okButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>412, 239</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>okButton.Name" xml:space="preserve">
|
||||
<value>okButton</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="linkLabel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Text" xml:space="preserve">
|
||||
<value>Description</value>
|
||||
</data>
|
||||
<data name="labelProductName.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 78</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelVersion.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name="labelVersion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="labelProductName.Text" xml:space="preserve">
|
||||
<value>Product Name</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 107</value>
|
||||
</data>
|
||||
<data name="labelProductName.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name=">>okButton.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>okButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="labelProductName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 0</value>
|
||||
</data>
|
||||
<data name="labelVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 26</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Name" xml:space="preserve">
|
||||
<value>logoPictureBox</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 52</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>CenterImage</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 9</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name="labelVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>9, 9, 9, 9</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Text" xml:space="preserve">
|
||||
<value>Copyright</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Text" xml:space="preserve">
|
||||
<value>Page</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="labelVersion.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>508, 283</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.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="okButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -1,381 +0,0 @@
|
||||
namespace APKToolGUI
|
||||
{
|
||||
partial class FormBuild
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
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.groupBoxOptions = new System.Windows.Forms.GroupBox();
|
||||
this.textBoxFrameworkPath = new System.Windows.Forms.TextBox();
|
||||
this.buttonBrowseFrameworkPath = new System.Windows.Forms.Button();
|
||||
this.checkBoxUseFramework = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCopyOriginal = new System.Windows.Forms.CheckBox();
|
||||
this.textBoxAaptPath = new System.Windows.Forms.TextBox();
|
||||
this.buttonBrowseAaptPath = new System.Windows.Forms.Button();
|
||||
this.checkBoxCustomAapt = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxForceAll = new System.Windows.Forms.CheckBox();
|
||||
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||
this.ColumnImage = new System.Windows.Forms.DataGridViewImageColumn();
|
||||
this.ColumnTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnMessage = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.buttonStart = new System.Windows.Forms.Button();
|
||||
this.openFileDialogBrowseAapt = new System.Windows.Forms.OpenFileDialog();
|
||||
this.saveFileDialogApk = new System.Windows.Forms.SaveFileDialog();
|
||||
this.folderBrowserDialogFrameworks = new System.Windows.Forms.FolderBrowserDialog();
|
||||
this.textBoxOutputApkPath = new System.Windows.Forms.TextBox();
|
||||
this.buttonBrowseOutputApk = new System.Windows.Forms.Button();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.groupBoxOptions.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// statusStrip1
|
||||
//
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripStatusLabelStateImage,
|
||||
this.toolStripStatusLabelStateText,
|
||||
this.toolStripProgressBar1});
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 360);
|
||||
this.statusStrip1.Margin = new System.Windows.Forms.Padding(0, 9, 0, 0);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.Size = new System.Drawing.Size(570, 22);
|
||||
this.statusStrip1.TabIndex = 19;
|
||||
this.statusStrip1.Text = "statusStrip1";
|
||||
//
|
||||
// toolStripStatusLabelStateImage
|
||||
//
|
||||
this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage";
|
||||
this.toolStripStatusLabelStateImage.Size = new System.Drawing.Size(0, 17);
|
||||
this.toolStripStatusLabelStateImage.Text = "toolStripStatusLabel1";
|
||||
//
|
||||
// toolStripStatusLabelStateText
|
||||
//
|
||||
this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.toolStripStatusLabelStateText.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.toolStripStatusLabelStateText.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
|
||||
this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText";
|
||||
this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never;
|
||||
this.toolStripStatusLabelStateText.Size = new System.Drawing.Size(453, 17);
|
||||
this.toolStripStatusLabelStateText.Spring = true;
|
||||
this.toolStripStatusLabelStateText.Text = "Done";
|
||||
this.toolStripStatusLabelStateText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// toolStripProgressBar1
|
||||
//
|
||||
this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||
this.toolStripProgressBar1.AutoSize = false;
|
||||
this.toolStripProgressBar1.MarqueeAnimationSpeed = 50;
|
||||
this.toolStripProgressBar1.Name = "toolStripProgressBar1";
|
||||
this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16);
|
||||
this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
|
||||
//
|
||||
// groupBoxOptions
|
||||
//
|
||||
this.groupBoxOptions.Controls.Add(this.textBoxFrameworkPath);
|
||||
this.groupBoxOptions.Controls.Add(this.buttonBrowseFrameworkPath);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxUseFramework);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxCopyOriginal);
|
||||
this.groupBoxOptions.Controls.Add(this.textBoxAaptPath);
|
||||
this.groupBoxOptions.Controls.Add(this.buttonBrowseAaptPath);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxCustomAapt);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxForceAll);
|
||||
this.groupBoxOptions.Location = new System.Drawing.Point(12, 200);
|
||||
this.groupBoxOptions.Name = "groupBoxOptions";
|
||||
this.groupBoxOptions.Size = new System.Drawing.Size(546, 118);
|
||||
this.groupBoxOptions.TabIndex = 28;
|
||||
this.groupBoxOptions.TabStop = false;
|
||||
this.groupBoxOptions.Text = "Options";
|
||||
//
|
||||
// textBoxFrameworkPath
|
||||
//
|
||||
this.textBoxFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "BUILD_FrameworkPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework;
|
||||
this.textBoxFrameworkPath.Location = new System.Drawing.Point(230, 90);
|
||||
this.textBoxFrameworkPath.Name = "textBoxFrameworkPath";
|
||||
this.textBoxFrameworkPath.Size = new System.Drawing.Size(280, 22);
|
||||
this.textBoxFrameworkPath.TabIndex = 17;
|
||||
this.textBoxFrameworkPath.Text = global::APKToolGUI.Properties.Settings.Default.BUILD_FrameworkPath;
|
||||
//
|
||||
// buttonBrowseFrameworkPath
|
||||
//
|
||||
this.buttonBrowseFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonBrowseFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.buttonBrowseFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework;
|
||||
this.buttonBrowseFrameworkPath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonBrowseFrameworkPath.Location = new System.Drawing.Point(512, 89);
|
||||
this.buttonBrowseFrameworkPath.Name = "buttonBrowseFrameworkPath";
|
||||
this.buttonBrowseFrameworkPath.Size = new System.Drawing.Size(28, 24);
|
||||
this.buttonBrowseFrameworkPath.TabIndex = 18;
|
||||
this.buttonBrowseFrameworkPath.Text = "...";
|
||||
this.buttonBrowseFrameworkPath.UseVisualStyleBackColor = true;
|
||||
this.buttonBrowseFrameworkPath.Click += new System.EventHandler(this.buttonBrowseFrameworkPath_Click);
|
||||
//
|
||||
// checkBoxUseFramework
|
||||
//
|
||||
this.checkBoxUseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework;
|
||||
this.checkBoxUseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxUseFramework.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxUseFramework.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxUseFramework.Location = new System.Drawing.Point(6, 91);
|
||||
this.checkBoxUseFramework.Name = "checkBoxUseFramework";
|
||||
this.checkBoxUseFramework.Size = new System.Drawing.Size(218, 18);
|
||||
this.checkBoxUseFramework.TabIndex = 16;
|
||||
this.checkBoxUseFramework.Text = "Uses framework files located in";
|
||||
this.checkBoxUseFramework.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxCopyOriginal
|
||||
//
|
||||
this.checkBoxCopyOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxCopyOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_CopyOriginal;
|
||||
this.checkBoxCopyOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_CopyOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxCopyOriginal.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxCopyOriginal.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxCopyOriginal.Location = new System.Drawing.Point(6, 43);
|
||||
this.checkBoxCopyOriginal.Name = "checkBoxCopyOriginal";
|
||||
this.checkBoxCopyOriginal.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxCopyOriginal.TabIndex = 15;
|
||||
this.checkBoxCopyOriginal.Text = "Copies original AndroidManifest.xml and META-INF folder into built apk.";
|
||||
this.checkBoxCopyOriginal.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// textBoxAaptPath
|
||||
//
|
||||
this.textBoxAaptPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "BUILD_AaptPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt;
|
||||
this.textBoxAaptPath.Location = new System.Drawing.Point(230, 66);
|
||||
this.textBoxAaptPath.Name = "textBoxAaptPath";
|
||||
this.textBoxAaptPath.Size = new System.Drawing.Size(280, 22);
|
||||
this.textBoxAaptPath.TabIndex = 13;
|
||||
this.textBoxAaptPath.Text = global::APKToolGUI.Properties.Settings.Default.BUILD_AaptPath;
|
||||
//
|
||||
// buttonBrowseAaptPath
|
||||
//
|
||||
this.buttonBrowseAaptPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonBrowseAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.buttonBrowseAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt;
|
||||
this.buttonBrowseAaptPath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonBrowseAaptPath.Location = new System.Drawing.Point(512, 65);
|
||||
this.buttonBrowseAaptPath.Name = "buttonBrowseAaptPath";
|
||||
this.buttonBrowseAaptPath.Size = new System.Drawing.Size(28, 24);
|
||||
this.buttonBrowseAaptPath.TabIndex = 14;
|
||||
this.buttonBrowseAaptPath.Text = "...";
|
||||
this.buttonBrowseAaptPath.UseVisualStyleBackColor = true;
|
||||
this.buttonBrowseAaptPath.Click += new System.EventHandler(this.buttonBsowseAaptPath_Click);
|
||||
//
|
||||
// checkBoxCustomAapt
|
||||
//
|
||||
this.checkBoxCustomAapt.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt;
|
||||
this.checkBoxCustomAapt.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxCustomAapt.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxCustomAapt.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxCustomAapt.Location = new System.Drawing.Point(6, 67);
|
||||
this.checkBoxCustomAapt.Name = "checkBoxCustomAapt";
|
||||
this.checkBoxCustomAapt.Size = new System.Drawing.Size(218, 18);
|
||||
this.checkBoxCustomAapt.TabIndex = 12;
|
||||
this.checkBoxCustomAapt.Text = "Uses aapt.exe located in";
|
||||
this.checkBoxCustomAapt.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxForceAll
|
||||
//
|
||||
this.checkBoxForceAll.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxForceAll.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_ForceAll;
|
||||
this.checkBoxForceAll.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_ForceAll", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxForceAll.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxForceAll.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxForceAll.Location = new System.Drawing.Point(6, 19);
|
||||
this.checkBoxForceAll.Name = "checkBoxForceAll";
|
||||
this.checkBoxForceAll.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxForceAll.TabIndex = 0;
|
||||
this.checkBoxForceAll.Text = "Skip changes detection and build all files";
|
||||
this.checkBoxForceAll.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// dataGridView1
|
||||
//
|
||||
this.dataGridView1.AllowUserToAddRows = false;
|
||||
this.dataGridView1.AllowUserToDeleteRows = false;
|
||||
this.dataGridView1.AllowUserToResizeRows = false;
|
||||
this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Window;
|
||||
this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
|
||||
this.dataGridView1.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
|
||||
this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||
this.dataGridView1.ColumnHeadersHeight = 24;
|
||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnImage,
|
||||
this.ColumnTime,
|
||||
this.ColumnMessage});
|
||||
this.dataGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
|
||||
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
||||
this.dataGridView1.Name = "dataGridView1";
|
||||
this.dataGridView1.ReadOnly = true;
|
||||
this.dataGridView1.RowHeadersVisible = false;
|
||||
this.dataGridView1.RowTemplate.Height = 19;
|
||||
this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||
this.dataGridView1.ShowEditingIcon = false;
|
||||
this.dataGridView1.Size = new System.Drawing.Size(546, 182);
|
||||
this.dataGridView1.TabIndex = 26;
|
||||
//
|
||||
// ColumnImage
|
||||
//
|
||||
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||
dataGridViewCellStyle2.NullValue = null;
|
||||
this.ColumnImage.DefaultCellStyle = dataGridViewCellStyle2;
|
||||
this.ColumnImage.Frozen = true;
|
||||
this.ColumnImage.HeaderText = "";
|
||||
this.ColumnImage.Name = "ColumnImage";
|
||||
this.ColumnImage.ReadOnly = true;
|
||||
this.ColumnImage.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.ColumnImage.Width = 20;
|
||||
//
|
||||
// ColumnTime
|
||||
//
|
||||
this.ColumnTime.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
|
||||
this.ColumnTime.Frozen = true;
|
||||
this.ColumnTime.HeaderText = "Time";
|
||||
this.ColumnTime.Name = "ColumnTime";
|
||||
this.ColumnTime.ReadOnly = true;
|
||||
this.ColumnTime.Width = 55;
|
||||
//
|
||||
// ColumnMessage
|
||||
//
|
||||
this.ColumnMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||
this.ColumnMessage.HeaderText = "Message";
|
||||
this.ColumnMessage.Name = "ColumnMessage";
|
||||
this.ColumnMessage.ReadOnly = true;
|
||||
//
|
||||
// buttonStart
|
||||
//
|
||||
this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonStart.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.buttonStart.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonStart.Location = new System.Drawing.Point(438, 325);
|
||||
this.buttonStart.Name = "buttonStart";
|
||||
this.buttonStart.Size = new System.Drawing.Size(120, 24);
|
||||
this.buttonStart.TabIndex = 27;
|
||||
this.buttonStart.Text = "Build";
|
||||
this.buttonStart.UseVisualStyleBackColor = true;
|
||||
this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click);
|
||||
//
|
||||
// openFileDialogBrowseAapt
|
||||
//
|
||||
this.openFileDialogBrowseAapt.Filter = "*.exe|*.exe";
|
||||
//
|
||||
// saveFileDialogApk
|
||||
//
|
||||
this.saveFileDialogApk.DefaultExt = "apk";
|
||||
this.saveFileDialogApk.Filter = "Android App|*.apk";
|
||||
//
|
||||
// folderBrowserDialogFrameworks
|
||||
//
|
||||
this.folderBrowserDialogFrameworks.ShowNewFolderButton = false;
|
||||
//
|
||||
// textBoxOutputApkPath
|
||||
//
|
||||
this.textBoxOutputApkPath.Location = new System.Drawing.Point(12, 326);
|
||||
this.textBoxOutputApkPath.Name = "textBoxOutputApkPath";
|
||||
this.textBoxOutputApkPath.Size = new System.Drawing.Size(390, 22);
|
||||
this.textBoxOutputApkPath.TabIndex = 29;
|
||||
//
|
||||
// buttonBrowseOutputApk
|
||||
//
|
||||
this.buttonBrowseOutputApk.Location = new System.Drawing.Point(404, 325);
|
||||
this.buttonBrowseOutputApk.Name = "buttonBrowseOutputApk";
|
||||
this.buttonBrowseOutputApk.Size = new System.Drawing.Size(28, 24);
|
||||
this.buttonBrowseOutputApk.TabIndex = 30;
|
||||
this.buttonBrowseOutputApk.Text = "...";
|
||||
this.buttonBrowseOutputApk.UseVisualStyleBackColor = true;
|
||||
this.buttonBrowseOutputApk.Click += new System.EventHandler(this.buttonBrowseOutputApk_Click);
|
||||
//
|
||||
// FormBuild
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(570, 382);
|
||||
this.Controls.Add(this.buttonBrowseOutputApk);
|
||||
this.Controls.Add(this.textBoxOutputApkPath);
|
||||
this.Controls.Add(this.groupBoxOptions);
|
||||
this.Controls.Add(this.dataGridView1);
|
||||
this.Controls.Add(this.buttonStart);
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
|
||||
this.Name = "FormBuild";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "FormBuild";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormBuild_FormClosed);
|
||||
this.Load += new System.EventHandler(this.FormBuild_Load);
|
||||
this.Shown += new System.EventHandler(this.FormBuild_Shown);
|
||||
this.statusStrip1.ResumeLayout(false);
|
||||
this.statusStrip1.PerformLayout();
|
||||
this.groupBoxOptions.ResumeLayout(false);
|
||||
this.groupBoxOptions.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText;
|
||||
private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;
|
||||
private System.Windows.Forms.GroupBox groupBoxOptions;
|
||||
private System.Windows.Forms.TextBox textBoxAaptPath;
|
||||
private System.Windows.Forms.Button buttonBrowseAaptPath;
|
||||
private System.Windows.Forms.CheckBox checkBoxCustomAapt;
|
||||
private System.Windows.Forms.CheckBox checkBoxForceAll;
|
||||
private System.Windows.Forms.DataGridView dataGridView1;
|
||||
private System.Windows.Forms.DataGridViewImageColumn ColumnImage;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnTime;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnMessage;
|
||||
private System.Windows.Forms.Button buttonStart;
|
||||
private System.Windows.Forms.OpenFileDialog openFileDialogBrowseAapt;
|
||||
private System.Windows.Forms.SaveFileDialog saveFileDialogApk;
|
||||
private System.Windows.Forms.CheckBox checkBoxCopyOriginal;
|
||||
private System.Windows.Forms.TextBox textBoxFrameworkPath;
|
||||
private System.Windows.Forms.Button buttonBrowseFrameworkPath;
|
||||
private System.Windows.Forms.CheckBox checkBoxUseFramework;
|
||||
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogFrameworks;
|
||||
private System.Windows.Forms.TextBox textBoxOutputApkPath;
|
||||
private System.Windows.Forms.Button buttonBrowseOutputApk;
|
||||
}
|
||||
}
|
||||
@@ -1,226 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public partial class FormBuild : Form
|
||||
{
|
||||
public FormBuild(string[] args)
|
||||
{
|
||||
Program.SetLanguage();
|
||||
InitializeComponent();
|
||||
this.Icon = Properties.Resources.android_thin;
|
||||
this.Text = Application.ProductName;
|
||||
projectDir = args[1];
|
||||
}
|
||||
|
||||
private string projectDir;
|
||||
private Apktool apktool;
|
||||
private Apktool apktoolSync;
|
||||
|
||||
bool StartButtonEnabled
|
||||
{
|
||||
set
|
||||
{
|
||||
if (buttonStart.InvokeRequired)
|
||||
buttonStart.BeginInvoke(new Action(() =>
|
||||
{
|
||||
buttonStart.Enabled = value;
|
||||
}));
|
||||
else
|
||||
buttonStart.Enabled = value;
|
||||
}
|
||||
}
|
||||
ProgressBarStyle progressBarStyle
|
||||
{
|
||||
set
|
||||
{
|
||||
if (toolStripProgressBar1.GetCurrentParent().InvokeRequired)
|
||||
{
|
||||
toolStripProgressBar1.GetCurrentParent().BeginInvoke(new Action(() =>
|
||||
{
|
||||
toolStripProgressBar1.Style = value;
|
||||
}));
|
||||
}
|
||||
else
|
||||
toolStripProgressBar1.Style = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToLog(string time, string message, Image statusImage, Color backColor)
|
||||
{
|
||||
if (dataGridView1.InvokeRequired)
|
||||
dataGridView1.BeginInvoke(new Action(() =>
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}));
|
||||
else
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToLog(ApktoolEventType eventType, String message)
|
||||
{
|
||||
switch (eventType)
|
||||
{
|
||||
case ApktoolEventType.Information:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window));
|
||||
//ToStatus(result.Message, Properties.Resources.info);
|
||||
break;
|
||||
case ApktoolEventType.Error:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink));
|
||||
//ToStatus(result.Message, Properties.Resources.error);
|
||||
break;
|
||||
case ApktoolEventType.Warning:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow));
|
||||
//ToStatus(result.Message, Properties.Resources.warning);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#region Form event handlers
|
||||
|
||||
private void FormBuild_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (String.IsNullOrEmpty(Properties.Settings.Default.JavaExe))
|
||||
{
|
||||
MessageBox.Show("Java location is not specified in the settings. Please, configure program first.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
this.Close();
|
||||
}
|
||||
if (!System.IO.File.Exists(Program.APKTOOL_PATH))
|
||||
{
|
||||
MessageBox.Show(String.Format("apktool не найден в каталоге назначения '{0}'.", Program.APKTOOL_PATH), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
this.Close();
|
||||
}
|
||||
|
||||
apktoolSync = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH);
|
||||
apktool = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH);
|
||||
apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved;
|
||||
apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved;
|
||||
apktool.BuildCompleted += apktool_BuildCompleted;
|
||||
}
|
||||
|
||||
private void FormBuild_Shown(object sender, EventArgs e)
|
||||
{
|
||||
this.Update();
|
||||
|
||||
textBoxOutputApkPath.Text = String.Format("{0}\\{1}_{2}.apk", System.IO.Path.GetDirectoryName(projectDir), projectDir.Replace(System.IO.Path.GetDirectoryName(projectDir) + "\\", String.Empty), DateTime.Now.ToString("yyyyMMdd_HH-mm-ss"), System.IO.Path.GetExtension(projectDir));
|
||||
|
||||
Version javaVersion = apktool.GetJavaVersion();
|
||||
if (javaVersion != null)
|
||||
{
|
||||
ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVersion.Minor, javaVersion.Revision));
|
||||
string apktoolVersion = apktool.GetVersion();
|
||||
if (!String.IsNullOrWhiteSpace(apktoolVersion))
|
||||
ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion));
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Can't detect apktool version.");
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
private void FormBuild_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region apktool event handlers
|
||||
void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
void apktool_BuildCompleted(object sender, ApktoolEventCompletedEventArgs e)
|
||||
{
|
||||
if (e.ExitCode == 0)
|
||||
ToLog(ApktoolEventType.Information, "Сборка успешно завршена.");
|
||||
else
|
||||
ToLog(ApktoolEventType.Warning, String.Format("Внимание! При сборке приложения произошла ошибка. Код выхода: '{0}'.", e.ExitCode));
|
||||
StartButtonEnabled = true;
|
||||
progressBarStyle = ProgressBarStyle.Continuous;
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void buttonBsowseAaptPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (openFileDialogBrowseAapt.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBoxAaptPath.Text = openFileDialogBrowseAapt.FileName;
|
||||
}
|
||||
|
||||
private void buttonBrowseFrameworkPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (folderBrowserDialogFrameworks.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBoxFrameworkPath.Text = folderBrowserDialogFrameworks.SelectedPath;
|
||||
}
|
||||
|
||||
private void buttonStart_Click(object sender, EventArgs e)
|
||||
{
|
||||
BuildOptions options = new BuildOptions(projectDir);
|
||||
options.ForceAll = checkBoxForceAll.Checked;
|
||||
options.CopyOriginal = checkBoxCopyOriginal.Checked;
|
||||
if (checkBoxCustomAapt.Checked)
|
||||
{
|
||||
if (System.IO.File.Exists(textBoxAaptPath.Text))
|
||||
options.AaptPath = textBoxAaptPath.Text;
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Указанного файла aapt не существует.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (checkBoxUseFramework.Checked)
|
||||
options.FrameworkPath = textBoxFrameworkPath.Text;
|
||||
options.AppPath = textBoxOutputApkPath.Text;
|
||||
|
||||
bool started = false;
|
||||
#if !DEBUG
|
||||
try
|
||||
{
|
||||
#endif
|
||||
started = apktool.Build(options);
|
||||
#if !DEBUG
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
#endif
|
||||
if (started)
|
||||
{
|
||||
progressBarStyle = ProgressBarStyle.Marquee;
|
||||
StartButtonEnabled = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void buttonBrowseOutputApk_Click(object sender, EventArgs e)
|
||||
{
|
||||
saveFileDialogApk.InitialDirectory = System.IO.Path.GetDirectoryName(projectDir);
|
||||
string foldername = projectDir.Replace(System.IO.Path.GetDirectoryName(projectDir) + "\\", String.Empty);
|
||||
saveFileDialogApk.FileName = String.Format("{0}_{1}", foldername, DateTime.Now.ToString("yyyyMMdd_HH-mm-ss"));
|
||||
if (saveFileDialogApk.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBoxOutputApkPath.Text = saveFileDialogApk.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
<?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>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>3, 3</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnImage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnImage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="openFileDialogBrowseAapt.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>119, 3</value>
|
||||
</metadata>
|
||||
<metadata name="saveFileDialogApk.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>317, 3</value>
|
||||
</metadata>
|
||||
<metadata name="folderBrowserDialogFrameworks.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>468, 3</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>29</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -1,383 +0,0 @@
|
||||
namespace APKToolGUI
|
||||
{
|
||||
partial class FormDecode
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormDecode));
|
||||
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.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||
this.ColumnImage = new System.Windows.Forms.DataGridViewImageColumn();
|
||||
this.ColumnTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnMessage = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.buttonStart = new System.Windows.Forms.Button();
|
||||
this.groupBoxOptions = new System.Windows.Forms.GroupBox();
|
||||
this.checkBoxMatchOriginal = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxKeepBrokenResource = new System.Windows.Forms.CheckBox();
|
||||
this.textBoxFrameworkPath = new System.Windows.Forms.TextBox();
|
||||
this.buttonFramePath = new System.Windows.Forms.Button();
|
||||
this.checkBoxFrameworkPath = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxForce = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxNoRes = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxNoSrc = new System.Windows.Forms.CheckBox();
|
||||
this.folderBrowserDialogFrameworks = new System.Windows.Forms.FolderBrowserDialog();
|
||||
this.folderBrowserDialogProjectDir = new System.Windows.Forms.FolderBrowserDialog();
|
||||
this.textBoxOutputProjectDir = new System.Windows.Forms.TextBox();
|
||||
this.buttonBrowseOutputProjectDir = new System.Windows.Forms.Button();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||
this.groupBoxOptions.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// statusStrip1
|
||||
//
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripStatusLabelStateImage,
|
||||
this.toolStripStatusLabelStateText,
|
||||
this.toolStripProgressBar1});
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 408);
|
||||
this.statusStrip1.Margin = new System.Windows.Forms.Padding(0, 9, 0, 0);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.Size = new System.Drawing.Size(570, 22);
|
||||
this.statusStrip1.TabIndex = 22;
|
||||
this.statusStrip1.Text = "statusStrip1";
|
||||
//
|
||||
// toolStripStatusLabelStateImage
|
||||
//
|
||||
this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage";
|
||||
this.toolStripStatusLabelStateImage.Size = new System.Drawing.Size(0, 17);
|
||||
this.toolStripStatusLabelStateImage.Text = "toolStripStatusLabel1";
|
||||
//
|
||||
// toolStripStatusLabelStateText
|
||||
//
|
||||
this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.toolStripStatusLabelStateText.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.toolStripStatusLabelStateText.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
|
||||
this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText";
|
||||
this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never;
|
||||
this.toolStripStatusLabelStateText.Size = new System.Drawing.Size(453, 17);
|
||||
this.toolStripStatusLabelStateText.Spring = true;
|
||||
this.toolStripStatusLabelStateText.Text = "Done";
|
||||
this.toolStripStatusLabelStateText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// toolStripProgressBar1
|
||||
//
|
||||
this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||
this.toolStripProgressBar1.AutoSize = false;
|
||||
this.toolStripProgressBar1.MarqueeAnimationSpeed = 50;
|
||||
this.toolStripProgressBar1.Name = "toolStripProgressBar1";
|
||||
this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16);
|
||||
this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
|
||||
//
|
||||
// dataGridView1
|
||||
//
|
||||
this.dataGridView1.AllowUserToAddRows = false;
|
||||
this.dataGridView1.AllowUserToDeleteRows = false;
|
||||
this.dataGridView1.AllowUserToResizeRows = false;
|
||||
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Window;
|
||||
this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
|
||||
this.dataGridView1.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
|
||||
this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||
this.dataGridView1.ColumnHeadersHeight = 24;
|
||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnImage,
|
||||
this.ColumnTime,
|
||||
this.ColumnMessage});
|
||||
this.dataGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
|
||||
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
||||
this.dataGridView1.Name = "dataGridView1";
|
||||
this.dataGridView1.ReadOnly = true;
|
||||
this.dataGridView1.RowHeadersVisible = false;
|
||||
this.dataGridView1.RowTemplate.Height = 19;
|
||||
this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||
this.dataGridView1.ShowEditingIcon = false;
|
||||
this.dataGridView1.Size = new System.Drawing.Size(546, 182);
|
||||
this.dataGridView1.TabIndex = 25;
|
||||
//
|
||||
// ColumnImage
|
||||
//
|
||||
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||
dataGridViewCellStyle1.NullValue = ((object)(resources.GetObject("dataGridViewCellStyle1.NullValue")));
|
||||
this.ColumnImage.DefaultCellStyle = dataGridViewCellStyle1;
|
||||
this.ColumnImage.Frozen = true;
|
||||
this.ColumnImage.HeaderText = "";
|
||||
this.ColumnImage.Name = "ColumnImage";
|
||||
this.ColumnImage.ReadOnly = true;
|
||||
this.ColumnImage.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.ColumnImage.Width = 20;
|
||||
//
|
||||
// ColumnTime
|
||||
//
|
||||
this.ColumnTime.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
|
||||
this.ColumnTime.Frozen = true;
|
||||
this.ColumnTime.HeaderText = "Time";
|
||||
this.ColumnTime.Name = "ColumnTime";
|
||||
this.ColumnTime.ReadOnly = true;
|
||||
this.ColumnTime.Width = 55;
|
||||
//
|
||||
// ColumnMessage
|
||||
//
|
||||
this.ColumnMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||
this.ColumnMessage.HeaderText = "Message";
|
||||
this.ColumnMessage.Name = "ColumnMessage";
|
||||
this.ColumnMessage.ReadOnly = true;
|
||||
//
|
||||
// buttonStart
|
||||
//
|
||||
this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonStart.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.buttonStart.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonStart.Location = new System.Drawing.Point(438, 371);
|
||||
this.buttonStart.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12);
|
||||
this.buttonStart.Name = "buttonStart";
|
||||
this.buttonStart.Size = new System.Drawing.Size(120, 24);
|
||||
this.buttonStart.TabIndex = 27;
|
||||
this.buttonStart.Text = "Decompile";
|
||||
this.buttonStart.UseVisualStyleBackColor = true;
|
||||
this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click);
|
||||
//
|
||||
// groupBoxOptions
|
||||
//
|
||||
this.groupBoxOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxMatchOriginal);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxKeepBrokenResource);
|
||||
this.groupBoxOptions.Controls.Add(this.textBoxFrameworkPath);
|
||||
this.groupBoxOptions.Controls.Add(this.buttonFramePath);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxFrameworkPath);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxForce);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxNoRes);
|
||||
this.groupBoxOptions.Controls.Add(this.checkBoxNoSrc);
|
||||
this.groupBoxOptions.Location = new System.Drawing.Point(12, 200);
|
||||
this.groupBoxOptions.Name = "groupBoxOptions";
|
||||
this.groupBoxOptions.Size = new System.Drawing.Size(546, 166);
|
||||
this.groupBoxOptions.TabIndex = 26;
|
||||
this.groupBoxOptions.TabStop = false;
|
||||
this.groupBoxOptions.Text = "Options";
|
||||
//
|
||||
// checkBoxMatchOriginal
|
||||
//
|
||||
this.checkBoxMatchOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxMatchOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_MatchOriginal;
|
||||
this.checkBoxMatchOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_MatchOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxMatchOriginal.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxMatchOriginal.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxMatchOriginal.Location = new System.Drawing.Point(6, 115);
|
||||
this.checkBoxMatchOriginal.Name = "checkBoxMatchOriginal";
|
||||
this.checkBoxMatchOriginal.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxMatchOriginal.TabIndex = 13;
|
||||
this.checkBoxMatchOriginal.Text = "Keeps files to closest to original as possible. Prevents rebuild.";
|
||||
this.checkBoxMatchOriginal.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxKeepBrokenResource
|
||||
//
|
||||
this.checkBoxKeepBrokenResource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxKeepBrokenResource.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_KeepBrokenResource;
|
||||
this.checkBoxKeepBrokenResource.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_KeepBrokenResource", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxKeepBrokenResource.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxKeepBrokenResource.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxKeepBrokenResource.Location = new System.Drawing.Point(6, 91);
|
||||
this.checkBoxKeepBrokenResource.Name = "checkBoxKeepBrokenResource";
|
||||
this.checkBoxKeepBrokenResource.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxKeepBrokenResource.TabIndex = 12;
|
||||
this.checkBoxKeepBrokenResource.Text = "Keep broken resource";
|
||||
this.checkBoxKeepBrokenResource.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// textBoxFrameworkPath
|
||||
//
|
||||
this.textBoxFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework;
|
||||
this.textBoxFrameworkPath.Location = new System.Drawing.Point(230, 138);
|
||||
this.textBoxFrameworkPath.Name = "textBoxFrameworkPath";
|
||||
this.textBoxFrameworkPath.Size = new System.Drawing.Size(280, 22);
|
||||
this.textBoxFrameworkPath.TabIndex = 10;
|
||||
//
|
||||
// buttonFramePath
|
||||
//
|
||||
this.buttonFramePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonFramePath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.buttonFramePath.Enabled = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework;
|
||||
this.buttonFramePath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonFramePath.Location = new System.Drawing.Point(512, 137);
|
||||
this.buttonFramePath.Name = "buttonFramePath";
|
||||
this.buttonFramePath.Size = new System.Drawing.Size(28, 24);
|
||||
this.buttonFramePath.TabIndex = 11;
|
||||
this.buttonFramePath.Text = "...";
|
||||
this.buttonFramePath.UseVisualStyleBackColor = true;
|
||||
this.buttonFramePath.Click += new System.EventHandler(this.buttonFramePath_Click);
|
||||
//
|
||||
// checkBoxFrameworkPath
|
||||
//
|
||||
this.checkBoxFrameworkPath.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework;
|
||||
this.checkBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxFrameworkPath.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxFrameworkPath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxFrameworkPath.Location = new System.Drawing.Point(6, 139);
|
||||
this.checkBoxFrameworkPath.Name = "checkBoxFrameworkPath";
|
||||
this.checkBoxFrameworkPath.Size = new System.Drawing.Size(218, 18);
|
||||
this.checkBoxFrameworkPath.TabIndex = 9;
|
||||
this.checkBoxFrameworkPath.Text = "Uses framework files located in";
|
||||
this.checkBoxFrameworkPath.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxForce
|
||||
//
|
||||
this.checkBoxForce.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxForce.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_Force;
|
||||
this.checkBoxForce.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_Force", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxForce.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxForce.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxForce.Location = new System.Drawing.Point(6, 67);
|
||||
this.checkBoxForce.Name = "checkBoxForce";
|
||||
this.checkBoxForce.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxForce.TabIndex = 8;
|
||||
this.checkBoxForce.Text = "Force delete destination directory";
|
||||
this.checkBoxForce.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxNoRes
|
||||
//
|
||||
this.checkBoxNoRes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxNoRes.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_NoRes;
|
||||
this.checkBoxNoRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_NoRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxNoRes.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxNoRes.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxNoRes.Location = new System.Drawing.Point(6, 43);
|
||||
this.checkBoxNoRes.Name = "checkBoxNoRes";
|
||||
this.checkBoxNoRes.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxNoRes.TabIndex = 7;
|
||||
this.checkBoxNoRes.Text = "Do not decode resources";
|
||||
this.checkBoxNoRes.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxNoSrc
|
||||
//
|
||||
this.checkBoxNoSrc.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.checkBoxNoSrc.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_NoSrc;
|
||||
this.checkBoxNoSrc.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_NoSrc", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBoxNoSrc.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.checkBoxNoSrc.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.checkBoxNoSrc.Location = new System.Drawing.Point(6, 19);
|
||||
this.checkBoxNoSrc.Name = "checkBoxNoSrc";
|
||||
this.checkBoxNoSrc.Size = new System.Drawing.Size(534, 18);
|
||||
this.checkBoxNoSrc.TabIndex = 6;
|
||||
this.checkBoxNoSrc.Text = "Do not decode sources";
|
||||
this.checkBoxNoSrc.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// folderBrowserDialogFrameworks
|
||||
//
|
||||
this.folderBrowserDialogFrameworks.ShowNewFolderButton = false;
|
||||
//
|
||||
// textBoxOutputProjectDir
|
||||
//
|
||||
this.textBoxOutputProjectDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxOutputProjectDir.Location = new System.Drawing.Point(12, 372);
|
||||
this.textBoxOutputProjectDir.Name = "textBoxOutputProjectDir";
|
||||
this.textBoxOutputProjectDir.Size = new System.Drawing.Size(390, 22);
|
||||
this.textBoxOutputProjectDir.TabIndex = 28;
|
||||
//
|
||||
// buttonBrowseOutputProjectDir
|
||||
//
|
||||
this.buttonBrowseOutputProjectDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonBrowseOutputProjectDir.Location = new System.Drawing.Point(404, 371);
|
||||
this.buttonBrowseOutputProjectDir.Name = "buttonBrowseOutputProjectDir";
|
||||
this.buttonBrowseOutputProjectDir.Size = new System.Drawing.Size(28, 24);
|
||||
this.buttonBrowseOutputProjectDir.TabIndex = 29;
|
||||
this.buttonBrowseOutputProjectDir.Text = "...";
|
||||
this.buttonBrowseOutputProjectDir.UseVisualStyleBackColor = true;
|
||||
this.buttonBrowseOutputProjectDir.Click += new System.EventHandler(this.buttonBrowseOutputProjectDir_Click);
|
||||
//
|
||||
// FormDecode
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(570, 430);
|
||||
this.Controls.Add(this.buttonBrowseOutputProjectDir);
|
||||
this.Controls.Add(this.textBoxOutputProjectDir);
|
||||
this.Controls.Add(this.dataGridView1);
|
||||
this.Controls.Add(this.buttonStart);
|
||||
this.Controls.Add(this.groupBoxOptions);
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
|
||||
this.Name = "FormDecode";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "FormDecode";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormDecompile_FormClosed);
|
||||
this.Load += new System.EventHandler(this.FormDecompile_Load);
|
||||
this.Shown += new System.EventHandler(this.FormDecompile_Shown);
|
||||
this.statusStrip1.ResumeLayout(false);
|
||||
this.statusStrip1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||
this.groupBoxOptions.ResumeLayout(false);
|
||||
this.groupBoxOptions.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText;
|
||||
private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;
|
||||
private System.Windows.Forms.DataGridView dataGridView1;
|
||||
private System.Windows.Forms.DataGridViewImageColumn ColumnImage;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnTime;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnMessage;
|
||||
private System.Windows.Forms.Button buttonStart;
|
||||
private System.Windows.Forms.GroupBox groupBoxOptions;
|
||||
private System.Windows.Forms.TextBox textBoxFrameworkPath;
|
||||
private System.Windows.Forms.Button buttonFramePath;
|
||||
private System.Windows.Forms.CheckBox checkBoxFrameworkPath;
|
||||
private System.Windows.Forms.CheckBox checkBoxForce;
|
||||
private System.Windows.Forms.CheckBox checkBoxNoRes;
|
||||
private System.Windows.Forms.CheckBox checkBoxNoSrc;
|
||||
private System.Windows.Forms.CheckBox checkBoxMatchOriginal;
|
||||
private System.Windows.Forms.CheckBox checkBoxKeepBrokenResource;
|
||||
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogFrameworks;
|
||||
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogProjectDir;
|
||||
private System.Windows.Forms.TextBox textBoxOutputProjectDir;
|
||||
private System.Windows.Forms.Button buttonBrowseOutputProjectDir;
|
||||
}
|
||||
}
|
||||
@@ -1,226 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public partial class FormDecode : Form
|
||||
{
|
||||
public FormDecode(string[] args)
|
||||
{
|
||||
Program.SetLanguage();
|
||||
InitializeComponent();
|
||||
this.Icon = Properties.Resources.android_thin;
|
||||
this.Text = Application.ProductName;
|
||||
|
||||
textBoxOutputProjectDir.Multiline = true;
|
||||
textBoxOutputProjectDir.MinimumSize = new Size(textBoxOutputProjectDir.Size.Width, textBoxOutputProjectDir.Size.Height);
|
||||
textBoxOutputProjectDir.Size = new Size(textBoxOutputProjectDir.Size.Width, textBoxOutputProjectDir.Size.Height);
|
||||
textBoxOutputProjectDir.Multiline = false;
|
||||
|
||||
this.apkPath = args[1];
|
||||
}
|
||||
|
||||
private string apkPath;
|
||||
private Apktool apktool;
|
||||
private Apktool apktoolSync;
|
||||
bool StartButtonEnabled
|
||||
{
|
||||
set
|
||||
{
|
||||
if (buttonStart.InvokeRequired)
|
||||
buttonStart.BeginInvoke(new Action(() =>
|
||||
{
|
||||
buttonStart.Enabled = value;
|
||||
}));
|
||||
else
|
||||
buttonStart.Enabled = value;
|
||||
}
|
||||
}
|
||||
ProgressBarStyle progressBarStyle
|
||||
{
|
||||
set
|
||||
{
|
||||
if (toolStripProgressBar1.GetCurrentParent().InvokeRequired)
|
||||
{
|
||||
toolStripProgressBar1.GetCurrentParent().BeginInvoke(new Action(() =>
|
||||
{
|
||||
toolStripProgressBar1.Style = value;
|
||||
}));
|
||||
}
|
||||
else
|
||||
toolStripProgressBar1.Style = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToLog(string time, string message, Image statusImage, Color backColor)
|
||||
{
|
||||
if (dataGridView1.InvokeRequired)
|
||||
dataGridView1.BeginInvoke(new Action(() =>
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}));
|
||||
else
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToLog(ApktoolEventType eventType, String message)
|
||||
{
|
||||
switch (eventType)
|
||||
{
|
||||
case ApktoolEventType.Information:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window));
|
||||
//ToStatus(result.Message, Properties.Resources.info);
|
||||
break;
|
||||
case ApktoolEventType.Error:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink));
|
||||
//ToStatus(result.Message, Properties.Resources.error);
|
||||
break;
|
||||
case ApktoolEventType.Warning:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow));
|
||||
//ToStatus(result.Message, Properties.Resources.warning);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#region Form event handlers
|
||||
|
||||
private void FormDecompile_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (String.IsNullOrEmpty(Properties.Settings.Default.JavaExe))
|
||||
{
|
||||
MessageBox.Show("Java location is not specified in the settings. Please, configure program first.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
this.Close();
|
||||
}
|
||||
if (!System.IO.File.Exists(Program.APKTOOL_PATH))
|
||||
{
|
||||
MessageBox.Show(String.Format("Apktool not fount in '{0}'.", Program.APKTOOL_PATH), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
this.Close();
|
||||
}
|
||||
|
||||
//apktoolSync = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH);
|
||||
apktool = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH);
|
||||
apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved;
|
||||
apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved;
|
||||
apktool.DecompilingCompleted += apktool_DecompilingCompleted;
|
||||
}
|
||||
|
||||
private void FormDecompile_Shown(object sender, EventArgs e)
|
||||
{
|
||||
this.Update();
|
||||
|
||||
textBoxOutputProjectDir.Text = System.IO.Path.GetDirectoryName(apkPath) + "\\" + System.IO.Path.GetFileNameWithoutExtension(apkPath);
|
||||
|
||||
Version javaVersion = apktool.GetJavaVersion();
|
||||
if (javaVersion != null)
|
||||
{
|
||||
ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVersion.Minor, javaVersion.Revision));
|
||||
string apktoolVersion = apktool.GetVersion();
|
||||
if (!String.IsNullOrWhiteSpace(apktoolVersion))
|
||||
ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion));
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Can't detect apktool version.");
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
private void FormDecompile_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region apktool event handlers
|
||||
|
||||
void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
void apktool_DecompilingCompleted(object sender, ApktoolEventCompletedEventArgs e)
|
||||
{
|
||||
if (e.ExitCode == 0)
|
||||
ToLog(ApktoolEventType.Information, "Декомпиляция успешно завршена.");
|
||||
else
|
||||
ToLog(ApktoolEventType.Warning, String.Format("Внимание! При декомпиляции приложения произошла ошибка. Код выхода: '{0}'.", e.ExitCode));
|
||||
StartButtonEnabled = true;
|
||||
progressBarStyle = ProgressBarStyle.Continuous;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void buttonFramePath_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (folderBrowserDialogFrameworks.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBoxFrameworkPath.Text = folderBrowserDialogFrameworks.SelectedPath;
|
||||
}
|
||||
|
||||
private void buttonStart_Click(object sender, EventArgs e)
|
||||
{
|
||||
DecompileOptions options = new DecompileOptions(apkPath);
|
||||
options.NoResource = checkBoxNoRes.Checked;
|
||||
options.NoSource = checkBoxNoSrc.Checked;
|
||||
options.Force = checkBoxForce.Checked;
|
||||
options.KeepBrokenResource = checkBoxKeepBrokenResource.Checked;
|
||||
options.MatchOriginal = checkBoxMatchOriginal.Checked;
|
||||
if (checkBoxFrameworkPath.Checked)
|
||||
{
|
||||
if (System.IO.Directory.Exists(textBoxFrameworkPath.Text))
|
||||
options.FrameworkPath = textBoxFrameworkPath.Text;
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Указанной директорию расположения фреймворков не существует.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
options.OutputDirectory = textBoxOutputProjectDir.Text;
|
||||
|
||||
bool started = false;
|
||||
#if !DEBUG
|
||||
try
|
||||
{
|
||||
#endif
|
||||
started = apktool.Decompile(options);
|
||||
#if !DEBUG
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
#endif
|
||||
if (started)
|
||||
{
|
||||
progressBarStyle = ProgressBarStyle.Marquee;
|
||||
StartButtonEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonBrowseOutputProjectDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
folderBrowserDialogProjectDir.SelectedPath = System.IO.Path.GetDirectoryName(apkPath);
|
||||
if (folderBrowserDialogProjectDir.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBoxOutputProjectDir.Text = folderBrowserDialogProjectDir.SelectedPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
<?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>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>5, 7</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnImage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="dataGridViewCellStyle1.NullValue" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
Qk32AgAAAAAAADYAAAAoAAAADgAAABAAAAABABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgoTGw8bGw8bGw8bGw8bGw8bGw8bG
|
||||
w8bGw8bGw8bGw8bGw8bGw8YAAAAAAISChP///////////////////////////////////////////8bD
|
||||
xgAAAAAAhIKE////////////////////////////////////////////xsPGAAAAAACEgoT/////////
|
||||
///////////////////////////////////Gw8YAAAAAAISChP//////////////////////////////
|
||||
/////////////8bDxgAAAAAAhIKE////////////AAD/AAD/////////AAD/AAD/////////xsPGAAAA
|
||||
AACEgoT///////////////8AAP8AAP8AAP8AAP/////////////Gw8YAAAAAAISChP//////////////
|
||||
/////wAA/wAA/////////////////8bDxgAAAAAAhIKE////////////////AAD/AAD/AAD/AAD/////
|
||||
////////xsPGAAAAAACEgoT///////////8AAP8AAP////////8AAP8AAP/////////Gw8YAAAAAAISC
|
||||
hP///////////////////////////////////////////8bDxgAAAAAAhIKE////////////////////
|
||||
////////////////////////xsPGAAAAAACEgoT/////////////////////////////////////////
|
||||
///Gw8YAAAAAAISChP///////////////////////////////////////////8bDxgAAAAAAhIKEhIKE
|
||||
hIKEhIKEhIKEhIKEhIKEhIKEhIKEhIKEhIKEhIKEhIKEhIKEAAA=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="ColumnTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="folderBrowserDialogFrameworks.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>108, 11</value>
|
||||
</metadata>
|
||||
<metadata name="folderBrowserDialogProjectDir.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>336, 11</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>29</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -1,936 +0,0 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using Java;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public partial class FormMain : Form
|
||||
{
|
||||
public FormMain()
|
||||
{
|
||||
Program.SetLanguage();
|
||||
InitializeComponent();
|
||||
this.Icon = Properties.Resources.android_thin;
|
||||
this.Text += " - v" + ProductVersion;
|
||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
||||
|
||||
CheckAlignSwitch = !Properties.Settings.Default.MAIN_Zipalign_CheckOnly;
|
||||
}
|
||||
|
||||
//private void FormMain_Shown(object sender, EventArgs e)
|
||||
//{
|
||||
// this.Update();
|
||||
// if (!JavaSearch.TrySearchJava(ref javaExe))
|
||||
// {
|
||||
// if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
|
||||
// {
|
||||
// OpenFileDialog openJavaExe = new OpenFileDialog()
|
||||
// {
|
||||
// Multiselect = false,
|
||||
// Filter = "java.exe|java.exe"
|
||||
// };
|
||||
// if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
// {
|
||||
// Properties.Settings.Default.JavaExe = openJavaExe.FileName;
|
||||
// Properties.Settings.Default.Save();
|
||||
// Application.Restart();
|
||||
// }
|
||||
// else
|
||||
// Application.Exit();
|
||||
// }
|
||||
// else
|
||||
// Application.Exit();
|
||||
// }
|
||||
// ToLog(ApktoolEventType.Information, "Java location: " + javaExe);
|
||||
|
||||
// InitializeUpdateChecker();
|
||||
// InitializeAPKTool();
|
||||
// InitializeSignApk();
|
||||
// InitializeZipalign();
|
||||
|
||||
// String javaVersion = apktoolSync.GetJavaVersionSync();
|
||||
// if (javaVersion != null)
|
||||
// {
|
||||
// ToLog(ApktoolEventType.Information, "Java version: " + javaVersion);
|
||||
|
||||
// string apktoolVersion = apktoolSync.GetVersionSync();
|
||||
|
||||
// if (apktoolVersion != null)
|
||||
// ToLog(ApktoolEventType.Information, "APKTool version: " + apktoolVersion);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
// }
|
||||
|
||||
// TimeSpan updateInterval = DateTime.Now - Properties.Settings.Default.LastUpdateCheck;
|
||||
// if (updateInterval.Days > 0 && Properties.Settings.Default.CheckForUpdateAtStartup)
|
||||
// updateCheker.CheckAsync(true);
|
||||
// ToStatus(Language.Done, Properties.Resources.done);
|
||||
//}
|
||||
|
||||
private void GetJavaPath()
|
||||
{
|
||||
if (!File.Exists(Properties.Settings.Default.JavaExe))
|
||||
{
|
||||
javaExe = JavaUtils.SearchPath();
|
||||
if (!File.Exists(javaExe))
|
||||
{
|
||||
if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
|
||||
{
|
||||
using (OpenFileDialog openJavaExe = new OpenFileDialog())
|
||||
{
|
||||
openJavaExe.Filter = "java.exe|java.exe";
|
||||
if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
javaExe = Program.GetPortablePath(openJavaExe.FileName);
|
||||
Properties.Settings.Default.JavaExe = javaExe;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
else
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
Environment.Exit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Properties.Settings.Default.JavaExe = javaExe;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
ToLog(ApktoolEventType.Information, String.Format("Java path \"{0}\"", javaExe/*"Java path: " + javaExe*/));
|
||||
}
|
||||
|
||||
private void FormMain_Shown(object sender, EventArgs e)
|
||||
{
|
||||
this.Update();
|
||||
GetJavaPath();
|
||||
|
||||
InitializeUpdateChecker();
|
||||
InitializeAPKTool();
|
||||
InitializeSignApk();
|
||||
InitializeZipalign();
|
||||
|
||||
Version javaVer = apktool.GetJavaVersion();
|
||||
if (javaVer != null)
|
||||
{
|
||||
ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVer.Minor, javaVer.Revision));
|
||||
string apktoolVersion = apktool.GetVersion();
|
||||
if (!String.IsNullOrWhiteSpace(apktoolVersion))
|
||||
ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion));
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Can't detect apktool version.");
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
TimeSpan updateInterval = DateTime.Now - Properties.Settings.Default.LastUpdateCheck;
|
||||
if (updateInterval.Days > 0 && Properties.Settings.Default.CheckForUpdateAtStartup)
|
||||
updateCheker.CheckAsync(true);
|
||||
ToStatus(Language.Done, Properties.Resources.done);
|
||||
}
|
||||
|
||||
private void Application_ApplicationExit(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
private string javaExe = Properties.Settings.Default.JavaExe;
|
||||
Apktool apktool;
|
||||
Signapk signapk;
|
||||
Zipalign zipalign;
|
||||
UpdateChecker updateCheker;
|
||||
|
||||
#region UpdateChecker
|
||||
|
||||
private void InitializeUpdateChecker()
|
||||
{
|
||||
updateCheker = new UpdateChecker("http://infinum.orgfree.com/_Update/APKToolGUI/version.txt", Version.Parse(Application.ProductVersion));
|
||||
updateCheker.Completed += new RunWorkerCompletedEventHandler(updateCheker_Completed);
|
||||
}
|
||||
|
||||
private void updateCheker_Completed(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
if (e.Result is UpdateChecker.Result)
|
||||
{
|
||||
UpdateChecker.Result result = (UpdateChecker.Result)e.Result;
|
||||
switch (result.State)
|
||||
{
|
||||
case UpdateChecker.State.NeedUpdate:
|
||||
if (MessageBox.Show(Language.UpdateNewVersion, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
|
||||
Process.Start("http://4pda.ru/forum/index.php?showtopic=452034");
|
||||
break;
|
||||
case UpdateChecker.State.NoUpdate:
|
||||
if (!result.Silently)
|
||||
MessageBox.Show(Language.UpdateNoUpdates, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
break;
|
||||
case UpdateChecker.State.Error:
|
||||
if (!result.Silently)
|
||||
MessageBox.Show("Error update checking:" + Environment.NewLine + result.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
break;
|
||||
}
|
||||
Properties.Settings.Default.LastUpdateCheck = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Log&Status
|
||||
|
||||
private void ToStatus(string message, Image statusImage)
|
||||
{
|
||||
BeginInvoke(new MethodInvoker(delegate
|
||||
{
|
||||
toolStripStatusLabelStateText.Text = message;
|
||||
toolStripStatusLabelStateImage.Image = statusImage;
|
||||
}));
|
||||
}
|
||||
|
||||
private void ToLog(string time, string message, Image statusImage, Color backColor)
|
||||
{
|
||||
if (dataGridView1.InvokeRequired)
|
||||
dataGridView1.BeginInvoke(new Action(() =>
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}));
|
||||
else
|
||||
{
|
||||
int i = dataGridView1.Rows.Add(statusImage, time, message);
|
||||
dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor;
|
||||
dataGridView1.FirstDisplayedScrollingRowIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToLog(ApktoolEventType eventType, String message)
|
||||
{
|
||||
switch (eventType)
|
||||
{
|
||||
case ApktoolEventType.Information:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window));
|
||||
//ToStatus(result.Message, Properties.Resources.info);
|
||||
break;
|
||||
case ApktoolEventType.Error:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink));
|
||||
//ToStatus(result.Message, Properties.Resources.error);
|
||||
break;
|
||||
case ApktoolEventType.Warning:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow));
|
||||
//ToStatus(result.Message, Properties.Resources.warning);
|
||||
break;
|
||||
case ApktoolEventType.Unknown:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink));
|
||||
//ToStatus(result.Message, Properties.Resources.warning);
|
||||
break;
|
||||
default:
|
||||
ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.LightBlue));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void Done()
|
||||
{
|
||||
if (statusStrip1.InvokeRequired)
|
||||
statusStrip1.BeginInvoke(new Action(delegate { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; }));
|
||||
|
||||
ActionButtonsEnabled = true;
|
||||
|
||||
ToStatus(Language.Done, Properties.Resources.done);
|
||||
}
|
||||
|
||||
private void ClearLog()
|
||||
{
|
||||
if (Properties.Settings.Default.ClearLogBeforeAction)
|
||||
dataGridView1.Rows.Clear();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region signapk
|
||||
|
||||
private void InitializeSignApk()
|
||||
{
|
||||
signapk = new Signapk(javaExe, Program.SIGNAPK_PATH);
|
||||
signapk.Exited += signapk_SignapkExited;
|
||||
}
|
||||
|
||||
void signapk_SignapkExited(object sender, SignapkExitedEventArgs e)
|
||||
{
|
||||
if (e.ExitCode == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Information, String.Format("Signing successfully completed. File saved to \"{0}\".", e.OutFilePath));
|
||||
}
|
||||
Done();
|
||||
}
|
||||
|
||||
private bool Singning()
|
||||
{
|
||||
return signapk.Sign(textBox_SIGN_PublicKey.Text, textBox_SIGN_PrivateKey.Text, textBox_SIGN_InputFile.Text, textBox_SIGN_OutputFile.Text);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region apktool
|
||||
|
||||
private void InitializeAPKTool()
|
||||
{
|
||||
apktool = new Apktool(javaExe, Program.APKTOOL_PATH);
|
||||
apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved;
|
||||
apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved;
|
||||
apktool.DecompilingCompleted += apktool_DecompilingCompleted;
|
||||
apktool.BuildCompleted += apktool_BuildCompleted;
|
||||
apktool.InstallFrameworkCompleted += apktool_InstallFrameworkCompleted;
|
||||
}
|
||||
|
||||
void apktool_InstallFrameworkCompleted(object sender, ApktoolEventCompletedEventArgs e)
|
||||
{
|
||||
Done();
|
||||
}
|
||||
|
||||
void apktool_BuildCompleted(object sender, ApktoolEventCompletedEventArgs e)
|
||||
{
|
||||
Done();
|
||||
}
|
||||
|
||||
void apktool_DecompilingCompleted(object sender, ApktoolEventCompletedEventArgs e)
|
||||
{
|
||||
if (e.ExitCode == 0)
|
||||
{
|
||||
ToLog(ApktoolEventType.Information, String.Format("Decompiling successfully completed. Output directory \"{0}\".", e.ProjectDir));
|
||||
}
|
||||
Done();
|
||||
}
|
||||
|
||||
void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
if (e.EventType == ApktoolEventType.Unknown)
|
||||
ToLog(ApktoolEventType.Error, e.Message);
|
||||
else
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e)
|
||||
{
|
||||
ToLog(e.EventType, e.Message);
|
||||
}
|
||||
|
||||
private bool InstallFramework()
|
||||
{
|
||||
InstallFrameworkOptions options = new InstallFrameworkOptions(textBox_IF_InputFramePath.Text);
|
||||
if (checkBox_IF_FramePath.Checked)
|
||||
options.FrameDir = textBox_IF_FrameDir.Text;
|
||||
if (checkBox_IF_Tag.Checked)
|
||||
options.Tag = textBox_IF_Tag.Text;
|
||||
|
||||
return apktool.InstallFramework(options);
|
||||
}
|
||||
|
||||
private bool Decompiling()
|
||||
{
|
||||
//string projectDir = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + "\\" + System.IO.Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text);
|
||||
|
||||
DecompileOptions options = new DecompileOptions(textBox_DECODE_InputAppPath.Text);
|
||||
options.NoSource = checkBox_DECODE_NoSrc.Checked;
|
||||
options.NoResource = checkBox_DECODE_NoRes.Checked;
|
||||
options.Force = checkBox_DECODE_Force.Checked;
|
||||
options.KeepBrokenResource = checkBox_DECODE_KeepBrokenRes.Checked;
|
||||
options.MatchOriginal = checkBox_DECODE_MatchOriginal.Checked;
|
||||
if (checkBox_DECODE_UseFramework.Checked)
|
||||
options.FrameworkPath = textBox_DECODE_FrameDir.Text;
|
||||
if (checkBox_DECODE_OutputDirectory.Checked)
|
||||
options.OutputDirectory = textBox_DECODE_OutputDirectory.Text;
|
||||
|
||||
return apktool.Decompile(options);
|
||||
}
|
||||
|
||||
private bool Build()
|
||||
{
|
||||
//String outputAPK = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk";
|
||||
|
||||
BuildOptions options = new BuildOptions(textBox_BUILD_InputProjectDir.Text);
|
||||
options.ForceAll = checkBox_BUILD_ForceAll.Checked;
|
||||
options.CopyOriginal = checkBox_BUILD_CopyOriginal.Checked;
|
||||
if (checkBox_BUILD_UseAapt.Checked)
|
||||
options.AaptPath = textBox_BUILD_AaptPath.Text;
|
||||
if (checkBox_BUILD_UseFramework.Checked)
|
||||
options.FrameworkPath = textBox_BUILD_FrameDir.Text;
|
||||
if (checkBox_BUILD_OutputAppPath.Checked)
|
||||
options.AppPath = textBox_BUILD_OutputAppPath.Text;
|
||||
|
||||
return apktool.Build(options);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region zipalign
|
||||
|
||||
private void InitializeZipalign()
|
||||
{
|
||||
zipalign = new Zipalign(Program.ZIPALIGN_PATH);
|
||||
zipalign.OutputDataReceived += zipalign_OutputDataReceived;
|
||||
zipalign.ErrorDataReceived += zipalign_ErrorDataReceived;
|
||||
zipalign.Exited += zipalign_Exited;
|
||||
}
|
||||
|
||||
void zipalign_OutputDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(e.Data))
|
||||
ToLog(ApktoolEventType.Information, e.Data);
|
||||
}
|
||||
|
||||
void zipalign_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(e.Data))
|
||||
ToLog(ApktoolEventType.Error, e.Data);
|
||||
}
|
||||
|
||||
void zipalign_Exited(object sender, EventArgs e)
|
||||
{
|
||||
Zipalign za = (Zipalign)sender;
|
||||
if (za.ExitCode == 0)
|
||||
ToLog(ApktoolEventType.Information, "File saved to " + za.Options.OutputFile);
|
||||
else
|
||||
ToLog(ApktoolEventType.Warning, "Exit code: " + za.ExitCode);
|
||||
Done();
|
||||
//ActionButtonsEnabled = true;
|
||||
}
|
||||
|
||||
private bool Align()
|
||||
{
|
||||
ZipalignOptions options = new ZipalignOptions(textBox_ZIPALIGN_InputFile.Text, Convert.ToInt32(numericUpDown_ZIPALIGN_AlignmentBytes.Value));
|
||||
options.CheckOnly = checkBox_ZIPALIGN_CheckAlignment.Checked;
|
||||
options.OverwriteOutputFile = checkBox_ZIPALIGN_OverwriteOutputFile.Checked;
|
||||
options.Recompress = checkBox_ZIPALIGN_Recompress.Checked;
|
||||
options.VerboseOut = checkBox_ZIPALIGN_VerboseOutput.Checked;
|
||||
options.OutputFile = textBox_ZIPALIGN_OutputFile.Text;
|
||||
|
||||
return zipalign.Align(options);
|
||||
}
|
||||
|
||||
//void zipalign_ZipalignExited(object sender, ZipalignExitedEventArgs e)
|
||||
//{
|
||||
// ToLog_Done();
|
||||
//}
|
||||
|
||||
//private void ZipAlign(string inputFilePath)
|
||||
//{
|
||||
// string outputFile = Path.GetDirectoryName(inputFilePath) + @"\" + Path.GetFileNameWithoutExtension(inputFilePath) + "_zipaligned.apk";
|
||||
// zipalign.Align(inputFilePath, outputFile, 4, true, false, false);
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
private bool ActionButtonsEnabled
|
||||
{
|
||||
set
|
||||
{
|
||||
if (button_BUILD_Build.InvokeRequired)
|
||||
button_BUILD_Build.BeginInvoke(new Action(delegate
|
||||
{
|
||||
button_BUILD_Build.Enabled = value;
|
||||
}));
|
||||
else
|
||||
button_BUILD_Build.Enabled = value;
|
||||
|
||||
if (button_DECODE_Decode.InvokeRequired)
|
||||
button_DECODE_Decode.BeginInvoke(new Action(delegate
|
||||
{
|
||||
button_DECODE_Decode.Enabled = value;
|
||||
}));
|
||||
else
|
||||
button_DECODE_Decode.Enabled = value;
|
||||
|
||||
if (button_IF_InstallFramework.InvokeRequired)
|
||||
button_IF_InstallFramework.BeginInvoke(new Action(delegate
|
||||
{
|
||||
button_IF_InstallFramework.Enabled = value;
|
||||
}));
|
||||
else
|
||||
button_IF_InstallFramework.Enabled = value;
|
||||
if (button_ZIPALIGN_Align.InvokeRequired)
|
||||
button_ZIPALIGN_Align.BeginInvoke(new Action(delegate
|
||||
{
|
||||
button_ZIPALIGN_Align.Enabled = value;
|
||||
}));
|
||||
else
|
||||
button_ZIPALIGN_Align.Enabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowMessage(string message, MessageBoxIcon status)
|
||||
{
|
||||
MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, status);
|
||||
}
|
||||
|
||||
private bool IsValidPath(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
Path.GetFileName(path);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
//if (path.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
|
||||
// return false;
|
||||
//else
|
||||
// return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Main menu event handlers
|
||||
|
||||
private void menuItemSettings_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormSettings frm = new FormSettings();
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
private void menuItemExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
private void menuItemCheckUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
updateCheker.CheckAsync();
|
||||
}
|
||||
|
||||
private void menuItemAbout_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormAboutBox frm = new FormAboutBox();
|
||||
frm.ShowDialog();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Control event handlers
|
||||
|
||||
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
dataGridView1.Rows.Clear();
|
||||
}
|
||||
|
||||
#region DECODE
|
||||
|
||||
private void button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(textBox_DECODE_FrameDir.Text))
|
||||
fbd.SelectedPath = textBox_DECODE_FrameDir.Text;
|
||||
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_DECODE_FrameDir.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
|
||||
{
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(textBox_DECODE_OutputDirectory.Text))
|
||||
fbd.SelectedPath = textBox_DECODE_OutputDirectory.Text;
|
||||
else
|
||||
if (!String.IsNullOrWhiteSpace(textBox_DECODE_InputAppPath.Text))
|
||||
fbd.SelectedPath = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text);
|
||||
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_DECODE_OutputDirectory.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (openFileDialogApk.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
textBox_DECODE_InputAppPath.Text = openFileDialogApk.FileName;
|
||||
//textBox_BUILD_InputProjectDir.Text = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + @"\" + Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text);
|
||||
if (checkBox_DECODE_OutputDirectory.Checked)
|
||||
textBox_DECODE_OutputDirectory.Text = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + "\\" + System.IO.Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text);
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
private void button_DECODE_Decode_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (File.Exists(textBox_DECODE_InputAppPath.Text))
|
||||
{
|
||||
if (checkBox_DECODE_UseFramework.Checked && !Directory.Exists(textBox_DECODE_FrameDir.Text))
|
||||
{
|
||||
ShowMessage("Выбранный каталог фреймворков не существует.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (checkBox_DECODE_OutputDirectory.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(textBox_DECODE_OutputDirectory.Text))
|
||||
{
|
||||
ShowMessage("Не выбран каталог декомпиляции.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
else
|
||||
if (!IsValidPath(textBox_DECODE_OutputDirectory.Text))
|
||||
{
|
||||
ShowMessage("Выбранный каталог декомпиляции не может быть создан, т.к. содержит недопустимые символы.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
bool started = Decompiling();
|
||||
if (started)
|
||||
{
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
ClearLog();
|
||||
ToLog(ApktoolEventType.Information, "Decoding " + Path.GetFileName(textBox_DECODE_InputAppPath.Text));
|
||||
ToStatus(String.Format("Decoding \"{0}\"...", Path.GetFileName(textBox_DECODE_InputAppPath.Text)), Properties.Resources.waiting);
|
||||
ActionButtonsEnabled = false;
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Error. Decoding is not started.");
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.WarningFileForDecodingNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region BUILD
|
||||
|
||||
private void button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Executable file|*.exe";
|
||||
if (!String.IsNullOrWhiteSpace(textBox_BUILD_AaptPath.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(textBox_BUILD_AaptPath.Text);
|
||||
ofd.FileName = Path.GetFileName(textBox_BUILD_AaptPath.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_BUILD_AaptPath.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(textBox_BUILD_FrameDir.Text))
|
||||
fbd.SelectedPath = textBox_BUILD_FrameDir.Text;
|
||||
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_BUILD_FrameDir.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (SaveFileDialog sfd = new SaveFileDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(textBox_BUILD_OutputAppPath.Text))
|
||||
{
|
||||
sfd.InitialDirectory = Path.GetDirectoryName(textBox_BUILD_OutputAppPath.Text);
|
||||
sfd.FileName = Path.GetFileNameWithoutExtension(textBox_BUILD_OutputAppPath.Text);
|
||||
sfd.DefaultExt = Path.GetExtension(textBox_BUILD_OutputAppPath.Text);
|
||||
}
|
||||
|
||||
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_BUILD_OutputAppPath.Text = sfd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(textBox_BUILD_InputProjectDir.Text))
|
||||
folderBrowserDialogBuild.SelectedPath = textBox_BUILD_InputProjectDir.Text;
|
||||
if (folderBrowserDialogBuild.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
textBox_BUILD_InputProjectDir.Text = folderBrowserDialogBuild.SelectedPath;
|
||||
if (checkBox_BUILD_OutputAppPath.Checked)
|
||||
textBox_BUILD_OutputAppPath.Text = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk";
|
||||
//String outputAPK = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk";
|
||||
}
|
||||
}
|
||||
|
||||
private void button_BUILD_Build_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(textBox_BUILD_InputProjectDir.Text))
|
||||
{
|
||||
bool started = Build();
|
||||
if (started)
|
||||
{
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
ActionButtonsEnabled = false;
|
||||
ClearLog();
|
||||
ToLog(ApktoolEventType.Information, "Build " + Path.GetFileName(textBox_BUILD_InputProjectDir.Text));
|
||||
ToStatus(String.Format("Build \"{0}\"...", textBox_BUILD_InputProjectDir.Text.Replace(Path.GetDirectoryName(textBox_BUILD_InputProjectDir.Text) + @"\", String.Empty)), Properties.Resources.waiting);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Error. Build is not started.");
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.WarningDecodingFolderNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INSTALL FRAMEWORK
|
||||
|
||||
private void button_IF_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
|
||||
{
|
||||
if (Directory.Exists(textBox_IF_FrameDir.Text))
|
||||
fbd.SelectedPath = textBox_IF_FrameDir.Text;
|
||||
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_IF_FrameDir.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_IF_BrowseInputFramePath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
if (File.Exists(textBox_IF_InputFramePath.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(textBox_IF_InputFramePath.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(textBox_IF_InputFramePath.Text);
|
||||
}
|
||||
ofd.Filter = "apk|*.apk|jar|*.jar";
|
||||
|
||||
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_IF_InputFramePath.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_IF_InstallFramework_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (checkBox_IF_FramePath.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(textBox_IF_FrameDir.Text) || !Directory.Exists(textBox_IF_FrameDir.Text))
|
||||
{
|
||||
ShowMessage("Ошибка выбора директории фреймворка.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (checkBox_IF_Tag.Checked && String.IsNullOrWhiteSpace(textBox_IF_Tag.Text))
|
||||
{
|
||||
ShowMessage("Ошибка ввода тега фреймворка.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(textBox_IF_InputFramePath.Text))
|
||||
{
|
||||
ShowMessage("Ошибка выбора файла фреймворка. Файл не существует.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
bool started = InstallFramework();
|
||||
if (started)
|
||||
{
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
ActionButtonsEnabled = false;
|
||||
ClearLog();
|
||||
ToLog(ApktoolEventType.Information, "Installing framework " + Path.GetFileName(textBox_IF_InputFramePath.Text));
|
||||
ToStatus(String.Format("Installing framework \"{0}\"...", Path.GetFileName(textBox_IF_InputFramePath.Text)), Properties.Resources.waiting);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Error. Framework installation is not started.");
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SIGN
|
||||
|
||||
private void button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "*.pem|*.pem";
|
||||
if (File.Exists(textBox_SIGN_PublicKey.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_PublicKey.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(textBox_SIGN_PublicKey.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_SIGN_PublicKey.Text = Program.GetPortablePath(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "*.pk8|*.pk8";
|
||||
if (File.Exists(textBox_SIGN_PrivateKey.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_PrivateKey.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(textBox_SIGN_PrivateKey.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_SIGN_PrivateKey.Text = Program.GetPortablePath(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (SaveFileDialog sfd = new SaveFileDialog())
|
||||
{
|
||||
sfd.Filter = "(*.apk)|*.apk|(*.jar)|*.jar|(*.zip)|*.zip";
|
||||
|
||||
if (File.Exists(textBox_SIGN_InputFile.Text))
|
||||
{
|
||||
sfd.Filter = String.Format("(*{0})|*{0}", Path.GetExtension(textBox_SIGN_InputFile.Text));
|
||||
sfd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_InputFile.Text);
|
||||
sfd.FileName = String.Format("{0}_signed{1}", Path.GetFileNameWithoutExtension(textBox_SIGN_InputFile.Text), Path.GetExtension(textBox_SIGN_InputFile.Text));
|
||||
}
|
||||
|
||||
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
textBox_SIGN_OutputFile.Text = sfd.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button_SIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "(*.apk;*.jar;*.zip)|*.apk;*.jar;*.zip";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
textBox_SIGN_InputFile.Text = ofd.FileName;
|
||||
textBox_SIGN_OutputFile.Text =
|
||||
String.Format("{0}{1}{2}_signed{3}",
|
||||
Path.GetDirectoryName(textBox_SIGN_InputFile.Text),
|
||||
Path.DirectorySeparatorChar,
|
||||
Path.GetFileNameWithoutExtension(textBox_SIGN_InputFile.Text),
|
||||
Path.GetExtension(textBox_SIGN_InputFile.Text));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button_SIGN_Sign_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!File.Exists(textBox_SIGN_PublicKey.Text))
|
||||
{
|
||||
ShowMessage("Public key not found.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(textBox_SIGN_PrivateKey.Text))
|
||||
{
|
||||
ShowMessage("Private key not found.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(textBox_SIGN_InputFile.Text))
|
||||
{
|
||||
ShowMessage("Input file not found.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
bool started = Singning();
|
||||
if (started)
|
||||
{
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
ActionButtonsEnabled = false;
|
||||
ClearLog();
|
||||
ToLog(ApktoolEventType.Information, "Signing " + Path.GetFileName(textBox_SIGN_InputFile.Text));
|
||||
ToStatus(String.Format("Signing \"{0}\"...", Path.GetFileName(textBox_SIGN_InputFile.Text)), Properties.Resources.waiting);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Error. Signing is not started.");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ZIPALIGN
|
||||
|
||||
private bool CheckAlignSwitch
|
||||
{
|
||||
set
|
||||
{
|
||||
checkBox_ZIPALIGN_Recompress.Enabled = value;
|
||||
checkBox_ZIPALIGN_OverwriteOutputFile.Enabled = value;
|
||||
tableLayoutPanel_ZIPALIGN_OutputFile.Enabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckAlignSwitch = !checkBox_ZIPALIGN_CheckAlignment.Checked;
|
||||
}
|
||||
|
||||
private void button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (SaveFileDialog sfd = new SaveFileDialog())
|
||||
{
|
||||
if (File.Exists(textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
sfd.InitialDirectory = Path.GetDirectoryName(textBox_ZIPALIGN_InputFile.Text);
|
||||
sfd.Filter = String.Format("{0}|*.{0}", Path.GetExtension(textBox_ZIPALIGN_InputFile.Text).Replace(".", String.Empty));
|
||||
sfd.FileName = String.Format("{0}_zipaligned", Path.GetFileNameWithoutExtension(textBox_ZIPALIGN_InputFile.Text));
|
||||
}
|
||||
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
textBox_ZIPALIGN_OutputFile.Text = sfd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "ZIP archives(*.apk;*.zip;*.jar)|*.apk;*.zip;*.jar";
|
||||
if (File.Exists(textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(textBox_ZIPALIGN_InputFile.Text);
|
||||
ofd.FileName = Path.GetFileName(textBox_ZIPALIGN_InputFile.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
textBox_ZIPALIGN_InputFile.Text = ofd.FileName;
|
||||
if (!checkBox_ZIPALIGN_CheckAlignment.Checked)
|
||||
textBox_ZIPALIGN_OutputFile.Text = String.Format("{0}\\{1}_zipaligned{2}",
|
||||
Path.GetDirectoryName(ofd.FileName),
|
||||
Path.GetFileNameWithoutExtension(ofd.FileName),
|
||||
Path.GetExtension(ofd.FileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button_ZIPALIGN_Align_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!File.Exists(textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
ShowMessage("Ошибка. Выбранный файл не существует.", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
bool started = Align();
|
||||
if (started)
|
||||
{
|
||||
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
|
||||
ActionButtonsEnabled = false;
|
||||
ClearLog();
|
||||
ToLog(ApktoolEventType.Information, "Aligning " + Path.GetFileName(textBox_ZIPALIGN_InputFile.Text));
|
||||
ToStatus(String.Format("Aligning \"{0}\"...", Path.GetFileName(textBox_ZIPALIGN_InputFile.Text)), Properties.Resources.waiting);
|
||||
}
|
||||
else
|
||||
ToLog(ApktoolEventType.Error, "Error. Aligning is not started.");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,6 @@
|
||||
// logoPictureBox
|
||||
//
|
||||
resources.ApplyResources(this.logoPictureBox, "logoPictureBox");
|
||||
this.logoPictureBox.Image = global::APKToolGUI.Properties.Resources.android;
|
||||
this.logoPictureBox.Name = "logoPictureBox";
|
||||
this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
|
||||
this.logoPictureBox.TabStop = false;
|
||||
@@ -103,7 +103,7 @@ namespace APKToolGUI
|
||||
|
||||
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("http://4pda.ru/forum/index.php?showtopic=452034");
|
||||
System.Diagnostics.Process.Start("https://github.com/AndnixSH/APKToolGUI");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,624 @@
|
||||
<?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" />
|
||||
<data name="tableLayoutPanel.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="logoPictureBox.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
|
||||
<value>Center</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
RK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>219, 259</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>CenterImage</value>
|
||||
</data>
|
||||
<data name="logoPictureBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Name" xml:space="preserve">
|
||||
<value>logoPictureBox</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>logoPictureBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelProductName.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelProductName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 0</value>
|
||||
</data>
|
||||
<data name="labelProductName.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="labelProductName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="labelProductName.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="labelProductName.Text" xml:space="preserve">
|
||||
<value>Product Name</value>
|
||||
</data>
|
||||
<data name="labelProductName.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.Name" xml:space="preserve">
|
||||
<value>labelProductName</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.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=">>labelProductName.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>labelProductName.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 26</value>
|
||||
</data>
|
||||
<data name="labelVersion.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="labelVersion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="labelVersion.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelVersion.Text" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="labelVersion.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.Name" xml:space="preserve">
|
||||
<value>labelVersion</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.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=">>labelVersion.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>labelVersion.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 52</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="labelCopyright.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>21</value>
|
||||
</data>
|
||||
<data name="labelCopyright.Text" xml:space="preserve">
|
||||
<value>Copyright</value>
|
||||
</data>
|
||||
<data name="labelCopyright.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.Name" xml:space="preserve">
|
||||
<value>labelCopyright</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.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=">>labelCopyright.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>labelCopyright.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="okButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="okButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>412, 239</value>
|
||||
</data>
|
||||
<data name="okButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="okButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="okButton.Text" xml:space="preserve">
|
||||
<value>&ОК</value>
|
||||
</data>
|
||||
<data name=">>okButton.Name" xml:space="preserve">
|
||||
<value>okButton</value>
|
||||
</data>
|
||||
<data name=">>okButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>okButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>okButton.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 107</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 126</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="textBoxDescription.Text" xml:space="preserve">
|
||||
<value>Description</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.Name" xml:space="preserve">
|
||||
<value>textBoxDescription</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.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=">>textBoxDescription.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>textBoxDescription.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>231, 78</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>6, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 26</value>
|
||||
</data>
|
||||
<data name="linkLabel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="linkLabel1.Text" xml:space="preserve">
|
||||
<value>Page</value>
|
||||
</data>
|
||||
<data name="linkLabel1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.Name" xml:space="preserve">
|
||||
<value>linkLabel1</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>linkLabel1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 9</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.RowCount" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 265</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /><Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,46,0039,Percent,53,9961" /><Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>508, 283</value>
|
||||
</data>
|
||||
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>9, 9, 9, 9</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterParent</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormAboutBox</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -32,11 +32,8 @@
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
|
||||
this.groupBoxJava = new System.Windows.Forms.GroupBox();
|
||||
this.labelCustomJavaLocation = new System.Windows.Forms.Label();
|
||||
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
|
||||
this.buttonCustomJavaLocation = new System.Windows.Forms.Button();
|
||||
this.groupBoxLanguage = new System.Windows.Forms.GroupBox();
|
||||
this.comboBox1 = new System.Windows.Forms.ComboBox();
|
||||
@@ -46,6 +43,10 @@
|
||||
this.buttonRemoveContextMenu = new System.Windows.Forms.Button();
|
||||
this.buttonCancel = new System.Windows.Forms.Button();
|
||||
this.buttonОК = new System.Windows.Forms.Button();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox();
|
||||
this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox();
|
||||
this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox();
|
||||
this.tabControl1.SuspendLayout();
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
@@ -63,11 +64,11 @@
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||
this.tabPage1.Controls.Add(this.groupBox1);
|
||||
this.tabPage1.Controls.Add(this.groupBoxJava);
|
||||
this.tabPage1.Controls.Add(this.groupBoxLanguage);
|
||||
this.tabPage1.Controls.Add(this.groupBoxContextMenu);
|
||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -79,23 +80,6 @@
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// checkBox1
|
||||
//
|
||||
resources.ApplyResources(this.checkBox1, "checkBox1");
|
||||
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
|
||||
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// groupBoxJava
|
||||
//
|
||||
resources.ApplyResources(this.groupBoxJava, "groupBoxJava");
|
||||
@@ -110,14 +94,6 @@
|
||||
resources.ApplyResources(this.labelCustomJavaLocation, "labelCustomJavaLocation");
|
||||
this.labelCustomJavaLocation.Name = "labelCustomJavaLocation";
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// buttonCustomJavaLocation
|
||||
//
|
||||
resources.ApplyResources(this.buttonCustomJavaLocation, "buttonCustomJavaLocation");
|
||||
@@ -142,6 +118,7 @@
|
||||
// groupBoxContextMenu
|
||||
//
|
||||
resources.ApplyResources(this.groupBoxContextMenu, "groupBoxContextMenu");
|
||||
this.groupBoxContextMenu.Controls.Add(this.ignoreOutputContextMenuBox);
|
||||
this.groupBoxContextMenu.Controls.Add(this.labelAdminRights);
|
||||
this.groupBoxContextMenu.Controls.Add(this.buttonAddContextMenu);
|
||||
this.groupBoxContextMenu.Controls.Add(this.buttonRemoveContextMenu);
|
||||
@@ -181,6 +158,39 @@
|
||||
this.buttonОК.UseVisualStyleBackColor = true;
|
||||
this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click);
|
||||
//
|
||||
// checkBox1
|
||||
//
|
||||
resources.ApplyResources(this.checkBox1, "checkBox1");
|
||||
this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction;
|
||||
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// textBoxCustomJavaLocation
|
||||
//
|
||||
resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation");
|
||||
this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation";
|
||||
this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe;
|
||||
//
|
||||
// ignoreOutputContextMenuBox
|
||||
//
|
||||
resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox");
|
||||
this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu;
|
||||
this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox";
|
||||
this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// FormSettings
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@@ -201,6 +211,7 @@
|
||||
this.groupBoxJava.PerformLayout();
|
||||
this.groupBoxLanguage.ResumeLayout(false);
|
||||
this.groupBoxContextMenu.ResumeLayout(false);
|
||||
this.groupBoxContextMenu.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
@@ -224,6 +235,6 @@
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.CheckBox checkBoxCheckUpdateStartup;
|
||||
private System.Windows.Forms.CheckBox checkBox1;
|
||||
|
||||
private System.Windows.Forms.CheckBox ignoreOutputContextMenuBox;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Utils;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
@@ -10,7 +12,7 @@ namespace APKToolGUI
|
||||
public FormSettings()
|
||||
{
|
||||
InitializeComponent();
|
||||
if (!ExplorerContextMenu.IsAdmin())
|
||||
if (!AdminUtils.IsAdministrator())
|
||||
{
|
||||
SetButtonShield(buttonAddContextMenu, true);
|
||||
SetButtonShield(buttonRemoveContextMenu, true);
|
||||
@@ -0,0 +1,66 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class BaksmaliControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
public BaksmaliControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void baksmaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.baksmaliBrowseOutputTxtBox.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void baksmaliBrowseInputDexBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "dex|*.dex";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.baksmaliBrowseInputDexTxtBox.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
internal async void decSmaliBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.baksmaliUseOutputChkBox.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(main.baksmaliBrowseOutputTxtBox.Text) || !Directory.Exists(main.baksmaliBrowseOutputTxtBox.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectedOutputFolderNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!File.Exists(main.baksmaliBrowseInputDexTxtBox.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
await main.Baksmali(Settings.Default.Baksmali_InputDexFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class BuildControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
|
||||
public BuildControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = Language.ExecutableFile + "|*.exe";
|
||||
if (!String.IsNullOrWhiteSpace(main.textBox_BUILD_AaptPath.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_BUILD_AaptPath.Text);
|
||||
ofd.FileName = Path.GetFileName(main.textBox_BUILD_AaptPath.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_BUILD_AaptPath.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(main.textBox_BUILD_FrameDir.Text))
|
||||
fbd.SelectedPath = main.textBox_BUILD_FrameDir.Text;
|
||||
if (fbd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_BUILD_FrameDir.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_BUILD_OutputAppPath.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_BUILD_InputProjectDir.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_BUILD_Build_Click(object sender, EventArgs e)
|
||||
{
|
||||
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
|
||||
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
|
||||
{
|
||||
await main.Build(decApkDir);
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.WarningDecodingFolderNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
internal void comApkOpenDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
string decApkDir = main.textBox_BUILD_InputProjectDir.Text;
|
||||
|
||||
string outputFile = decApkDir + " compiled.apk";
|
||||
if (Settings.Default.Build_UseOutputAppPath)
|
||||
outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir) + ".apk");
|
||||
|
||||
if (File.Exists(outputFile))
|
||||
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
|
||||
else
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class DecodeControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
public DecodeControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_FrameDir.Text))
|
||||
fbd.SelectedPath = main.textBox_DECODE_FrameDir.Text;
|
||||
if (fbd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_DECODE_FrameDir.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog())
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_OutputDirectory.Text))
|
||||
fbd.SelectedPath = main.textBox_DECODE_OutputDirectory.Text;
|
||||
else
|
||||
if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_InputAppPath.Text))
|
||||
fbd.SelectedPath = Path.GetDirectoryName(main.textBox_DECODE_InputAppPath.Text);
|
||||
if (fbd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_DECODE_OutputDirectory.Text = fbd.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_DECODE_InputAppPath.Text = ofd.FileName;
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_DECODE_Decode_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (File.Exists(main.textBox_DECODE_InputAppPath.Text))
|
||||
{
|
||||
if (main.checkBox_DECODE_UseFramework.Checked && !Directory.Exists(main.textBox_DECODE_FrameDir.Text))
|
||||
{
|
||||
main.ShowMessage(Language.DecodeSelectedFrameworkNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (main.checkBox_DECODE_OutputDirectory.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(main.textBox_DECODE_OutputDirectory.Text))
|
||||
{
|
||||
main.ShowMessage(Language.DecodeDirNotSelected, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
else
|
||||
if (!PathUtils.IsValidPath(main.textBox_DECODE_OutputDirectory.Text))
|
||||
{
|
||||
main.ShowMessage(Language.DecodeCouldNotCreate, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await main.Decompile(main.textBox_DECODE_InputAppPath.Text);
|
||||
}
|
||||
else
|
||||
MessageBox.Show(Language.WarningFileForDecodingNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
internal void decApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text))
|
||||
Process.Start("explorer.exe", main.textBox_BUILD_InputProjectDir.Text);
|
||||
else
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using SaveToGameWpf.Logic.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class DragDropHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
public DragDropHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
|
||||
//Decode
|
||||
DragEventHandler decEventHandler = new DragEventHandler((sender, e) => { DropApkToDec(e); });
|
||||
Register(main.decPanel, ".apk", decEventHandler);
|
||||
Register(main.textBox_DECODE_InputAppPath, ".apk", decEventHandler, main.decPanel);
|
||||
Register(main.button_DECODE_Decode, ".apk", decEventHandler, main.decPanel);
|
||||
|
||||
DragEventHandler comEventHandler = new DragEventHandler((sender, e) => { DropDirToCom(e); });
|
||||
Register(main.comPanel, "", comEventHandler);
|
||||
Register(main.textBox_BUILD_InputProjectDir, "", comEventHandler, main.comPanel);
|
||||
Register(main.button_BUILD_Build, "", comEventHandler, main.comPanel);
|
||||
|
||||
DragEventHandler alignEventHandler = new DragEventHandler((sender, e) => { DropApkToAlign(e); });
|
||||
Register(main.zipalignPanel, ".apk", alignEventHandler);
|
||||
Register(main.textBox_ZIPALIGN_InputFile, ".apk", alignEventHandler, main.zipalignPanel);
|
||||
Register(main.button_ZIPALIGN_Align, ".apk", alignEventHandler, main.zipalignPanel);
|
||||
|
||||
DragEventHandler signEventHandler = new DragEventHandler((sender, e) => { DropApkToSign(e); });
|
||||
Register(main.signPanel, ".apk", signEventHandler);
|
||||
Register(main.textBox_SIGN_InputFile, ".apk", signEventHandler, main.signPanel);
|
||||
Register(main.button_SIGN_Sign, ".apk", signEventHandler, main.signPanel);
|
||||
|
||||
DragEventHandler baksmaliEventHandler = new DragEventHandler((sender, e) => { DropDexToBaksmali(e); });
|
||||
Register(main.bakSmaliGroupBox, ".dex", baksmaliEventHandler);
|
||||
main.bakSmaliGroupBox.AllowDrop = true;
|
||||
|
||||
DragEventHandler smaliEventHandler = new DragEventHandler((sender, e) => { DropDirToSmali(e); });
|
||||
Register(main.smaliGroupBox, "", smaliEventHandler);
|
||||
main.smaliGroupBox.AllowDrop = true;
|
||||
|
||||
DragEventHandler apkInfoEventHandler = new DragEventHandler((sender, e) => { DropApkToGetInfo(e); });
|
||||
Register(main.tabPageApkInfo, ".apk", apkInfoEventHandler);
|
||||
Register(main.fileTxtBox, ".apk", apkInfoEventHandler);
|
||||
}
|
||||
|
||||
void Register(Control ctrl, string extension, DragEventHandler dragHandler, Control extCtrl = null)
|
||||
{
|
||||
if (extCtrl == null)
|
||||
extCtrl = ctrl;
|
||||
ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = Color.White);
|
||||
ctrl.DragEnter += new DragEventHandler((sender, e) => e.CheckDragEnter(extension));
|
||||
ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckDragOver(extension)) extCtrl.BackColor = Color.LightGreen; });
|
||||
ctrl.DragDrop += dragHandler;
|
||||
}
|
||||
|
||||
private async void DropApkToDec(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(".apk", file => apkFile = file))
|
||||
{
|
||||
main.GetApkInfo(apkFile);
|
||||
main.textBox_DECODE_InputAppPath.Text = apkFile;
|
||||
main.decPanel.BackColor = Color.White;
|
||||
|
||||
await main.Decompile(apkFile);
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropDirToCom(DragEventArgs e)
|
||||
{
|
||||
string folder = null;
|
||||
if (e.DropOneByEnd("", file => folder = file))
|
||||
{
|
||||
if (File.Exists(Path.Combine(folder, "AndroidManifest.xml")))
|
||||
{
|
||||
main.textBox_BUILD_InputProjectDir.Text = folder;
|
||||
main.comPanel.BackColor = Color.White;
|
||||
await main.Build(folder);
|
||||
}
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorNotAnApk);
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropApkToAlign(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(".apk", file => apkFile = file))
|
||||
{
|
||||
main.textBox_ZIPALIGN_InputFile.Text = apkFile;
|
||||
main.zipalignPanel.BackColor = Color.White;
|
||||
|
||||
try
|
||||
{
|
||||
main.Running();
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
string outputDir = apkFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputDir = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(apkFile));
|
||||
|
||||
if (!Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
outputDir = PathUtils.GetDirectoryNameWithoutExtension(outputDir) + " aligned.apk";
|
||||
|
||||
if (main.Align(apkFile, outputDir) == 0)
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.ZipalignFileSavedTo, outputDir));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorZipalign);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
main.Done();
|
||||
}
|
||||
}
|
||||
private async void DropApkToSign(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(".apk", file => apkFile = file))
|
||||
{
|
||||
main.textBox_SIGN_InputFile.Text = apkFile;
|
||||
main.signPanel.BackColor = Color.White;
|
||||
|
||||
try
|
||||
{
|
||||
main.Running();
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
string inputFile = apkFile;
|
||||
string outputDir = apkFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputDir = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (main.Sign(inputFile, outputDir) == 0)
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, inputFile));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, outputDir));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, String.Format(Language.ErrorSigning, outputDir));
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
main.Done();
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropDexToBaksmali(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(".dex", file => apkFile = file))
|
||||
{
|
||||
main.baksmaliBrowseInputDexTxtBox.Text = apkFile;
|
||||
main.bakSmaliGroupBox.BackColor = Color.White;
|
||||
await main.Baksmali(apkFile);
|
||||
}
|
||||
}
|
||||
|
||||
private async void DropDirToSmali(DragEventArgs e)
|
||||
{
|
||||
string dir = null;
|
||||
if (e.DropOneByEnd("", file => dir = file))
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = dir;
|
||||
main.smaliGroupBox.BackColor = Color.White;
|
||||
await main.Smali(dir + ".dex");
|
||||
}
|
||||
}
|
||||
|
||||
private void DropApkToGetInfo(DragEventArgs e)
|
||||
{
|
||||
string apkFile = null;
|
||||
if (e.DropOneByEnd(".apk", file => apkFile = file))
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = apkFile;
|
||||
main.tabPageApkInfo.BackColor = Color.White;
|
||||
main.GetApkInfo(apkFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class FrameworkControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
|
||||
public FrameworkControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void button_IF_BrowseFrameDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.clearFwBeforeDecodeChkBox.Checked = false;
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_IF_FrameDir.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_IF_BrowseInputFramePath_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.clearFwBeforeDecodeChkBox.Checked = false;
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
if (File.Exists(main.textBox_IF_InputFramePath.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_IF_InputFramePath.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_IF_InputFramePath.Text);
|
||||
}
|
||||
ofd.Filter = "apk|*.apk";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_IF_InputFramePath.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_IF_InstallFramework_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.checkBox_IF_FramePath.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(main.textBox_IF_FrameDir.Text) || !Directory.Exists(main.textBox_IF_FrameDir.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectingFrameworkDirectory, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (main.checkBox_IF_Tag.Checked && String.IsNullOrWhiteSpace(main.textBox_IF_Tag.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorEnteringFrameworkTag, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(main.textBox_IF_InputFramePath.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectingFrameworkFile, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
main.Running();
|
||||
main.ToLog(ApktoolEventType.Information, Language.InstallingFramework + " " + Path.GetFileName(main.textBox_IF_InputFramePath.Text));
|
||||
main.ToStatus(String.Format(Language.InstallingFramework + " \"{0}\"...", Path.GetFileName(main.textBox_IF_InputFramePath.Text)), Resources.waiting);
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
if (main.apktool.InstallFramework() == 0)
|
||||
main.ToLog(ApktoolEventType.Information, Language.FrameworkInstalled);
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, Language.FrameworkInstallationNotStarted);
|
||||
});
|
||||
main.Done();
|
||||
}
|
||||
|
||||
internal async void clearFwBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
if (main.ClearFramework() == 0)
|
||||
main.ToLog(ApktoolEventType.Information, Language.Done);
|
||||
});
|
||||
|
||||
main.Done();
|
||||
}
|
||||
|
||||
internal void openFwFolderBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.checkBox_IF_FramePath.Checked && Directory.Exists(main.textBox_IF_FrameDir.Text))
|
||||
Process.Start("explorer.exe", main.textBox_IF_FrameDir.Text);
|
||||
else if (Directory.Exists(Program.FRAMEWORK_DIR))
|
||||
Process.Start("explorer.exe", Program.FRAMEWORK_DIR);
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFolderNotExist);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class SignControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
|
||||
public SignControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "*.pem|*.pem";
|
||||
if (File.Exists(main.textBox_SIGN_PublicKey.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_SIGN_PublicKey.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_SIGN_PublicKey.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_SIGN_PublicKey.Text = Program.GetPortablePath(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "*.pk8|*.pk8";
|
||||
if (File.Exists(main.textBox_SIGN_PrivateKey.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_SIGN_PrivateKey.Text);
|
||||
ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_SIGN_PrivateKey.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.textBox_SIGN_PrivateKey.Text = Program.GetPortablePath(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_SIGN_OutputFile.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_SIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "(*.apk;*.jar;*.zip)|*.apk;*.jar;*.zip";
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_SIGN_InputFile.Text = ofd.FileName;
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
main.textBox_SIGN_OutputFile.Text =
|
||||
String.Format("{0}{1}{2}_signed{3}",
|
||||
Path.GetDirectoryName(main.textBox_SIGN_InputFile.Text),
|
||||
Path.DirectorySeparatorChar,
|
||||
Path.GetFileNameWithoutExtension(main.textBox_SIGN_InputFile.Text),
|
||||
Path.GetExtension(main.textBox_SIGN_InputFile.Text));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_SIGN_Sign_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
main.Save();
|
||||
if (!File.Exists(Settings.Default.Sign_PublicKey))
|
||||
{
|
||||
main.ShowMessage(Language.SignPublicKeyNotFound, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(Settings.Default.Sign_PrivateKey))
|
||||
{
|
||||
main.ShowMessage(Language.SignPrivateKeyNotFound, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(main.textBox_SIGN_InputFile.Text))
|
||||
{
|
||||
main.ShowMessage(Language.SignInputFileNotFound, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
main.Running();
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
string inputFile = Settings.Default.Sign_InputFile;
|
||||
string outputDir = inputFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputDir = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (main.Sign(inputFile, outputDir) == 0)
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, inputFile));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.SignSuccessfullyCompleted, outputDir));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, String.Format(Language.ErrorSigning, outputDir));
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
main.Done();
|
||||
}
|
||||
|
||||
internal void selectKeyStoreFileBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
ofd.Filter = "Keystore|*.keystore;*.jks";
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
main.keyStoreFileTxtBox.Text = ofd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
internal void signApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = Settings.Default.Sign_InputFile;
|
||||
string outputFile = inputFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (File.Exists(outputFile))
|
||||
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
|
||||
else
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class SmaliControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
public SmaliControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
}
|
||||
|
||||
internal void smaliBrowseOutputBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.smaliBrowseOutputTxtBox.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void smaliBrowseInputDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.smaliBrowseInputDirTxtBox.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void comSmaliBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (main.smaliUseOutputChkBox.Checked)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(main.smaliBrowseOutputTxtBox.Text) || !Directory.Exists(main.smaliBrowseOutputTxtBox.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectedOutputFolderNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Directory.Exists(main.smaliBrowseInputDirTxtBox.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
main.Smali(Settings.Default.Smali_InputDir + ".dex");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using APKToolGUI.Utils;
|
||||
using Ookii.Dialogs.WinForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI.Handlers
|
||||
{
|
||||
class ZipalignControlEventHandlers
|
||||
{
|
||||
private static FormMain main;
|
||||
|
||||
public ZipalignControlEventHandlers(FormMain Main)
|
||||
{
|
||||
main = Main;
|
||||
CheckAlignSwitch = !Settings.Default.Zipalign_CheckOnly;
|
||||
}
|
||||
|
||||
internal bool CheckAlignSwitch
|
||||
{
|
||||
set
|
||||
{
|
||||
main.checkBox_ZIPALIGN_Recompress.Enabled = value;
|
||||
main.checkBox_ZIPALIGN_OverwriteOutputFile.Enabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal void checkBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckAlignSwitch = !main.checkBox_ZIPALIGN_CheckAlignment.Checked;
|
||||
}
|
||||
|
||||
internal void button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
|
||||
dlg.ShowNewFolderButton = true;
|
||||
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_ZIPALIGN_OutputFile.Text = dlg.SelectedPath;
|
||||
}
|
||||
}
|
||||
|
||||
internal void button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (OpenFileDialog ofd = new OpenFileDialog())
|
||||
{
|
||||
// ofd.Filter = "ZIP archives(*.apk;*.zip;*.jar)|*.apk;*.zip;*.jar";
|
||||
ofd.Filter = Language.ZIPArchives + " (*.apk)|*.apk";
|
||||
if (File.Exists(main.textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_ZIPALIGN_InputFile.Text);
|
||||
ofd.FileName = Path.GetFileName(main.textBox_ZIPALIGN_InputFile.Text);
|
||||
}
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
main.textBox_ZIPALIGN_InputFile.Text = ofd.FileName;
|
||||
main.GetApkInfo(ofd.FileName);
|
||||
if (!main.checkBox_ZIPALIGN_CheckAlignment.Checked)
|
||||
main.textBox_ZIPALIGN_OutputFile.Text = String.Format("{0}\\{1}_zipaligned{2}",
|
||||
Path.GetDirectoryName(ofd.FileName),
|
||||
Path.GetFileNameWithoutExtension(ofd.FileName),
|
||||
Path.GetExtension(ofd.FileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal async void button_ZIPALIGN_Align_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!File.Exists(main.textBox_ZIPALIGN_InputFile.Text))
|
||||
{
|
||||
main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
await Task.Factory.StartNew(() =>
|
||||
{
|
||||
string inputFile = Settings.Default.Zipalign_InputFile;
|
||||
|
||||
string outputDir = inputFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputDir = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (!Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
outputDir = PathUtils.GetDirectoryNameWithoutExtension(outputDir) + " aligned.apk";
|
||||
|
||||
if (main.Align(inputFile, outputDir) == 0)
|
||||
main.ToLog(ApktoolEventType.Information, String.Format(Language.ZipalignFileSavedTo, outputDir));
|
||||
else
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorZipalign);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, ex.Message);
|
||||
}
|
||||
main.Done();
|
||||
}
|
||||
|
||||
internal void alignApkOpenDirBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string inputFile = Settings.Default.Zipalign_InputFile;
|
||||
|
||||
string outputFile = inputFile;
|
||||
if (Settings.Default.Zipalign_UseOutputDir)
|
||||
outputFile = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile));
|
||||
|
||||
if (!Settings.Default.Zipalign_OverwriteOutputFile)
|
||||
outputFile = PathUtils.GetDirectoryNameWithoutExtension(outputFile) + " aligned.apk";
|
||||
|
||||
if (File.Exists(outputFile))
|
||||
Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile));
|
||||
else
|
||||
{
|
||||
main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +1,118 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Java
|
||||
{
|
||||
public class JarProcess : Process
|
||||
{
|
||||
public string JavaPath { get; set; }
|
||||
public string JarPath { get; set; }
|
||||
|
||||
public JarProcess(string javaPath, string jarPath)
|
||||
{
|
||||
this.JavaPath = javaPath;
|
||||
this.JarPath = jarPath;
|
||||
JavaPath = javaPath.Equals("java") ? "" : javaPath;
|
||||
JarPath = jarPath;
|
||||
Initialize();
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
{
|
||||
this.EnableRaisingEvents = true;
|
||||
this.StartInfo.FileName = JavaPath; //задаем имя запускного файла
|
||||
this.StartInfo.UseShellExecute = false; //отключаем использование оболочки, чтобы можно было читать данные вывода
|
||||
this.StartInfo.RedirectStandardOutput = true; // разрешаем перенаправление данных вывода
|
||||
this.StartInfo.RedirectStandardError = true; // разрешаем перенаправление данных вывода
|
||||
this.StartInfo.CreateNoWindow = true; //запрещаем создавать окно для запускаемой программы
|
||||
EnableRaisingEvents = true;
|
||||
if (!String.IsNullOrEmpty(JavaPath))
|
||||
StartInfo.FileName = JavaPath;
|
||||
else
|
||||
StartInfo.FileName = "cmd.exe";
|
||||
StartInfo.UseShellExecute = false;
|
||||
StartInfo.RedirectStandardOutput = true;
|
||||
StartInfo.RedirectStandardError = true;
|
||||
StartInfo.CreateNoWindow = true;
|
||||
}
|
||||
|
||||
public string JavaPath { get; set; }
|
||||
public string JarPath { get; set; }
|
||||
|
||||
public new bool Start(string args)
|
||||
{
|
||||
this.EnableRaisingEvents = true;
|
||||
this.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
|
||||
EnableRaisingEvents = true;
|
||||
if (!String.IsNullOrEmpty(JavaPath))
|
||||
{
|
||||
StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
|
||||
Debug.WriteLine(String.Format("-jar \"{0}\" {1}", JarPath, args));
|
||||
}
|
||||
else
|
||||
{
|
||||
StartInfo.Arguments = String.Format("/c \" java -jar \"{0}\" {1} \"", JarPath, args);
|
||||
Debug.WriteLine(String.Format("CMD: java -jar \"{0}\" {1} \"", JarPath, args));
|
||||
}
|
||||
return base.Start();
|
||||
}
|
||||
|
||||
public Version GetJavaVersion()
|
||||
|
||||
public string GetString(string args)
|
||||
{
|
||||
using (Process javaProcess = new Process())
|
||||
try
|
||||
{
|
||||
javaProcess.StartInfo.FileName = this.JavaPath;
|
||||
javaProcess.StartInfo.Arguments = "-version";
|
||||
javaProcess.StartInfo.CreateNoWindow = true;
|
||||
javaProcess.StartInfo.UseShellExecute = false;
|
||||
javaProcess.StartInfo.RedirectStandardError = true;
|
||||
bool started = javaProcess.Start();
|
||||
string output = javaProcess.StandardError.ReadToEnd();
|
||||
javaProcess.WaitForExit(3000);
|
||||
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(output, @"^java version ""(\d+)\.(\d+)\.(\d+)_(\d+)"".$", System.Text.RegularExpressions.RegexOptions.Multiline);
|
||||
if (match.Groups.Count == 5)
|
||||
return new Version(Convert.ToInt32(match.Groups[1].Value), Convert.ToInt32(match.Groups[2].Value), Convert.ToInt32(match.Groups[3].Value), Convert.ToInt32(match.Groups[4].Value));
|
||||
else
|
||||
return null;
|
||||
using (Process javaProcess = new Process())
|
||||
{
|
||||
if (!String.IsNullOrEmpty(JavaPath))
|
||||
{
|
||||
javaProcess.StartInfo.FileName = JavaPath;
|
||||
javaProcess.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
javaProcess.StartInfo.FileName = "cmd.exe";
|
||||
javaProcess.StartInfo.Arguments = String.Format("/c \" java -jar \"{0}\" {1} \"", JarPath, args);
|
||||
}
|
||||
javaProcess.StartInfo.CreateNoWindow = true;
|
||||
javaProcess.StartInfo.UseShellExecute = false;
|
||||
javaProcess.StartInfo.RedirectStandardError = true;
|
||||
javaProcess.StartInfo.RedirectStandardOutput = true;
|
||||
javaProcess.Start();
|
||||
string output = javaProcess.StandardOutput.ReadToEnd();
|
||||
javaProcess.WaitForExit(3000);
|
||||
if (!String.IsNullOrEmpty(output))
|
||||
return output;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetJavaVersion()
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Process javaProcess = new Process())
|
||||
{
|
||||
if (!String.IsNullOrEmpty(JavaPath))
|
||||
{
|
||||
javaProcess.StartInfo.FileName = JavaPath;
|
||||
javaProcess.StartInfo.Arguments = "-version";
|
||||
}
|
||||
else
|
||||
{
|
||||
javaProcess.StartInfo.FileName = "cmd.exe";
|
||||
javaProcess.StartInfo.Arguments = "/c \"java -version \"";
|
||||
}
|
||||
javaProcess.StartInfo.CreateNoWindow = true;
|
||||
javaProcess.StartInfo.UseShellExecute = false;
|
||||
javaProcess.StartInfo.RedirectStandardError = true;
|
||||
javaProcess.Start();
|
||||
string output = javaProcess.StandardError.ReadToEnd();
|
||||
javaProcess.WaitForExit(3000);
|
||||
if (!String.IsNullOrEmpty(output))
|
||||
return output.Split(new[] { '\r', '\n' }).FirstOrDefault().Replace("java", "Java");
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,44 @@
|
||||
using System;
|
||||
using APKToolGUI;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Java
|
||||
{
|
||||
public class JavaUtils
|
||||
{
|
||||
public static bool TryGetSystemVariable(out string javaExeLocation)
|
||||
{
|
||||
try
|
||||
{
|
||||
ProcessStartInfo procStartInfo = new ProcessStartInfo("java", "-version ");
|
||||
procStartInfo.RedirectStandardOutput = true;
|
||||
procStartInfo.RedirectStandardError = true;
|
||||
procStartInfo.UseShellExecute = false;
|
||||
procStartInfo.CreateNoWindow = true;
|
||||
Process proc = new Process();
|
||||
proc.StartInfo = procStartInfo;
|
||||
proc.Start();
|
||||
if (!String.IsNullOrEmpty(proc.StandardError.ReadToEnd()))
|
||||
{
|
||||
javaExeLocation = "java";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
javaExeLocation = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
javaExeLocation = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
private static string GetJavaInstallationPath()
|
||||
{
|
||||
string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
|
||||
@@ -45,5 +79,37 @@ namespace Java
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public static string GetJavaPath()
|
||||
{
|
||||
string javaExec;
|
||||
if (!JavaUtils.TryGetSystemVariable(out javaExec))
|
||||
{
|
||||
javaExec = JavaUtils.SearchPath();
|
||||
if (!File.Exists(javaExec))
|
||||
{
|
||||
if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
using (OpenFileDialog openJavaExe = new OpenFileDialog())
|
||||
{
|
||||
openJavaExe.Filter = "java.exe|java.exe";
|
||||
if (openJavaExe.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
javaExec = Program.GetPortablePath(openJavaExe.FileName);
|
||||
}
|
||||
else
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
Environment.Exit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
return javaExec;
|
||||
}
|
||||
}
|
||||
return javaExec;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,333 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.34209
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace APKToolGUI {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||
/// </summary>
|
||||
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||
// с помощью такого средства, как ResGen или Visual Studio.
|
||||
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||
// с параметром /str или перестройте свой проект VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Language {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Language() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("APKToolGUI.Language", typeof(Language).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на About.
|
||||
/// </summary>
|
||||
internal static string About {
|
||||
get {
|
||||
return ResourceManager.GetString("About", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Apktool version.
|
||||
/// </summary>
|
||||
internal static string APKToolVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("APKToolVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Build.
|
||||
/// </summary>
|
||||
internal static string Build {
|
||||
get {
|
||||
return ResourceManager.GetString("Build", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Check for update.
|
||||
/// </summary>
|
||||
internal static string CheckForUpdate {
|
||||
get {
|
||||
return ResourceManager.GetString("CheckForUpdate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Debug mode.
|
||||
/// </summary>
|
||||
internal static string DebugMode {
|
||||
get {
|
||||
return ResourceManager.GetString("DebugMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Decode.
|
||||
/// </summary>
|
||||
internal static string Decode {
|
||||
get {
|
||||
return ResourceManager.GetString("Decode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Done.
|
||||
/// </summary>
|
||||
internal static string Done {
|
||||
get {
|
||||
return ResourceManager.GetString("Done", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Do you realy want to install context menu?.
|
||||
/// </summary>
|
||||
internal static string DoYouRealyWantToInstallCM {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouRealyWantToInstallCM", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Do you realy want to remove context menu?.
|
||||
/// </summary>
|
||||
internal static string DoYouRealyWantToRemoveCM {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouRealyWantToRemoveCM", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Java is not found. Do you want to select custom location?.
|
||||
/// </summary>
|
||||
internal static string DoYouWantToSelectJavaLocation {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouWantToSelectJavaLocation", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Error.
|
||||
/// </summary>
|
||||
internal static string Error {
|
||||
get {
|
||||
return ResourceManager.GetString("Error", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Java is not installed or is installed incorrectly. The program will be closed..
|
||||
/// </summary>
|
||||
internal static string ErrorJavaDetect {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorJavaDetect", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Error reading settings!.
|
||||
/// </summary>
|
||||
internal static string ErrorReadSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorReadSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Error saving settings!.
|
||||
/// </summary>
|
||||
internal static string ErrorSaveSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSaveSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Exit.
|
||||
/// </summary>
|
||||
internal static string Exit {
|
||||
get {
|
||||
return ResourceManager.GetString("Exit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на File.
|
||||
/// </summary>
|
||||
internal static string File {
|
||||
get {
|
||||
return ResourceManager.GetString("File", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на File not found.
|
||||
/// </summary>
|
||||
internal static string FileNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("FileNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Folder is not exist.
|
||||
/// </summary>
|
||||
internal static string FolderNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("FolderNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Help.
|
||||
/// </summary>
|
||||
internal static string Help {
|
||||
get {
|
||||
return ResourceManager.GetString("Help", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Install framework.
|
||||
/// </summary>
|
||||
internal static string InstallFramework {
|
||||
get {
|
||||
return ResourceManager.GetString("InstallFramework", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на For the changes to take effect you must restart the program. You want to do it now?.
|
||||
/// </summary>
|
||||
internal static string NeedRestart {
|
||||
get {
|
||||
return ResourceManager.GetString("NeedRestart", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Settings.
|
||||
/// </summary>
|
||||
internal static string Settings {
|
||||
get {
|
||||
return ResourceManager.GetString("Settings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Sign.
|
||||
/// </summary>
|
||||
internal static string Sign {
|
||||
get {
|
||||
return ResourceManager.GetString("Sign", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на System language.
|
||||
/// </summary>
|
||||
internal static string SystemLanguage {
|
||||
get {
|
||||
return ResourceManager.GetString("SystemLanguage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на New version is available. Do you want to update?.
|
||||
/// </summary>
|
||||
internal static string UpdateNewVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("UpdateNewVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на No update is available..
|
||||
/// </summary>
|
||||
internal static string UpdateNoUpdates {
|
||||
get {
|
||||
return ResourceManager.GetString("UpdateNoUpdates", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Decoding folder not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningDecodingFolderNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningDecodingFolderNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на File for decoding not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFileForDecodingNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFileForDecodingNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на File for signing not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFileForSigningNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFileForSigningNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Framework not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFrameworkNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFrameworkNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,900 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace APKToolGUI.Languages {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Language {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Language() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("APKToolGUI.Languages.Language", typeof(Language).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to About.
|
||||
/// </summary>
|
||||
internal static string About {
|
||||
get {
|
||||
return ResourceManager.GetString("About", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Aligning.
|
||||
/// </summary>
|
||||
internal static string Aligning {
|
||||
get {
|
||||
return ResourceManager.GetString("Aligning", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to All done!.
|
||||
/// </summary>
|
||||
internal static string AllDone {
|
||||
get {
|
||||
return ResourceManager.GetString("AllDone", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to AndroidManifest.xml does not exist.
|
||||
/// </summary>
|
||||
internal static string AndroidManifestNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("AndroidManifestNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to APK Selected:.
|
||||
/// </summary>
|
||||
internal static string APKSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("APKSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Apktool version.
|
||||
/// </summary>
|
||||
internal static string APKToolVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("APKToolVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Baksmali.
|
||||
/// </summary>
|
||||
internal static string Baksmali {
|
||||
get {
|
||||
return ResourceManager.GetString("Baksmali", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Build.
|
||||
/// </summary>
|
||||
internal static string Build {
|
||||
get {
|
||||
return ResourceManager.GetString("Build", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can't detect apktool version..
|
||||
/// </summary>
|
||||
internal static string CantDetectApktoolVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("CantDetectApktoolVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Changed target SDK to 29.
|
||||
/// </summary>
|
||||
internal static string ChangedTargetSdkTo29 {
|
||||
get {
|
||||
return ResourceManager.GetString("ChangedTargetSdkTo29", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Check for update.
|
||||
/// </summary>
|
||||
internal static string CheckForUpdate {
|
||||
get {
|
||||
return ResourceManager.GetString("CheckForUpdate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Clearing Framework.
|
||||
/// </summary>
|
||||
internal static string ClearingFramework {
|
||||
get {
|
||||
return ResourceManager.GetString("ClearingFramework", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Compile APK.
|
||||
/// </summary>
|
||||
internal static string CompileApk {
|
||||
get {
|
||||
return ResourceManager.GetString("CompileApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Assemble DEX.
|
||||
/// </summary>
|
||||
internal static string CompileDex {
|
||||
get {
|
||||
return ResourceManager.GetString("CompileDex", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Compiling dex.
|
||||
/// </summary>
|
||||
internal static string CompilingDex {
|
||||
get {
|
||||
return ResourceManager.GetString("CompilingDex", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Compiling successfully completed. Output directory "{0}".
|
||||
/// </summary>
|
||||
internal static string CompilingSuccessfullyCompleted {
|
||||
get {
|
||||
return ResourceManager.GetString("CompilingSuccessfullyCompleted", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Debug mode.
|
||||
/// </summary>
|
||||
internal static string DebugMode {
|
||||
get {
|
||||
return ResourceManager.GetString("DebugMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decode.
|
||||
/// </summary>
|
||||
internal static string Decode {
|
||||
get {
|
||||
return ResourceManager.GetString("Decode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The selected decompilation directory could not be created because contains invalid characters..
|
||||
/// </summary>
|
||||
internal static string DecodeCouldNotCreate {
|
||||
get {
|
||||
return ResourceManager.GetString("DecodeCouldNotCreate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompilation directory not selected..
|
||||
/// </summary>
|
||||
internal static string DecodeDirNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("DecodeDirNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The selected framework directory does not exist..
|
||||
/// </summary>
|
||||
internal static string DecodeSelectedFrameworkNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("DecodeSelectedFrameworkNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decoding.
|
||||
/// </summary>
|
||||
internal static string Decoding {
|
||||
get {
|
||||
return ResourceManager.GetString("Decoding", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompile APK.
|
||||
/// </summary>
|
||||
internal static string DecompileApk {
|
||||
get {
|
||||
return ResourceManager.GetString("DecompileApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompiled APK directory does not exist.
|
||||
/// </summary>
|
||||
internal static string DecompiledAPKNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("DecompiledAPKNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disassemble DEX.
|
||||
/// </summary>
|
||||
internal static string DecompileDex {
|
||||
get {
|
||||
return ResourceManager.GetString("DecompileDex", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompiling dex.
|
||||
/// </summary>
|
||||
internal static string DecompilingDex {
|
||||
get {
|
||||
return ResourceManager.GetString("DecompilingDex", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompiling successfully completed. Output directory "{0}"..
|
||||
/// </summary>
|
||||
internal static string DecompilingSuccessfullyCompleted {
|
||||
get {
|
||||
return ResourceManager.GetString("DecompilingSuccessfullyCompleted", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Done.
|
||||
/// </summary>
|
||||
internal static string Done {
|
||||
get {
|
||||
return ResourceManager.GetString("Done", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Do you realy want to install context menu?.
|
||||
/// </summary>
|
||||
internal static string DoYouRealyWantToInstallCM {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouRealyWantToInstallCM", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Do you realy want to remove context menu?.
|
||||
/// </summary>
|
||||
internal static string DoYouRealyWantToRemoveCM {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouRealyWantToRemoveCM", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Java is not found. Do you want to select custom location?.
|
||||
/// </summary>
|
||||
internal static string DoYouWantToSelectJavaLocation {
|
||||
get {
|
||||
return ResourceManager.GetString("DoYouWantToSelectJavaLocation", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You are running as administrator. Drag & drop is not supported.
|
||||
/// </summary>
|
||||
internal static string DragDropNotSupported {
|
||||
get {
|
||||
return ResourceManager.GetString("DragDropNotSupported", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Drag & drop is supported.
|
||||
/// </summary>
|
||||
internal static string DragDropSupported {
|
||||
get {
|
||||
return ResourceManager.GetString("DragDropSupported", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error.
|
||||
/// </summary>
|
||||
internal static string Error {
|
||||
get {
|
||||
return ResourceManager.GetString("Error", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error clearing framework.
|
||||
/// </summary>
|
||||
internal static string ErrorClearingFw {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorClearingFw", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Compiling failed.
|
||||
/// </summary>
|
||||
internal static string ErrorCompiling {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorCompiling", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decompiling failed.
|
||||
/// </summary>
|
||||
internal static string ErrorDecompiling {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorDecompiling", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error entering framework tag..
|
||||
/// </summary>
|
||||
internal static string ErrorEnteringFrameworkTag {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorEnteringFrameworkTag", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Java is not installed or is installed incorrectly. The program will be closed..
|
||||
/// </summary>
|
||||
internal static string ErrorJavaDetect {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorJavaDetect", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This directory is not an Android package.
|
||||
/// </summary>
|
||||
internal static string ErrorNotAnApk {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorNotAnApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error reading settings!.
|
||||
/// </summary>
|
||||
internal static string ErrorReadSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorReadSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error saving settings!.
|
||||
/// </summary>
|
||||
internal static string ErrorSaveSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSaveSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The selected file does not exist..
|
||||
/// </summary>
|
||||
internal static string ErrorSelectedFileNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSelectedFileNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The selected folder does not exist..
|
||||
/// </summary>
|
||||
internal static string ErrorSelectedFolderNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSelectedFolderNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The selected output folder does not exist..
|
||||
/// </summary>
|
||||
internal static string ErrorSelectedOutputFolderNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSelectedOutputFolderNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error selecting framework directory..
|
||||
/// </summary>
|
||||
internal static string ErrorSelectingFrameworkDirectory {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSelectingFrameworkDirectory", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error selecting framework file. The file does not exist..
|
||||
/// </summary>
|
||||
internal static string ErrorSelectingFrameworkFile {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSelectingFrameworkFile", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Signing failed..
|
||||
/// </summary>
|
||||
internal static string ErrorSigning {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorSigning", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error update checking:.
|
||||
/// </summary>
|
||||
internal static string ErrorUpdateChecking {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorUpdateChecking", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Failed to parse version.
|
||||
/// </summary>
|
||||
internal static string ErrorVersionParsing {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorVersionParsing", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Zipaligning failed.
|
||||
/// </summary>
|
||||
internal static string ErrorZipalign {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorZipalign", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Executable file.
|
||||
/// </summary>
|
||||
internal static string ExecutableFile {
|
||||
get {
|
||||
return ResourceManager.GetString("ExecutableFile", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Exit.
|
||||
/// </summary>
|
||||
internal static string Exit {
|
||||
get {
|
||||
return ResourceManager.GetString("Exit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File.
|
||||
/// </summary>
|
||||
internal static string File {
|
||||
get {
|
||||
return ResourceManager.GetString("File", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File is not found.
|
||||
/// </summary>
|
||||
internal static string FileNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("FileNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fixed AndroidManifest.xml.
|
||||
/// </summary>
|
||||
internal static string FixAndroidManifest {
|
||||
get {
|
||||
return ResourceManager.GetString("FixAndroidManifest", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Folder does not exist.
|
||||
/// </summary>
|
||||
internal static string FolderNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("FolderNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Framework cache cleared.
|
||||
/// </summary>
|
||||
internal static string FrameworkCacheCleared {
|
||||
get {
|
||||
return ResourceManager.GetString("FrameworkCacheCleared", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Framework directory does not exist.
|
||||
/// </summary>
|
||||
internal static string FrameworkDirNotExist {
|
||||
get {
|
||||
return ResourceManager.GetString("FrameworkDirNotExist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Error. Framework installation is not started..
|
||||
/// </summary>
|
||||
internal static string FrameworkInstallationNotStarted {
|
||||
get {
|
||||
return ResourceManager.GetString("FrameworkInstallationNotStarted", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Framework has been installed successfully.
|
||||
/// </summary>
|
||||
internal static string FrameworkInstalled {
|
||||
get {
|
||||
return ResourceManager.GetString("FrameworkInstalled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Get APK Info.
|
||||
/// </summary>
|
||||
internal static string GetApkInfo {
|
||||
get {
|
||||
return ResourceManager.GetString("GetApkInfo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Help.
|
||||
/// </summary>
|
||||
internal static string Help {
|
||||
get {
|
||||
return ResourceManager.GetString("Help", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Install framework.
|
||||
/// </summary>
|
||||
internal static string InstallFramework {
|
||||
get {
|
||||
return ResourceManager.GetString("InstallFramework", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Installing framework.
|
||||
/// </summary>
|
||||
internal static string InstallingFramework {
|
||||
get {
|
||||
return ResourceManager.GetString("InstallingFramework", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Main activity found in "{0}".
|
||||
/// </summary>
|
||||
internal static string MainActivityFound {
|
||||
get {
|
||||
return ResourceManager.GetString("MainActivityFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Could not find MainActivity. Please find it manually.
|
||||
/// </summary>
|
||||
internal static string MainActivityNotFoundPleaseFindManually {
|
||||
get {
|
||||
return ResourceManager.GetString("MainActivityNotFoundPleaseFindManually", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to For the changes to take effect you must restart the program. You want to do it now?.
|
||||
/// </summary>
|
||||
internal static string NeedRestart {
|
||||
get {
|
||||
return ResourceManager.GetString("NeedRestart", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This folder is not a decompiled APK.
|
||||
/// </summary>
|
||||
internal static string NotDecompiledApk {
|
||||
get {
|
||||
return ResourceManager.GetString("NotDecompiledApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This folder is not a decompiled DEX.
|
||||
/// </summary>
|
||||
internal static string NotDecompiledDex {
|
||||
get {
|
||||
return ResourceManager.GetString("NotDecompiledDex", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Removed all ApkTool dummies.
|
||||
/// </summary>
|
||||
internal static string RemoveApkToolDummies {
|
||||
get {
|
||||
return ResourceManager.GetString("RemoveApkToolDummies", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Required files are missing.
|
||||
/// </summary>
|
||||
internal static string RequiredFilesMissing {
|
||||
get {
|
||||
return ResourceManager.GetString("RequiredFilesMissing", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Settings.
|
||||
/// </summary>
|
||||
internal static string Settings {
|
||||
get {
|
||||
return ResourceManager.GetString("Settings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Sign.
|
||||
/// </summary>
|
||||
internal static string Sign {
|
||||
get {
|
||||
return ResourceManager.GetString("Sign", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Sign APK.
|
||||
/// </summary>
|
||||
internal static string SignApk {
|
||||
get {
|
||||
return ResourceManager.GetString("SignApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Signing.
|
||||
/// </summary>
|
||||
internal static string Signing {
|
||||
get {
|
||||
return ResourceManager.GetString("Signing", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Input file not found..
|
||||
/// </summary>
|
||||
internal static string SignInputFileNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("SignInputFileNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Private key not found..
|
||||
/// </summary>
|
||||
internal static string SignPrivateKeyNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("SignPrivateKeyNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Public key not found..
|
||||
/// </summary>
|
||||
internal static string SignPublicKeyNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("SignPublicKeyNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Signing successfully completed. File saved to "{0}"..
|
||||
/// </summary>
|
||||
internal static string SignSuccessfullyCompleted {
|
||||
get {
|
||||
return ResourceManager.GetString("SignSuccessfullyCompleted", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Smali.
|
||||
/// </summary>
|
||||
internal static string Smali {
|
||||
get {
|
||||
return ResourceManager.GetString("Smali", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to System language.
|
||||
/// </summary>
|
||||
internal static string SystemLanguage {
|
||||
get {
|
||||
return ResourceManager.GetString("SystemLanguage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Text file.
|
||||
/// </summary>
|
||||
internal static string TextFile {
|
||||
get {
|
||||
return ResourceManager.GetString("TextFile", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to New version is available. Do you want to update?.
|
||||
/// </summary>
|
||||
internal static string UpdateNewVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("UpdateNewVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No update is available..
|
||||
/// </summary>
|
||||
internal static string UpdateNoUpdates {
|
||||
get {
|
||||
return ResourceManager.GetString("UpdateNoUpdates", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Decoding folder not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningDecodingFolderNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningDecodingFolderNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File for decoding not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFileForDecodingNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFileForDecodingNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File for signing not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFileForSigningNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFileForSigningNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Framework not selected!.
|
||||
/// </summary>
|
||||
internal static string WarningFrameworkNotSelected {
|
||||
get {
|
||||
return ResourceManager.GetString("WarningFrameworkNotSelected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Zipalign.
|
||||
/// </summary>
|
||||
internal static string Zipalign {
|
||||
get {
|
||||
return ResourceManager.GetString("Zipalign", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Zipalign APK.
|
||||
/// </summary>
|
||||
internal static string ZipalignApk {
|
||||
get {
|
||||
return ResourceManager.GetString("ZipalignApk", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Zipalign successfully completed. File saved to "{0}".
|
||||
/// </summary>
|
||||
internal static string ZipalignFileSavedTo {
|
||||
get {
|
||||
return ResourceManager.GetString("ZipalignFileSavedTo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to ZIP archives.
|
||||
/// </summary>
|
||||
internal static string ZIPArchives {
|
||||
get {
|
||||
return ResourceManager.GetString("ZIPArchives", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -172,10 +172,10 @@
|
||||
<value>For the changes to take effect you must restart the program. You want to do it now?</value>
|
||||
</data>
|
||||
<data name="FileNotFound" xml:space="preserve">
|
||||
<value>File not found</value>
|
||||
<value>File is not found</value>
|
||||
</data>
|
||||
<data name="FolderNotExist" xml:space="preserve">
|
||||
<value>Folder is not exist</value>
|
||||
<value>Folder does not exist</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Error</value>
|
||||
@@ -207,4 +207,193 @@
|
||||
<data name="DoYouWantToSelectJavaLocation" xml:space="preserve">
|
||||
<value>Java is not found. Do you want to select custom location?</value>
|
||||
</data>
|
||||
<data name="CantDetectApktoolVersion" xml:space="preserve">
|
||||
<value>Can't detect apktool version.</value>
|
||||
</data>
|
||||
<data name="DecompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Decompiling successfully completed. Output directory "{0}".</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateChecking" xml:space="preserve">
|
||||
<value>Error update checking:</value>
|
||||
</data>
|
||||
<data name="SignSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Signing successfully completed. File saved to "{0}".</value>
|
||||
</data>
|
||||
<data name="Aligning" xml:space="preserve">
|
||||
<value>Aligning</value>
|
||||
</data>
|
||||
<data name="ErrorCompiling" xml:space="preserve">
|
||||
<value>Compiling failed</value>
|
||||
</data>
|
||||
<data name="ErrorEnteringFrameworkTag" xml:space="preserve">
|
||||
<value>Error entering framework tag.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFileNotExist" xml:space="preserve">
|
||||
<value>The selected file does not exist.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkDirectory" xml:space="preserve">
|
||||
<value>Error selecting framework directory.</value>
|
||||
</data>
|
||||
<data name="ErrorSelectingFrameworkFile" xml:space="preserve">
|
||||
<value>Error selecting framework file. The file does not exist.</value>
|
||||
</data>
|
||||
<data name="ErrorSigning" xml:space="preserve">
|
||||
<value>Signing failed.</value>
|
||||
</data>
|
||||
<data name="FrameworkInstallationNotStarted" xml:space="preserve">
|
||||
<value>Error. Framework installation is not started.</value>
|
||||
</data>
|
||||
<data name="InstallingFramework" xml:space="preserve">
|
||||
<value>Installing framework</value>
|
||||
</data>
|
||||
<data name="Signing" xml:space="preserve">
|
||||
<value>Signing</value>
|
||||
</data>
|
||||
<data name="SignInputFileNotFound" xml:space="preserve">
|
||||
<value>Input file not found.</value>
|
||||
</data>
|
||||
<data name="SignPrivateKeyNotFound" xml:space="preserve">
|
||||
<value>Private key not found.</value>
|
||||
</data>
|
||||
<data name="SignPublicKeyNotFound" xml:space="preserve">
|
||||
<value>Public key not found.</value>
|
||||
</data>
|
||||
<data name="ZIPArchives" xml:space="preserve">
|
||||
<value>ZIP archives</value>
|
||||
</data>
|
||||
<data name="DecodeCouldNotCreate" xml:space="preserve">
|
||||
<value>The selected decompilation directory could not be created because contains invalid characters.</value>
|
||||
</data>
|
||||
<data name="DecodeDirNotSelected" xml:space="preserve">
|
||||
<value>Decompilation directory not selected.</value>
|
||||
</data>
|
||||
<data name="DecodeSelectedFrameworkNotExist" xml:space="preserve">
|
||||
<value>The selected framework directory does not exist.</value>
|
||||
</data>
|
||||
<data name="Decoding" xml:space="preserve">
|
||||
<value>Decoding</value>
|
||||
</data>
|
||||
<data name="ErrorDecompiling" xml:space="preserve">
|
||||
<value>Decompiling failed</value>
|
||||
</data>
|
||||
<data name="ExecutableFile" xml:space="preserve">
|
||||
<value>Executable file</value>
|
||||
</data>
|
||||
<data name="ChangedTargetSdkTo29" xml:space="preserve">
|
||||
<value>Changed target SDK to 29</value>
|
||||
</data>
|
||||
<data name="ErrorVersionParsing" xml:space="preserve">
|
||||
<value>Failed to parse version</value>
|
||||
</data>
|
||||
<data name="FixAndroidManifest" xml:space="preserve">
|
||||
<value>Fixed AndroidManifest.xml</value>
|
||||
</data>
|
||||
<data name="RemoveApkToolDummies" xml:space="preserve">
|
||||
<value>Removed all ApkTool dummies</value>
|
||||
</data>
|
||||
<data name="APKSelected" xml:space="preserve">
|
||||
<value>APK Selected:</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedFolderNotExist" xml:space="preserve">
|
||||
<value>The selected folder does not exist.</value>
|
||||
</data>
|
||||
<data name="AndroidManifestNotExist" xml:space="preserve">
|
||||
<value>AndroidManifest.xml does not exist</value>
|
||||
</data>
|
||||
<data name="DecompiledAPKNotExist" xml:space="preserve">
|
||||
<value>Decompiled APK directory does not exist</value>
|
||||
</data>
|
||||
<data name="MainActivityFound" xml:space="preserve">
|
||||
<value>Main activity found in "{0}"</value>
|
||||
</data>
|
||||
<data name="MainActivityNotFoundPleaseFindManually" xml:space="preserve">
|
||||
<value>Could not find MainActivity. Please find it manually</value>
|
||||
</data>
|
||||
<data name="ClearingFramework" xml:space="preserve">
|
||||
<value>Clearing Framework</value>
|
||||
</data>
|
||||
<data name="CompilingSuccessfullyCompleted" xml:space="preserve">
|
||||
<value>Compiling successfully completed. Output directory "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorZipalign" xml:space="preserve">
|
||||
<value>Zipaligning failed</value>
|
||||
</data>
|
||||
<data name="ZipalignFileSavedTo" xml:space="preserve">
|
||||
<value>Zipalign successfully completed. File saved to "{0}"</value>
|
||||
</data>
|
||||
<data name="ErrorClearingFw" xml:space="preserve">
|
||||
<value>Error clearing framework</value>
|
||||
</data>
|
||||
<data name="FrameworkCacheCleared" xml:space="preserve">
|
||||
<value>Framework cache cleared</value>
|
||||
</data>
|
||||
<data name="AllDone" xml:space="preserve">
|
||||
<value>All done!</value>
|
||||
</data>
|
||||
<data name="FrameworkInstalled" xml:space="preserve">
|
||||
<value>Framework has been installed successfully</value>
|
||||
</data>
|
||||
<data name="FrameworkDirNotExist" xml:space="preserve">
|
||||
<value>Framework directory does not exist</value>
|
||||
</data>
|
||||
<data name="DecompilingDex" xml:space="preserve">
|
||||
<value>Decompiling dex</value>
|
||||
</data>
|
||||
<data name="ErrorSelectedOutputFolderNotExist" xml:space="preserve">
|
||||
<value>The selected output folder does not exist.</value>
|
||||
</data>
|
||||
<data name="CompilingDex" xml:space="preserve">
|
||||
<value>Compiling dex</value>
|
||||
</data>
|
||||
<data name="DragDropNotSupported" xml:space="preserve">
|
||||
<value>You are running as administrator. Drag & drop is not supported</value>
|
||||
</data>
|
||||
<data name="DragDropSupported" xml:space="preserve">
|
||||
<value>Drag & drop is supported</value>
|
||||
</data>
|
||||
<data name="ErrorNotAnApk" xml:space="preserve">
|
||||
<value>This directory is not an Android package</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>Compile APK</value>
|
||||
</data>
|
||||
<data name="CompileDex" xml:space="preserve">
|
||||
<value>Assemble DEX</value>
|
||||
</data>
|
||||
<data name="DecompileApk" xml:space="preserve">
|
||||
<value>Decompile APK</value>
|
||||
</data>
|
||||
<data name="DecompileDex" xml:space="preserve">
|
||||
<value>Disassemble DEX</value>
|
||||
</data>
|
||||
<data name="GetApkInfo" xml:space="preserve">
|
||||
<value>Get APK Info</value>
|
||||
</data>
|
||||
<data name="NotDecompiledApk" xml:space="preserve">
|
||||
<value>This folder is not a decompiled APK</value>
|
||||
</data>
|
||||
<data name="NotDecompiledDex" xml:space="preserve">
|
||||
<value>This folder is not a decompiled DEX</value>
|
||||
</data>
|
||||
<data name="RequiredFilesMissing" xml:space="preserve">
|
||||
<value>Required files are missing</value>
|
||||
</data>
|
||||
<data name="SignApk" xml:space="preserve">
|
||||
<value>Sign APK</value>
|
||||
</data>
|
||||
<data name="TextFile" xml:space="preserve">
|
||||
<value>Text file</value>
|
||||
</data>
|
||||
<data name="ZipalignApk" xml:space="preserve">
|
||||
<value>Zipalign APK</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,331 +0,0 @@
|
||||
/*************************************************************
|
||||
* PortableSettingsProvider.cs
|
||||
* Portable Settings Provider for C# applications
|
||||
*
|
||||
* 2010- Michael Nathan
|
||||
* http://www.Geek-Republic.com
|
||||
*
|
||||
* Licensed under Creative Commons CC BY-SA
|
||||
* http://creativecommons.org/licenses/by-sa/3.0/legalcode
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.Win32;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
public class PortableSettingsProvider : SettingsProvider
|
||||
{
|
||||
// Define some static strings later used in our XML creation
|
||||
// XML Root node
|
||||
const string XMLROOT = "configuration";
|
||||
|
||||
// Configuration declaration node
|
||||
const string CONFIGNODE = "configSections";
|
||||
|
||||
// Configuration section group declaration node
|
||||
const string GROUPNODE = "sectionGroup";
|
||||
|
||||
// User section node
|
||||
const string USERNODE = "userSettings";
|
||||
|
||||
// Application Specific Node
|
||||
string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings";
|
||||
|
||||
private System.Xml.XmlDocument xmlDoc = null;
|
||||
|
||||
|
||||
|
||||
// Override the Initialize method
|
||||
public override void Initialize(string name, NameValueCollection config)
|
||||
{
|
||||
base.Initialize(this.ApplicationName, config);
|
||||
}
|
||||
|
||||
// Override the ApplicationName property, returning the solution name. No need to set anything, we just need to
|
||||
// retrieve information, though the set method still needs to be defined.
|
||||
public override string ApplicationName
|
||||
{
|
||||
get
|
||||
{
|
||||
return (System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
|
||||
}
|
||||
set
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Simply returns the name of the settings file, which is the solution name plus ".config"
|
||||
public virtual string GetSettingsFilename()
|
||||
{
|
||||
return ApplicationName + ".config";
|
||||
}
|
||||
|
||||
// Gets current executable path in order to determine where to read and write the config file
|
||||
public virtual string GetAppPath()
|
||||
{
|
||||
return new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName;
|
||||
}
|
||||
|
||||
// Retrieve settings from the configuration file
|
||||
public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext sContext, SettingsPropertyCollection settingsColl)
|
||||
{
|
||||
// Create a collection of values to return
|
||||
SettingsPropertyValueCollection retValues = new SettingsPropertyValueCollection();
|
||||
|
||||
// Create a temporary SettingsPropertyValue to reuse
|
||||
SettingsPropertyValue setVal;
|
||||
|
||||
// Loop through the list of settings that the application has requested and add them
|
||||
// to our collection of return values.
|
||||
foreach (SettingsProperty sProp in settingsColl)
|
||||
{
|
||||
setVal = new SettingsPropertyValue(sProp);
|
||||
setVal.IsDirty = false;
|
||||
setVal.SerializedValue = GetSetting(sProp);
|
||||
retValues.Add(setVal);
|
||||
}
|
||||
return retValues;
|
||||
}
|
||||
|
||||
// Save any of the applications settings that have changed (flagged as "dirty")
|
||||
public override void SetPropertyValues(SettingsContext sContext, SettingsPropertyValueCollection settingsColl)
|
||||
{
|
||||
// Set the values in XML
|
||||
foreach (SettingsPropertyValue spVal in settingsColl)
|
||||
{
|
||||
SetSetting(spVal);
|
||||
}
|
||||
|
||||
// Write the XML file to disk
|
||||
try
|
||||
{
|
||||
XMLConfig.Save(System.IO.Path.Combine(GetAppPath(), GetSettingsFilename()));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Create an informational message for the user if we cannot save the settings.
|
||||
// Enable whichever applies to your application type.
|
||||
|
||||
// Uncomment the following line to enable a MessageBox for forms-based apps
|
||||
System.Windows.Forms.MessageBox.Show(ex.Message, "Error writting configuration file to disk", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
|
||||
|
||||
// Uncomment the following line to enable a console message for console-based apps
|
||||
//Console.WriteLine("Error writing configuration file to disk: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private XmlDocument XMLConfig
|
||||
{
|
||||
get
|
||||
{
|
||||
// Check if we already have accessed the XML config file. If the xmlDoc object is empty, we have not.
|
||||
if (xmlDoc == null)
|
||||
{
|
||||
xmlDoc = new XmlDocument();
|
||||
|
||||
// If we have not loaded the config, try reading the file from disk.
|
||||
try
|
||||
{
|
||||
xmlDoc.Load(System.IO.Path.Combine(GetAppPath(), GetSettingsFilename()));
|
||||
}
|
||||
|
||||
// If the file does not exist on disk, catch the exception then create the XML template for the file.
|
||||
catch (Exception)
|
||||
{
|
||||
// XML Declaration
|
||||
// <?xml version="1.0" encoding="utf-8"?>
|
||||
XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
|
||||
xmlDoc.AppendChild(dec);
|
||||
|
||||
// Create root node and append to the document
|
||||
// <configuration>
|
||||
XmlElement rootNode = xmlDoc.CreateElement(XMLROOT);
|
||||
xmlDoc.AppendChild(rootNode);
|
||||
|
||||
// Create Configuration Sections node and add as the first node under the root
|
||||
// <configSections>
|
||||
XmlElement configNode = xmlDoc.CreateElement(CONFIGNODE);
|
||||
xmlDoc.DocumentElement.PrependChild(configNode);
|
||||
|
||||
// Create the user settings section group declaration and append to the config node above
|
||||
// <sectionGroup name="userSettings"...>
|
||||
XmlElement groupNode = xmlDoc.CreateElement(GROUPNODE);
|
||||
groupNode.SetAttribute("name", USERNODE);
|
||||
groupNode.SetAttribute("type", "System.Configuration.UserSettingsGroup");
|
||||
configNode.AppendChild(groupNode);
|
||||
|
||||
// Create the Application section declaration and append to the groupNode above
|
||||
// <section name="AppName.Properties.Settings"...>
|
||||
XmlElement newSection = xmlDoc.CreateElement("section");
|
||||
newSection.SetAttribute("name", APPNODE);
|
||||
newSection.SetAttribute("type", "System.Configuration.ClientSettingsSection");
|
||||
groupNode.AppendChild(newSection);
|
||||
|
||||
// Create the userSettings node and append to the root node
|
||||
// <userSettings>
|
||||
XmlElement userNode = xmlDoc.CreateElement(USERNODE);
|
||||
xmlDoc.DocumentElement.AppendChild(userNode);
|
||||
|
||||
// Create the Application settings node and append to the userNode above
|
||||
// <AppName.Properties.Settings>
|
||||
XmlElement appNode = xmlDoc.CreateElement(APPNODE);
|
||||
userNode.AppendChild(appNode);
|
||||
}
|
||||
}
|
||||
return xmlDoc;
|
||||
}
|
||||
}
|
||||
|
||||
// Retrieve values from the configuration file, or if the setting does not exist in the file,
|
||||
// retrieve the value from the application's default configuration
|
||||
private object GetSetting(SettingsProperty setProp)
|
||||
{
|
||||
object retVal;
|
||||
try
|
||||
{
|
||||
// Search for the specific settings node we are looking for in the configuration file.
|
||||
// If it exists, return the InnerText or InnerXML of its first child node, depending on the setting type.
|
||||
|
||||
// If the setting is serialized as a string, return the text stored in the config
|
||||
if (setProp.SerializeAs.ToString() == "String")
|
||||
{
|
||||
return XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild.InnerText;
|
||||
}
|
||||
|
||||
// If the setting is stored as XML, deserialize it and return the proper object. This only supports
|
||||
// StringCollections at the moment - I will likely add other types as I use them in applications.
|
||||
else
|
||||
{
|
||||
string settingType = setProp.PropertyType.ToString();
|
||||
string xmlData = XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild.InnerXml;
|
||||
XmlSerializer xs = new XmlSerializer(typeof(string[]));
|
||||
string[] data = (string[])xs.Deserialize(new XmlTextReader(xmlData, XmlNodeType.Element, null));
|
||||
|
||||
switch (settingType)
|
||||
{
|
||||
case "System.Collections.Specialized.StringCollection":
|
||||
StringCollection sc = new StringCollection();
|
||||
sc.AddRange(data);
|
||||
return sc;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// Check to see if a default value is defined by the application.
|
||||
// If so, return that value, using the same rules for settings stored as Strings and XML as above
|
||||
if ((setProp.DefaultValue != null))
|
||||
{
|
||||
if (setProp.SerializeAs.ToString() == "String")
|
||||
{
|
||||
retVal = setProp.DefaultValue.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
string settingType = setProp.PropertyType.ToString();
|
||||
string xmlData = setProp.DefaultValue.ToString();
|
||||
XmlSerializer xs = new XmlSerializer(typeof(string[]));
|
||||
string[] data = (string[])xs.Deserialize(new XmlTextReader(xmlData, XmlNodeType.Element, null));
|
||||
|
||||
switch (settingType)
|
||||
{
|
||||
case "System.Collections.Specialized.StringCollection":
|
||||
StringCollection sc = new StringCollection();
|
||||
sc.AddRange(data);
|
||||
return sc;
|
||||
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
retVal = "";
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
private void SetSetting(SettingsPropertyValue setProp)
|
||||
{
|
||||
// Define the XML path under which we want to write our settings if they do not already exist
|
||||
XmlNode SettingNode = null;
|
||||
|
||||
try
|
||||
{
|
||||
// Search for the specific settings node we want to update.
|
||||
// If it exists, return its first child node, (the <value>data here</value> node)
|
||||
SettingNode = XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
SettingNode = null;
|
||||
}
|
||||
|
||||
// If we have a pointer to an actual XML node, update the value stored there
|
||||
if ((SettingNode != null))
|
||||
{
|
||||
if (setProp.Property.SerializeAs.ToString() == "String")
|
||||
{
|
||||
SettingNode.InnerText = setProp.SerializedValue.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Write the object to the config serialized as Xml - we must remove the Xml declaration when writing
|
||||
// the value, otherwise .Net's configuration system complains about the additional declaration.
|
||||
SettingNode.InnerXml = setProp.SerializedValue.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the value did not already exist in this settings file, create a new entry for this setting
|
||||
|
||||
// Search for the application settings node (<Appname.Properties.Settings>) and store it.
|
||||
XmlNode tmpNode = XMLConfig.SelectSingleNode("//" + APPNODE);
|
||||
|
||||
// Create a new settings node and assign its name as well as how it will be serialized
|
||||
XmlElement newSetting = xmlDoc.CreateElement("setting");
|
||||
newSetting.SetAttribute("name", setProp.Name);
|
||||
|
||||
if (setProp.Property.SerializeAs.ToString() == "String")
|
||||
{
|
||||
newSetting.SetAttribute("serializeAs", "String");
|
||||
}
|
||||
else
|
||||
{
|
||||
newSetting.SetAttribute("serializeAs", "Xml");
|
||||
}
|
||||
|
||||
// Append this node to the application settings node (<Appname.Properties.Settings>)
|
||||
tmpNode.AppendChild(newSetting);
|
||||
|
||||
// Create an element under our named settings node, and assign it the value we are trying to save
|
||||
XmlElement valueElement = xmlDoc.CreateElement("value");
|
||||
if (setProp.Property.SerializeAs.ToString() == "String")
|
||||
{
|
||||
valueElement.InnerText = setProp.SerializedValue.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Write the object to the config serialized as Xml - we must remove the Xml declaration when writing
|
||||
// the value, otherwise .Net's configuration system complains about the additional declaration
|
||||
valueElement.InnerXml = setProp.SerializedValue.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
|
||||
}
|
||||
|
||||
//Append this new element under the setting node we created above
|
||||
newSetting.AppendChild(valueElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
using System;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Properties;
|
||||
using Bluegrams.Application;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace APKToolGUI
|
||||
@@ -9,13 +14,24 @@ namespace APKToolGUI
|
||||
/// <summary>
|
||||
/// Главная точка входа для приложения.
|
||||
/// </summary>
|
||||
[DllImport("Shcore.dll")]
|
||||
static extern int SetProcessDpiAwareness(int PROCESS_DPI_AWARENESS);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool SetProcessDPIAware();
|
||||
|
||||
[STAThread]
|
||||
static void Main(String[] arg)
|
||||
{
|
||||
if (Environment.OSVersion.Version.Major == 6)
|
||||
{
|
||||
SetProcessDPIAware();
|
||||
}
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
if (arg.Length > 0)
|
||||
if (arg.Length == 1)
|
||||
{
|
||||
switch (arg[0])
|
||||
{
|
||||
@@ -25,24 +41,36 @@ namespace APKToolGUI
|
||||
case "rcm":
|
||||
ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove);
|
||||
break;
|
||||
case "b":
|
||||
Application.Run(new FormBuild(arg));
|
||||
break;
|
||||
case "d":
|
||||
Application.Run(new FormDecode(arg));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (arg.Length == 2)
|
||||
{
|
||||
switch (arg[0])
|
||||
{
|
||||
case "comapk":
|
||||
if (!File.Exists(Path.Combine(arg[1], "AndroidManifest.xml")))
|
||||
{
|
||||
MessageBox.Show(Language.NotDecompiledApk, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (FilesCheck() == true)
|
||||
{
|
||||
Directory.CreateDirectory(TEMP_DIR);
|
||||
PortableSettingsProvider.SettingsFileName = "config.xml";
|
||||
PortableSettingsProvider.ApplyProvider(Settings.Default);
|
||||
Application.Run(new FormMain());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetLanguage()
|
||||
{
|
||||
String settingsCulture = Properties.Settings.Default.Culture;
|
||||
String settingsCulture = Settings.Default.Culture;
|
||||
|
||||
if (settingsCulture.Equals("Auto"))
|
||||
{
|
||||
@@ -68,7 +96,7 @@ namespace APKToolGUI
|
||||
{
|
||||
files += file + Environment.NewLine;
|
||||
}
|
||||
MessageBox.Show("Отсутствуют необходимые файлы:" + files, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
MessageBox.Show(Language.RequiredFilesMissing + files, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
//Application.Exit();
|
||||
return false;
|
||||
}
|
||||
@@ -82,12 +110,16 @@ namespace APKToolGUI
|
||||
String[] fileList = new String[]{
|
||||
APKTOOL_PATH,
|
||||
ZIPALIGN_PATH,
|
||||
SIGNAPK_PATH,
|
||||
APKSIGNER_PATH,
|
||||
BAKSMALI_PATH,
|
||||
SMALI_PATH,
|
||||
AAPT_PATH,
|
||||
AAPT2_PATH,
|
||||
SIGNAPK_KEYPRIVATE,
|
||||
SIGNAPK_KEYPUBLIC};
|
||||
for (int i = 0; i < fileList.Length; i++)
|
||||
if (!System.IO.File.Exists(fileList[i]))
|
||||
missingFiles.Add(System.IO.Path.GetFileName(fileList[i]));
|
||||
if (!File.Exists(fileList[i]))
|
||||
missingFiles.Add(Path.GetFileName(fileList[i]));
|
||||
return missingFiles;
|
||||
}
|
||||
|
||||
@@ -116,24 +148,25 @@ namespace APKToolGUI
|
||||
|
||||
public static string GetPortablePath(string path)
|
||||
{
|
||||
string startupPath = Application.StartupPath + System.IO.Path.DirectorySeparatorChar;
|
||||
string startupPath = Application.StartupPath + Path.DirectorySeparatorChar;
|
||||
if (path.Contains(startupPath))
|
||||
return path.Replace(startupPath, String.Empty);
|
||||
else
|
||||
return path;
|
||||
}
|
||||
|
||||
private static readonly string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||
public static string APKTOOL_PATH { get { return appPath + @"\bin\apktool.jar"; } }
|
||||
public static string SIGNAPK_PATH { get { return appPath + @"\bin\signapk.jar"; } }
|
||||
public static string SIGNAPK_KEYPRIVATE { get { return appPath + @"\bin\testkey.pk8"; } }
|
||||
public static string SIGNAPK_KEYPUBLIC { get { return appPath + @"\bin\testkey.x509.pem"; } }
|
||||
public static string ZIPALIGN_PATH { get { return appPath + @"\bin\zipalign.exe"; } }
|
||||
|
||||
//public static readonly string APKTOOL_PATH = appPath + @"\bin\apktool.jar";
|
||||
//public static readonly string SIGNAPK_PATH = appPath + @"\bin\signapk.jar";
|
||||
//public static readonly string SIGNAPK_KEYPRIVATE = appPath + @"\bin\testkey.pk8";
|
||||
//public static readonly string SIGNAPK_KEYPUBLIC = appPath + @"\bin\testkey.x509.pem";
|
||||
//public static readonly string ZIPALIGN_PATH = appPath + @"\bin\zipalign.exe";
|
||||
public static string LOCAL_APPDATA_PATH = Environment.GetEnvironmentVariable("LocalAppData");
|
||||
public static string TEMP_DIR = Path.Combine(Path.GetTempPath(), "APKToolGUI");
|
||||
public static string APP_PATH = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||
public static string APKTOOL_PATH = APP_PATH + @"\Resources\apktool.jar";
|
||||
public static string APKSIGNER_PATH = APP_PATH + @"\Resources\apksigner.jar";
|
||||
public static string BAKSMALI_PATH = APP_PATH + @"\Resources\baksmali.jar";
|
||||
public static string SMALI_PATH = APP_PATH + @"\Resources\smali.jar";
|
||||
public static string SIGNAPK_KEYPRIVATE = APP_PATH + @"\Resources\testkey.pk8";
|
||||
public static string SIGNAPK_KEYPUBLIC = APP_PATH + @"\Resources\testkey.x509.pem";
|
||||
public static string ZIPALIGN_PATH = APP_PATH + @"\Resources\zipalign.exe";
|
||||
public static string AAPT_PATH = APP_PATH + @"\Resources\aapt.exe";
|
||||
public static string AAPT2_PATH = APP_PATH + @"\Resources\aapt2.exe";
|
||||
public static string FRAMEWORK_DIR = LOCAL_APPDATA_PATH + @"\apktool\framework";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ using System.Runtime.InteropServices;
|
||||
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
|
||||
// связанные со сборкой.
|
||||
[assembly: AssemblyTitle("APKTool GUI")]
|
||||
[assembly: AssemblyDescription("Графический интерфейс для утилит akptool, signapk и zipalign.")]
|
||||
[assembly: AssemblyDescription("GUI for apktool, signapk and zipalign utilities.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("APKTool GUI")]
|
||||
[assembly: AssemblyCopyright("© INFINUM, 2012-2015")]
|
||||
[assembly: AssemblyCopyright("© INFINUM, 2012-2015 | AndnixSH, 2022")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
|
||||
// используя "*", как показано ниже:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.4.0.446")]
|
||||
[assembly: AssemblyFileVersion("2.4.0.446")]
|
||||
[assembly: AssemblyVersion("3.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("3.0.0.0")]
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.34209
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -13,13 +13,13 @@ namespace APKToolGUI.Properties {
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||
// с помощью такого средства, как ResGen или Visual Studio.
|
||||
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||
// с параметром /str или перестройте свой проект VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
@@ -33,7 +33,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
@@ -47,8 +47,8 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
@@ -61,7 +61,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap android {
|
||||
get {
|
||||
@@ -71,7 +71,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Icon, аналогичного (Значок).
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon android_thin {
|
||||
get {
|
||||
@@ -81,7 +81,37 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap apkaio {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("apkaio", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap apkcombo {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("apkcombo", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap apkpure {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("apkpure", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap done {
|
||||
get {
|
||||
@@ -91,7 +121,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap error {
|
||||
get {
|
||||
@@ -101,7 +131,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap info {
|
||||
get {
|
||||
@@ -111,7 +141,17 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap playstore {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("playstore", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap waiting {
|
||||
get {
|
||||
@@ -121,7 +161,7 @@ namespace APKToolGUI.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap warning {
|
||||
get {
|
||||
|
||||
@@ -117,26 +117,361 @@
|
||||
<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="done" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||
EgAACxIB0t1+/AAAAtVJREFUeF7tmzFu3DAQRfcoPoKBXGCP4pMErtK6TuVD5AB7gQBbGqncJU0AV6k3
|
||||
/wdDQFgMxSFFDqlQH3jVcobzKYmSKO7p0KFDh1rq8/dPD+AJvIILuCVgG7ZlzIOk2ZdYOHgB70AzmQNz
|
||||
MNf4g4Eiz8BylEth7rN0N45Q1KMUpxXdAvb1KN33FQp5XhTmzbOU4S90zqN+XRTTC9bgezagQ17rH1LA
|
||||
CLAWn7kBHfH2pBUxAk9SZhuxg7sOR6TNICAxT3utwxGpezkgISe8ka75FKy13sSIZCPM9rlcpfxtQqKe
|
||||
9/mtbHtOQAKe+lriPVF+KSDY8/G2FRexkycE7mnWT5F/V0DQ/3D0A3lnAQL4Pq8l6saX6/l2+flV/c2I
|
||||
fT0BjbkAoSXpAs3/+vPjRl1/f1PbGHgRe2mhcY2VnCoszQcVDsK72FsXGg5z+mvmgwoHIX0ZoNEQLzxr
|
||||
5oMK5oT0ixIacUVWC3bDYp6/s50Wv8Kr2IwLjbre/hqaJ+nboRLkRmPz/xCbcWlBVlgYJ6eSAj3ME7EZ
|
||||
lxZk5e3jUlSol3kiNuPSgizwyC9lLdjTPBGbcWlBKe7NB6UK9zZPxGZcWtAavBevKWagh3kiNuPSgtYo
|
||||
MdLLPBGbcWlBKXIM9TRPxGZcaFT0IGQ11tM8MD0IFT8KWwZhTY3NE9Oj8KaXodJBcDBPTC9Dm1+HcwfB
|
||||
yTyxrQqh4eYFEesgOJq3LYhQaFxlSSw1CI7mSdaSWLVVodggOJsneZusEFBtXeB+EDqYz/84gqCqH0bC
|
||||
IHQwT8o+lyOw6uoQjXcwX/ZpjELw3B9HKSSY9/N4EBLNu0GCQrI9bpGpu7cYCefdJBWExPNukwtiB3cd
|
||||
jkRb80HoaN6tskHokO8Lo2yWrjvh5Qidz7ldfikUwtuk50dV9jXGHyaWQlGcG1oOBHP7XuslQpGcH+b7
|
||||
05QmFg5465znb3OHDh3aiU6nv6AL+Yl8pM6XAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="android" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="info" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Info1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="done" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Done.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\exclamation-red-frame-icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="android" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\android.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="warning" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="android_thin" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\android-thin.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="apkcombo" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
||||
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5gIUECEzhhsWEgAAAIFJREFU
|
||||
OE+9jNENgCAMRPthHMYp3MRx3MUlWMJ91BLaXOCK+ONLXri0V6Rh3y71OJe5TCTnMi+jmJTWycu1w7Bj
|
||||
dQgsR7mLFSMp3SWh6ePAciR2HLasVHLGjoMDy6Afq9hxyNKO7HWhk3OGLR+bYxU7FCwzX2FH6BB1+dOx
|
||||
8t8HIjeYr/a0lujdLAAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="apkpure" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
88NQBeoAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="playstore" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
||||
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5gIUESUj/gKpRQAABIRJREFU
|
||||
WEfF11tMm2UYB/CvE8IkBrItZiYaYnCDlTGgg7VMb0jc2pVyKCzohV4bD9HEyEHmCj0YDzFRpybELBFd
|
||||
NpfovXG94WKbG65xFHgprBzaFVqggx44ybry+Lzd97H3LW1hrJsX/4vS73v+P573Iy0CAMj+z3CA/LH5
|
||||
3AKH5fN9TqOp0vWNnH3vcYUDZF+Hzp02K8kZaYZdY22RPI/xjDL8wx72mnSHA+y4BheFKwBZfVaS7WqG
|
||||
nZ5myPGd8uf5zR++BT9mstemKxxA6IXfhb8AKCJz0EqyvC2QOd0CT822QM68wfFi+It69vp0hAfcQMA1
|
||||
BIiIjCEryfAjYK4VZPOtsCPYBrmhzkuFi1+Vsvc9SniADQF/YzmDkDmsRBZoBSH4IJmh9sieBXOXavHb
|
||||
vez92wkPuIkAGxZTxPUHCOGWlbAAKVnBU4Hnwpa2Jvgti53zMOEBdgT8g4UU0YuREJcxSRA0z4QMzrzl
|
||||
L5vYWVsND+hHQB+WSYi440iFiD0f4Y6ewqWvj7AzNwsPGERAPxbFI9hNOP9MiqDJCLVHdweN3Yql759n
|
||||
ZycLDyAIGMSSVIjYJlIjaN6cbboBrr0GgKqn2Y748IBhBBAsSIW4iqGIFJvQTzcMwAiOdmJc2RPgfeEN
|
||||
tofNRsAQDqeIATEPuQm9D8sJjh3GjGLGMW4c7825CjMvvcL2xTq5FxQwjINZxGabYBB6L5YP4MghjLSB
|
||||
GAAziZnOAPDvPgvQtP5niz9lAE4EjOBQB0ZCbOWZwOOon2q0Qx+OkwB0AxQwgZEAPswsxp9tSgwYQ8At
|
||||
HCghaDbbBCI+O/0TWXunzA52HBe/gXjAjAARn4APZyLAOAJGcaiEoMchIZJs4lNDN4kePQ5rR48BvF16
|
||||
/wg2PAMYBKwh4K5X6LLZhPVPVnyHAbgQMIaDKcKJiT8OaRN2DCIsHd0kUqmBe5VqiFaKiHcRQQF0AyJg
|
||||
zYW/tVu4HBoXVGxfrJN7QQETOJwiKCDRJkSE2dhNVpUaWFWqIaJS30fQTbx8HOA9RIhHcM8pTCyPCq+z
|
||||
PWx4gFsESIj44xA3YTL9TJYrTsC/RzDxCHETkQ8O9q46hHanU0j5QZUcwCKY4zCafiELh7WwVK6F5Qot
|
||||
rFRQwAm4q9LEEJjoivLVszMq1ZY+qjcC3FiUCIGb6MDysEIHC4erYZEiEEA3sYKbWKlQw6LyWE+grErB
|
||||
ztwsiQEusZxBGCznSKC0BkJlNNUxhLSJhXKt8065uoGdtdUkBkgIMafN58hcSS3Ml9TAOgI3EVRUB/wK
|
||||
zUc2oXzbX1h5gAcBt0WAiPjEcp7MFtfBnUN1MHcIEaU0ushMibbLW1D1LHv/dpIS0G4+T6aL6mG2mKYO
|
||||
/MW14CvRXXIXaQ6y9z1KeMAkAjxYjoiPzReIV94APrkeKGKqqJa45DU69vp0hAfcjl6k5W2mC2SysBGm
|
||||
5I3gOaCfGz9Q+36PUPUE/jFxRQytpl+Ju+AkuAtPRkb368/05+l2sdekOxxg33d/5PbLX7M48hs6b+bX
|
||||
7Gffe1zhAE8+IPsPdRQlTjbOQZ0AAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="info" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="waiting" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\waiting.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="warning" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="apkaio" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\apkaio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -2,164 +2,224 @@
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="APKToolGUI.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="MAIN_Decode_NoSrc" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_NoSrc" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_NoRes" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_NoRes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_Force" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_UseFramework" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_ForceAll" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_InputAppPath" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_FrameDir" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_BuildProjectDir" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_InstallFramework_InputFramePath" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_SIGN_InputFile" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_SIGN_OutputFile" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_UseAapt" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_AaptPath" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Culture" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">Auto</Value>
|
||||
</Setting>
|
||||
<Setting Name="JavaExe" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="LastUpdateCheck" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.DateTime" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="CheckForUpdateAtStartup" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_Force" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="ClearLogBeforeAction" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_ForceAll" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
<Setting Name="Build_ForceAll" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_CustomAapt" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_AaptPath" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Setting Name="Decode_InputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_NoRes" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_NoSrc" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_Force" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_UseFramework" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_CopyOriginal" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_UseFramework" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BUILD_FrameworkPath" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Setting Name="Decode_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_KeepBrokenResource" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DECOMPILE_MatchOriginal" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_MatchOriginal" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_KeepBrokenRes" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_CopyOriginal" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_FrameDir" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Setting Name="BuildProjectDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_UseFramework" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_UseOutputDir" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Decode_OutputDir" Provider="PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Setting Name="InstallFramework_InputFramePath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_UseOutputAppPath" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Sign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Sign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Build_UseAapt" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_OutputAppPath" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Build_AaptPath" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Build_InputDir" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Culture" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">Auto</Value>
|
||||
</Setting>
|
||||
<Setting Name="JavaExe" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_InstallFramework_UseFrameDir" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="LastUpdateCheck" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.DateTime" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="CheckForUpdateAtStartup" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="ClearLogBeforeAction" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_InstallFramework_UseTag" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Decode_MatchOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_InstallFramework_Tag" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Decode_KeepBrokenRes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_CopyOriginal" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_InstallFramework_FrameDir" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Build_UseFramework" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_UseOutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" GenerateDefaultValueInCode="false" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_AlignmentInBytes" Provider="PortableSettingsProvider" Type="System.Decimal" Scope="User">
|
||||
<Setting Name="Build_UseOutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_OutputAppPath" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Build_InputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="InstallFramework_UseFrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="InstallFramework_UseTag" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="InstallFramework_Tag" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="InstallFramework_FrameDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Zipalign_AlignmentInBytes" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">4</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_OverwriteOutputFile" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Zipalign_OverwriteOutputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_CheckOnly" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Zipalign_CheckOnly" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_Verbose" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Zipalign_Verbose" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_OutputFile" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Zipalign_OutputDir" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_InputFile" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Setting Name="Zipalign_InputFile" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_Zipalign_Recompress" Provider="PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="Zipalign_Recompress" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MAIN_SIGN_PublicKey" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">bin\testkey.x509.pem</Value>
|
||||
<Setting Name="Sign_PublicKey" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="MAIN_SIGN_PrivateKey" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">bin\testkey.pk8</Value>
|
||||
<Setting Name="Sign_PrivateKey" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Decode_OnlyMainClasses" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_FixError" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_NoCrunch" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_NoDebugInfo" Provider="Bluegrams.Application.PortableSettingsProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Framework_ClearBeforeDecode" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_ZipalignAfterBuild" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_SignAfterBuild" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="Zipalign_UseOutputDir" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Zipalign_SignAfterZipAlign" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_Alias" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">CERT</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_SetAlias" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_CreateUnsignedApk" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_UseKeystoreFile" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_KeystoreFilePath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Sign_KeystorePassword" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Sign_UseOutputDir" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_Schemev1" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_Schemev2" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_Schemev3" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="Sign_Schemev4" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">2</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_ApiLevel" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">29</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_ApiLevel" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">29</Value>
|
||||
</Setting>
|
||||
<Setting Name="Build_SetApiLevel" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Decode_SetApiLevel" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Baksmali_InputDexFile" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Smali_OutputDexFile" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Baksmali_OutputDir" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Baksmali_UseOutputDir" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Smali_InputDir" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Smali_OutputDir" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="Smali_UseOutputDir" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreOutputDirContextMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
|
Before Width: | Height: | Size: 793 B After Width: | Height: | Size: 976 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 380 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 355 B |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 874 B |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 585 B After Width: | Height: | Size: 2.7 KiB |
@@ -1,55 +0,0 @@
|
||||
using System;
|
||||
using Java;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class Signapk : JarProcess
|
||||
{
|
||||
public new event SignapkExitedEventHandler Exited;
|
||||
public string PublicKeyPath { get; set; }
|
||||
public string PrivateKeyPath { get; set; }
|
||||
private string lastSourceApk;
|
||||
private string lastOutApk;
|
||||
|
||||
public Signapk(string javaPath, string jarPath)
|
||||
: base(javaPath, jarPath)
|
||||
{
|
||||
base.Exited += Signapk_Exited;
|
||||
}
|
||||
|
||||
void Signapk_Exited(object sender, EventArgs e)
|
||||
{
|
||||
if (this.Exited != null)
|
||||
this.Exited(this, new SignapkExitedEventArgs(base.ExitCode, lastSourceApk, lastOutApk));
|
||||
}
|
||||
|
||||
public bool Sign(string sourceApk, string outApk)
|
||||
{
|
||||
return Sign(PublicKeyPath, PrivateKeyPath, sourceApk, outApk);
|
||||
}
|
||||
|
||||
public bool Sign(string publicKeyPath, string privateKeyPath, string sourceApk, string outApk)
|
||||
{
|
||||
lastSourceApk = sourceApk;
|
||||
lastOutApk = outApk;
|
||||
string args = String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\"", publicKeyPath, privateKeyPath, sourceApk, outApk);
|
||||
return base.Start(args);
|
||||
}
|
||||
}
|
||||
|
||||
public class SignapkExitedEventArgs : EventArgs
|
||||
{
|
||||
public SignapkExitedEventArgs(int exitCode, string sourceFilePath, string outFilePath)
|
||||
{
|
||||
this.ExitCode = exitCode;
|
||||
this.SourceFilePath = sourceFilePath;
|
||||
this.OutFilePath = outFilePath;
|
||||
}
|
||||
|
||||
public int ExitCode { get; private set; }
|
||||
public string SourceFilePath { get; private set; }
|
||||
public string OutFilePath { get; private set; }
|
||||
}
|
||||
public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Principal;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public class AdminUtils
|
||||
{
|
||||
public static bool IsAdministrator()
|
||||
{
|
||||
return (new WindowsPrincipal(WindowsIdentity.GetCurrent()))
|
||||
.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public class CMD
|
||||
{
|
||||
public static string output;
|
||||
static public Process p = new Process();
|
||||
|
||||
public static string ProcessStartWithOutput(string FileName, string Arguments)
|
||||
{
|
||||
// Debug.WriteLine("CMD: " + FileName + " " + Arguments);
|
||||
string result = string.Empty;
|
||||
try
|
||||
{
|
||||
using (Process process = new Process())
|
||||
{
|
||||
process.StartInfo.FileName = FileName;
|
||||
process.StartInfo.Arguments = Arguments;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.RedirectStandardError = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("utf-8");
|
||||
process.Start();
|
||||
result = process.StandardOutput.ReadToEnd().Trim();
|
||||
process.WaitForExit(4000);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.WriteLine("Start", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
internal static class CommonUtils
|
||||
{
|
||||
public static string GetApplicationNameFromManifest(string decompileFolder)
|
||||
{
|
||||
string[] Manifest = File.ReadAllLines(Path.Combine(decompileFolder, "AndroidManifest.xml"));
|
||||
foreach (string mf in Manifest)
|
||||
{
|
||||
if (mf.Contains("<application"))
|
||||
{
|
||||
return StringExt.Regex(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetActivityFromManifest(string decompileFolder)
|
||||
{
|
||||
string[] Manifest = File.ReadAllLines(Path.Combine(decompileFolder, "AndroidManifest.xml"));
|
||||
string packageName = "";
|
||||
string mainActivity = "";
|
||||
foreach (string mf in Manifest)
|
||||
{
|
||||
if (String.IsNullOrEmpty(packageName))
|
||||
packageName = StringExt.Regex(@"(?<=package=\"")(.*?)(?=\"")", mf);
|
||||
|
||||
if (mf.Contains("<activity"))
|
||||
{
|
||||
mainActivity = StringExt.Regex(@"(?<=android:name=\"")(.*?)(?=\"")", mf);
|
||||
}
|
||||
if (mf.Contains("android.intent.action.MAIN"))
|
||||
{
|
||||
if (mainActivity.StartsWith("."))
|
||||
return packageName + mainActivity;
|
||||
}
|
||||
}
|
||||
return mainActivity;
|
||||
}
|
||||
|
||||
public static bool OnCreateExists(string file)
|
||||
{
|
||||
if (File.Exists(file))
|
||||
{
|
||||
string text = File.ReadAllText(file);
|
||||
Match MyMatch = Regex.Match(text, ".*(method).*( onCreate).*");
|
||||
if (MyMatch.Success)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public static class DirectoryUtils
|
||||
{
|
||||
public static void Delete(string path)
|
||||
{
|
||||
if (Directory.Exists(path))
|
||||
Directory.Delete(path, true);
|
||||
}
|
||||
|
||||
public static void Copy(string sourceDirName, string destDirName, bool copySubDirs)
|
||||
{
|
||||
if (Directory.Exists(sourceDirName))
|
||||
{
|
||||
// Get the subdirectories for the specified directory.
|
||||
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
|
||||
|
||||
if (!dir.Exists)
|
||||
{
|
||||
throw new DirectoryNotFoundException(
|
||||
"Source directory does not exist or could not be found: "
|
||||
+ sourceDirName);
|
||||
}
|
||||
|
||||
DirectoryInfo[] dirs = dir.GetDirectories();
|
||||
// If the destination directory doesn't exist, create it.
|
||||
if (!Directory.Exists(destDirName))
|
||||
{
|
||||
Directory.CreateDirectory(destDirName);
|
||||
}
|
||||
|
||||
// Get the files in the directory and copy them to the new location.
|
||||
FileInfo[] files = dir.GetFiles();
|
||||
foreach (FileInfo file in files)
|
||||
{
|
||||
Debug.WriteLine(file);
|
||||
string temppath = Path.Combine(destDirName, file.Name);
|
||||
file.CopyTo(temppath, true);
|
||||
}
|
||||
|
||||
// If copying subdirectories, copy them and their contents to new location.
|
||||
if (copySubDirs)
|
||||
{
|
||||
foreach (DirectoryInfo subdir in dirs)
|
||||
{
|
||||
string temppath = Path.Combine(destDirName, subdir.Name);
|
||||
Copy(subdir.FullName, temppath, copySubDirs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Move(string sourceDirName, string destDirName, bool copySubDirs)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Get the subdirectories for the specified directory.
|
||||
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
|
||||
|
||||
if (!dir.Exists)
|
||||
{
|
||||
return;
|
||||
//throw new DirectoryNotFoundException(
|
||||
// "Source directory does not exist or could not be found: "
|
||||
// + sourceDirName);
|
||||
}
|
||||
|
||||
DirectoryInfo[] dirs = dir.GetDirectories();
|
||||
// If the destination directory doesn't exist, create it.
|
||||
if (!Directory.Exists(destDirName))
|
||||
{
|
||||
Directory.CreateDirectory(destDirName);
|
||||
}
|
||||
|
||||
// Get the files in the directory and move them to the new location.
|
||||
FileInfo[] files = dir.GetFiles();
|
||||
foreach (FileInfo file in files)
|
||||
{
|
||||
//string s = Path.Combine(Path.GetTempPath(), "AutoToaster", "Debugggg.txt");
|
||||
// File.AppendAllText(s, Path.Combine(destDirName, file.Name) + "\n");
|
||||
//HaveError(Environment.NewLine + ex, MainResources.Some_Error_Found);
|
||||
string temppath = Path.Combine(destDirName, file.Name);
|
||||
file.MoveTo(temppath, true);
|
||||
}
|
||||
|
||||
// If copying subdirectories, copy them and their contents to new location.
|
||||
if (copySubDirs)
|
||||
{
|
||||
foreach (DirectoryInfo subdir in dirs)
|
||||
{
|
||||
string temppath = Path.Combine(destDirName, subdir.Name);
|
||||
Move(subdir.FullName, temppath, copySubDirs);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (PathTooLongException)
|
||||
{
|
||||
throw new PathTooLongException("Path too long. Skipped");
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReplaceinFiles(string folderPath, string old, string replace, string extenstion = "*")
|
||||
{
|
||||
if (Directory.Exists(folderPath))
|
||||
{
|
||||
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
|
||||
foreach (string filePath in filePaths)
|
||||
{
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
string file = File.ReadAllText(filePath);
|
||||
if (file.Contains(old))
|
||||
{
|
||||
file = file.Replace(old, replace);
|
||||
File.WriteAllText(filePath, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReplaceinFilesRegex(string folderPath,string pattern, string replace, string extenstion = "*"
|
||||
)
|
||||
{
|
||||
if (Directory.Exists(folderPath))
|
||||
{
|
||||
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
|
||||
foreach (string filePath in filePaths)
|
||||
{
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
string file = File.ReadAllText(filePath);
|
||||
if (Regex.IsMatch(file, pattern))
|
||||
{
|
||||
file = Regex.Replace(file, pattern, replace);
|
||||
File.WriteAllText(filePath, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReplaceinFilesRegex( string folderPath,string[] pattern,string replace,
|
||||
string extenstion = "*"
|
||||
)
|
||||
{
|
||||
if (Directory.Exists(folderPath))
|
||||
{
|
||||
string[] filePaths = Directory.GetFiles(folderPath, extenstion, SearchOption.AllDirectories);
|
||||
foreach (string filePath in filePaths)
|
||||
{
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
string file = File.ReadAllText(filePath);
|
||||
foreach (string pat in pattern)
|
||||
{
|
||||
if (Regex.IsMatch(file, pat))
|
||||
{
|
||||
file = Regex.Replace(file, pat, replace);
|
||||
File.WriteAllText(filePath, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory)
|
||||
{
|
||||
if (autoCreateDirectory)
|
||||
{
|
||||
var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));
|
||||
|
||||
if (!destinationDirectory.Exists)
|
||||
destinationDirectory.Create();
|
||||
}
|
||||
|
||||
file.MoveTo(destination);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace SaveToGameWpf.Logic.Utils
|
||||
{
|
||||
public static class DragDropUtils
|
||||
{
|
||||
private static readonly string[] EmptyStrings = new string[0];
|
||||
|
||||
public static string[] GetFilesDrop(this DragEventArgs args)
|
||||
{
|
||||
return (string[])args.Data.GetData(DataFormats.FileDrop) ?? EmptyStrings;
|
||||
}
|
||||
|
||||
public static string[] GetFilesDrop(this DragEventArgs args, string ending)
|
||||
{
|
||||
// ReSharper disable once ConvertIfStatementToReturnStatement
|
||||
if (string.IsNullOrEmpty(ending))
|
||||
return args.GetFilesDrop();
|
||||
|
||||
return args.GetFilesDrop(it => it.EndsWith(ending, StringComparison.Ordinal));
|
||||
}
|
||||
|
||||
public static string[] GetFilesDrop(this DragEventArgs args, Func<string, bool> filter)
|
||||
{
|
||||
var items = args.GetFilesDrop();
|
||||
|
||||
if (items == null)
|
||||
return EmptyStrings;
|
||||
|
||||
return filter == null ? items : items.Where(filter).ToArray();
|
||||
}
|
||||
public static void CheckDragEnter(this DragEventArgs e, string extensions)
|
||||
{
|
||||
if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return;
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
foreach (var file in files)
|
||||
{
|
||||
var ext = Path.GetExtension(file);
|
||||
if (!String.IsNullOrEmpty(extensions) && ext.Equals(extensions))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
return;
|
||||
}
|
||||
else if (String.IsNullOrEmpty(extensions) && File.Exists(Path.Combine(file, "AndroidManifest.xml")))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
|
||||
public static bool CheckDragOver(this DragEventArgs e, string extensions)
|
||||
{
|
||||
if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return false;
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
foreach (var file in files)
|
||||
{
|
||||
var ext = Path.GetExtension(file);
|
||||
if (!String.IsNullOrEmpty(extensions) && ext.Equals(extensions))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
return true;
|
||||
}
|
||||
else if (String.IsNullOrEmpty(extensions) && File.Exists(Path.Combine(file, "AndroidManifest.xml")))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool CheckManyDragOver(this DragEventArgs e, params string[] extensions)
|
||||
{
|
||||
string[] files = e.GetFilesDrop();
|
||||
if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Move;
|
||||
return true;
|
||||
}
|
||||
e.Effect = DragDropEffects.None;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool DropOneByEnd(this DragEventArgs e, string ext, Action<string> onSuccess)
|
||||
{
|
||||
string[] files = e.GetFilesDrop(ext);
|
||||
|
||||
if (files.Length == 1)
|
||||
{
|
||||
onSuccess(files[0]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string DropOneByEnd(this DragEventArgs e, string ext)
|
||||
{
|
||||
string[] files = e.GetFilesDrop(ext);
|
||||
|
||||
if (files.Length == 1)
|
||||
return files[0];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void DropManyByEnd(this DragEventArgs e, string ext, Action<string[]> onSuccess)
|
||||
{
|
||||
string[] files = e.GetFilesDrop(ext);
|
||||
|
||||
if (files.Length > 0)
|
||||
onSuccess(files);
|
||||
}
|
||||
|
||||
public static string[] DropManyByEnd(this DragEventArgs e, string ext)
|
||||
{
|
||||
string[] files = e.GetFilesDrop(ext);
|
||||
|
||||
if (files.Length > 0)
|
||||
return files;
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
using System;
|
||||
using Microsoft.Win32;
|
||||
using APKToolGUI.Languages;
|
||||
using APKToolGUI.Utils;
|
||||
|
||||
namespace APKToolGUI
|
||||
{
|
||||
public class ExplorerContextMenu
|
||||
{
|
||||
public static Status Create()
|
||||
{
|
||||
string executablePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
|
||||
if (AdminUtils.IsAdministrator())
|
||||
{
|
||||
return CreateContextMenu(executablePath);
|
||||
}
|
||||
else
|
||||
return new Status(false, "Administrator rights are required");
|
||||
}
|
||||
|
||||
private static Status CreateContextMenu(string executablePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region Add context menu to registry
|
||||
RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
apkToolGUIFolderShell.SetValue("Icon", executablePath);
|
||||
apkToolGUIFolderShell.SetValue("MUIVerb", "APKToolGUI");
|
||||
apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build;APKToolGUI.Smali");
|
||||
apkToolGUIFolderShell.Close();
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
|
||||
RegistryKey shellAPK = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
shellAPK.SetValue("Icon", "\"" + executablePath + "\"");
|
||||
shellAPK.SetValue("MUIVerb", "APKToolGUI");
|
||||
shellAPK.SetValue("SubCommands", "APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign");
|
||||
shellAPK.Close();
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".dex", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString);
|
||||
RegistryKey shellDEX = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.dex", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
shellDEX.SetValue("Icon", "\"" + executablePath + "\"");
|
||||
shellDEX.SetValue("MUIVerb", "APKToolGUI");
|
||||
shellDEX.SetValue("SubCommands", "APKToolGUI.Baksmali");
|
||||
shellDEX.Close();
|
||||
#endregion
|
||||
|
||||
#region Add command to registry
|
||||
RegistryKey shell;
|
||||
if (Environment.Is64BitOperatingSystem)
|
||||
shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
else
|
||||
shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
|
||||
RegistryKey decompile = shell.CreateSubKey("APKToolGUI.Decompile", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
decompile.SetValue("", Language.DecompileApk, RegistryValueKind.String);
|
||||
decompile.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
decompile.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"decapk\" \"%1\"");
|
||||
decompile.Close();
|
||||
|
||||
RegistryKey build = shell.CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
build.SetValue("", Language.CompileApk, RegistryValueKind.String);
|
||||
build.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
build.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"comapk\" \"%1\"", RegistryValueKind.String);
|
||||
build.Close();
|
||||
|
||||
RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
sign.SetValue("", Language.SignApk, RegistryValueKind.String);
|
||||
sign.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\"");
|
||||
sign.Close();
|
||||
|
||||
RegistryKey zipalign = shell.CreateSubKey("APKToolGUI.Zipalign", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
zipalign.SetValue("", Language.ZipalignApk, RegistryValueKind.String);
|
||||
zipalign.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
zipalign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"zipalign\" \"%1\"");
|
||||
zipalign.Close();
|
||||
|
||||
RegistryKey baksmali = shell.CreateSubKey("APKToolGUI.Baksmali", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
baksmali.SetValue("", Language.DecompileDex, RegistryValueKind.String);
|
||||
baksmali.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
baksmali.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"baksmali\" \"%1\"", RegistryValueKind.String);
|
||||
baksmali.Close();
|
||||
|
||||
RegistryKey smali = shell.CreateSubKey("APKToolGUI.Smali", RegistryKeyPermissionCheck.ReadWriteSubTree);
|
||||
smali.SetValue("", Language.CompileDex, RegistryValueKind.String);
|
||||
smali.SetValue("Icon", executablePath, RegistryValueKind.String);
|
||||
smali.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"smali\" \"%1\"", RegistryValueKind.String);
|
||||
smali.Close();
|
||||
|
||||
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.Close();
|
||||
|
||||
shell.Close();
|
||||
#endregion
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
public static Status Remove()
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false);
|
||||
|
||||
Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKey("APKToolGUI", false);
|
||||
|
||||
RegistryKey shell;
|
||||
if (Environment.Is64BitOperatingSystem)
|
||||
shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
else
|
||||
shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Decompile", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Sign", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Zipalign", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Build", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Baksmali", false);
|
||||
shell.DeleteSubKeyTree("APKToolGUI.Smali", false);
|
||||
shell.Close();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
return new Status(false, exc.Message);
|
||||
}
|
||||
|
||||
return new Status(true, "Done!");
|
||||
}
|
||||
|
||||
public class Status
|
||||
{
|
||||
public Status(bool result, string message)
|
||||
{
|
||||
Result = result;
|
||||
Message = message;
|
||||
}
|
||||
public bool Result { get; set; }
|
||||
public String Message { get; set; }
|
||||
}
|
||||
|
||||
public enum Action
|
||||
{
|
||||
Create,
|
||||
Remove
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public class PathUtils
|
||||
{
|
||||
public static bool IsValidPath(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
Path.GetFileName(path);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
//if (path.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
|
||||
// return false;
|
||||
//else
|
||||
// return true;
|
||||
|
||||
}
|
||||
|
||||
public static string GetDirectoryNameWithoutExtension(string path)
|
||||
{
|
||||
return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Utils
|
||||
{
|
||||
public static class StringExt
|
||||
{
|
||||
static readonly Random random = new Random();
|
||||
|
||||
public static string Regex(string text, string match)
|
||||
{
|
||||
Regex myRegex = new Regex(text);
|
||||
Match matched = myRegex.Match(match);
|
||||
return matched.ToString();
|
||||
}
|
||||
|
||||
public static string RandStr(int length)
|
||||
{
|
||||
const string chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
return new string(Enumerable.Repeat(chars, length)
|
||||
.Select(s => s[random.Next(s.Length)]).ToArray());
|
||||
}
|
||||
|
||||
public static string RandStrWithCaps(int length)
|
||||
{
|
||||
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
return new string(Enumerable.Repeat(chars, length)
|
||||
.Select(s => s[random.Next(s.Length)]).ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method that limits the length of text to a defined length.
|
||||
/// </summary>
|
||||
/// <param name="source">The source text.</param>
|
||||
/// <param name="maxLength">The maximum limit of the string to return.</param>
|
||||
// string limit5 = "The quick brown fox jumped over the lazy dog.".LimitLength(5);
|
||||
public static string LimitLength(this string source, int maxLength)
|
||||
{
|
||||
if (source.Length <= maxLength)
|
||||
{
|
||||
return source;
|
||||
}
|
||||
|
||||
return source.Substring(0, maxLength);
|
||||
}
|
||||
|
||||
public static IEnumerable<string> SplitByLength(this string str, int maxLength)
|
||||
{
|
||||
for (int index = 0; index < str.Length; index += maxLength)
|
||||
{
|
||||
yield return str.Substring(index, Math.Min(maxLength, str.Length - index));
|
||||
}
|
||||
}
|
||||
|
||||
public static string RemoveLast(this string text, string character)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (text.Length < 1) return text;
|
||||
return text.Remove(text.ToString().LastIndexOf(character), character.Length);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return text;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
using Ionic.Zip;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
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))
|
||||
{
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
{
|
||||
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
|
||||
return Path.GetFileName(entry.FileName);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetFileNameWithoutExtension(string path, string fileNameContains, string folderContains = "")
|
||||
{
|
||||
using (ZipFile zipDest = ZipFile.Read(path))
|
||||
{
|
||||
foreach (ZipEntry entry in zipDest.Entries)
|
||||
{
|
||||
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
|
||||
return Path.GetFileNameWithoutExtension(entry.FileName);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
public static bool Exists(string path, string fileNameContains, string folderContains = "")
|
||||
{
|
||||
using (ZipFile zipDest = ZipFile.Read(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 false;
|
||||
}
|
||||
|
||||
public static void AddFile(string zipFile, string fileName, string directoryPathInArchive = "")
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(zipFile))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.AddFile(fileName, directoryPathInArchive);
|
||||
else
|
||||
zip.AddFile(fileName);
|
||||
zip.Save();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public static void RemoveFile(string zipFile, string fileName)
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(zipFile))
|
||||
{
|
||||
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
|
||||
if (chkresult2)
|
||||
{
|
||||
zip.RemoveEntry(fileName);
|
||||
zip.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ExtractFile(string path, string fileName, string destination)
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
{
|
||||
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
|
||||
if (chkresult2)
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = true;
|
||||
ZipEntry e = zip[fileName];
|
||||
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "")
|
||||
{
|
||||
ZipFile zip = new ZipFile();
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.AddDirectory(fileName, directoryPathInArchive);
|
||||
else
|
||||
zip.AddDirectory(fileName);
|
||||
zip.Save(path);
|
||||
}
|
||||
|
||||
public static void UpdateDirectory(string path, string dirName, string directoryPathInArchive = "")
|
||||
{
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
{
|
||||
if (!String.IsNullOrEmpty(directoryPathInArchive))
|
||||
zip.UpdateDirectory(dirName, directoryPathInArchive);
|
||||
else
|
||||
zip.UpdateDirectory(dirName);
|
||||
zip.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false)
|
||||
{
|
||||
//using (ZipFile zip = ZipFile.Read(path))
|
||||
//{
|
||||
// bool chkresult2 = zip.Any(entry => entry.FileName.Contains(folderName));
|
||||
// if (chkresult2)
|
||||
// {
|
||||
// zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
// zip.ExtractSelectedEntries("name = *", folderName, destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
// }
|
||||
//}
|
||||
using (ZipFile zip = ZipFile.Read(path))
|
||||
{
|
||||
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
|
||||
foreach (ZipEntry e in zip.Where(x => x.FileName.Contains(folderName)))
|
||||
{
|
||||
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using APKToolGUI.Languages;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Net;
|
||||
|
||||
@@ -48,7 +49,7 @@ namespace APKToolGUI
|
||||
e.Result = new Result(State.NoUpdate, null, (bool)e.Argument);
|
||||
}
|
||||
else
|
||||
e.Result = new Result(State.Error, "Error version parsing", (bool)e.Argument);
|
||||
e.Result = new Result(State.Error, Language.ErrorVersionParsing, (bool)e.Argument);
|
||||
}
|
||||
|
||||
private bool CompareVersion(Version latestVersion)
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace APKToolGUI.Web
|
||||
{
|
||||
public class WebDownload : WebClient
|
||||
{
|
||||
/// <summary>
|
||||
/// Time in milliseconds
|
||||
/// </summary>
|
||||
public int Timeout { get; set; }
|
||||
|
||||
public WebDownload() : this(15000) { }
|
||||
|
||||
public WebDownload(int timeout)
|
||||
{
|
||||
this.Timeout = timeout;
|
||||
}
|
||||
|
||||
protected override WebRequest GetWebRequest(Uri address)
|
||||
{
|
||||
var request = base.GetWebRequest(address);
|
||||
if (request != null)
|
||||
{
|
||||
request.Timeout = this.Timeout;
|
||||
}
|
||||
return request;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 293 KiB |
@@ -1,59 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<section name="APKToolGUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
|
||||
<section name="APKToolGUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<userSettings>
|
||||
<APKToolGUI.Properties.Settings>
|
||||
<setting name="MAIN_Decode_NoSrc" serializeAs="String">
|
||||
<setting name="Decode_NoSrc" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_NoRes" serializeAs="String">
|
||||
<setting name="Decode_NoRes" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_Force" serializeAs="String">
|
||||
<setting name="Decode_Force" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Decode_UseFramework" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_UseFramework" serializeAs="String">
|
||||
<setting name="Build_ForceAll" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Decode_InputAppPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Decode_FrameDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="BuildProjectDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="InstallFramework_InputFramePath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Sign_InputFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Sign_OutputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Build_UseAapt" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_ForceAll" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_InputAppPath" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_FrameDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_BuildProjectDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_InstallFramework_InputFramePath" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_SIGN_InputFile" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_SIGN_OutputFile" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_UseAapt" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_AaptPath" serializeAs="String">
|
||||
<value/>
|
||||
<setting name="Build_AaptPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Culture" serializeAs="String">
|
||||
<value>Auto</value>
|
||||
</setting>
|
||||
<setting name="JavaExe" serializeAs="String">
|
||||
<value/>
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="LastUpdateCheck" serializeAs="String">
|
||||
<value/>
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="CheckForUpdateAtStartup" serializeAs="String">
|
||||
<value>True</value>
|
||||
@@ -61,111 +61,180 @@
|
||||
<setting name="ClearLogBeforeAction" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_ForceAll" serializeAs="String">
|
||||
<setting name="Decode_MatchOriginal" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_CustomAapt" serializeAs="String">
|
||||
<setting name="Decode_KeepBrokenRes" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_AaptPath" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="DECOMPILE_NoRes" serializeAs="String">
|
||||
<setting name="Build_CopyOriginal" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="DECOMPILE_NoSrc" serializeAs="String">
|
||||
<setting name="Build_FrameDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Build_UseFramework" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="DECOMPILE_Force" serializeAs="String">
|
||||
<setting name="Decode_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="DECOMPILE_UseFramework" serializeAs="String">
|
||||
<setting name="Decode_OutputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Build_UseOutputAppPath" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_CopyOriginal" serializeAs="String">
|
||||
<setting name="Build_OutputAppPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Build_InputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="InstallFramework_UseFrameDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_UseFramework" serializeAs="String">
|
||||
<setting name="InstallFramework_UseTag" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BUILD_FrameworkPath" serializeAs="String">
|
||||
<value/>
|
||||
<setting name="InstallFramework_Tag" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="DECOMPILE_KeepBrokenResource" serializeAs="String">
|
||||
<value>False</value>
|
||||
<setting name="InstallFramework_FrameDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="DECOMPILE_MatchOriginal" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_MatchOriginal" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_KeepBrokenRes" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_CopyOriginal" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_FrameDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_UseFramework" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Decode_OutputDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_UseOutputAppPath" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_OutputAppPath" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Build_InputDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_InstallFramework_UseFrameDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_InstallFramework_UseTag" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_InstallFramework_Tag" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_InstallFramework_FrameDir" serializeAs="String">
|
||||
<value/>
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_AlignmentInBytes" serializeAs="String">
|
||||
<setting name="Zipalign_AlignmentInBytes" serializeAs="String">
|
||||
<value>4</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_OverwriteOutputFile" serializeAs="String">
|
||||
<setting name="Zipalign_OverwriteOutputFile" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_CheckOnly" serializeAs="String">
|
||||
<setting name="Zipalign_CheckOnly" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_Verbose" serializeAs="String">
|
||||
<setting name="Zipalign_Verbose" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_OutputFile" serializeAs="String">
|
||||
<value/>
|
||||
<setting name="Zipalign_OutputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_InputFile" serializeAs="String">
|
||||
<value/>
|
||||
<setting name="Zipalign_InputFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="MAIN_Zipalign_Recompress" serializeAs="String">
|
||||
<setting name="Zipalign_Recompress" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="MAIN_SIGN_PublicKey" serializeAs="String">
|
||||
<value>bin\testkey.x509.pem</value>
|
||||
<setting name="Sign_PublicKey" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="MAIN_SIGN_PrivateKey" serializeAs="String">
|
||||
<value>bin\testkey.pk8</value>
|
||||
<setting name="Sign_PrivateKey" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Decode_OnlyMainClasses" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Decode_FixError" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Build_NoCrunch" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Decode_NoDebugInfo" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Framework_ClearBeforeDecode" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Build_ZipalignAfterBuild" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Build_SignAfterBuild" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="Zipalign_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Zipalign_SignAfterZipAlign" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Sign_Alias" serializeAs="String">
|
||||
<value>CERT</value>
|
||||
</setting>
|
||||
<setting name="Sign_SetAlias" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Build_CreateUnsignedApk" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Sign_UseKeystoreFile" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Sign_KeystoreFilePath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Sign_KeystorePassword" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Sign_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Sign_Schemev1" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Sign_Schemev2" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Sign_Schemev3" serializeAs="String">
|
||||
<value>0</value>
|
||||
</setting>
|
||||
<setting name="Sign_Schemev4" serializeAs="String">
|
||||
<value>2</value>
|
||||
</setting>
|
||||
<setting name="Decode_ApiLevel" serializeAs="String">
|
||||
<value>29</value>
|
||||
</setting>
|
||||
<setting name="Build_ApiLevel" serializeAs="String">
|
||||
<value>29</value>
|
||||
</setting>
|
||||
<setting name="Build_SetApiLevel" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Decode_SetApiLevel" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Baksmali_InputDexFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Smali_OutputDexFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Baksmali_OutputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Baksmali_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Smali_InputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Smali_OutputDir" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="Smali_UseOutputDir" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="IgnoreOutputDirContextMenu" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</APKToolGUI.Properties.Settings>
|
||||
</userSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup>
|
||||
<runtime>
|
||||
<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" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="DotNetZip" version="1.16.0" targetFramework="net48" />
|
||||
<package id="Fody" version="6.6.0" targetFramework="net48" developmentDependency="true" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="6.0.2" targetFramework="net48" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" 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="Resource.Embedder" version="2.2.0" targetFramework="net48" />
|
||||
<package id="ResourceLoader" version="3.2.4" 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.Collections" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Console" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="6.0.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
|
||||
<package id="System.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.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.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Resources.Extensions" version="6.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.Extensions" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net48" />
|
||||
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net48" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
|
||||
</packages>
|
||||
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,72 @@
|
||||
# APK Tool GUI
|
||||
GUI for apktool, signapk, zipalign and baksmali utilities.
|
||||
|
||||
It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc.
|
||||
|
||||
# Download
|
||||
https://github.com/AndnixSH/APKToolGUI/releases
|
||||
|
||||
https://app.box.com/s/y0cxdzxknb98v3c90e705ltzuehjiddn
|
||||
|
||||
https://mega.nz/folder/aBxWnaSA#XMLOS9bPJgtTTd2vEjh2SQ
|
||||
|
||||
https://sbupload.com/folder/3324/APK_Tool_GUI
|
||||
|
||||
# Requirements
|
||||
- Windows 7 and above
|
||||
- JDK/JRE 8 and above. Highly recommended to use 64-bit version of Java if your system is 64-bit
|
||||
- .NET Framework 4.8
|
||||
|
||||
# Features
|
||||
- Decompile APK
|
||||
- Compile APK
|
||||
- Sign APK
|
||||
- Zipalign APK
|
||||
- Framework
|
||||
- Drag and drop
|
||||
- APK info
|
||||
- Log
|
||||
- All features from [Apktool](https://ibotpeaches.github.io/Apktool/documentation/).
|
||||
- Additional features that can fix some Apktool errors, such as removing DUMMY_APKTOOL, clear framework before decompiling
|
||||
- Multi language
|
||||
- Right-click context menu
|
||||
|
||||
# Issues
|
||||
Issues with Apktool, read the log, check if your modification and/or syntax is correct. If not, check this page https://github.com/iBotPeaches/Apktool/issues
|
||||
|
||||
Otherwise, report issues here and I will point you to the right direction.
|
||||
|
||||
Framework/system apps related issues, check on [XDA Forum](https://forum.xda-developers.com/)
|
||||
|
||||
**Sometimes apps may protect or obfuscate for content protection purposes and so on. Bypassing of such is beyond the scope of this tool, so please DO NOT post an issue regarding to it. This tool does not support bypassing such securities**
|
||||
|
||||
# FAQ
|
||||
##### Q: Can it be ported to other OS like Linux?
|
||||
A: Maybe, but it's not easy since Microsoft is dumb for not making it easy for .NET Core unlike Java's GUI
|
||||
|
||||
##### Q: How to update Apktool?
|
||||
A: Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder
|
||||
|
||||
##### Q: How to update Baksmali/Smali?
|
||||
A: Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/downloads/) and replace it on Resources folder
|
||||
|
||||
##### Q: How to reset?
|
||||
A: Simply delete the config.xml file
|
||||
|
||||
# Development
|
||||
Use Visual Studio 2019 and above. NET Framework 4.8 SDK is required
|
||||
|
||||
### Translation
|
||||
Currently there is two languages, english and russian. Russian is not complete because I don't speak russian, it was originally written by INF1NUM. If you like to translate russian or other language, feel free to do it and pull request
|
||||
|
||||
- Create new resx file under Languages folder. It is used for cs files
|
||||
|
||||
- Open any forms. Under properties, scroll down until you see Language, and select any language you would like to translate. It will create new resx file inside cs file
|
||||
|
||||
# Credits
|
||||
AndnixSH
|
||||
iBotPeaches ([Apktool](https://ibotpeaches.github.io/Apktool/))
|
||||
INF1NUM (Original author of [APKToolGUI](https://github.com/INF1NUM/APKToolGUI)
|
||||
|
||||
# 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.
|
||||