-----BEGIN PGP SIGNED MESSAGE-----

Hash: SHA256

RSL 2.5

+ Upgraded Extract APK from device to Extract APP to Desktop. RSL will now automatically extract the APK file, then extract the obb if there is any for the selected app, then it will compress both into a zip file and place it on the desktop so users can share their apps without issue.
+ Added automatic detection of apps that are more updated than the database user is connecting to, and if they are a pop up will ask if user wants to share the app.
= Fixed issue where copying a folder containing an obb folder via drag and drop would cause the containing folder to be copied to the obb folder as well.
= Changelog.txt now only contains the 3 most recent updates including the most current, the older changelogs can be found in the ChangelogHistory text file.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEFcMEACgkQx/Rql1Vo
czdoWA//cbngmK/it4fy6Hy/5JMGubJvCb0Ar+KY0UCO5FR60Q+ADCrkhPDEaWif
xnM+h4CLqyHUD0NipUxsjZ4j25VRMA20eTy3jiLKSZKq6P6KD+oRv0Tx3vTEs61U
wJdQsWK81cC9+BnhCBDuWpDJ/nCqO9ZJBYdKX0+KuYTVZwaaZSfMXD1dgQsrCQCq
zU5kgrsl+LDUJknnpfda521pbACgHlZ/Cb3bztqgnSviF38jFuYsJe7hJVjsINYz
j6HtmT+vn3Rxhk6uRTtUNhM1YVvuKzsZtUNvqd7cjT3FJXWuuoP8mgdauSahVnpQ
jMLu/dMLx0PkRXox/D8/69tDA1dxNZozXvws0OQfmNlzLfLGPZdVSWVjfU+P0feA
hMZiVICyAAJPnzfNAfVq2yDpU5wJbAhj3qG+Lj9Ox4dpmn7AUrjoUCFZxhZIZJi1
KKKz+7Q9ZDkcFODCUzZAdrI0MP7MNrsfPl8jxSCLYFe6LUIOfTAakBkxOY9x02lF
x08jfbpAsJHU3Wm8bruk+nkB+65J5kqsLkJk2n4yrkW3QtIo9xul/z9vgZKo75S6
LkPCpNo2w5gtx7+8Jv65Z/BlueUVmVWUHhQ2gHRkXenkg3McEZpqwKInqQSZkHpZ
USckVtW+iteVVR0yf+hFPRGp+Shz6/GIn9YnwVQCT2DK+ih9zD4=
=0bPq
-----END PGP SIGNATURE-----
This commit is contained in:
Harry Fn Potter
2021-07-31 11:50:15 -04:00
parent efadb70d72
commit 5a6ccf423a
8 changed files with 1546 additions and 1317 deletions

25
ADB.cs
View File

@@ -26,7 +26,7 @@ namespace AndroidSideloader
{
command = $" -s {DeviceID} {command}";
}
if (!command.Contains("dumpsys") && !command.Contains("shell pm list packages") && !command.Contains("KEYCODE_WAKEUP"))
if (!command.Contains("dumpsys") && !command.Contains("shell pm list packages") && !command.Contains("KEYCODE_WAKEUP"))
{
string logcmd = command;
@@ -66,7 +66,7 @@ namespace AndroidSideloader
}
}
else
adb.WaitForExit();
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS"))
{
FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
@@ -76,8 +76,8 @@ namespace AndroidSideloader
{
FlexibleMessageBox.Show("There is not enough room on your device to install this package. Please clear AT LEAST 2x the amount of the app you are trying to install.");
}
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
Logger.Log(output);
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
}
@@ -117,7 +117,7 @@ namespace AndroidSideloader
catch { }
if (command.Contains("connect"))
{
bool graceful = adb.WaitForExit(3000);
bool graceful = adb.WaitForExit(3000);
if (!graceful)
{
adb.Kill();
@@ -134,7 +134,7 @@ namespace AndroidSideloader
Logger.Log(error);
return new ProcessOutput(output, error);
}
public static ProcessOutput RunCommandToString(string result, string path)
public static ProcessOutput RunCommandToString(string result, string path = "")
{
string command = result;
Properties.Settings.Default.ADBFolder = adbFolderPath;
@@ -145,7 +145,7 @@ namespace AndroidSideloader
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running command: {logcmd}");
adb.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
adb.StartInfo.FileName = "cmd.exe";
adb.StartInfo.Arguments = command;
adb.StartInfo.RedirectStandardError = true;
adb.StartInfo.RedirectStandardInput = true;
@@ -338,6 +338,7 @@ namespace AndroidSideloader
}
}
}
@@ -380,7 +381,7 @@ namespace AndroidSideloader
else
{
DialogResult dialogResult = FlexibleMessageBox.Show($"No savedata found! Continue with the uninstall!", "None Found", MessageBoxButtons.OK);
if (dialogResult == DialogResult.Cancel)
if (dialogResult == DialogResult.Cancel)
{
return ret;
}
@@ -427,8 +428,8 @@ namespace AndroidSideloader
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\config.json\" /sdcard/android/data/{packagename}/private/config.json");
}
}
Program.form.ChangeTitle("");
return ret;
}
@@ -436,7 +437,9 @@ namespace AndroidSideloader
public static ProcessOutput CopyOBB(string path)
{
WakeDevice();
if (Path.GetDirectoryName(path).Contains(".") && !Path.GetDirectoryName(path).Contains("_data") || path.Contains("."))
string folder = Path.GetFileName(path);
if (!folder.Contains("+") && !folder.Contains("_") && folder.Contains("."))
{
return RunAdbCommandToString($"push \"{path}\" \"/sdcard/Android/obb\"");
}

View File

@@ -260,6 +260,7 @@
<ItemGroup>
<Content Include="changelog.txt" />
<Content Include="icon.ico" />
<Content Include="ChangelogHistory.txt" />
<None Include="Resources\battery11.png" />
<None Include="Resources\battery.png" />
<None Include="Resources\battery1.png" />

1361
ChangelogHistory.txt Normal file

File diff suppressed because it is too large Load Diff

30
MainForm.Designer.cs generated
View File

@@ -114,7 +114,7 @@
this.m_combo.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.m_combo.Location = new System.Drawing.Point(227, 8);
this.m_combo.Name = "m_combo";
this.m_combo.Size = new System.Drawing.Size(353, 24);
this.m_combo.Size = new System.Drawing.Size(353, 26);
this.m_combo.TabIndex = 0;
this.m_combo.Text = "Select an app to uninstall...";
//
@@ -239,7 +239,7 @@
this.getApkButton.Padding = new System.Windows.Forms.Padding(23, 0, 0, 0);
this.getApkButton.Size = new System.Drawing.Size(218, 28);
this.getApkButton.TabIndex = 2;
this.getApkButton.Text = "Extract Apk from device";
this.getApkButton.Text = "Extract App to Desktop";
this.getApkButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.getApkButton.UseVisualStyleBackColor = false;
this.getApkButton.Click += new System.EventHandler(this.getApkButton_Click);
@@ -370,7 +370,7 @@
this.BatteryLbl.BackColor = System.Drawing.Color.Transparent;
this.BatteryLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.BatteryLbl.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.BatteryLbl.Location = new System.Drawing.Point(157, 580);
this.BatteryLbl.Location = new System.Drawing.Point(156, 580);
this.BatteryLbl.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.BatteryLbl.Name = "BatteryLbl";
this.BatteryLbl.Size = new System.Drawing.Size(47, 17);
@@ -737,7 +737,7 @@
this.diskLabel.Location = new System.Drawing.Point(7, 622);
this.diskLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.diskLabel.Name = "diskLabel";
this.diskLabel.Size = new System.Drawing.Size(74, 17);
this.diskLabel.Size = new System.Drawing.Size(77, 18);
this.diskLabel.TabIndex = 7;
this.diskLabel.Text = "Disk Label";
//
@@ -751,7 +751,7 @@
this.speedLabel.Location = new System.Drawing.Point(7, 680);
this.speedLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.speedLabel.Name = "speedLabel";
this.speedLabel.Size = new System.Drawing.Size(141, 17);
this.speedLabel.Size = new System.Drawing.Size(149, 18);
this.speedLabel.TabIndex = 76;
this.speedLabel.Text = "DLS: Speed in MBPS";
//
@@ -765,7 +765,7 @@
this.etaLabel.Location = new System.Drawing.Point(7, 699);
this.etaLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.etaLabel.Name = "etaLabel";
this.etaLabel.Size = new System.Drawing.Size(139, 17);
this.etaLabel.Size = new System.Drawing.Size(148, 18);
this.etaLabel.TabIndex = 75;
this.etaLabel.Text = "ETA: HH:MM:SS Left";
//
@@ -799,11 +799,11 @@
this.gamesQueListBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.gamesQueListBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.gamesQueListBox.FormattingEnabled = true;
this.gamesQueListBox.ItemHeight = 16;
this.gamesQueListBox.ItemHeight = 18;
this.gamesQueListBox.Location = new System.Drawing.Point(601, 475);
this.gamesQueListBox.Margin = new System.Windows.Forms.Padding(2);
this.gamesQueListBox.Name = "gamesQueListBox";
this.gamesQueListBox.Size = new System.Drawing.Size(369, 162);
this.gamesQueListBox.Size = new System.Drawing.Size(369, 128);
this.gamesQueListBox.TabIndex = 9;
this.gamesQueListBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.gamesQueListBox_MouseClick);
//
@@ -820,7 +820,7 @@
this.devicesComboBox.Location = new System.Drawing.Point(227, 39);
this.devicesComboBox.Margin = new System.Windows.Forms.Padding(2);
this.devicesComboBox.Name = "devicesComboBox";
this.devicesComboBox.Size = new System.Drawing.Size(161, 24);
this.devicesComboBox.Size = new System.Drawing.Size(161, 26);
this.devicesComboBox.TabIndex = 1;
this.devicesComboBox.Text = "Select your device";
this.devicesComboBox.SelectedIndexChanged += new System.EventHandler(this.devicesComboBox_SelectedIndexChanged);
@@ -838,7 +838,7 @@
this.remotesList.Location = new System.Drawing.Point(527, 39);
this.remotesList.Margin = new System.Windows.Forms.Padding(2);
this.remotesList.Name = "remotesList";
this.remotesList.Size = new System.Drawing.Size(53, 24);
this.remotesList.Size = new System.Drawing.Size(53, 26);
this.remotesList.TabIndex = 3;
this.remotesList.SelectedIndexChanged += new System.EventHandler(this.remotesList_SelectedIndexChanged);
//
@@ -878,7 +878,7 @@
this.searchTextBox.MaximumSize = new System.Drawing.Size(231, 26);
this.searchTextBox.MinimumSize = new System.Drawing.Size(231, 26);
this.searchTextBox.Name = "searchTextBox";
this.searchTextBox.Size = new System.Drawing.Size(231, 23);
this.searchTextBox.Size = new System.Drawing.Size(231, 24);
this.searchTextBox.TabIndex = 5;
this.searchTextBox.Text = "Search";
this.searchTextBox.Visible = false;
@@ -895,7 +895,7 @@
this.gamesQueueLabel.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.gamesQueueLabel.Location = new System.Drawing.Point(597, 601);
this.gamesQueueLabel.Name = "gamesQueueLabel";
this.gamesQueueLabel.Size = new System.Drawing.Size(51, 17);
this.gamesQueueLabel.Size = new System.Drawing.Size(52, 18);
this.gamesQueueLabel.TabIndex = 86;
this.gamesQueueLabel.Text = "Queue";
//
@@ -974,7 +974,7 @@
this.label1.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label1.Location = new System.Drawing.Point(597, 674);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(45, 17);
this.label1.Size = new System.Drawing.Size(48, 18);
this.label1.TabIndex = 86;
this.label1.Text = "Notes";
//
@@ -1096,7 +1096,7 @@
this.EnterInstallBox.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.EnterInstallBox.Location = new System.Drawing.Point(593, 7);
this.EnterInstallBox.Name = "EnterInstallBox";
this.EnterInstallBox.Size = new System.Drawing.Size(78, 52);
this.EnterInstallBox.Size = new System.Drawing.Size(80, 54);
this.EnterInstallBox.TabIndex = 93;
this.EnterInstallBox.Text = " Install w/ \r\n Enter Key";
this.EnterInstallBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1119,7 +1119,7 @@
this.ADBcommandbox.MaximumSize = new System.Drawing.Size(231, 26);
this.ADBcommandbox.MinimumSize = new System.Drawing.Size(231, 26);
this.ADBcommandbox.Name = "ADBcommandbox";
this.ADBcommandbox.Size = new System.Drawing.Size(231, 23);
this.ADBcommandbox.Size = new System.Drawing.Size(231, 24);
this.ADBcommandbox.TabIndex = 5;
this.ADBcommandbox.Visible = false;
this.ADBcommandbox.TextChanged += new System.EventHandler(this.searchTextBox_TextChanged);

View File

@@ -461,17 +461,19 @@ namespace AndroidSideloader
i++;
}
if (devicesComboBox.Items.Count > 0)
devicesComboBox.SelectedIndex = 0;
battery = ADB.RunAdbCommandToString("shell dumpsys battery").Output;
battery = Utilities.StringUtilities.RemoveEverythingBeforeFirst(battery, "level:");
battery = Utilities.StringUtilities.RemoveEverythingAfterFirst(battery, "\n");
battery = Utilities.StringUtilities.KeepOnlyNumbers(battery);
BatteryLbl.Text = BatteryLbl.Text.Replace("N/A", battery);
if (devicesComboBox.Items.Count > 0)
devicesComboBox.SelectedIndex = 0;
return devicesComboBox.SelectedIndex;
}
@@ -747,10 +749,15 @@ namespace AndroidSideloader
return;
}
progressBar.Style = ProgressBarStyle.Marquee;
string GameName = m_combo.SelectedItem.ToString();
string packageName = Sideloader.gameNameToPackageName(GameName);
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
ProcessOutput output = new ProcessOutput("", "");
ChangeTitle("Extracting APK....");
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
Thread t1 = new Thread(() =>
{
output = Sideloader.getApk(GameName);
@@ -760,10 +767,33 @@ namespace AndroidSideloader
while (t1.IsAlive)
await Task.Delay(100);
ChangeTitle("Extracting obb if it exists....");
Thread t2 = new Thread(() =>
{
output += ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packageName}\" \"{Properties.Settings.Default.MainDir}\\{packageName}\"");
});
t2.IsBackground = true;
t2.Start();
while (t2.IsAlive)
await Task.Delay(100);
ChangeTitle("Zipping extracted application...");
string cmd = $"7z a {packageName}.zip {packageName}";
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
Thread t3 = new Thread(() =>
{
ADB.RunCommandToString(cmd, path);
});
t3.IsBackground = true;
t3.Start();
while (t3.IsAlive)
await Task.Delay(100);
File.Move($"{Properties.Settings.Default.MainDir}\\{packageName}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz and share the link with a moderator.");
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("APK Extracted to " + Properties.Settings.Default.MainDir + ". Opening folder now.");
Process.Start("explorer.exe", Properties.Settings.Default.MainDir);
ShowPrcOutput(output);
ChangeTitle("");
}
private async void uninstallAppButton_Click(object sender, EventArgs e)
@@ -1006,7 +1036,7 @@ namespace AndroidSideloader
{
DragDropLbl.Visible = false;
}
private void initListView()
private async void initListView()
{
gamesListView.Items.Clear();
gamesListView.Columns.Clear();
@@ -1068,6 +1098,74 @@ namespace AndroidSideloader
else
Game.BackColor = Color.FromArgb(102, 77, 0);
}
bool dontget = false;
if (installedVersionInt > cloudVersionInt)
{
string RlsName = Sideloader.PackageNametoGameName(packagename);
string GameName = Sideloader.gameNameToSimpleName(RlsName);
if (File.Exists($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt"))
{
string[] blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt");
foreach (string blacklistpckg in blacklist)
{
if (packagename.Contains(blacklistpckg))
{
dontget = true;
}
}
}
if (!GameName.Contains("Beat Saber") && !dontget)
{
DialogResult dialogResult = FlexibleMessageBox.Show($"It seems you have a newer version of:\n\n{GameName}\n\nPlease consider sharing the updated files with us.\nThis is the only way to keep the apps up to date for everyone.\nWould you like to share the files with us?\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "Share clean files?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Thread t1 = new Thread(() =>
{
Sideloader.getApk(GameName);
});
t1.IsBackground = true;
t1.Start();
while (t1.IsAlive)
await Task.Delay(100);
ChangeTitle("Extracting obb if it exists....");
Thread t2 = new Thread(() =>
{
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packagename}\" \"{Properties.Settings.Default.MainDir}\\{packagename}\"");
});
t2.IsBackground = true;
t2.Start();
while (t2.IsAlive)
await Task.Delay(100);
ChangeTitle("Zipping extracted application...");
string cmd = $"7z a {packagename}.zip {packagename}";
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
Thread t3 = new Thread(() =>
{
ADB.RunCommandToString(cmd, path);
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip"))
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
File.Move($"{Properties.Settings.Default.MainDir}\\{packagename}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz and share the link with a moderator.");
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packagename}", true);
});
t3.IsBackground = true;
t3.Start();
while (t3.IsAlive)
await Task.Delay(100);
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("");
}
else MessageBox.Show("Ok, we understand, but remember: If everyone said No then none of this would exist!\nPlease reconsider and share the files so everyone can benefit!");
}
}
}
catch (Exception ex)
{

View File

@@ -170,6 +170,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
//Extracts apk from device, saves it by package name to sideloader folder
public static ProcessOutput getApk(string GameName)
{
ADB.WakeDevice();
ProcessOutput output = new ProcessOutput("", "");
@@ -185,13 +186,12 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
output += ADB.RunAdbCommandToString("pull " + apkPath); //pull apk
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
if (File.Exists(Properties.Settings.Default.MainDir + "\\" + packageName + ".apk"))
File.Delete(Properties.Settings.Default.MainDir + "\\" + packageName + ".apk");
MessageBox.Show("APK is named" + packageName + ".apk. Opening containing folder now.");
File.Move(Properties.Settings.Default.ADBFolder + "\\base.apk", Environment.CurrentDirectory + "\\" + packageName + ".apk");
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
File.Move($"{Properties.Settings.Default.ADBFolder}\\base.apk", $"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk");
return output;
}

View File

@@ -17,7 +17,7 @@ namespace AndroidSideloader
private static string RawGitHubUrl;
private static string GitHubUrl;
static readonly public string LocalVersion = "2.4.8";
static readonly public string LocalVersion = "2.5";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;

File diff suppressed because it is too large Load Diff