Updated to 3.0.0.0

Reviving the project :)
This commit is contained in:
q3b5q3
2022-04-11 13:59:49 +02:00
parent 4eafc4e0b1
commit 02c3ccc592
101 changed files with 17478 additions and 10176 deletions
+254 -54
View File
@@ -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">
+228
View File
@@ -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;
}
}
}
}
+63
View File
@@ -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;
}
}
}
+287
View File
@@ -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
}
}
+112
View File
@@ -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;
}
}
}
}
+157
View File
@@ -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;
}
}
}
}
+109
View File
@@ -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;
}
}
}
-554
View File
@@ -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;
// }
//}
}
-228
View File
@@ -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
}
}
}
+3
View File
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura />
</Weavers>
+141
View File
@@ -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>
-405
View File
@@ -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="&gt;&gt;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>&amp;ОК</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelVersion.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormAboutBox</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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="&gt;&gt;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="&gt;&gt;textBoxDescription.Name" xml:space="preserve">
<value>textBoxDescription</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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="&gt;&gt;linkLabel1.Name" xml:space="preserve">
<value>linkLabel1</value>
</data>
<data name="&gt;&gt;labelVersion.Name" xml:space="preserve">
<value>labelVersion</value>
</data>
<data name="&gt;&gt;labelProductName.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,46,0039,Percent,53,9961" /&gt;&lt;Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;tableLayoutPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Name" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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="&gt;&gt;okButton.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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="&gt;&gt;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="&gt;&gt;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="&gt;&gt;linkLabel1.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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="&gt;&gt;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="&gt;&gt;$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="&gt;&gt;textBoxDescription.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;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>
-381
View File
@@ -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;
}
}
-226
View File
@@ -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;
}
}
}
-153
View File
@@ -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>
-383
View File
@@ -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;
}
}
-226
View File
@@ -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;
}
}
}
-159
View File
@@ -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>
-1219
View File
File diff suppressed because it is too large Load Diff
-936
View File
@@ -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
}
}
File diff suppressed because it is too large Load Diff
@@ -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");
}
}
}
+624
View File
@@ -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="&gt;&gt;logoPictureBox.Name" xml:space="preserve">
<value>logoPictureBox</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;logoPictureBox.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelProductName.Name" xml:space="preserve">
<value>labelProductName</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelProductName.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelVersion.Name" xml:space="preserve">
<value>labelVersion</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelVersion.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelCopyright.Name" xml:space="preserve">
<value>labelCopyright</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;labelCopyright.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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>&amp;ОК</value>
</data>
<data name="&gt;&gt;okButton.Name" xml:space="preserve">
<value>okButton</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;okButton.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;textBoxDescription.Name" xml:space="preserve">
<value>textBoxDescription</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;textBoxDescription.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;linkLabel1.Name" xml:space="preserve">
<value>linkLabel1</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;linkLabel1.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;tableLayoutPanel.Name" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;tableLayoutPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,46,0039,Percent,53,9961" /&gt;&lt;Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /&gt;&lt;/TableLayoutSettings&gt;</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="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormAboutBox</value>
</data>
<data name="&gt;&gt;$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>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -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);
File diff suppressed because it is too large Load Diff
@@ -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);
}
}
}
}
+199
View File
@@ -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);
}
}
}
}
+92 -29
View File
@@ -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;
}
}
}
+67 -1
View File
@@ -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;
}
}
}
-333
View File
@@ -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);
}
}
}
}
+900
View File
@@ -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&apos;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 &quot;{0}&quot;.
/// </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 &quot;{0}&quot;..
/// </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 &amp; drop is not supported.
/// </summary>
internal static string DragDropNotSupported {
get {
return ResourceManager.GetString("DragDropNotSupported", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Drag &amp; 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 &quot;{0}&quot;.
/// </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 &quot;{0}&quot;..
/// </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 &quot;{0}&quot;.
/// </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 &amp; drop is not supported</value>
</data>
<data name="DragDropSupported" xml:space="preserve">
<value>Drag &amp; 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>
-331
View File
@@ -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);
}
}
}
+61 -28
View File
@@ -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";
}
}
+4 -4
View File
@@ -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")]
+60 -20
View File
@@ -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 {
+350 -15
View File
@@ -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>
File diff suppressed because it is too large Load Diff
+172 -112
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

After

Width:  |  Height:  |  Size: 2.7 KiB

-55
View File
@@ -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);
}
+18
View File
@@ -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);
}
}
}
+46
View File
@@ -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;
}
}
}
+63
View File
@@ -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;
}
}
}
+191
View File
@@ -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);
}
}
}
+133
View File
@@ -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;
}
}
}
+155
View File
@@ -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
}
}
}
+36
View File
@@ -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));
}
}
}
+73
View File
@@ -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;
}
}
}
}
+158
View File
@@ -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)
+34
View File
@@ -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;
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 KiB

+177 -108
View File
@@ -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>
+61
View File
@@ -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>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

+72
View File
@@ -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.

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