Compare commits
95 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ca02c9e4f | ||
|
|
9bc80c73b4 | ||
|
|
6b3cc0385f | ||
|
|
86fb982224 | ||
|
|
69ffff1111 | ||
|
|
b53f8209d5 | ||
|
|
5d602bd62b | ||
|
|
1c8167c736 | ||
|
|
6730667fd7 | ||
|
|
5febd93757 | ||
|
|
e6b32ccd00 | ||
|
|
4cba1bfdce | ||
|
|
07b64816cb | ||
|
|
cbfa67d08a | ||
|
|
2a76577b5e | ||
|
|
ca707c44cb | ||
|
|
ccdb5d2062 | ||
|
|
cefb969004 | ||
|
|
ff8046d3a4 | ||
|
|
15fda32f19 | ||
|
|
e6505c75a8 | ||
|
|
a8daba4325 | ||
|
|
d07a739746 | ||
|
|
8cb5a1036d | ||
|
|
022f906c4d | ||
|
|
ec76448477 | ||
|
|
ef72be31e3 | ||
|
|
2734a9bf61 | ||
|
|
a3dfa21899 | ||
|
|
eac379757c | ||
|
|
f66cd4ba66 | ||
|
|
1ddfd8de2e | ||
|
|
78a67b41d8 | ||
|
|
8c69c68d23 | ||
|
|
f7a44380f3 | ||
|
|
bcc57865a0 | ||
|
|
c56fe7af39 | ||
|
|
8feb830c6a | ||
|
|
577a14133d | ||
|
|
fcad1ce636 | ||
|
|
3fae800f7e | ||
|
|
4a541335d0 | ||
|
|
c6f8985bc0 | ||
|
|
1c0b95014c | ||
|
|
4ac29040f8 | ||
|
|
0a612c7da1 | ||
|
|
33ba798b41 | ||
|
|
57525e1afa | ||
|
|
191044d88b | ||
|
|
ec5395b0df | ||
|
|
2505cd6923 | ||
|
|
872ceb17ce | ||
|
|
494f3dec69 | ||
|
|
ab870f984d | ||
|
|
c4327c3de9 | ||
|
|
34c3c1b9ab | ||
|
|
698c49bc0e | ||
|
|
298fbe8a00 | ||
|
|
7143bf63c6 | ||
|
|
c905acaa6a | ||
|
|
de1cfd511a | ||
|
|
af7bbc3407 | ||
|
|
e9805f8c17 | ||
|
|
a8106a87b2 | ||
|
|
3eb88329b6 | ||
|
|
2f6e196ea3 | ||
|
|
aa8185abea | ||
|
|
683c3b87b5 | ||
|
|
49f7bc9470 | ||
|
|
ceb2e5954e | ||
|
|
6eba1c46bf | ||
|
|
781ffbbc90 | ||
|
|
6690099982 | ||
|
|
6726de7d26 | ||
|
|
401c9c22dd | ||
|
|
6e6341e11f | ||
|
|
cc09e41622 | ||
|
|
059d195f21 | ||
|
|
cf334f00cd | ||
|
|
f0af68b228 | ||
|
|
92a1da1939 | ||
|
|
bfce0e54ec | ||
|
|
66c4ad7377 | ||
|
|
897ea3b1df | ||
|
|
53f7855009 | ||
|
|
722dfefeb7 | ||
|
|
b86e21080b | ||
|
|
8621fa7008 | ||
|
|
f60ff2ef96 | ||
|
|
a86dba2e52 | ||
|
|
bd0ec85135 | ||
|
|
2723dac64f | ||
|
|
df32d593f2 | ||
|
|
050697c2b3 | ||
|
|
72efbc12ac |
146
ADB.cs
Normal file
146
ADB.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Management;
|
||||
using System.ComponentModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Net.Http;
|
||||
using System.Windows.Threading;
|
||||
using System.Net;
|
||||
using SergeUtils;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using Newtonsoft.Json;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
class ADB
|
||||
{
|
||||
static Process adb = new Process();
|
||||
public static string adbPath = Environment.CurrentDirectory + "\\adb\\";
|
||||
public static bool IsRunningCommand = false;
|
||||
public static string RunAdbCommandToString(string command)
|
||||
{
|
||||
|
||||
IsRunningCommand = true;
|
||||
|
||||
if (DeviceID.Length > 1)
|
||||
command = $" -s {DeviceID} {command}";
|
||||
|
||||
Logger.Log($"Running command {command}");
|
||||
adb.StartInfo.FileName = Environment.CurrentDirectory + "\\adb\\adb.exe";
|
||||
adb.StartInfo.Arguments = command;
|
||||
adb.StartInfo.RedirectStandardInput = true;
|
||||
adb.StartInfo.RedirectStandardOutput = true;
|
||||
adb.StartInfo.RedirectStandardError = true;
|
||||
adb.StartInfo.CreateNoWindow = true;
|
||||
adb.StartInfo.UseShellExecute = false;
|
||||
adb.StartInfo.WorkingDirectory = adbPath;
|
||||
|
||||
//adb.OutputDataReceived += ADB_OutputDataReceived;
|
||||
adb.ErrorDataReceived += ADB_ErrorDataReceived;
|
||||
|
||||
adb.Start();
|
||||
adb.StandardInput.WriteLine(command);
|
||||
adb.StandardInput.Flush();
|
||||
adb.StandardInput.Close();
|
||||
|
||||
var output = adb.StandardOutput.ReadToEnd();
|
||||
error = adb.StandardError.ReadToEnd();
|
||||
|
||||
adb.WaitForExit();
|
||||
IsRunningCommand = false;
|
||||
Logger.Log(output);
|
||||
return output;
|
||||
}
|
||||
|
||||
public static string UninstallPackage(string package)
|
||||
{
|
||||
string output = string.Empty;
|
||||
output += RunAdbCommandToString($"shell pm uninstall -k --user 0 {package}");
|
||||
output += RunAdbCommandToString($"shell pm uninstall {package}");
|
||||
return output;
|
||||
}
|
||||
|
||||
public static string error = "";
|
||||
|
||||
static void ADB_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||
{
|
||||
Logger.Log($"ADB ERROR: {e.Data}");
|
||||
}
|
||||
|
||||
public static string DeviceID = "";
|
||||
|
||||
public static string GetAvailableSpace()
|
||||
{
|
||||
long totalSize = 0;
|
||||
|
||||
long usedSize = 0;
|
||||
|
||||
long freeSize = 0;
|
||||
|
||||
var output = RunAdbCommandToString("shell df").Split('\n');
|
||||
|
||||
foreach (string currLine in output)
|
||||
{
|
||||
if (currLine.StartsWith("/data/media"))
|
||||
{
|
||||
var foo = currLine.Split(' ');
|
||||
int i = 0;
|
||||
foreach (string curr in foo)
|
||||
{
|
||||
if (curr.Length > 1)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
totalSize = Int64.Parse(curr) / 1000;
|
||||
break;
|
||||
case 2:
|
||||
usedSize = Int64.Parse(curr) / 1000;
|
||||
break;
|
||||
case 3:
|
||||
freeSize = Int64.Parse(curr) / 1000;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $"Total space: {String.Format("{0:0.00}", (double)totalSize / 1000)}GB\n Used space: {String.Format("{0:0.00}", (double)usedSize / 1000)}GB\n Free space: {String.Format("{0:0.00}", (double)freeSize / 1000)}GB";
|
||||
}
|
||||
|
||||
public static string Sideload(string path)
|
||||
{
|
||||
return RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
}
|
||||
|
||||
public static string CopyOBB(string path)
|
||||
{
|
||||
bool ok = false;
|
||||
foreach (string file in Directory.GetFiles(path))
|
||||
{
|
||||
if (Path.GetExtension(file) == ".obb")
|
||||
{
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ok)
|
||||
return RunAdbCommandToString($"push \"{path}\" /sdcard/Android/obb");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,27 @@
|
||||
<Deterministic>true</Deterministic>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<UseShortFileNames>True</UseShortFileNames>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<IntermediateOutputPath>C:\Sideloader</IntermediateOutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -37,8 +58,7 @@
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>AndroidSideloader.Program</StartupObject>
|
||||
@@ -64,6 +84,55 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|AnyCPU'">
|
||||
<OutputPath>bin\x86\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|x64'">
|
||||
<OutputPath>bin\x64\x86\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|x86'">
|
||||
<OutputPath>bin\x86\x86\</OutputPath>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<SignAssembly>false</SignAssembly>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<AssemblyOriginatorKeyFile>AndroidSideloader_TemporaryKey.pfx</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<DelaySign>false</DelaySign>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<SignManifests>false</SignManifests>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestCertificateThumbprint>2596B6735D27EAE6BD754AC8A5249B9EAE39122F</ManifestCertificateThumbprint>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestKeyFile>AndroidSideloader_TemporaryKey.pfx</ManifestKeyFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Costura, Version=4.1.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Costura.Fody.4.1.0\lib\net40\Costura.dll</HintPath>
|
||||
@@ -78,6 +147,9 @@
|
||||
<Reference Include="MetroFramework.Fonts, Version=1.2.0.3, Culture=neutral, PublicKeyToken=5f91a84759bf584a, processorArchitecture=MSIL">
|
||||
<HintPath>packages\MetroFramework.Fonts.1.2.0.3\lib\net40\MetroFramework.Fonts.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SergeUtils">
|
||||
<HintPath>.\SergeUtils.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -95,6 +167,7 @@
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ADB.cs" />
|
||||
<Compile Include="FlexibleMessageBox.cs" />
|
||||
<Compile Include="Form1.cs">
|
||||
<SubType>Form</SubType>
|
||||
@@ -102,26 +175,53 @@
|
||||
<Compile Include="Form1.Designer.cs">
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ImageForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ImageForm.Designer.cs">
|
||||
<DependentUpon>ImageForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Logger.cs" />
|
||||
<Compile Include="QuestForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="QuestForm.Designer.cs">
|
||||
<DependentUpon>QuestForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="RCLONE.cs" />
|
||||
<Compile Include="SettingsForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="SettingsForm.Designer.cs">
|
||||
<DependentUpon>SettingsForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="usernameForm.cs">
|
||||
<Compile Include="spoofer.cs" />
|
||||
<Compile Include="SpoofForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="usernameForm.Designer.cs">
|
||||
<DependentUpon>usernameForm.cs</DependentUpon>
|
||||
<Compile Include="SpoofForm.Designer.cs">
|
||||
<DependentUpon>SpoofForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UsernameForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UsernameForm.Designer.cs">
|
||||
<DependentUpon>UsernameForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SelectFolder.cs" />
|
||||
<Compile Include="Utilities.cs" />
|
||||
<EmbeddedResource Include="Form1.resx">
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="ImageForm.resx">
|
||||
<DependentUpon>ImageForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
@@ -130,12 +230,26 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="QuestForm.resx">
|
||||
<DependentUpon>QuestForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SettingsForm.resx">
|
||||
<DependentUpon>SettingsForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="usernameForm.resx">
|
||||
<DependentUpon>usernameForm.cs</DependentUpon>
|
||||
<EmbeddedResource Include="SpoofForm.resx">
|
||||
<DependentUpon>SpoofForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UsernameForm.resx">
|
||||
<DependentUpon>UsernameForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<None Include=".editorconfig" />
|
||||
<None Include="AndroidSideloader_TemporaryKey.pfx" />
|
||||
<None Include="keypair.snk">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
@@ -146,14 +260,31 @@
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<None Include="public.snk">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="changelog.txt" />
|
||||
<Content Include="icon.ico" />
|
||||
<Content Include="MetroFramework.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="packages\Fody.6.0.0\build\Fody.targets" Condition="Exists('packages\Fody.6.0.0\build\Fody.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
@@ -163,4 +294,12 @@
|
||||
<Error Condition="!Exists('packages\Fody.6.0.0\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Fody.6.0.0\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('packages\Costura.Fody.4.1.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Costura.Fody.4.1.0\build\Costura.Fody.props'))" />
|
||||
</Target>
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
14
AndroidSideloader.csproj.user
Normal file
14
AndroidSideloader.csproj.user
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
<PublishUrlHistory>publish\</PublishUrlHistory>
|
||||
<InstallUrlHistory />
|
||||
<SupportUrlHistory />
|
||||
<UpdateUrlHistory />
|
||||
<BootstrapperUrlHistory />
|
||||
<ErrorReportUrlHistory />
|
||||
<FallbackCulture>en-US</FallbackCulture>
|
||||
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -5,22 +5,42 @@ VisualStudioVersion = 16.0.30011.22
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidSideloader", "AndroidSideloader.csproj", "{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9E3C926E-5E5F-4F97-AC52-060B14DDB055}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
x86|Any CPU = x86|Any CPU
|
||||
x86|x64 = x86|x64
|
||||
x86|x86 = x86|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x64.Build.0 = Debug|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x86.Build.0 = Debug|x86
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x64.ActiveCfg = Release|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x64.Build.0 = Release|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x86.ActiveCfg = Release|x86
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x86.Build.0 = Release|x86
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|Any CPU.ActiveCfg = x86|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|Any CPU.Build.0 = x86|Any CPU
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x64.ActiveCfg = x86|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x64.Build.0 = x86|x64
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x86.ActiveCfg = x86|x86
|
||||
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x86.Build.0 = x86|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
49
App.config
49
App.config
@@ -2,29 +2,68 @@
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="AndroidSideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
<section name="AndroidADB.Sideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||
</startup>
|
||||
<userSettings>
|
||||
<AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="enableMessageBoxes" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="copyMessageToClipboard" serializeAs="String">
|
||||
<setting name="logRclone" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="firstRun" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="useTor" serializeAs="String">
|
||||
<setting name="deleteAllAfterInstall" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="autoUpdateConfig" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="userJsonOnGameInstall" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="CallUpgrade" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="BackColor" serializeAs="String">
|
||||
<value>45, 45, 45</value>
|
||||
</setting>
|
||||
<setting name="PanelColor" serializeAs="String">
|
||||
<value>ActiveCaptionText</value>
|
||||
</setting>
|
||||
<setting name="ButtonColor" serializeAs="String">
|
||||
<value>ActiveCaptionText</value>
|
||||
</setting>
|
||||
<setting name="SubButtonColor" serializeAs="String">
|
||||
<value>64, 64, 64</value>
|
||||
</setting>
|
||||
<setting name="TextBoxColor" serializeAs="String">
|
||||
<value>45, 45, 45</value>
|
||||
</setting>
|
||||
<setting name="ComboBoxColor" serializeAs="String">
|
||||
<value>45, 45, 45</value>
|
||||
</setting>
|
||||
<setting name="FontColor" serializeAs="String">
|
||||
<value>White</value>
|
||||
</setting>
|
||||
<setting name="FontStyle" serializeAs="String">
|
||||
<value>Microsoft Sans Serif, 11.25pt</value>
|
||||
</setting>
|
||||
<setting name="BackPicturePath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="SpoofGames" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
</AndroidADB.Sideloader.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
||||
@@ -1,79 +0,0 @@
|
||||
0.12
|
||||
+ Added settings form
|
||||
+ Added progress bar (again)
|
||||
+ Added a new user.json
|
||||
= Fixed crash on some systems (PerformanceCounter)
|
||||
= Fixed crash because of file name inconsistency
|
||||
- Removed performance counters because they made the software not work for some people
|
||||
|
||||
0.11
|
||||
+ Changed normal message boxes to flexible ones
|
||||
+ Added changelog to update message
|
||||
= Improved update message
|
||||
- Removed progressbar
|
||||
|
||||
0.10
|
||||
+ Added few tooltips
|
||||
+ Sideload folder now works for all apks (recursive search)
|
||||
= Obb copy and Sideload progress bar problems should be fixed
|
||||
= Fixed user.json not working if the any of folder had spaces
|
||||
= Switched back to Message Boxes
|
||||
|
||||
0.9
|
||||
+ Added the buggy progress bar back, uses different "logic"
|
||||
+ Added an icon (Increased the exe size by like 300% just with that)
|
||||
+ Added sideload folder button
|
||||
+ Added Creat user.json button and form
|
||||
+ Changed Message Boxes to notifications
|
||||
|
||||
0.8.5
|
||||
+ Added auto update download
|
||||
= Fixed a bug where if you didn't have the adb folder it would crash
|
||||
|
||||
0.8
|
||||
+ Every command now shows progress on title bar
|
||||
+ Automatically run Adb Devices and List Apps on form startup
|
||||
+ You can now search the App List Combo Box
|
||||
= Cleaned some code
|
||||
|
||||
0.7
|
||||
= Fixed UI Freezes
|
||||
+ Added Uninstall APK Button
|
||||
+ Added Launch package Button
|
||||
- Removed loading bar
|
||||
|
||||
0.6
|
||||
+ Added List Apk Perms button
|
||||
+ Added Change Permissions button
|
||||
+ Added dinamically added checkbox for permisssions
|
||||
= The software now downloads adb from master instead of v0.3 release
|
||||
|
||||
0.5
|
||||
- Removed Flash Firmware
|
||||
= Redesigned UI
|
||||
= Reworked RunAdbCommand function (now it will be possible to do stuff I wasnt able to do before)
|
||||
= Replaced Ui Buttons, still needs work
|
||||
+ Added List apk button
|
||||
+ Added List apk combo box
|
||||
+ Added get apk function
|
||||
= Cleaned a bit of code
|
||||
|
||||
0.4
|
||||
+ Added auto download of adb archive
|
||||
+ Added auto extraction of adb archive
|
||||
|
||||
0.3
|
||||
+ Added new form, you can run custom adb commands now
|
||||
+ Added recover and backup app data
|
||||
- Removed Select APK and Select OBB Buttons
|
||||
- Removed tooltips from removed buttons
|
||||
+ Sideload APK and Copy Obb buttons now also make you select the file/folder
|
||||
+ Improved firmware button
|
||||
|
||||
0.2
|
||||
+ Added Flash Firmware button
|
||||
+ Added few tooltips
|
||||
+ Renamed buttons
|
||||
|
||||
0.1
|
||||
+ Initial Release
|
||||
727
Form1.Designer.cs
generated
727
Form1.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
1788
Form1.resx
1788
Form1.resx
File diff suppressed because it is too large
Load Diff
65
ImageForm.Designer.cs
generated
Normal file
65
ImageForm.Designer.cs
generated
Normal file
@@ -0,0 +1,65 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class ImageForm
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Location = new System.Drawing.Point(13, 13);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(775, 425);
|
||||
this.pictureBox1.TabIndex = 0;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// ImageForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Name = "ImageForm";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "ImageForm";
|
||||
this.TopMost = true;
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ImageForm_FormClosing);
|
||||
this.Load += new System.EventHandler(this.ImageForm_Load);
|
||||
this.Shown += new System.EventHandler(this.ImageForm_Shown);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
}
|
||||
}
|
||||
45
ImageForm.cs
Normal file
45
ImageForm.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class ImageForm : Form
|
||||
{
|
||||
public ImageForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void ImageForm_Shown(object sender, EventArgs e)
|
||||
{
|
||||
//this.CenterToScreen();
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
this.MinimumSize = this.Size;
|
||||
this.MaximumSize = this.Size;
|
||||
|
||||
pictureBox1.Size = this.Size;
|
||||
|
||||
pictureBox1.Image = new Bitmap(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\warning.png");
|
||||
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
||||
|
||||
}
|
||||
|
||||
private void ImageForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void ImageForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
Form1 obj = (Form1)Application.OpenForms["Form1"];
|
||||
obj.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
18
Logger.cs
Normal file
18
Logger.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.IO;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
class Logger
|
||||
{
|
||||
public static string logfile = "debuglog.txt";
|
||||
|
||||
public static bool Log(string text, bool ret = true)
|
||||
{
|
||||
string newline = "\n";
|
||||
if (text.Length > 40 && text.Contains("\n"))
|
||||
newline += "\n\n";
|
||||
try { File.AppendAllText(logfile, text + newline); } catch { }
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: AssemblyVersion("1.13.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.13.0.0")]
|
||||
|
||||
6
Properties/Resources.Designer.cs
generated
6
Properties/Resources.Designer.cs
generated
@@ -22,7 +22,7 @@ namespace AndroidSideloader.Properties {
|
||||
[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 {
|
||||
public class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace AndroidSideloader.Properties {
|
||||
/// 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 {
|
||||
public static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AndroidSideloader.Properties.Resources", typeof(Resources).Assembly);
|
||||
@@ -51,7 +51,7 @@ namespace AndroidSideloader.Properties {
|
||||
/// 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 {
|
||||
public static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
|
||||
172
Properties/Settings.Designer.cs
generated
172
Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace AndroidSideloader.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.7.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -50,12 +50,12 @@ namespace AndroidSideloader.Properties {
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool copyMessageToClipboard {
|
||||
public bool logRclone {
|
||||
get {
|
||||
return ((bool)(this["copyMessageToClipboard"]));
|
||||
return ((bool)(this["logRclone"]));
|
||||
}
|
||||
set {
|
||||
this["copyMessageToClipboard"] = value;
|
||||
this["logRclone"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,13 +73,169 @@ namespace AndroidSideloader.Properties {
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool useTor {
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool deleteAllAfterInstall {
|
||||
get {
|
||||
return ((bool)(this["useTor"]));
|
||||
return ((bool)(this["deleteAllAfterInstall"]));
|
||||
}
|
||||
set {
|
||||
this["useTor"] = value;
|
||||
this["deleteAllAfterInstall"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool autoUpdateConfig {
|
||||
get {
|
||||
return ((bool)(this["autoUpdateConfig"]));
|
||||
}
|
||||
set {
|
||||
this["autoUpdateConfig"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool userJsonOnGameInstall {
|
||||
get {
|
||||
return ((bool)(this["userJsonOnGameInstall"]));
|
||||
}
|
||||
set {
|
||||
this["userJsonOnGameInstall"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool CallUpgrade {
|
||||
get {
|
||||
return ((bool)(this["CallUpgrade"]));
|
||||
}
|
||||
set {
|
||||
this["CallUpgrade"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
|
||||
public global::System.Drawing.Color BackColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["BackColor"]));
|
||||
}
|
||||
set {
|
||||
this["BackColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("ActiveCaptionText")]
|
||||
public global::System.Drawing.Color PanelColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["PanelColor"]));
|
||||
}
|
||||
set {
|
||||
this["PanelColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("ActiveCaptionText")]
|
||||
public global::System.Drawing.Color ButtonColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["ButtonColor"]));
|
||||
}
|
||||
set {
|
||||
this["ButtonColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("64, 64, 64")]
|
||||
public global::System.Drawing.Color SubButtonColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["SubButtonColor"]));
|
||||
}
|
||||
set {
|
||||
this["SubButtonColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
|
||||
public global::System.Drawing.Color TextBoxColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["TextBoxColor"]));
|
||||
}
|
||||
set {
|
||||
this["TextBoxColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
|
||||
public global::System.Drawing.Color ComboBoxColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["ComboBoxColor"]));
|
||||
}
|
||||
set {
|
||||
this["ComboBoxColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("White")]
|
||||
public global::System.Drawing.Color FontColor {
|
||||
get {
|
||||
return ((global::System.Drawing.Color)(this["FontColor"]));
|
||||
}
|
||||
set {
|
||||
this["FontColor"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("Microsoft Sans Serif, 11.25pt")]
|
||||
public global::System.Drawing.Font FontStyle {
|
||||
get {
|
||||
return ((global::System.Drawing.Font)(this["FontStyle"]));
|
||||
}
|
||||
set {
|
||||
this["FontStyle"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string BackPicturePath {
|
||||
get {
|
||||
return ((string)(this["BackPicturePath"]));
|
||||
}
|
||||
set {
|
||||
this["BackPicturePath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool SpoofGames {
|
||||
get {
|
||||
return ((bool)(this["SpoofGames"]));
|
||||
}
|
||||
set {
|
||||
this["SpoofGames"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,52 @@
|
||||
<Setting Name="enableMessageBoxes" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="copyMessageToClipboard" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="logRclone" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="firstRun" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="useTor" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="deleteAllAfterInstall" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="autoUpdateConfig" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="userJsonOnGameInstall" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="CallUpgrade" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">45, 45, 45</Value>
|
||||
</Setting>
|
||||
<Setting Name="PanelColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">ActiveCaptionText</Value>
|
||||
</Setting>
|
||||
<Setting Name="ButtonColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">ActiveCaptionText</Value>
|
||||
</Setting>
|
||||
<Setting Name="SubButtonColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">64, 64, 64</Value>
|
||||
</Setting>
|
||||
<Setting Name="TextBoxColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">45, 45, 45</Value>
|
||||
</Setting>
|
||||
<Setting Name="ComboBoxColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">45, 45, 45</Value>
|
||||
</Setting>
|
||||
<Setting Name="FontColor" Type="System.Drawing.Color" Scope="User">
|
||||
<Value Profile="(Default)">White</Value>
|
||||
</Setting>
|
||||
<Setting Name="FontStyle" Type="System.Drawing.Font" Scope="User">
|
||||
<Value Profile="(Default)">Microsoft Sans Serif, 11.25pt</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackPicturePath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SpoofGames" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
|
||||
104
QuestForm.Designer.cs
generated
Normal file
104
QuestForm.Designer.cs
generated
Normal file
@@ -0,0 +1,104 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class QuestForm
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.RefreshRateComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.TextureResTextBox = new System.Windows.Forms.TextBox();
|
||||
this.ResolutionLabel = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// RefreshRateComboBox
|
||||
//
|
||||
this.RefreshRateComboBox.FormattingEnabled = true;
|
||||
this.RefreshRateComboBox.Items.AddRange(new object[] {
|
||||
"72",
|
||||
"90"});
|
||||
this.RefreshRateComboBox.Location = new System.Drawing.Point(12, 12);
|
||||
this.RefreshRateComboBox.Name = "RefreshRateComboBox";
|
||||
this.RefreshRateComboBox.Size = new System.Drawing.Size(121, 21);
|
||||
this.RefreshRateComboBox.TabIndex = 0;
|
||||
this.RefreshRateComboBox.Text = "Select refresh rate";
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(13, 66);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(75, 23);
|
||||
this.button1.TabIndex = 1;
|
||||
this.button1.Text = "Apply";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// TextureResTextBox
|
||||
//
|
||||
this.TextureResTextBox.Location = new System.Drawing.Point(13, 40);
|
||||
this.TextureResTextBox.Name = "TextureResTextBox";
|
||||
this.TextureResTextBox.Size = new System.Drawing.Size(120, 20);
|
||||
this.TextureResTextBox.TabIndex = 2;
|
||||
this.TextureResTextBox.Text = "0";
|
||||
//
|
||||
// ResolutionLabel
|
||||
//
|
||||
this.ResolutionLabel.AutoSize = true;
|
||||
this.ResolutionLabel.ForeColor = System.Drawing.Color.White;
|
||||
this.ResolutionLabel.Location = new System.Drawing.Point(135, 43);
|
||||
this.ResolutionLabel.Name = "ResolutionLabel";
|
||||
this.ResolutionLabel.Size = new System.Drawing.Size(160, 13);
|
||||
this.ResolutionLabel.TabIndex = 3;
|
||||
this.ResolutionLabel.Text = "Resolution per eye (0 for default)";
|
||||
//
|
||||
// QuestForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
|
||||
this.ClientSize = new System.Drawing.Size(307, 103);
|
||||
this.Controls.Add(this.ResolutionLabel);
|
||||
this.Controls.Add(this.TextureResTextBox);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.RefreshRateComboBox);
|
||||
this.MaximumSize = new System.Drawing.Size(323, 142);
|
||||
this.MinimumSize = new System.Drawing.Size(323, 142);
|
||||
this.Name = "QuestForm";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "QuestForm";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ComboBox RefreshRateComboBox;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.TextBox TextureResTextBox;
|
||||
private System.Windows.Forms.Label ResolutionLabel;
|
||||
}
|
||||
}
|
||||
38
QuestForm.cs
Normal file
38
QuestForm.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class QuestForm : Form
|
||||
{
|
||||
public QuestForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (RefreshRateComboBox.SelectedIndex != -1)
|
||||
{
|
||||
ADB.RunAdbCommandToString($"shell setprop debug.oculus.refreshRate {RefreshRateComboBox.SelectedItem.ToString()}");
|
||||
ADB.RunAdbCommandToString($"shell settings put global 90hz_global {RefreshRateComboBox.SelectedIndex}");
|
||||
ADB.RunAdbCommandToString($"shell settings put global 90hzglobal {RefreshRateComboBox.SelectedIndex}");
|
||||
}
|
||||
|
||||
if (TextureResTextBox.Text.Length>0)
|
||||
{
|
||||
Int32.TryParse(TextureResTextBox.Text, out int result);
|
||||
ADB.RunAdbCommandToString($"shell settings put global texture_size_Global {TextureResTextBox.Text}");
|
||||
ADB.RunAdbCommandToString($"shell settings put global texture_size_Global {TextureResTextBox.Text}");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
12
RCLONE.cs
Normal file
12
RCLONE.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
class RCLONE
|
||||
{
|
||||
}
|
||||
}
|
||||
17
README.md
17
README.md
@@ -2,8 +2,15 @@
|
||||
|
||||
The icon of the app contains an icon made by icon8.com
|
||||
|
||||
Special thanks to
|
||||
- badcoder5000#4598 for the awesome ui update
|
||||
- https://stackoverflow.com/users/57611/erike for the folder browser dialog code
|
||||
- Serge Weinstock for developing SergeUtils, which is used to search the combo box
|
||||
- Mike Gold https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box
|
||||
Special thanks:
|
||||
- Thanks to pmow for all of his work, including rclone, wonka and other projects
|
||||
- Thanks to flow for being friendly and helping every one, also congrats on being the discord server owner now! :D
|
||||
- Thanks to the data team, they know who they are ;)
|
||||
- Thanks to badcoder5000 for helping me redesign the ui
|
||||
- Thanks to gotard for the theme changer
|
||||
- Thanks to Verb8em for drawing the new icon
|
||||
- Thanks to 7zip team for 7zip :)
|
||||
- Thanks to rclone team for rclone :D
|
||||
- Thanks to https://stackoverflow.com/users/57611/erike for the folder browser dialog code
|
||||
- Thanks to Serge Weinstock for developing SergeUtils, which is used to search the combo box
|
||||
- Thanks to Mike Gold https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box
|
||||
|
||||
128
SettingsForm.Designer.cs
generated
128
SettingsForm.Designer.cs
generated
@@ -31,18 +31,20 @@
|
||||
this.checkForUpdatesCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.applyButton = new System.Windows.Forms.Button();
|
||||
this.enableMessageBoxesCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.copyMessageToClipboardCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.resetSettingsButton = new System.Windows.Forms.Button();
|
||||
this.useTorCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.deleteAfterInstallCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.updateConfigCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.debugRcloneCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.userJsonOnGameInstall = new System.Windows.Forms.CheckBox();
|
||||
this.spoofGamesCheckbox = new System.Windows.Forms.CheckBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// checkForUpdatesCheckBox
|
||||
//
|
||||
this.checkForUpdatesCheckBox.AutoSize = true;
|
||||
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(17, 16);
|
||||
this.checkForUpdatesCheckBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(13, 13);
|
||||
this.checkForUpdatesCheckBox.Name = "checkForUpdatesCheckBox";
|
||||
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(145, 21);
|
||||
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(113, 17);
|
||||
this.checkForUpdatesCheckBox.TabIndex = 0;
|
||||
this.checkForUpdatesCheckBox.Text = "Check for updates";
|
||||
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = true;
|
||||
@@ -52,11 +54,10 @@
|
||||
//
|
||||
this.applyButton.BackColor = System.Drawing.Color.White;
|
||||
this.applyButton.ForeColor = System.Drawing.Color.Black;
|
||||
this.applyButton.Location = new System.Drawing.Point(476, 225);
|
||||
this.applyButton.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.applyButton.Location = new System.Drawing.Point(357, 183);
|
||||
this.applyButton.Name = "applyButton";
|
||||
this.applyButton.Size = new System.Drawing.Size(100, 28);
|
||||
this.applyButton.TabIndex = 1;
|
||||
this.applyButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.applyButton.TabIndex = 5;
|
||||
this.applyButton.Text = "Apply";
|
||||
this.applyButton.UseVisualStyleBackColor = false;
|
||||
this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
|
||||
@@ -64,66 +65,98 @@
|
||||
// enableMessageBoxesCheckBox
|
||||
//
|
||||
this.enableMessageBoxesCheckBox.AutoSize = true;
|
||||
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(17, 44);
|
||||
this.enableMessageBoxesCheckBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(13, 36);
|
||||
this.enableMessageBoxesCheckBox.Name = "enableMessageBoxesCheckBox";
|
||||
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(296, 21);
|
||||
this.enableMessageBoxesCheckBox.TabIndex = 2;
|
||||
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(227, 17);
|
||||
this.enableMessageBoxesCheckBox.TabIndex = 1;
|
||||
this.enableMessageBoxesCheckBox.Text = "Enable Message Boxes on task completed";
|
||||
this.enableMessageBoxesCheckBox.UseVisualStyleBackColor = true;
|
||||
this.enableMessageBoxesCheckBox.CheckedChanged += new System.EventHandler(this.enableMessageBoxesCheckBox_CheckedChanged);
|
||||
//
|
||||
// copyMessageToClipboardCheckBox
|
||||
//
|
||||
this.copyMessageToClipboardCheckBox.AutoSize = true;
|
||||
this.copyMessageToClipboardCheckBox.Location = new System.Drawing.Point(17, 73);
|
||||
this.copyMessageToClipboardCheckBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.copyMessageToClipboardCheckBox.Name = "copyMessageToClipboardCheckBox";
|
||||
this.copyMessageToClipboardCheckBox.Size = new System.Drawing.Size(201, 21);
|
||||
this.copyMessageToClipboardCheckBox.TabIndex = 3;
|
||||
this.copyMessageToClipboardCheckBox.Text = "Copy message to clipboard";
|
||||
this.copyMessageToClipboardCheckBox.UseVisualStyleBackColor = true;
|
||||
this.copyMessageToClipboardCheckBox.CheckedChanged += new System.EventHandler(this.copyMessageToClipboardCheckBox_CheckedChanged);
|
||||
//
|
||||
// resetSettingsButton
|
||||
//
|
||||
this.resetSettingsButton.BackColor = System.Drawing.Color.White;
|
||||
this.resetSettingsButton.ForeColor = System.Drawing.Color.Black;
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(341, 225);
|
||||
this.resetSettingsButton.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(256, 183);
|
||||
this.resetSettingsButton.Name = "resetSettingsButton";
|
||||
this.resetSettingsButton.Size = new System.Drawing.Size(127, 28);
|
||||
this.resetSettingsButton.Size = new System.Drawing.Size(95, 23);
|
||||
this.resetSettingsButton.TabIndex = 4;
|
||||
this.resetSettingsButton.Text = "Reset Settings";
|
||||
this.resetSettingsButton.UseVisualStyleBackColor = false;
|
||||
this.resetSettingsButton.Click += new System.EventHandler(this.resetSettingsButton_Click);
|
||||
//
|
||||
// useTorCheckBox
|
||||
// deleteAfterInstallCheckBox
|
||||
//
|
||||
this.useTorCheckBox.AutoSize = true;
|
||||
this.useTorCheckBox.Location = new System.Drawing.Point(17, 102);
|
||||
this.useTorCheckBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.useTorCheckBox.Name = "useTorCheckBox";
|
||||
this.useTorCheckBox.Size = new System.Drawing.Size(212, 21);
|
||||
this.useTorCheckBox.TabIndex = 5;
|
||||
this.useTorCheckBox.Text = "Download games through tor";
|
||||
this.useTorCheckBox.UseVisualStyleBackColor = true;
|
||||
this.useTorCheckBox.CheckedChanged += new System.EventHandler(this.useTorCheckBox_CheckedChanged);
|
||||
this.deleteAfterInstallCheckBox.AutoSize = true;
|
||||
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(13, 59);
|
||||
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
|
||||
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(214, 17);
|
||||
this.deleteAfterInstallCheckBox.TabIndex = 3;
|
||||
this.deleteAfterInstallCheckBox.Text = "Delete games after download and install";
|
||||
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = true;
|
||||
this.deleteAfterInstallCheckBox.CheckedChanged += new System.EventHandler(this.deleteAfterInstallCheckBox_CheckedChanged);
|
||||
//
|
||||
// updateConfigCheckBox
|
||||
//
|
||||
this.updateConfigCheckBox.AutoSize = true;
|
||||
this.updateConfigCheckBox.Location = new System.Drawing.Point(13, 83);
|
||||
this.updateConfigCheckBox.Name = "updateConfigCheckBox";
|
||||
this.updateConfigCheckBox.Size = new System.Drawing.Size(157, 17);
|
||||
this.updateConfigCheckBox.TabIndex = 6;
|
||||
this.updateConfigCheckBox.Text = "Update config automatically";
|
||||
this.updateConfigCheckBox.UseVisualStyleBackColor = true;
|
||||
this.updateConfigCheckBox.CheckedChanged += new System.EventHandler(this.updateConfigCheckBox_CheckedChanged);
|
||||
//
|
||||
// debugRcloneCheckBox
|
||||
//
|
||||
this.debugRcloneCheckBox.AutoSize = true;
|
||||
this.debugRcloneCheckBox.Location = new System.Drawing.Point(13, 106);
|
||||
this.debugRcloneCheckBox.Name = "debugRcloneCheckBox";
|
||||
this.debugRcloneCheckBox.Size = new System.Drawing.Size(95, 17);
|
||||
this.debugRcloneCheckBox.TabIndex = 8;
|
||||
this.debugRcloneCheckBox.Text = "Debug Rclone";
|
||||
this.debugRcloneCheckBox.UseVisualStyleBackColor = true;
|
||||
this.debugRcloneCheckBox.CheckedChanged += new System.EventHandler(this.debugRcloneCheckBox_CheckedChanged);
|
||||
//
|
||||
// userJsonOnGameInstall
|
||||
//
|
||||
this.userJsonOnGameInstall.AutoSize = true;
|
||||
this.userJsonOnGameInstall.Location = new System.Drawing.Point(13, 130);
|
||||
this.userJsonOnGameInstall.Name = "userJsonOnGameInstall";
|
||||
this.userJsonOnGameInstall.Size = new System.Drawing.Size(177, 17);
|
||||
this.userJsonOnGameInstall.TabIndex = 9;
|
||||
this.userJsonOnGameInstall.Text = "Push random user.json on install";
|
||||
this.userJsonOnGameInstall.UseVisualStyleBackColor = true;
|
||||
this.userJsonOnGameInstall.CheckedChanged += new System.EventHandler(this.userJsonOnGameInstall_CheckedChanged);
|
||||
//
|
||||
// spoofGamesCheckbox
|
||||
//
|
||||
this.spoofGamesCheckbox.AutoSize = true;
|
||||
this.spoofGamesCheckbox.Location = new System.Drawing.Point(13, 153);
|
||||
this.spoofGamesCheckbox.Name = "spoofGamesCheckbox";
|
||||
this.spoofGamesCheckbox.Size = new System.Drawing.Size(184, 17);
|
||||
this.spoofGamesCheckbox.TabIndex = 10;
|
||||
this.spoofGamesCheckbox.Text = "Spoof games installed from rclone";
|
||||
this.spoofGamesCheckbox.UseVisualStyleBackColor = true;
|
||||
this.spoofGamesCheckbox.CheckedChanged += new System.EventHandler(this.spoofGamesCheckbox_CheckedChanged);
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
|
||||
this.ClientSize = new System.Drawing.Size(592, 268);
|
||||
this.Controls.Add(this.useTorCheckBox);
|
||||
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
|
||||
this.ClientSize = new System.Drawing.Size(444, 218);
|
||||
this.Controls.Add(this.spoofGamesCheckbox);
|
||||
this.Controls.Add(this.userJsonOnGameInstall);
|
||||
this.Controls.Add(this.debugRcloneCheckBox);
|
||||
this.Controls.Add(this.updateConfigCheckBox);
|
||||
this.Controls.Add(this.deleteAfterInstallCheckBox);
|
||||
this.Controls.Add(this.resetSettingsButton);
|
||||
this.Controls.Add(this.copyMessageToClipboardCheckBox);
|
||||
this.Controls.Add(this.enableMessageBoxesCheckBox);
|
||||
this.Controls.Add(this.applyButton);
|
||||
this.Controls.Add(this.checkForUpdatesCheckBox);
|
||||
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.ForeColor = System.Drawing.Color.White;
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.Name = "SettingsForm";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "SettingsForm";
|
||||
@@ -139,8 +172,11 @@
|
||||
private System.Windows.Forms.CheckBox checkForUpdatesCheckBox;
|
||||
private System.Windows.Forms.Button applyButton;
|
||||
private System.Windows.Forms.CheckBox enableMessageBoxesCheckBox;
|
||||
private System.Windows.Forms.CheckBox copyMessageToClipboardCheckBox;
|
||||
private System.Windows.Forms.Button resetSettingsButton;
|
||||
private System.Windows.Forms.CheckBox useTorCheckBox;
|
||||
private System.Windows.Forms.CheckBox deleteAfterInstallCheckBox;
|
||||
private System.Windows.Forms.CheckBox updateConfigCheckBox;
|
||||
private System.Windows.Forms.CheckBox debugRcloneCheckBox;
|
||||
private System.Windows.Forms.CheckBox userJsonOnGameInstall;
|
||||
private System.Windows.Forms.CheckBox spoofGamesCheckbox;
|
||||
}
|
||||
}
|
||||
@@ -30,8 +30,11 @@ namespace AndroidSideloader
|
||||
{
|
||||
checkForUpdatesCheckBox.Checked = Properties.Settings.Default.checkForUpdates;
|
||||
enableMessageBoxesCheckBox.Checked = Properties.Settings.Default.enableMessageBoxes;
|
||||
copyMessageToClipboardCheckBox.Checked = Properties.Settings.Default.copyMessageToClipboard;
|
||||
useTorCheckBox.Checked = Properties.Settings.Default.useTor;
|
||||
deleteAfterInstallCheckBox.Checked = Properties.Settings.Default.deleteAllAfterInstall;
|
||||
updateConfigCheckBox.Checked = Properties.Settings.Default.autoUpdateConfig;
|
||||
debugRcloneCheckBox.Checked = Properties.Settings.Default.logRclone;
|
||||
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
|
||||
spoofGamesCheckbox.Checked = Properties.Settings.Default.SpoofGames;
|
||||
}
|
||||
|
||||
void intToolTips()
|
||||
@@ -40,14 +43,13 @@ namespace AndroidSideloader
|
||||
checkForUpdatesToolTip.SetToolTip(this.checkForUpdatesCheckBox, "If this is checked, the software will check for available updates");
|
||||
ToolTip enableMessageBoxesToolTip = new ToolTip();
|
||||
enableMessageBoxesToolTip.SetToolTip(this.enableMessageBoxesCheckBox, "If this is checked, the software will display message boxes after every completed task");
|
||||
ToolTip copyMessageToClipboardToolTip = new ToolTip();
|
||||
copyMessageToClipboardToolTip.SetToolTip(this.copyMessageToClipboardCheckBox, "If this is checked, after each task the software will set the result message to your clipboard");
|
||||
ToolTip useTorToolTip = new ToolTip();
|
||||
useTorToolTip.SetToolTip(this.useTorCheckBox, "If this is checked, the software will use tor to download the games");
|
||||
ToolTip deleteAfterInstallToolTip = new ToolTip();
|
||||
deleteAfterInstallToolTip.SetToolTip(this.deleteAfterInstallCheckBox, "If this is checked, the software will delete all game files after downloading and installing a game from a remote server");
|
||||
}
|
||||
|
||||
private void applyButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
@@ -66,20 +68,35 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.enableMessageBoxes = enableMessageBoxesCheckBox.Checked;
|
||||
}
|
||||
|
||||
private void copyMessageToClipboardCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.copyMessageToClipboard = copyMessageToClipboardCheckBox.Checked;
|
||||
}
|
||||
|
||||
private void resetSettingsButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Reset();
|
||||
intSettings();
|
||||
}
|
||||
|
||||
private void useTorCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
private void deleteAfterInstallCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.useTor = useTorCheckBox.Checked;
|
||||
Properties.Settings.Default.deleteAllAfterInstall = deleteAfterInstallCheckBox.Checked;
|
||||
}
|
||||
|
||||
private void updateConfigCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.autoUpdateConfig = updateConfigCheckBox.Checked;
|
||||
}
|
||||
|
||||
private void debugRcloneCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.logRclone = debugRcloneCheckBox.Checked;
|
||||
}
|
||||
|
||||
private void userJsonOnGameInstall_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.userJsonOnGameInstall = userJsonOnGameInstall.Checked;
|
||||
}
|
||||
|
||||
private void spoofGamesCheckbox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.SpoofGames = spoofGamesCheckbox.Checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Sideloader Launcher.exe
Normal file
BIN
Sideloader Launcher.exe
Normal file
Binary file not shown.
98
SpoofForm.Designer.cs
generated
Normal file
98
SpoofForm.Designer.cs
generated
Normal file
@@ -0,0 +1,98 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class SpoofForm
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.SpoofButton = new System.Windows.Forms.Button();
|
||||
this.PackageNameTextBox = new System.Windows.Forms.TextBox();
|
||||
this.RandomizeButton = new System.Windows.Forms.Button();
|
||||
this.progressBar1 = new System.Windows.Forms.ProgressBar();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// SpoofButton
|
||||
//
|
||||
this.SpoofButton.Location = new System.Drawing.Point(216, 13);
|
||||
this.SpoofButton.Name = "SpoofButton";
|
||||
this.SpoofButton.Size = new System.Drawing.Size(70, 20);
|
||||
this.SpoofButton.TabIndex = 0;
|
||||
this.SpoofButton.Text = "Spoof!";
|
||||
this.SpoofButton.UseVisualStyleBackColor = true;
|
||||
this.SpoofButton.Click += new System.EventHandler(this.SpoofButton_Click);
|
||||
//
|
||||
// PackageNameTextBox
|
||||
//
|
||||
this.PackageNameTextBox.Location = new System.Drawing.Point(13, 13);
|
||||
this.PackageNameTextBox.Name = "PackageNameTextBox";
|
||||
this.PackageNameTextBox.Size = new System.Drawing.Size(117, 20);
|
||||
this.PackageNameTextBox.TabIndex = 1;
|
||||
//
|
||||
// RandomizeButton
|
||||
//
|
||||
this.RandomizeButton.Location = new System.Drawing.Point(137, 13);
|
||||
this.RandomizeButton.Name = "RandomizeButton";
|
||||
this.RandomizeButton.Size = new System.Drawing.Size(73, 20);
|
||||
this.RandomizeButton.TabIndex = 2;
|
||||
this.RandomizeButton.Text = "Randomize";
|
||||
this.RandomizeButton.UseVisualStyleBackColor = true;
|
||||
this.RandomizeButton.Click += new System.EventHandler(this.RandomizeButton_Click);
|
||||
//
|
||||
// progressBar1
|
||||
//
|
||||
this.progressBar1.Location = new System.Drawing.Point(13, 39);
|
||||
this.progressBar1.Name = "progressBar1";
|
||||
this.progressBar1.Size = new System.Drawing.Size(273, 23);
|
||||
this.progressBar1.TabIndex = 3;
|
||||
//
|
||||
// SpoofForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56)))));
|
||||
this.ClientSize = new System.Drawing.Size(300, 80);
|
||||
this.Controls.Add(this.progressBar1);
|
||||
this.Controls.Add(this.RandomizeButton);
|
||||
this.Controls.Add(this.PackageNameTextBox);
|
||||
this.Controls.Add(this.SpoofButton);
|
||||
this.MaximumSize = new System.Drawing.Size(316, 119);
|
||||
this.MinimumSize = new System.Drawing.Size(316, 119);
|
||||
this.Name = "SpoofForm";
|
||||
this.Text = "SpoofForm";
|
||||
this.Load += new System.EventHandler(this.SpoofForm_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button SpoofButton;
|
||||
private System.Windows.Forms.TextBox PackageNameTextBox;
|
||||
private System.Windows.Forms.Button RandomizeButton;
|
||||
private System.Windows.Forms.ProgressBar progressBar1;
|
||||
}
|
||||
}
|
||||
61
SpoofForm.cs
Normal file
61
SpoofForm.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using JR.Utils.GUI.Forms;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using Spoofer;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class SpoofForm : Form
|
||||
{
|
||||
public SpoofForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private async void SpoofButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
string NewPackageName = PackageNameTextBox.Text;
|
||||
string path;
|
||||
using (OpenFileDialog openFileDialog = new OpenFileDialog())
|
||||
{
|
||||
openFileDialog.Filter = "Android apps (*.apk)|*.apk";
|
||||
openFileDialog.FilterIndex = 2;
|
||||
openFileDialog.RestoreDirectory = true;
|
||||
|
||||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||
path = openFileDialog.FileName;
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
progressBar1.Style = ProgressBarStyle.Marquee;
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
spoofer.Init();
|
||||
spoofer.SpoofApk(path, NewPackageName);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
progressBar1.Style = ProgressBarStyle.Continuous;
|
||||
|
||||
FlexibleMessageBox.Show($"App spoofed from {spoofer.originalPackageName} to {NewPackageName}");
|
||||
}
|
||||
|
||||
private void SpoofForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
PackageNameTextBox.Text = Utilities.RandomPackageName();
|
||||
}
|
||||
|
||||
private void RandomizeButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
PackageNameTextBox.Text = Utilities.RandomPackageName();
|
||||
}
|
||||
}
|
||||
}
|
||||
120
SpoofForm.resx
Normal file
120
SpoofForm.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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>
|
||||
</root>
|
||||
249
ThemeForm.Designer.cs
generated
Normal file
249
ThemeForm.Designer.cs
generated
Normal file
@@ -0,0 +1,249 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class themeForm
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.colorDialog1 = new System.Windows.Forms.ColorDialog();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.button4 = new System.Windows.Forms.Button();
|
||||
this.button5 = new System.Windows.Forms.Button();
|
||||
this.button6 = new System.Windows.Forms.Button();
|
||||
this.button7 = new System.Windows.Forms.Button();
|
||||
this.button8 = new System.Windows.Forms.Button();
|
||||
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
|
||||
this.button9 = new System.Windows.Forms.Button();
|
||||
this.button10 = new System.Windows.Forms.Button();
|
||||
this.fontDialog1 = new System.Windows.Forms.FontDialog();
|
||||
this.button3 = new System.Windows.Forms.Button();
|
||||
this.button11 = new System.Windows.Forms.Button();
|
||||
this.button12 = new System.Windows.Forms.Button();
|
||||
this.button13 = new System.Windows.Forms.Button();
|
||||
this.openThemeDialog = new System.Windows.Forms.OpenFileDialog();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// colorDialog1
|
||||
//
|
||||
this.colorDialog1.AnyColor = true;
|
||||
this.colorDialog1.FullOpen = true;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(13, 12);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(128, 23);
|
||||
this.button1.TabIndex = 0;
|
||||
this.button1.Text = "Set backgorund color";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.Location = new System.Drawing.Point(13, 68);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(128, 23);
|
||||
this.button2.TabIndex = 0;
|
||||
this.button2.Text = "Set panel color";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
this.button2.Click += new System.EventHandler(this.button2_Click);
|
||||
//
|
||||
// button4
|
||||
//
|
||||
this.button4.Location = new System.Drawing.Point(13, 152);
|
||||
this.button4.Name = "button4";
|
||||
this.button4.Size = new System.Drawing.Size(128, 23);
|
||||
this.button4.TabIndex = 0;
|
||||
this.button4.Text = "Set button color";
|
||||
this.button4.UseVisualStyleBackColor = true;
|
||||
this.button4.Click += new System.EventHandler(this.button4_Click);
|
||||
//
|
||||
// button5
|
||||
//
|
||||
this.button5.Location = new System.Drawing.Point(13, 208);
|
||||
this.button5.Name = "button5";
|
||||
this.button5.Size = new System.Drawing.Size(128, 23);
|
||||
this.button5.TabIndex = 0;
|
||||
this.button5.Text = "Set combobox color";
|
||||
this.button5.UseVisualStyleBackColor = true;
|
||||
this.button5.Click += new System.EventHandler(this.button5_Click);
|
||||
//
|
||||
// button6
|
||||
//
|
||||
this.button6.Location = new System.Drawing.Point(13, 236);
|
||||
this.button6.Name = "button6";
|
||||
this.button6.Size = new System.Drawing.Size(128, 23);
|
||||
this.button6.TabIndex = 0;
|
||||
this.button6.Text = "Set textbox color";
|
||||
this.button6.UseVisualStyleBackColor = true;
|
||||
this.button6.Click += new System.EventHandler(this.button6_Click);
|
||||
//
|
||||
// button7
|
||||
//
|
||||
this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.button7.Location = new System.Drawing.Point(185, 11);
|
||||
this.button7.Name = "button7";
|
||||
this.button7.Size = new System.Drawing.Size(93, 52);
|
||||
this.button7.TabIndex = 1;
|
||||
this.button7.Text = "Save";
|
||||
this.button7.UseVisualStyleBackColor = true;
|
||||
this.button7.Click += new System.EventHandler(this.button7_Click);
|
||||
//
|
||||
// button8
|
||||
//
|
||||
this.button8.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.button8.Location = new System.Drawing.Point(185, 69);
|
||||
this.button8.Name = "button8";
|
||||
this.button8.Size = new System.Drawing.Size(93, 52);
|
||||
this.button8.TabIndex = 2;
|
||||
this.button8.Text = "Reset";
|
||||
this.button8.UseVisualStyleBackColor = true;
|
||||
this.button8.Click += new System.EventHandler(this.button8_Click);
|
||||
//
|
||||
// openFileDialog1
|
||||
//
|
||||
this.openFileDialog1.Filter = "Images|*.png;*.jpg;*.bmp;*.gif";
|
||||
//
|
||||
// button9
|
||||
//
|
||||
this.button9.Location = new System.Drawing.Point(13, 40);
|
||||
this.button9.Name = "button9";
|
||||
this.button9.Size = new System.Drawing.Size(128, 23);
|
||||
this.button9.TabIndex = 3;
|
||||
this.button9.Text = "Set background picture";
|
||||
this.button9.UseVisualStyleBackColor = true;
|
||||
this.button9.Click += new System.EventHandler(this.button9_Click);
|
||||
//
|
||||
// button10
|
||||
//
|
||||
this.button10.Location = new System.Drawing.Point(13, 124);
|
||||
this.button10.Name = "button10";
|
||||
this.button10.Size = new System.Drawing.Size(128, 23);
|
||||
this.button10.TabIndex = 4;
|
||||
this.button10.Text = "Set font style";
|
||||
this.button10.UseVisualStyleBackColor = true;
|
||||
this.button10.Click += new System.EventHandler(this.button10_Click);
|
||||
//
|
||||
// fontDialog1
|
||||
//
|
||||
this.fontDialog1.Color = System.Drawing.Color.White;
|
||||
this.fontDialog1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
//
|
||||
// button3
|
||||
//
|
||||
this.button3.Location = new System.Drawing.Point(13, 96);
|
||||
this.button3.Name = "button3";
|
||||
this.button3.Size = new System.Drawing.Size(128, 23);
|
||||
this.button3.TabIndex = 5;
|
||||
this.button3.Text = "Set font color";
|
||||
this.button3.UseVisualStyleBackColor = true;
|
||||
this.button3.Click += new System.EventHandler(this.button3_Click);
|
||||
//
|
||||
// button11
|
||||
//
|
||||
this.button11.Location = new System.Drawing.Point(13, 180);
|
||||
this.button11.Name = "button11";
|
||||
this.button11.Size = new System.Drawing.Size(128, 23);
|
||||
this.button11.TabIndex = 6;
|
||||
this.button11.Text = "Set sub-button color";
|
||||
this.button11.UseVisualStyleBackColor = true;
|
||||
this.button11.Click += new System.EventHandler(this.button11_Click);
|
||||
//
|
||||
// button12
|
||||
//
|
||||
this.button12.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.button12.Location = new System.Drawing.Point(185, 127);
|
||||
this.button12.Name = "button12";
|
||||
this.button12.Size = new System.Drawing.Size(93, 52);
|
||||
this.button12.TabIndex = 7;
|
||||
this.button12.Text = "Export Theme";
|
||||
this.button12.UseVisualStyleBackColor = true;
|
||||
this.button12.Click += new System.EventHandler(this.button12_Click);
|
||||
//
|
||||
// button13
|
||||
//
|
||||
this.button13.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.button13.Location = new System.Drawing.Point(185, 185);
|
||||
this.button13.Name = "button13";
|
||||
this.button13.Size = new System.Drawing.Size(93, 52);
|
||||
this.button13.TabIndex = 8;
|
||||
this.button13.Text = "Import theme";
|
||||
this.button13.UseVisualStyleBackColor = true;
|
||||
this.button13.Click += new System.EventHandler(this.button13_Click);
|
||||
//
|
||||
// openThemeDialog
|
||||
//
|
||||
this.openThemeDialog.Filter = "Text Files|*.txt";
|
||||
//
|
||||
// themeForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
|
||||
this.ClientSize = new System.Drawing.Size(290, 272);
|
||||
this.Controls.Add(this.button13);
|
||||
this.Controls.Add(this.button12);
|
||||
this.Controls.Add(this.button11);
|
||||
this.Controls.Add(this.button3);
|
||||
this.Controls.Add(this.button10);
|
||||
this.Controls.Add(this.button9);
|
||||
this.Controls.Add(this.button8);
|
||||
this.Controls.Add(this.button7);
|
||||
this.Controls.Add(this.button6);
|
||||
this.Controls.Add(this.button5);
|
||||
this.Controls.Add(this.button4);
|
||||
this.Controls.Add(this.button2);
|
||||
this.Controls.Add(this.button1);
|
||||
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.Name = "themeForm";
|
||||
this.Text = "Create Your Theme";
|
||||
this.Load += new System.EventHandler(this.themeForm_Load);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ColorDialog colorDialog1;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.Button button2;
|
||||
private System.Windows.Forms.Button button4;
|
||||
private System.Windows.Forms.Button button5;
|
||||
private System.Windows.Forms.Button button6;
|
||||
private System.Windows.Forms.Button button7;
|
||||
private System.Windows.Forms.Button button8;
|
||||
private System.Windows.Forms.OpenFileDialog openFileDialog1;
|
||||
private System.Windows.Forms.Button button9;
|
||||
private System.Windows.Forms.Button button10;
|
||||
private System.Windows.Forms.FontDialog fontDialog1;
|
||||
private System.Windows.Forms.Button button3;
|
||||
private System.Windows.Forms.Button button11;
|
||||
private System.Windows.Forms.Button button12;
|
||||
private System.Windows.Forms.Button button13;
|
||||
private System.Windows.Forms.OpenFileDialog openThemeDialog;
|
||||
}
|
||||
}
|
||||
199
ThemeForm.cs
Normal file
199
ThemeForm.cs
Normal file
@@ -0,0 +1,199 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class themeForm : Form
|
||||
{
|
||||
|
||||
public themeForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void button4_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.ButtonColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.PanelColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.BackColor = colorDialog1.Color;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void button7_Click(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void button8_Click(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.BackColor = Color.FromArgb(45,45,45);
|
||||
Properties.Settings.Default.ComboBoxColor = Color.FromArgb(45, 45, 45);
|
||||
Properties.Settings.Default.TextBoxColor = Color.FromArgb(45,45,45);
|
||||
Properties.Settings.Default.ButtonColor = SystemColors.ActiveCaptionText;
|
||||
Properties.Settings.Default.SubButtonColor=Color.FromArgb(64, 64, 64);
|
||||
Properties.Settings.Default.PanelColor = SystemColors.ActiveCaptionText;
|
||||
Properties.Settings.Default.BackPicturePath = "";
|
||||
Properties.Settings.Default.FontStyle = new Font("Microsoft Sans Serif", 11, FontStyle.Regular);
|
||||
Properties.Settings.Default.FontColor = Color.White;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void button5_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.ComboBoxColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void button6_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.TextBoxColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void button9_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (openFileDialog1.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
String extension = Path.GetExtension(openFileDialog1.FileName);
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\pic" + extension))
|
||||
File.Delete(Environment.CurrentDirectory + "\\pic" + extension);
|
||||
File.Copy(openFileDialog1.FileName, Environment.CurrentDirectory + "\\pic" + extension);
|
||||
Properties.Settings.Default.BackPicturePath = Environment.CurrentDirectory + "\\pic" + extension ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void button10_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (fontDialog1.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Properties.Settings.Default.FontStyle = fontDialog1.Font;
|
||||
}
|
||||
}
|
||||
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.FontColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void button11_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (colorDialog1.ShowDialog() == DialogResult.OK)
|
||||
Properties.Settings.Default.SubButtonColor = colorDialog1.Color;
|
||||
}
|
||||
|
||||
private void themeForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void button12_Click(object sender, EventArgs e)
|
||||
{
|
||||
String BackColor = ColorTranslator.ToHtml(Properties.Settings.Default.BackColor);
|
||||
String PanelColor = ColorTranslator.ToHtml(Properties.Settings.Default.PanelColor);
|
||||
String TextBoxColor = ColorTranslator.ToHtml(Properties.Settings.Default.TextBoxColor);
|
||||
String ComboBoxColor = ColorTranslator.ToHtml(Properties.Settings.Default.ComboBoxColor);
|
||||
String ButtonColor = ColorTranslator.ToHtml(Properties.Settings.Default.ButtonColor);
|
||||
String SubButtonColor = ColorTranslator.ToHtml(Properties.Settings.Default.SubButtonColor);
|
||||
String FontColor = ColorTranslator.ToHtml(Properties.Settings.Default.FontColor);
|
||||
var cvt = new FontConverter();
|
||||
string FontStyle = cvt.ConvertToString(Properties.Settings.Default.FontStyle);
|
||||
int i;
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\theme.txt"))
|
||||
{
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\theme11.txt"))
|
||||
MessageBox.Show("You can't export more than 12 themes, sorry :(");
|
||||
else
|
||||
{
|
||||
for (i = 1; i <= 10; i++)
|
||||
{
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\theme" + i + ".txt"))
|
||||
continue;
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
File.WriteAllText(Environment.CurrentDirectory + "\\theme" + i + ".txt", "#SideloaderTheme# \n" + BackColor + "\n" + PanelColor + "\n" + ButtonColor + "\n" + SubButtonColor + "\n"
|
||||
+ TextBoxColor + "\n" + ComboBoxColor + "\n" + FontColor + "\n" + FontStyle);
|
||||
MessageBox.Show("Theme exported as theme" + i + ".txt");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
File.WriteAllText(Environment.CurrentDirectory + "\\theme.txt", "#SideloaderTheme# \n" + BackColor + "\n" + PanelColor + "\n" + ButtonColor + "\n" + SubButtonColor + "\n"
|
||||
+ TextBoxColor + "\n" + ComboBoxColor + "\n" + FontColor + "\n" + FontStyle);
|
||||
MessageBox.Show("Theme exported as theme.txt");
|
||||
}
|
||||
}
|
||||
|
||||
private void button13_Click(object sender, EventArgs e)
|
||||
{
|
||||
openThemeDialog.InitialDirectory = Environment.CurrentDirectory;
|
||||
if (openThemeDialog.ShowDialog() == DialogResult.OK) {
|
||||
using (StreamReader sr = new StreamReader(openThemeDialog.FileName))
|
||||
{
|
||||
StringCollection myCol = new StringCollection();
|
||||
myCol.AddRange(File.ReadAllLines(openThemeDialog.FileName));
|
||||
if (myCol.Contains("#SideloaderTheme# "))
|
||||
{
|
||||
String[] settings = new String[myCol.Count];
|
||||
myCol.CopyTo(settings, 0);
|
||||
|
||||
Color BackColor = ColorTranslator.FromHtml(settings[1]);
|
||||
Color PanelColor = ColorTranslator.FromHtml(settings[2]);
|
||||
Color ButtonColor = ColorTranslator.FromHtml(settings[3]);
|
||||
Color SubButtonColor = ColorTranslator.FromHtml(settings[4]);
|
||||
Color TextBoxColor = ColorTranslator.FromHtml(settings[5]);
|
||||
Color ComboBoxColor = ColorTranslator.FromHtml(settings[6]);
|
||||
Color FontColor = ColorTranslator.FromHtml(settings[7]);
|
||||
Properties.Settings.Default.BackColor = BackColor;
|
||||
Properties.Settings.Default.PanelColor = PanelColor;
|
||||
Properties.Settings.Default.ButtonColor = ButtonColor;
|
||||
Properties.Settings.Default.SubButtonColor = SubButtonColor;
|
||||
Properties.Settings.Default.TextBoxColor = TextBoxColor;
|
||||
Properties.Settings.Default.ComboBoxColor = ComboBoxColor;
|
||||
Properties.Settings.Default.FontColor = FontColor;
|
||||
System.ComponentModel.TypeConverter converter =
|
||||
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font));
|
||||
var cvt = new FontConverter();
|
||||
Font f = cvt.ConvertFromString(settings[8]) as Font;
|
||||
Properties.Settings.Default.FontStyle = f;
|
||||
}
|
||||
else
|
||||
MessageBox.Show("The file you've selected is not a Rookie Sideloader theme file!");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
132
ThemeForm.resx
Normal file
132
ThemeForm.resx
Normal file
@@ -0,0 +1,132 @@
|
||||
<?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="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>138, 17</value>
|
||||
</metadata>
|
||||
<metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>278, 17</value>
|
||||
</metadata>
|
||||
<metadata name="openThemeDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>394, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
30
usernameForm.Designer.cs → UsernameForm.Designer.cs
generated
30
usernameForm.Designer.cs → UsernameForm.Designer.cs
generated
@@ -1,6 +1,6 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class usernameForm
|
||||
partial class UsernameForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
@@ -34,12 +34,12 @@
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.textBox1.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox1.ForeColor = System.Drawing.Color.White;
|
||||
this.textBox1.Location = new System.Drawing.Point(17, 16);
|
||||
this.textBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.textBox1.Location = new System.Drawing.Point(13, 13);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(532, 22);
|
||||
this.textBox1.Size = new System.Drawing.Size(400, 20);
|
||||
this.textBox1.TabIndex = 0;
|
||||
this.textBox1.Text = "Enter your username here";
|
||||
//
|
||||
@@ -47,28 +47,28 @@
|
||||
//
|
||||
this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button1.ForeColor = System.Drawing.Color.White;
|
||||
this.button1.Location = new System.Drawing.Point(17, 48);
|
||||
this.button1.Location = new System.Drawing.Point(13, 39);
|
||||
this.button1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(533, 28);
|
||||
this.button1.Size = new System.Drawing.Size(400, 23);
|
||||
this.button1.TabIndex = 1;
|
||||
this.button1.Text = "Create User.Json";
|
||||
this.button1.UseVisualStyleBackColor = false;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// usernameForm
|
||||
// UsernameForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Black;
|
||||
this.ClientSize = new System.Drawing.Size(564, 81);
|
||||
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
|
||||
this.ClientSize = new System.Drawing.Size(424, 72);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.ForeColor = System.Drawing.Color.White;
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.MaximumSize = new System.Drawing.Size(582, 128);
|
||||
this.MinimumSize = new System.Drawing.Size(582, 128);
|
||||
this.Name = "usernameForm";
|
||||
this.MaximumSize = new System.Drawing.Size(440, 111);
|
||||
this.MinimumSize = new System.Drawing.Size(440, 111);
|
||||
this.Name = "UsernameForm";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "USER.JSON";
|
||||
this.Load += new System.EventHandler(this.usernameForm_Load);
|
||||
84
UsernameForm.cs
Normal file
84
UsernameForm.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class UsernameForm : Form
|
||||
{
|
||||
public UsernameForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
string defaultText;
|
||||
|
||||
private void usernameForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
defaultText = textBox1.Text;
|
||||
}
|
||||
|
||||
|
||||
private async void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (textBox1.Text == defaultText || textBox1.Text.Length == 0)
|
||||
{
|
||||
MessageBox.Show("Please enter your username first");
|
||||
return;
|
||||
}
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
createUserJson(textBox1.Text);
|
||||
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Form1.notify("Done");
|
||||
|
||||
}
|
||||
|
||||
public static List<string> userJsons = new List<string>(new string[] { "user.json", "vrmoo.cn.json", "qq1091481055.json", "dollarvr.com.json" });
|
||||
|
||||
public static void createUserJson(string username)
|
||||
{
|
||||
ADB.RunAdbCommandToString($"shell settings put global username {username}");
|
||||
foreach (var jsonFileName in userJsons)
|
||||
{
|
||||
createUserJsonByName(username, jsonFileName);
|
||||
ADB.RunAdbCommandToString("push \"" + Environment.CurrentDirectory + $"\\{jsonFileName}\" " + " /sdcard/");
|
||||
File.Delete(jsonFileName);
|
||||
}
|
||||
|
||||
}
|
||||
public static void createUserJsonByName(string username, string jsonName)
|
||||
{
|
||||
switch (jsonName)
|
||||
{
|
||||
case "user.json":
|
||||
File.WriteAllText("user.json", "{\"username\":\"" + username + "\"}");
|
||||
break;
|
||||
case "vrmoo.cn.json":
|
||||
File.WriteAllText("vrmoo.cn.json", "{\"username\":\"" + username + "\"}");
|
||||
break;
|
||||
case "qq1091481055.json":
|
||||
File.WriteAllText("qq1091481055.json", "{\n \"username\":\"" + username + "\"\n }");
|
||||
break;
|
||||
case "dollarvr.com.json":
|
||||
File.WriteAllText("dollarvr.com.json", "{\n \"username\":\"" + username + "\"\n }");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
120
UsernameForm.resx
Normal file
120
UsernameForm.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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>
|
||||
</root>
|
||||
170
Utilities.cs
Normal file
170
Utilities.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Diagnostics;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using System.Net;
|
||||
using System.Windows.Forms;
|
||||
using System.Net.Http;
|
||||
using System.IO;
|
||||
|
||||
|
||||
namespace Spoofer
|
||||
{
|
||||
class Utilities
|
||||
{
|
||||
private static Random rand = new Random();
|
||||
public static string RandomPackageName()
|
||||
{
|
||||
return $"com.{Utilities.randomString(rand.Next(3, 8))}.{Utilities.randomString(rand.Next(3, 8))}";
|
||||
}
|
||||
|
||||
public static string CommandOutput = "";
|
||||
public static string CommandError = "";
|
||||
|
||||
public static void ExecuteCommand(string command)
|
||||
{
|
||||
var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
|
||||
processInfo.CreateNoWindow = true;
|
||||
processInfo.UseShellExecute = false;
|
||||
processInfo.RedirectStandardError = true;
|
||||
processInfo.RedirectStandardOutput = true;
|
||||
|
||||
var process = Process.Start(processInfo);
|
||||
|
||||
process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
|
||||
CommandOutput += e.Data;
|
||||
process.BeginOutputReadLine();
|
||||
|
||||
process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
|
||||
CommandError += e.Data;
|
||||
process.BeginErrorReadLine();
|
||||
|
||||
process.WaitForExit();
|
||||
|
||||
Console.WriteLine("ExitCode: {0}", process.ExitCode);
|
||||
process.Close();
|
||||
}
|
||||
|
||||
public static void Melt()
|
||||
{
|
||||
Process.Start(new ProcessStartInfo()
|
||||
{
|
||||
Arguments = "/C choice /C Y /N /D Y /T 5 & Del \"" + Application.ExecutablePath + "\"",
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
CreateNoWindow = true,
|
||||
FileName = "cmd.exe"
|
||||
});
|
||||
}
|
||||
|
||||
public static string randomString(int length)
|
||||
{
|
||||
string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
StringBuilder res = new StringBuilder();
|
||||
Random rnd = new Random();
|
||||
int randomInteger = rnd.Next(0, valid.Length);
|
||||
while (0 < length--)
|
||||
{
|
||||
res.Append(valid[randomInteger]);
|
||||
randomInteger = rnd.Next(0, valid.Length);
|
||||
}
|
||||
return res.ToString();
|
||||
}
|
||||
public static string processError = string.Empty;
|
||||
public static string startProcess(string process, string path, string command)
|
||||
{
|
||||
Process cmd = new Process();
|
||||
cmd.StartInfo.FileName = "cmd.exe";
|
||||
cmd.StartInfo.RedirectStandardInput = true;
|
||||
cmd.StartInfo.RedirectStandardOutput = true;
|
||||
cmd.StartInfo.RedirectStandardError = true;
|
||||
cmd.StartInfo.WorkingDirectory = path;
|
||||
cmd.StartInfo.CreateNoWindow = true;
|
||||
cmd.StartInfo.UseShellExecute = false;
|
||||
cmd.Start();
|
||||
cmd.StandardInput.WriteLine(command);
|
||||
cmd.StandardInput.Flush();
|
||||
cmd.StandardInput.Close();
|
||||
cmd.WaitForExit();
|
||||
string error = cmd.StandardError.ReadToEnd();
|
||||
if (error.Length > 1)
|
||||
processError = error;
|
||||
|
||||
return cmd.StandardOutput.ReadToEnd();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Zip
|
||||
{
|
||||
public static void ExtractFile(string sourceArchive, string destination)
|
||||
{
|
||||
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe"))
|
||||
{
|
||||
WebClient client = new WebClient();
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.exe", "7z.exe");
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.dll", "7z.dll");
|
||||
}
|
||||
ProcessStartInfo pro = new ProcessStartInfo();
|
||||
pro.WindowStyle = ProcessWindowStyle.Hidden;
|
||||
pro.FileName = "7z.exe";
|
||||
pro.Arguments = string.Format("x \"{0}\" -y -o\"{1}\"", sourceArchive, destination);
|
||||
Process x = Process.Start(pro);
|
||||
x.WaitForExit();
|
||||
}
|
||||
}
|
||||
|
||||
class Updater
|
||||
{
|
||||
|
||||
public static string AppName { get; set; }
|
||||
public static string RawGitHubUrl { get; set; } //https://raw.githubusercontent.com/nerdunit/androidADB.Sideloader
|
||||
static readonly public string LocalVersion = "1.15HF1";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
private static bool IsUpdateAvailable()
|
||||
{
|
||||
HttpClient client = new HttpClient();
|
||||
try
|
||||
{
|
||||
currentVersion = client.GetStringAsync($"{RawGitHubUrl}/master/version").Result;
|
||||
currentVersion = currentVersion.Remove(currentVersion.Length - 1);
|
||||
changelog = client.GetStringAsync($"{RawGitHubUrl}/master/changelog.txt").Result;
|
||||
}
|
||||
catch { return false; }
|
||||
return LocalVersion != currentVersion;
|
||||
}
|
||||
public static void Update()
|
||||
{
|
||||
if (IsUpdateAvailable())
|
||||
doUpdate();
|
||||
}
|
||||
private static void doUpdate()
|
||||
{
|
||||
try
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"There is a new update you have version {LocalVersion}, do you want to update?\nCHANGELOG\n{changelog}", $"Version {currentVersion} is available", MessageBoxButtons.YesNo);
|
||||
if (dialogResult != DialogResult.Yes)
|
||||
return;
|
||||
|
||||
//download updated version
|
||||
using (var fileClient = new WebClient())
|
||||
{
|
||||
ServicePointManager.Expect100Continue = true;
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
fileClient.DownloadFile($"{RawGitHubUrl}/releases/download/v{currentVersion}/{AppName}.exe", $"{AppName} v{currentVersion}.exe");
|
||||
}
|
||||
|
||||
Utilities.Melt();
|
||||
|
||||
Process.Start($"{AppName} v{currentVersion}.exe");
|
||||
|
||||
Environment.Exit(0);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
299
changelog.txt
299
changelog.txt
@@ -1,3 +1,297 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
v1.15HF1
|
||||
|
||||
Changes
|
||||
= Bugfixes
|
||||
|
||||
Date 11/06/2020
|
||||
|
||||
VT: https://bit.ly/2GDYWRU
|
||||
|
||||
MD5 Checksum: F0D51FEC94F8D266390E61E89E6A2EE0
|
||||
SHA-1 Checksum: 4FB43CFA6021B8360A23858169FAF15468B68EDF
|
||||
SHA-256 Checksum: CBE414D9A283871099057EE5D8E56AF408996AE9C996C31F92C4DAE16D48B024
|
||||
SHA-512 Checksum: F16A6B29ECABBB16D25B7F7FC52CB15AE4930B2B17ABAC791BF1F331270F40B047094FDEAF1EF834E72E26AA3A6762AF8BE13EBCB735EB1C1009F884E338D9DE
|
||||
|
||||
You can always get my public key from rookie.wtf/pgp.txt
|
||||
You can verify the signed message using kleopatra for windows or dark.fail/pgp
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+lfEkACgkQvrtJUNxE
|
||||
TxMDDxAAg+90vrCn0PllPEezzX3AJpy7NFWhFjUlDOLzNFMPa/QdAfF6H5vhEGay
|
||||
bhX2BDHKSIV86bLkyGPkGHuf3etpXvZsNAmPuDoZpZ4owd1O09DOvAHIJx8F1Eia
|
||||
Jc9Zovz6lKLAeIbK9ZdChKwTG3hYLIkx3rMgtvnJkZfzUKbhdU9MP0rVEzDPkSfe
|
||||
ay2CGA9xLBUhPcItUTxhANzrDpRXMGHqbi+Wrscp+KmvnjHzN3Haq2A9rsasXM5Z
|
||||
RSG8ccLZiI496tJQquTvPXYcnWQQudzcf3yiicztein0xcISEat0FFIVao7TtnS4
|
||||
cgitvGNtfXXauAxyzjZ7PdgrVuoAE/v4m25pzaTRy7TOfW1uTz2/6lr6tZa38+p9
|
||||
Bs36KcoK64FcPWjfR7zvvmCUWT/aHlRC9FwMvBHB81WRRk6xGaKl8G2QxfKY/ATl
|
||||
DNlgYXfXLzipam74XfPHiyK4Sc55WLDQxZfZfD6tqTo4u8qoDESvcEz+pbGe4Wp8
|
||||
awY4FVeSP1jVQzHgWf+oMTiHm5Gb3qMLUhZ/AHidUWFLhzXmAA4YXxIHKidRjCYT
|
||||
42Kzs1sjT2A5ll2V7jz4pqoRlsvRAxNZ5KgAZ2R01zo7gS1nGqjyoGq3tLWHbfJk
|
||||
/kD4QlOwcv06Jvp8aHcPxpccB7KHZGoRT2PB6IQE9Gt72pmAU9c=
|
||||
=f7yh
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
v1.15
|
||||
|
||||
Changes
|
||||
+ Added a spoofer
|
||||
+ Added option to auto spoof games with random package name
|
||||
+ Added new username support for quest 2
|
||||
= Updated drag and drop sideloading
|
||||
= Fixed storage label
|
||||
- Removed troubleshoot form and theme form
|
||||
|
||||
Date 11/04/2020
|
||||
|
||||
VT: https://bit.ly/3kYCQsb
|
||||
|
||||
MD5 Checksum: 39BAB4CEE3D0E387E770BA35F4488C2F
|
||||
SHA-1 Checksum: C6F311411408BCF5A55034E7A926EA385819F348
|
||||
SHA-256 Checksum: 64640374EF39DD9CFC4A613A49888E3194994AA934C5E952174A2FCF533E2D19
|
||||
SHA-512 Checksum: 22769280B732821539100BFA77C67141F271DB401DB3AFB28EF285E352659F9F45A90C8ABE1C0B829770C5AE580CA76A9208505888443C22EE82AAAE7035C6F7
|
||||
|
||||
You can always get my public key from rookie.wtf/pgp.txt
|
||||
You can verify the signed message using kleopatra for windows or dark.fail/pgp
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+jJScACgkQvrtJUNxE
|
||||
TxMTag//f570tZ4zxL1x1rdajdoYzPD6oaGIabRVPrqVogsFPuVF1Q3AOzr+nzQN
|
||||
Tiq7yRPmByu/dtBGby2mqL1acQ/9TLYDtmnOAxQJqj4h0KhYlnzdCfqJJbTghtZX
|
||||
cy44ZqgPW47P608+zC/NfePNt7Fq1rFKN3Bpo/ISoyi5/IVGqGq1Ix/D0SlhiM5X
|
||||
5VkiY+w5S0rXuAyQ4g6/03AiI9fdNVkREhUh/tYvb7IkxaN9IDlltHByeuvekMjZ
|
||||
KU+mwZ9habfthB31hp+bAXz82tbIzB4LJ1P8MNadIT8ZXG19zHEY/KlaDp2NjniV
|
||||
h+V9AnxPHlcZk63yVPOywxpZcv81LflMgs9XItX+zKH7ibniBEu8jxc/2uAjrDF/
|
||||
JuvnOUKTuH7S2iIzHhKLYZYHiOu8sIuwGC96Ep172PGCAkVVR6CtfNPMmVZRllsY
|
||||
JG3Pxdrw526SAy3Vqixbbm79Fs1o77resqGM2zl6L7Sr6sH3VnDxabVXxALgo1pH
|
||||
+LSu5rCLIIsCP1a4MAyy6UgO/+ZLrC1QazR4yY7SRQHAIM48XG4d6CznFCOjczhW
|
||||
VvYL6gZD7X4xlNBqNMtih8JDHIQ1y7n1f075oCxfWwt02kXhDL/cn8+UZ17IS6EZ
|
||||
zr/SLm1464/htCZgsUZgQrov6CpHX/xNqAubowkAVOdDREbwh2w=
|
||||
=QKlt
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
v1.14SU1
|
||||
|
||||
Changes
|
||||
+ Quota errors now will try to redownload the game from another mirror
|
||||
= Only showing mirror remotes for apps
|
||||
// Will fix device storage when I get my quest 2 and can debug adb
|
||||
|
||||
Date 10/18/2020
|
||||
|
||||
VT: https://bit.ly/3kcG62A
|
||||
|
||||
MD5 Checksum: 2A30E5F3DB785DC8104A2AA55A83CF53
|
||||
SHA-1 Checksum: 8376E5971FC4F60995A1125DD9344E52135DB4F7
|
||||
SHA-256 Checksum: FD5C74067BA00561A540DE5A4F49FA63B99C9520435A51487F997AEC569E9659
|
||||
SHA-512 Checksum: 6188D6306CA2A3F25DE08E19D1F20046774F7AA30BD745ED24FC7E53126DF3950211B599E3D774F540A6C1DEC177A895FAE70FB564B6AE96F5F10ABDCB9021C1
|
||||
|
||||
You can always get my public key from rookie.wtf/pgp.txt
|
||||
You can verify the signed message using kleopatra for windows or dark.fail/pgp
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+MCbMACgkQvrtJUNxE
|
||||
TxNMVxAAlIkoTuGTDwXRBFNanulPiYmus9UazHoVFxtG2BELk1/JLPm7dwT29FiZ
|
||||
oacUhhxLAEfDm169FoPNFCH/6q74xqjACkm8FjwCoas53DekguIvrhJKA3SiBUtZ
|
||||
m7+hrT3WWGxXoE3+avSFmdBWWvKVA9pNR/DHprHSoinDUvgSfwBHrWD8PtuSIlwU
|
||||
/jNpzyDnmBfdT4LROq93hcfFXM+POLWs5f3rXFdT+zTZexxlRiG5h7yMmsYdwdov
|
||||
4jMUSzrBpRXbmmHwDi4KLzsdOJ/5okJgRdPTZm/L1rAoJT0F7QVi2shvkoN7SIH/
|
||||
Fg+k0ZrNOnlpdAJwLmJD4PkQmxv5zpGSh8w7nbQJ41HgBtTQTh3OCpRRamPzAmfo
|
||||
A2n/NsYpR8J8u7kGzT1MUnUn2RL+igutSrnQl8R6yR8jFjaTt+F90pBXZ1nnY6mS
|
||||
8YE9mBBK3365cYVqQzOW1TUSCSzQqwTbfKDHkKrzHQWrpQ8VNMLcJBLZwU8di+4p
|
||||
u8lt1uT5MRZ+9I80YBXhwzBKkiNYOt5vHpGgt0Ib4WDS7rt/7UnzEAfl8P3VEEfX
|
||||
6w1HctI2zAVWYutBMv6HL3v23cO+UT8H6Wdgxq36mlMSNiqjLIntfIRrySUOy7JV
|
||||
D6LE34gzpDGsBIzrpW/Hlz4wGTi6nnY0Ke6DkA1H0UOoDN9ItI4=
|
||||
=ARa/
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
v1.14
|
||||
|
||||
Changes
|
||||
+ Added the ability to change remotes (mirrors)
|
||||
+ Rclone errors are now reported properly
|
||||
= Fixed some bugs
|
||||
// Will fix device storage when I get my quest 2 and can debug adb
|
||||
|
||||
Date 10/17/2020
|
||||
|
||||
VT: https://bit.ly/3j8kCm8
|
||||
|
||||
MD5 Checksum: B862B807462CE35CC930C2B1118D5692
|
||||
SHA-1 Checksum: F52C8630C89CAEDB2E90A857E494DE00B137712D
|
||||
SHA-256 Checksum: 3DDFA2B4CCFC0E9F6F86E8A74E6D3511B9C643F4C4AF19D3878B8704FA360558
|
||||
SHA-512 Checksum: 16A022D8A4D235D7C537D9F01FE7C5F964A67A3A8CD68B3DC17AF08D94837DAC6CE0C20557D029DC169E5616B36C2A4C36B1647CE0DF930C7694F3FEC3430E70
|
||||
|
||||
You can always get my public key from rookie.wtf/pgp.txt
|
||||
You can verify the signed message using kleopatra for windows or dark.fail/pgp
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+KrhQACgkQvrtJUNxE
|
||||
TxP9MRAAjZbYWkbZPK+QMqzNqsgEARs6buzrwc24dth6QEod9Fgmdg5wdinZdG8X
|
||||
MK467pd9u0JqM3u8DeKSUD0GEzJZStNKsbHfjvNAF3m8toaXLncWy7MYNN9loAra
|
||||
17MvUBBwB1QgsXtQ3EXT1cBbS3YkQPg5E+ayvY9ZgyiOpDK6fs1tA24NZUWc53kY
|
||||
TIl5IL3mZNfJck8Xc/QkZJmkBOA89oDToLOjNmZRXXEHNT/eTS6pEkMZonWQjGqF
|
||||
D2dEfQTOuIAD93JzwcP5wVJFh7z6o65/7tfguDqBsTgoRWODaY+kQJDAxoWN9w/n
|
||||
nagXg/y30EmE1mWQFUYa1n0V65OzT5+J8VF53DCHkgaejYLfi0lhy8TlWQZpmzen
|
||||
WJOsP1Oj3ZZ9sErO8waajDBzDZ3kU9NvAOeOblE491w0713MYZYs5BVgoyHi24xO
|
||||
obcp1gpLi326fkPqajgIFpDHJ014OnaXmoY9ynW9rlZJ4rwJ7WytRDzcpfyk9LV1
|
||||
G1tlcCS4c/RmuVfZi4Jh0guvOOIpJSqdG4KUtvd548sslTMdHytt+YugbKqcBAto
|
||||
nWroKcsmg0swAm7YgYmQXqcpM17JC21eUgm3Bc4ZZSDtP4g3Pm7vRO1+hwUNYBE9
|
||||
QeEMXYDPRsTxdpuEFsbmS/EfnndvJvl9BL92Zt4+T4ruL+II50s=
|
||||
=r+0B
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
New version v1.13 Released
|
||||
|
||||
Changes
|
||||
+ Pgp messages will be available now for every update, so you can verify updates easily
|
||||
= Fixed some bugs like the rclone suicide
|
||||
- Removed china detection
|
||||
|
||||
Date 9/10/2020
|
||||
|
||||
MD5 Checksum: 3834485C5AF611523460E639969284F3
|
||||
SHA-1 Checksum: DAF556D34F80FDE6A6A3D8F338381030B2B19E44
|
||||
SHA-256 Checksum: 063FABA6A76A98AB862BBBF6F3348F176F66FD4932075E761A5FCAA85785EE4B
|
||||
SHA-512 Checksum: CC743BD95826664535239BB665934E88A25CC948B95E4A3E8B34379C1E8DEB8FED05EAD87428F4B85D5841ED9101F38E4E3DAFB0EAF3CD2F2E4314B62356104D
|
||||
|
||||
You can always get my public key from rookie.wtf/pgp.txt
|
||||
You can verify the signed message using kleopatra for windows or dark.fail/pgp
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl9aBpMACgkQvrtJUNxE
|
||||
TxOJcA/+LEzXQtyBhZ0oj22PEk0yMLQYOBLYDB96jf39IqLQAzrIUL339jRcRKMv
|
||||
yhFWXpvND1wrQl3/LNtFpBSkSnvqUXtxHWg6US+Ov3nnrEvYiwK8D9f1eC5Mt3Wy
|
||||
4HZIyTh9HcrLsfbnP2kDlLOaMQSIH4rChezF79xZMcx7kRmQ0/hyXlmGAPyWs8t8
|
||||
5aLxk5YUcfq1Pu+ncqeX+ihYVzQHi2eXaOAIR1rSCEXfHEg9tkRzWcma8tY29gQv
|
||||
IgGwxF/YnAPOdBtzuakaT88a1MsP+tAcWxmsyvTQHrv1m0h3QPU1DxMFUfAlBjLM
|
||||
5tHgTTjkXedRpR+Kga5CDuK7L5p1zVMRDINcUOf9MXV2fRurZ+OIHefAd+zbrd0n
|
||||
vHi1D1sFzb/lT5LCa/vrfO9crRnLdK1EI/5HNeSj9iIdD2jEMbjSjo9yv7LA2MHi
|
||||
4wnvguRpK5YUGqGc2yyCRxtyKAgXXxLBFNb5K453vdLtDukZIkhLuQVchsk4PutZ
|
||||
1uIg7/ZmAIPxlEHaLckaV7QEFbq9h2hFWOsSjWAATyvnkp4nxyvAavW4zNQCbd3V
|
||||
XJhimZkE+3SNAuZGw10nikVz7DFMlI0dyL+jmwIuODcFMZZwkEtBr3J/Ad9V1k+G
|
||||
DFKYJpBgATHdRTwt7/zZwJCBq0ONheA/6+6VYj8x8Q5rqbiDDdc=
|
||||
=xp7X
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
MUST UPDATE 1.12
|
||||
READ THIS -> https://pastebin.com/raw/K7eJe3F9
|
||||
|
||||
1.11HF1
|
||||
= Fixed some crashes that occured when a unauthorized device was used with the sideloader
|
||||
|
||||
1.11
|
||||
+ Added support for multiple devices
|
||||
|
||||
1.10SU1
|
||||
+ Settings should now persist through updates
|
||||
- Removed download button and hwid stuff
|
||||
|
||||
1.10
|
||||
+ Added back the game size messagebox
|
||||
+ Added support for unicode in adb
|
||||
= Fixed restore gamedata
|
||||
= Clicking the first game won't remove it since it causes problems
|
||||
= Changed the sideloader icon
|
||||
|
||||
1.9SU2
|
||||
+ Clicking a game on the listbox will now remove it from the list
|
||||
|
||||
1.9SU1
|
||||
- Removed some code I forgot to remove when debugging
|
||||
|
||||
1.9
|
||||
+ Added a queue for downloading games
|
||||
+ Added a setting for disabling user.json push
|
||||
|
||||
1.8SU2
|
||||
= Install game now won't throw an exception when a game isn't selected
|
||||
|
||||
1.8SU1
|
||||
+ Added debug logs for rclone
|
||||
|
||||
1.8
|
||||
+ Disk info updates every command that changes disk space
|
||||
= Rclone now logs commands and output
|
||||
= Changed backup button
|
||||
|
||||
1.7.5
|
||||
+ Made sideloader even faster when opening
|
||||
+ Added some chiptune music and the setting to stop it
|
||||
= Fixed donator button broken in 1.7
|
||||
|
||||
1.7
|
||||
+ Removed some freezes
|
||||
+ Sideloader kills rclone on start and on close if it's open so you dont waste bandwith
|
||||
+ Updating rclone config now does a hash check first
|
||||
+ Refresh storage after game install and on game uninstall
|
||||
|
||||
1.6
|
||||
+ Disk space label and check
|
||||
+ Checks game size before download
|
||||
= Download and install game button outputs adb log now
|
||||
- Launch package name button and textbox
|
||||
|
||||
1.5
|
||||
+ Added ETA, based on CURRENT DOWNLOAD SPEED NOT DELTA OF IT
|
||||
+ Added DLS label instead of showing it in the toolbar
|
||||
+ Added more indication of what the software is doing, in the toolbar
|
||||
+ Added some tooltips
|
||||
|
||||
1.4
|
||||
+ Donators can now change the speed of the donate button color change (even disable)
|
||||
+ Auto update for the rclone config
|
||||
+ Theme export and import buttons (by gotard)
|
||||
|
||||
1.3
|
||||
+ Added progress bar logic for game downloading with rclone
|
||||
+ Uninstalling apps now asks the user if it should also remove game data
|
||||
= Sorted installed apps combobox
|
||||
= Fixed uninstalling apps by package names lol nobody knew was broken
|
||||
|
||||
1.2
|
||||
+ Added unicode support for rclone
|
||||
+ Added some delay on game installation
|
||||
= Fixed stuff
|
||||
|
||||
1.1
|
||||
+ Added Themes
|
||||
+ Added dollarvr user.json
|
||||
+ Added user.json transfer on game download
|
||||
+ Added user.json transfer on first run
|
||||
= Fixed tab indexes
|
||||
= Now both drop downs can be visible at the same time
|
||||
|
||||
1.0HF1
|
||||
= Fixed a problem when deleting an app
|
||||
|
||||
1.0
|
||||
+ Added games auto download
|
||||
+ Added auto troubleshoot
|
||||
+ Every app installed will have all perms granted
|
||||
+ Displays apps for games instead of package names if you have rclone set up
|
||||
+ Uninstall app now will also delete its obb folder
|
||||
//For auto download you need an rclone config and rclone to be set up correctly, VRP:Quest Games
|
||||
|
||||
0.15HF1
|
||||
+ Added list apps button back
|
||||
= Fixed Uninstall apk and get apk
|
||||
@@ -107,4 +401,7 @@
|
||||
+ Renamed buttons
|
||||
|
||||
0.1
|
||||
+ Initial Release
|
||||
+ Initial Release
|
||||
|
||||
HF - Hot Fix
|
||||
SU - Small Update
|
||||
85
customAdbCommandForm.Designer.cs
generated
85
customAdbCommandForm.Designer.cs
generated
@@ -1,85 +0,0 @@
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
partial class customAdbCommandForm
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
|
||||
this.runcustomadbcmdbutton = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
this.textBox1.Location = new System.Drawing.Point(13, 13);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(775, 20);
|
||||
this.textBox1.TabIndex = 0;
|
||||
this.textBox1.Text = "Enter your command here";
|
||||
//
|
||||
// richTextBox1
|
||||
//
|
||||
this.richTextBox1.Location = new System.Drawing.Point(13, 39);
|
||||
this.richTextBox1.Name = "richTextBox1";
|
||||
this.richTextBox1.Size = new System.Drawing.Size(775, 365);
|
||||
this.richTextBox1.TabIndex = 1;
|
||||
this.richTextBox1.Text = "";
|
||||
this.richTextBox1.TextChanged += new System.EventHandler(this.richTextBox1_TextChanged);
|
||||
//
|
||||
// runcustomadbcmdbutton
|
||||
//
|
||||
this.runcustomadbcmdbutton.Location = new System.Drawing.Point(13, 410);
|
||||
this.runcustomadbcmdbutton.Name = "runcustomadbcmdbutton";
|
||||
this.runcustomadbcmdbutton.Size = new System.Drawing.Size(93, 28);
|
||||
this.runcustomadbcmdbutton.TabIndex = 2;
|
||||
this.runcustomadbcmdbutton.Text = "Run";
|
||||
this.runcustomadbcmdbutton.UseVisualStyleBackColor = true;
|
||||
this.runcustomadbcmdbutton.Click += new System.EventHandler(this.runcustomadbcmdbutton_Click);
|
||||
//
|
||||
// customAdbCommandForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Controls.Add(this.runcustomadbcmdbutton);
|
||||
this.Controls.Add(this.richTextBox1);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.Name = "customAdbCommandForm";
|
||||
this.Text = "customAdbCommandForm";
|
||||
this.Load += new System.EventHandler(this.customAdbCommandForm_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
private System.Windows.Forms.RichTextBox richTextBox1;
|
||||
private System.Windows.Forms.Button runcustomadbcmdbutton;
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Net.Http;
|
||||
using System.Reflection;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class customAdbCommandForm : Form
|
||||
{
|
||||
public customAdbCommandForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
string output;
|
||||
|
||||
private void runcustomadbcmdbutton_Click(object sender, EventArgs e)
|
||||
{
|
||||
var command = textBox1.Text;
|
||||
if (command.StartsWith("adb "))
|
||||
command = command.Remove(0, 4);
|
||||
runAdbCommand(command);
|
||||
}
|
||||
|
||||
public void runAdbCommand(string command)
|
||||
{
|
||||
Process cmd = new Process();
|
||||
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\adb\\adb.exe";
|
||||
cmd.StartInfo.Arguments = command;
|
||||
cmd.StartInfo.RedirectStandardInput = true;
|
||||
cmd.StartInfo.RedirectStandardOutput = true;
|
||||
cmd.StartInfo.CreateNoWindow = true;
|
||||
cmd.StartInfo.UseShellExecute = false;
|
||||
cmd.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\adb\\";
|
||||
cmd.Start();
|
||||
cmd.StandardInput.WriteLine(command);
|
||||
cmd.StandardInput.Flush();
|
||||
cmd.StandardInput.Close();
|
||||
output = cmd.StandardOutput.ReadToEnd();
|
||||
cmd.WaitForExit();
|
||||
|
||||
StreamWriter sw = File.AppendText("debugC.log");
|
||||
sw.Write("Action name = " + command + '\n');
|
||||
sw.Write(output);
|
||||
sw.Write("\n--------------------------------------------------------------------\n");
|
||||
sw.Flush();
|
||||
sw.Close();
|
||||
|
||||
richTextBox1.Text = output;
|
||||
}
|
||||
|
||||
private void customAdbCommandForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void richTextBox1_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
63
documentation.txt
Normal file
63
documentation.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
Main Form
|
||||
=========
|
||||
- Adb Devices Button
|
||||
Notifies the user every device returned by adb
|
||||
Changes Form1 Titlebar to "Rookie Sideloader | Device Connected with ID | {DEVICEID}"
|
||||
- Sideload Drop Button
|
||||
Shows/Hides the rest of sideload buttons
|
||||
- Copy Obb Button
|
||||
Opens a new folder select dialog where the user selects an folder, that folder will be copied to Android/Obb
|
||||
- Copy Bulk Obb Button
|
||||
Opens a new folder select dialog where the user selects an folder, that folder will be searched and every obb folder will be copied to Android/Obb
|
||||
- Get Apk Button
|
||||
After the user selects an package from m_combo (first combobox) the apk will be pulled to the current directory
|
||||
- Uninstall App Button
|
||||
After the user selects an package from m_combo (first combobox) and he accepts the warning given, the apk selected will be uninstalled from the device
|
||||
- Sideload Folder Button
|
||||
Opens a new folder select dialog where the user selects an folder, that folder will be searched and every apk from it will be sideloaded
|
||||
- Sideload Apk Button
|
||||
Opens a new file select dialog where the user selects a file, that file will be sideloaded
|
||||
- Refresh Apk List Button
|
||||
Refreshes the apks/packages listed in m_combo
|
||||
- Backup Drop Button
|
||||
Shows/Hides the rest of backup buttons
|
||||
- Backup Gamedata Button
|
||||
Saves every folder from Android/data to a folder in the current directory
|
||||
- Restore Gamedata Button
|
||||
Pushes every folder form current dirctory/data to Android/data
|
||||
- User.Json button
|
||||
Opens a new UsernameForm
|
||||
- Sideload Apk Button
|
||||
Opens a new file select dialog where the user selects a file, that file's sha256 hash will be copied to clipboard and the user will be notified
|
||||
- Troublshoot Button
|
||||
Opens a new TroubleshootForm
|
||||
- Settings Button
|
||||
Opens a new SettingsForm
|
||||
- About Button
|
||||
Shows the credits
|
||||
- Donate Button
|
||||
Sets clipboard text to rookie's steam inventory trade link and sends the user a message
|
||||
Settings Form
|
||||
=============
|
||||
- Check for Updates checkbox
|
||||
If enabled the software checks for updates every startup (default:enabled)
|
||||
- Enable Message Boxes on task completed checkbox
|
||||
If enabled the software will notify the user on every completed task via a Flexible MessageBox (default:enabled)
|
||||
- Copy message to clipboard checkbox
|
||||
If enabled the software copy every message called by the notify function to clipboard (default:disabled)
|
||||
- Delete games after download and install checkbox
|
||||
If enabled the software will delete every file downloaded by the Download and Install Game Button
|
||||
- Json TextBox
|
||||
Here should be the link to custom games json
|
||||
- Reset Settings Button
|
||||
Restores settings to default values, you still need to press apply
|
||||
- Apply Button
|
||||
Applies settings
|
||||
Troubleshoot Form
|
||||
=================
|
||||
- Ask the software button
|
||||
Depending on the input from the textbox, the software might respond with a good answer, still WIP
|
||||
User.Json Form
|
||||
==============
|
||||
- Creat User.Json
|
||||
Creates all 3 user.json (at the moment) with the username from the textbox then pushes them to the root folder on the quest
|
||||
12
donators.txt
Normal file
12
donators.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
CC0E0834BFEBFBFF000906E9;5000;ROOKIE.LOL
|
||||
184204E0178BFBFF00870F10;0;Flow
|
||||
E5148390BFEBFBFF000906EA;250;Gotard
|
||||
5ECC5497178BFBFF00870F10;1024;Saidis21
|
||||
B0374BE2BFEBFBFF00040651;0;ecirbaf
|
||||
926C60A8178BFBFF00800F82;250;ThePhantomPickaxe
|
||||
2A8C5999BFEBFBFF0001067A;0;karl
|
||||
80ACB80FBFEBFBFF000206C2;4096;JJ-4
|
||||
9AA172C9BFEBFBFF000906ED;1024;Clayton Bigsby
|
||||
645C9EADBFEBFBFF000906EA;5000;Heracide
|
||||
1C51D0CD178BFBFF00870F10;0;Mr.Tibby
|
||||
287B5C6CBFEBFBFF000906EA;0;videobeer
|
||||
@@ -6,4 +6,5 @@
|
||||
<package id="MetroFramework.Design" version="1.2.0.3" targetFramework="net452" />
|
||||
<package id="MetroFramework.Fonts" version="1.2.0.3" targetFramework="net452" />
|
||||
<package id="MetroFramework.RunTime" version="1.2.0.3" targetFramework="net452" />
|
||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net452" />
|
||||
</packages>
|
||||
20
packages/Newtonsoft.Json.12.0.3/LICENSE.md
vendored
Normal file
20
packages/Newtonsoft.Json.12.0.3/LICENSE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2007 James Newton-King
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
BIN
packages/Newtonsoft.Json.12.0.3/Newtonsoft.Json.12.0.3.nupkg
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/Newtonsoft.Json.12.0.3.nupkg
vendored
Normal file
Binary file not shown.
BIN
packages/Newtonsoft.Json.12.0.3/lib/net20/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/net20/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
10298
packages/Newtonsoft.Json.12.0.3/lib/net20/Newtonsoft.Json.xml
vendored
Normal file
10298
packages/Newtonsoft.Json.12.0.3/lib/net20/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/net35/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/net35/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
9446
packages/Newtonsoft.Json.12.0.3/lib/net35/Newtonsoft.Json.xml
vendored
Normal file
9446
packages/Newtonsoft.Json.12.0.3/lib/net35/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/net40/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/net40/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
9646
packages/Newtonsoft.Json.12.0.3/lib/net40/Newtonsoft.Json.xml
vendored
Normal file
9646
packages/Newtonsoft.Json.12.0.3/lib/net40/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11262
packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.xml
vendored
Normal file
11262
packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.0/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.0/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
10950
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.0/Newtonsoft.Json.xml
vendored
Normal file
10950
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.0/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.3/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.3/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11072
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.3/Newtonsoft.Json.xml
vendored
Normal file
11072
packages/Newtonsoft.Json.12.0.3/lib/netstandard1.3/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard2.0/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/netstandard2.0/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11237
packages/Newtonsoft.Json.12.0.3/lib/netstandard2.0/Newtonsoft.Json.xml
vendored
Normal file
11237
packages/Newtonsoft.Json.12.0.3/lib/netstandard2.0/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
9010
packages/Newtonsoft.Json.12.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml
vendored
Normal file
9010
packages/Newtonsoft.Json.12.0.3/lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
10950
packages/Newtonsoft.Json.12.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.xml
vendored
Normal file
10950
packages/Newtonsoft.Json.12.0.3/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.12.0.3/packageIcon.png
vendored
Normal file
BIN
packages/Newtonsoft.Json.12.0.3/packageIcon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
196
spoofer.cs
Normal file
196
spoofer.cs
Normal file
@@ -0,0 +1,196 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Spoofer
|
||||
{
|
||||
class spoofer
|
||||
{
|
||||
public static string alias = string.Empty;
|
||||
public static string password = string.Empty;
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (File.Exists("keystore.key") == false || File.Exists("details.txt") == false)
|
||||
{
|
||||
Console.WriteLine("There is no key to sign the apk, making one now...");
|
||||
alias = Utilities.randomString(8);
|
||||
password = Utilities.randomString(16);
|
||||
|
||||
Process cmd = new Process();
|
||||
cmd.StartInfo.FileName = "cmd.exe";
|
||||
cmd.StartInfo.RedirectStandardInput = true;
|
||||
cmd.StartInfo.RedirectStandardOutput = true;
|
||||
cmd.StartInfo.RedirectStandardError = true;
|
||||
cmd.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
|
||||
cmd.StartInfo.CreateNoWindow = true;
|
||||
cmd.StartInfo.UseShellExecute = false;
|
||||
cmd.Start();
|
||||
cmd.StandardInput.WriteLine($"keytool -genkeypair -alias {alias} -keyalg RSA -keysize 2048 -keystore keystore.key");
|
||||
cmd.StandardInput.WriteLine(password);
|
||||
cmd.StandardInput.WriteLine(password);
|
||||
var rand = new Random();
|
||||
for (int i = 0; i < 6; i++)
|
||||
cmd.StandardInput.WriteLine(Utilities.randomString(rand.Next(2,6)));
|
||||
cmd.StandardInput.WriteLine("yes");
|
||||
cmd.StandardInput.Flush();
|
||||
cmd.StandardInput.Close();
|
||||
cmd.WaitForExit();
|
||||
string keyerror = cmd.StandardError.ReadToEnd();
|
||||
string keyoutput = cmd.StandardOutput.ReadToEnd();
|
||||
File.WriteAllText("debug.txt", $"Output: {keyoutput} Error: {keyerror}");
|
||||
File.WriteAllText("details.txt", $"{alias};{password}");
|
||||
Console.WriteLine("Key generated");
|
||||
}
|
||||
else
|
||||
{
|
||||
var temp = File.ReadAllText("details.txt").Split(';');
|
||||
alias = temp[0];
|
||||
password = temp[1];
|
||||
}
|
||||
}
|
||||
|
||||
public static string folderPath = string.Empty;
|
||||
|
||||
public static string decompiledPath = string.Empty;
|
||||
public static string newPackageName = string.Empty;
|
||||
public static string originalPackageName = string.Empty;
|
||||
|
||||
public static string spoofedApkPath = string.Empty;
|
||||
|
||||
public static void SpoofApk(string apkPath, string newPackageName, string obbPath = "")
|
||||
{
|
||||
//Rename
|
||||
string oldGameName = Path.GetFileName(apkPath);
|
||||
folderPath = apkPath.Replace(Path.GetFileName(apkPath), "");
|
||||
File.Move(apkPath, $"{folderPath}spoofme.apk");
|
||||
apkPath = $"{folderPath}spoofme.apk";
|
||||
var rand = new Random();
|
||||
decompiledPath = apkPath.Replace(".apk","");
|
||||
//newPackageName = $"com.{Utilities.randomString(rand.Next(3, 8))}.{Utilities.randomString(rand.Next(3, 8))}";
|
||||
originalPackageName = PackageName(apkPath);
|
||||
Console.WriteLine($"Your app will be spoofed as {newPackageName}");
|
||||
Console.WriteLine($"Folderpath: {folderPath} decompiledPaht: {decompiledPath} ");
|
||||
if (obbPath.Length > 1)
|
||||
{
|
||||
RenameObb(obbPath,newPackageName,originalPackageName);
|
||||
}
|
||||
|
||||
Console.WriteLine("Extracting apk...");
|
||||
DecompileApk(apkPath);
|
||||
|
||||
Console.WriteLine("Spoofing apk...");
|
||||
//Rename APK Packagename
|
||||
string foo = File.ReadAllText($"{decompiledPath}\\AndroidManifest.xml").Replace(originalPackageName, newPackageName);
|
||||
File.WriteAllText($"{decompiledPath}\\AndroidManifest.xml", foo);
|
||||
foreach (string file in Directory.EnumerateFiles(decompiledPath, "*.*", SearchOption.AllDirectories))
|
||||
{
|
||||
if (Path.GetFileName(file) == "BuildConfig.smali")
|
||||
{
|
||||
foo = File.ReadAllText(file).Replace(originalPackageName, newPackageName);
|
||||
File.WriteAllText(file, foo);
|
||||
}
|
||||
}
|
||||
//BMBF
|
||||
//if (File.Exists("bmbf.txt"))
|
||||
//{
|
||||
// string bspckgname = File.ReadAllText("bmbf.txt");
|
||||
// foreach (string file in Directory.EnumerateFiles(decompiledPath, "*.js", SearchOption.AllDirectories))
|
||||
// {
|
||||
// foo = File.ReadAllText(file).Replace("com.beatgames.beatsaber", bspckgname);
|
||||
// File.WriteAllText(file, foo);
|
||||
// }
|
||||
//}
|
||||
Console.WriteLine("APK Spoofed");
|
||||
|
||||
|
||||
Console.WriteLine("Rebuilding the APK...");
|
||||
spoofedApkPath = $"{Path.GetFileName(apkPath).Replace(".apk", "")}_Spoofed as {newPackageName}.apk";
|
||||
|
||||
string output = Utilities.startProcess("cmd.exe", folderPath, $"apktool b \"{Path.GetFileName(apkPath).Replace(".apk", "")}\" -o \"{spoofedApkPath}\"");
|
||||
File.AppendAllText("debug.txt", $"apktool b \"{Path.GetFileName(apkPath).Replace(".apk", "")}\" -o \"{spoofedApkPath}\": {output}");
|
||||
Console.WriteLine("APK Rebuilt");
|
||||
|
||||
//Sign the new apk
|
||||
Console.WriteLine("Signing the APK...");
|
||||
if (File.Exists(folderPath + "keystore.key") == false)
|
||||
File.Copy("keystore.key", $"{folderPath}keystore.key");
|
||||
SignApk(apkPath,newPackageName);
|
||||
|
||||
File.Move($"{folderPath}\\{spoofedApkPath}", $"{folderPath}\\{oldGameName}_ Spoofed as {newPackageName}.apk");
|
||||
File.Move(apkPath, $"{apkPath.Replace(Path.GetFileName(apkPath), "")}\\{oldGameName}.apk");
|
||||
|
||||
Console.WriteLine("APK Signed");
|
||||
|
||||
//Delete the copy of the key and the decompiled apk folder
|
||||
Console.WriteLine("Deleting residual files...");
|
||||
if (string.Equals(folderPath, Environment.CurrentDirectory + "\\") == false)
|
||||
File.Delete($"{folderPath}keystore.key");
|
||||
Directory.Delete(decompiledPath, true);
|
||||
Console.WriteLine("Residual files deleted");
|
||||
}
|
||||
|
||||
public static void SignApk(string path, string packageName)
|
||||
{
|
||||
Process cmdSign = new Process();
|
||||
cmdSign.StartInfo.FileName = "cmd.exe";
|
||||
cmdSign.StartInfo.RedirectStandardInput = true;
|
||||
cmdSign.StartInfo.WorkingDirectory = folderPath;
|
||||
cmdSign.StartInfo.CreateNoWindow = true;
|
||||
cmdSign.StartInfo.UseShellExecute = false;
|
||||
cmdSign.Start();
|
||||
cmdSign.StandardInput.WriteLine($"jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore.key \"{spoofedApkPath}\" {alias}");
|
||||
cmdSign.StandardInput.WriteLine(password);
|
||||
cmdSign.StandardInput.Flush();
|
||||
cmdSign.StandardInput.Close();
|
||||
cmdSign.WaitForExit();
|
||||
File.AppendAllText("debug.txt", $"jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore.key \"{spoofedApkPath}\" {alias}");
|
||||
}
|
||||
|
||||
public static void DecompileApk(string path)
|
||||
{
|
||||
string output = Utilities.startProcess("cmd.exe", folderPath, $"apktool d -f \"{path}\"");
|
||||
|
||||
Console.WriteLine(output);
|
||||
File.AppendAllText("debug.txt", $"apktool d \"{path}\": {output}");
|
||||
//If error
|
||||
if (Utilities.processError.Length > 1)
|
||||
Console.WriteLine($"ERROR: {Utilities.processError}");
|
||||
}
|
||||
|
||||
//Renames obb to new obb according to packagename
|
||||
public static void RenameObb(string obbPath, string newPackageName, string originalPackageName)
|
||||
{
|
||||
Directory.Move(obbPath, obbPath.Replace(originalPackageName, newPackageName));
|
||||
obbPath = obbPath.Replace(originalPackageName, newPackageName);
|
||||
foreach (string file in Directory.GetFiles(obbPath))
|
||||
{
|
||||
if (Path.GetExtension(file) == ".obb")
|
||||
{
|
||||
File.Move(file, file.Replace(originalPackageName, newPackageName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string PackageName(string path)
|
||||
{
|
||||
Console.WriteLine($"aapt dump badging \"{path}\"");
|
||||
|
||||
string originalPackageName = Utilities.startProcess("cmd.exe", path.Replace(Path.GetFileName(path), string.Empty), $"aapt dump badging \"{path}\" | findstr -i \"package: name\"");
|
||||
File.AppendAllText("debug.txt", $"originalPackageName: {originalPackageName}");
|
||||
try
|
||||
{
|
||||
originalPackageName = originalPackageName.Substring(originalPackageName.IndexOf("package: name='") + 15);
|
||||
originalPackageName = originalPackageName.Substring(0, originalPackageName.IndexOf("'"));
|
||||
}
|
||||
catch
|
||||
{
|
||||
return "PackageName ERROR";
|
||||
}
|
||||
Console.WriteLine($"Packagename is {originalPackageName}");
|
||||
return originalPackageName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class usernameForm : Form
|
||||
{
|
||||
public usernameForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
string defaultText;
|
||||
|
||||
private void usernameForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
defaultText = textBox1.Text;
|
||||
}
|
||||
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (textBox1.Text == defaultText || textBox1.Text.Length == 0)
|
||||
{
|
||||
MessageBox.Show("Please enter your username first");
|
||||
return;
|
||||
}
|
||||
|
||||
File.WriteAllText("user.json", "{\"username\":\"" + textBox1.Text + "\"}");
|
||||
|
||||
runAdbCommand("push \"" + Environment.CurrentDirectory + "\\user.json\" " + " /sdcard/");
|
||||
|
||||
File.Delete("user.json");
|
||||
|
||||
File.WriteAllText("vrmoo.cn.json", "{\"username\":\"" + textBox1.Text + "\"}");
|
||||
|
||||
runAdbCommand("push \"" + Environment.CurrentDirectory + "\\vrmoo.cn.json\" " + " /sdcard/");
|
||||
|
||||
File.Delete("vrmoo.cn.json");
|
||||
|
||||
|
||||
File.WriteAllText("qq1091481055.json", "{\n \"username\":\"" + textBox1.Text + "\"\n }");
|
||||
|
||||
runAdbCommand("push \"" + Environment.CurrentDirectory + "\\qq1091481055.json\" " + " /sdcard/");
|
||||
|
||||
File.Delete("qq1091481055.json");
|
||||
|
||||
Form1.notify("Done");
|
||||
|
||||
}
|
||||
|
||||
private void runAdbCommand(string command)
|
||||
{
|
||||
Process cmd = new Process();
|
||||
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\adb\\adb.exe";
|
||||
cmd.StartInfo.Arguments = command;
|
||||
cmd.StartInfo.RedirectStandardInput = true;
|
||||
cmd.StartInfo.RedirectStandardOutput = true;
|
||||
cmd.StartInfo.CreateNoWindow = true;
|
||||
cmd.StartInfo.UseShellExecute = false;
|
||||
cmd.StartInfo.WorkingDirectory = Form1.adbPath;
|
||||
cmd.Start();
|
||||
cmd.StandardInput.WriteLine(command);
|
||||
cmd.StandardInput.Flush();
|
||||
cmd.StandardInput.Close();
|
||||
string allText = cmd.StandardOutput.ReadToEnd();
|
||||
cmd.WaitForExit();
|
||||
|
||||
|
||||
StreamWriter sw = File.AppendText(Form1.debugPath);
|
||||
sw.Write("Action name = " + command + '\n');
|
||||
sw.Write(allText);
|
||||
sw.Write("\n--------------------------------------------------------------------\n");
|
||||
sw.Flush();
|
||||
sw.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user