-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256 RSL 2.9.2 + Added option in settings menu to automatically reinstall apps when installs fail due to previous version clashing with update. NOTE: If your USB or wireless ADB connection is extremely slow this setting can cause larger APK installs to fail in rare cases. = Fixed auto reinstall for signature mismatch when if ADB reports error properly (thanks to ADB update), this will lead to faster reinstalls in general when there are issues. = Fixed crash that would occur when closing Rookie. = Added check to see if AAPT was sucessful in retrieving mew game name from APK, if not RSL will just call the name by its package name instead. HFP -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEotsUACgkQx/Rql1Vo czc2/w/8DkMuVYLb31J0WyqeIdo/12t+TO0oIbmTvGl8Oi1LttnfH1a+PUBYYXFF VTEcBoEgGde/Jk7+AblKhzce+uQIzwzU9KC7HL+Ab/1AAj3tdczx2vE4uKTPfMUe k8XuZz0Qe37IOVUgnHugQCac8jjaDCFXzwoIwADnBg7mW/4Ha+LqxJr/+dsMUnz/ WsenolRWWKyhTj3RHIulZu82yEV9Gw+KfIUpO/XJR71xNdCq1IyrAfBRT8KqgI3F 2IuX/pIqMSMvG1N62rWUzxD67BM5NbpjxiDZKg3LmBo39avqowSGclT7gOP+eiGY eSvvl+zoI08ofL+8Vonhu/mwnQNUcGFQqqpwAvDIcgE/zVDM9uTVAOTRkrjW0ge2 xEUhpdKZVJ/UzbwnUEyR7zeAkt+sVkEbAD9My7NdQ58eD52F20+yYTAWC6CU8dB4 8QJbJBEzd0Pm23H7iY5F5/7UnPy+rxzfyezrJCKV5u+D65Fn4n13VY33CDxBJW4y kmcpWwal81mbGgwhWpxK6+xy1V2oWL9PLN9YIkfv+n5/KlqJjUfj3wqah+aUG5qI X/5mqLAWnsQcM/F0bZXzt3dVszInPHH7jjSjoyKOKQwfVxYrh6uuonVhG7NfHfij LGs8d6O8osorkiB+2Aiziw8A+9o8fWLmfjeDhFcGc5YTb3eMxz0= =XRAG -----END PGP SIGNATURE-----
This commit is contained in:
49
ADB.cs
49
ADB.cs
@@ -385,39 +385,34 @@ namespace AndroidSideloader
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
if (out2.Contains($"INSTALL_FAILED_UPDATE_INCOMPATIBLE") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE") || out2.Contains("signatures do not match") || out2.Contains("failed to install"))
|
||||
if (out2.Contains($"signatures do not match previously") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE") || out2.Contains("signatures do not match") || out2.Contains("failed to install"))
|
||||
{
|
||||
ret.Error = string.Empty;
|
||||
ret.Output = string.Empty;
|
||||
|
||||
|
||||
FlexibleMessageBox.Show($"In place upgrade for {packagename} failed. We will need to upgrade by uninstalling, and keeping savedata isn't guaranteed. Continue?", "UPGRADE FAILED!", MessageBoxButtons.OKCancel);
|
||||
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
|
||||
|
||||
FlexibleMessageBox.Show($"Searching for save files...", "Searching!", MessageBoxButtons.OK);
|
||||
if (Directory.Exists($"/sdcard/Android/data/{packagename}"))
|
||||
{
|
||||
FlexibleMessageBox.Show($"Trying to backup save to Documents\\Rookie Backups\\{date_str}(YYYY.MM.DD)\\{packagename}", "Save files found", MessageBoxButtons.OK);
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"No savedata found! Continue with the uninstall!", "None Found", MessageBoxButtons.OK);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ADB.WakeDevice();
|
||||
ret += ADB.RunAdbCommandToString("shell pm uninstall " + package);
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
if (!Properties.Settings.Default.AutoReinstall)
|
||||
{
|
||||
DialogResult dialogResult1 = FlexibleMessageBox.Show("In place upgrade has failed. Rookie can attempt to backup your save data and\nreinstall the game automatically, however " +
|
||||
"some games do not store their saves\nin an accessible location(less than 5%). Continue with reinstall?", "In place upgrade failed.", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult1 == DialogResult.Cancel)
|
||||
return ret;
|
||||
}
|
||||
|
||||
Program.form.ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{MainForm.CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
Program.form.ChangeTitle("Uinstalling game...");
|
||||
Sideloader.UninstallGame(MainForm.CurrPCKG);
|
||||
Program.form.ChangeTitle("Reinstalling Game");
|
||||
ret += ADB.RunAdbCommandToString($"install -g \"{path}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}\" /sdcard/Android/data/");
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}", true);
|
||||
|
||||
Program.form.ChangeTitle(" \n\n");
|
||||
return ret;
|
||||
}
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
}
|
||||
string gamenameforQU = Sideloader.PackageNametoGameName(packagename);
|
||||
if (Properties.Settings.Default.QUturnedon)
|
||||
|
||||
@@ -170,6 +170,9 @@
|
||||
<setting name="lastTimeShared" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="AutoReinstall" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
|
||||
@@ -1,6 +1,55 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.2
|
||||
|
||||
+ Added option in settings menu
|
||||
to automatically reinstall apps
|
||||
when installs fail due to previous
|
||||
version clashing with update.
|
||||
|
||||
NOTE: If your USB or wireless ADB
|
||||
connection is extremely slow this
|
||||
setting can cause larger APK installs
|
||||
to fail in rare cases.
|
||||
|
||||
= Fixed auto reinstall for signature
|
||||
mismatch when if ADB reports error
|
||||
properly (thanks to ADB update),
|
||||
this will lead to faster reinstalls
|
||||
in general when there are issues.
|
||||
|
||||
= Fixed crash that would occur when
|
||||
closing Rookie.
|
||||
|
||||
= Added check to see if AAPT was
|
||||
sucessful in retrieving mew game
|
||||
name from APK, if not RSL will just
|
||||
call the name by its package name
|
||||
instead.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEotsUACgkQx/Rql1Vo
|
||||
czc2/w/8DkMuVYLb31J0WyqeIdo/12t+TO0oIbmTvGl8Oi1LttnfH1a+PUBYYXFF
|
||||
VTEcBoEgGde/Jk7+AblKhzce+uQIzwzU9KC7HL+Ab/1AAj3tdczx2vE4uKTPfMUe
|
||||
k8XuZz0Qe37IOVUgnHugQCac8jjaDCFXzwoIwADnBg7mW/4Ha+LqxJr/+dsMUnz/
|
||||
WsenolRWWKyhTj3RHIulZu82yEV9Gw+KfIUpO/XJR71xNdCq1IyrAfBRT8KqgI3F
|
||||
2IuX/pIqMSMvG1N62rWUzxD67BM5NbpjxiDZKg3LmBo39avqowSGclT7gOP+eiGY
|
||||
eSvvl+zoI08ofL+8Vonhu/mwnQNUcGFQqqpwAvDIcgE/zVDM9uTVAOTRkrjW0ge2
|
||||
xEUhpdKZVJ/UzbwnUEyR7zeAkt+sVkEbAD9My7NdQ58eD52F20+yYTAWC6CU8dB4
|
||||
8QJbJBEzd0Pm23H7iY5F5/7UnPy+rxzfyezrJCKV5u+D65Fn4n13VY33CDxBJW4y
|
||||
kmcpWwal81mbGgwhWpxK6+xy1V2oWL9PLN9YIkfv+n5/KlqJjUfj3wqah+aUG5qI
|
||||
X/5mqLAWnsQcM/F0bZXzt3dVszInPHH7jjSjoyKOKQwfVxYrh6uuonVhG7NfHfij
|
||||
LGs8d6O8osorkiB+2Aiziw8A+9o8fWLmfjeDhFcGc5YTb3eMxz0=
|
||||
=XRAG
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.1
|
||||
|
||||
+ Added blacklist implementation to request games
|
||||
|
||||
178
MainForm.cs
178
MainForm.cs
@@ -237,7 +237,7 @@ namespace AndroidSideloader
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = true;
|
||||
if (HasInternet)
|
||||
t1.Start();
|
||||
t1.Start();
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
Thread t2 = new Thread(() =>
|
||||
@@ -277,19 +277,18 @@ namespace AndroidSideloader
|
||||
{
|
||||
ChangeTitle("Checking if config is updated and updating config");
|
||||
SideloaderRCLONE.updateConfig(currentRemote);
|
||||
ChangeTitle("");
|
||||
|
||||
});
|
||||
configThread.IsBackground = true;
|
||||
configThread.Start();
|
||||
while (configThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Populating update list, please wait...");
|
||||
ChangeTitle("Populating update list, please wait...\n\n");
|
||||
listappsbtn();
|
||||
initListView();
|
||||
showAvailableSpace();
|
||||
intToolTips();
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
downloadInstallGameButton.Enabled = true;
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
@@ -823,7 +822,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
string currentlyuploading = GameName;
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
string Uploadoutput = RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip\" RSL-debuglogs:CleanGames").Output;
|
||||
string Uploadoutput = RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip\" RSL-gameuploads:").Output;
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip");
|
||||
FlexibleMessageBox.Show($"Upload of {currentlyuploading} is complete! Thank you for your contribution!");
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
|
||||
@@ -837,7 +836,7 @@ namespace AndroidSideloader
|
||||
await Task.Delay(100);
|
||||
}
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
@@ -848,32 +847,28 @@ namespace AndroidSideloader
|
||||
|
||||
private async void uninstallAppButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
string packagename;
|
||||
ADB.WakeDevice();
|
||||
if (m_combo.SelectedIndex == -1)
|
||||
{
|
||||
FlexibleMessageBox.Show("Please select an app first");
|
||||
return;
|
||||
}
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
|
||||
|
||||
string GameName = m_combo.SelectedItem.ToString();
|
||||
string packagename = Sideloader.gameNameToPackageName(GameName);
|
||||
FlexibleMessageBox.Show($"If savedata is found it will be saved to Documents\\Rookie Backups\\{date_str}(YYYY.MM.DD)\\{packagename}", "Attempting Backup...", MessageBoxButtons.OK);
|
||||
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Please check to see if we automatically found savedata in Documents\\Rookie Backups.\nIf there are no new files there is recommended that you do a full backup via Backup Gamedata before continuing.\nNOTE: Some games do not allow backup of savedata.\nContinue with the uninstall?", "Continue with Uninstall?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.No)
|
||||
DialogResult dialogresult = FlexibleMessageBox.Show($"Are you sure you want to unintsall {GameName}? Rookie will attempt to automatically backup any saves to Documents\\Rookie Backups\\(TodaysDate)", "Proceed with uninstall?", MessageBoxButtons.YesNo);
|
||||
if (dialogresult == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!GameName.Contains("."))
|
||||
packagename = Sideloader.gameNameToPackageName(GameName);
|
||||
else
|
||||
packagename = GameName;
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
output += Sideloader.UninstallGame(GameName);
|
||||
output += Sideloader.UninstallGame(packagename);
|
||||
});
|
||||
t1.Start();
|
||||
t1.IsBackground = true;
|
||||
@@ -1000,7 +995,8 @@ namespace AndroidSideloader
|
||||
output.Error = "";
|
||||
if (output.Error.Contains("reserved"))
|
||||
output.Output = "";
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
string[] files = Directory.GetFiles(data);
|
||||
@@ -1013,7 +1009,7 @@ namespace AndroidSideloader
|
||||
string pathname = Path.GetDirectoryName(data);
|
||||
string filename = file2.Replace($"{pathname}\\", "");
|
||||
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"{data}\" | findstr -i \"package: name\"";
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"{file2}\" | findstr -i \"package: name\"";
|
||||
string cmdout = ADB.RunCommandToString(cmd, file2).Output;
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingBeforeFirst(cmdout, "=");
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingAfterFirst(cmdout, " ");
|
||||
@@ -1028,7 +1024,6 @@ namespace AndroidSideloader
|
||||
Program.form.ChangeTitle($"Sideloading apk...");
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.Sideload(file2);
|
||||
});
|
||||
@@ -1112,8 +1107,7 @@ namespace AndroidSideloader
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1149,8 +1143,7 @@ namespace AndroidSideloader
|
||||
|
||||
timer.Stop();
|
||||
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
//If obb is dragged and dropped alone onto Rookie, Rookie will recreate its obb folder automatically with this code.
|
||||
@@ -1177,7 +1170,7 @@ namespace AndroidSideloader
|
||||
await Task.Delay(100);
|
||||
|
||||
Directory.Delete(foldername, true);
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
// BMBF Zip extraction then push to BMBF song folder on Quest.
|
||||
else if (extension == ".zip" && Properties.Settings.Default.BMBFchecked)
|
||||
@@ -1219,7 +1212,8 @@ namespace AndroidSideloader
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1247,7 +1241,8 @@ namespace AndroidSideloader
|
||||
{
|
||||
DragDropLbl.Visible = false;
|
||||
DragDropLbl.Text = "";
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
List<String> newGamesList = new List<string>();
|
||||
List<String> newGamesToUploadList = new List<string>();
|
||||
@@ -1288,7 +1283,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
rookieList.Add(game[SideloaderRCLONE.PackageNameIndex]);
|
||||
}
|
||||
|
||||
|
||||
List<String> installGames = packageList.ToList();
|
||||
List<String> blacklistItems = blacklist.ToList();
|
||||
List<String> whitelistItems = whitelist.ToList();
|
||||
@@ -1301,10 +1296,10 @@ namespace AndroidSideloader
|
||||
foreach (string[] release in SideloaderRCLONE.games)
|
||||
{
|
||||
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
|
||||
{
|
||||
{
|
||||
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
|
||||
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
|
||||
}
|
||||
}
|
||||
|
||||
ListViewItem Game = new ListViewItem(release);
|
||||
if (gamesListView.Columns.Count > 0)
|
||||
@@ -1320,7 +1315,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (string.Equals(release[SideloaderRCLONE.PackageNameIndex], packagename))
|
||||
{
|
||||
|
||||
|
||||
if (Properties.Settings.Default.QblindOn)
|
||||
{
|
||||
Game.BackColor = Color.FromArgb(0, 112, 138);
|
||||
@@ -1380,7 +1375,7 @@ namespace AndroidSideloader
|
||||
try
|
||||
{
|
||||
if (gamesListView.Items.Count > 1)
|
||||
topItemIndex = gamesListView.TopItem.Index;
|
||||
topItemIndex = gamesListView.TopItem.Index;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{ }
|
||||
@@ -1469,6 +1464,8 @@ namespace AndroidSideloader
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingAfterFirst(ReleaseName, "\r\n");
|
||||
ReleaseName = ReleaseName.Replace("'", "");
|
||||
File.Delete($"C:\\RSL\\2.8.2\\ADB\\base.apk");
|
||||
if (ReleaseName.Contains("Microsoft Windows"))
|
||||
ReleaseName = newGamesToUpload;
|
||||
//end
|
||||
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
@@ -1529,6 +1526,7 @@ namespace AndroidSideloader
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
ULGif.Enabled = false;
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
loaded = true;
|
||||
}
|
||||
@@ -1560,11 +1558,12 @@ namespace AndroidSideloader
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
UploadGame game = new UploadGame();
|
||||
game.Pckgcommand = packagename;
|
||||
game.Uploadcommand = $"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{installedVersionInt}.zip\" RSL-debuglogs:CleanGames";
|
||||
game.Uploadcommand = $"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{installedVersionInt}.zip\" RSL-gameuploads:";
|
||||
game.Uploadversion = installedVersionInt;
|
||||
game.Uploadgamename = GameName;
|
||||
gamesToUpload.Add(game);
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
private void initMirrors(bool random)
|
||||
{
|
||||
@@ -1715,7 +1714,8 @@ without him none of this would be possible
|
||||
initListView();
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
|
||||
private static readonly HttpClient client = new HttpClient();
|
||||
@@ -1965,7 +1965,8 @@ without him none of this would be possible
|
||||
Thread installtxtThread = new Thread(() =>
|
||||
{
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
});
|
||||
|
||||
installtxtThread.Start();
|
||||
@@ -2034,11 +2035,12 @@ without him none of this would be possible
|
||||
gamesAreDownloading = false;
|
||||
ShowPrcOutput(output);
|
||||
isinstalling = false;
|
||||
ChangeTitle("Refreshing games list, please wait...\n");
|
||||
ChangeTitle("Refreshing games list, please wait... \n");
|
||||
showAvailableSpace();
|
||||
listappsbtn();
|
||||
initListView();
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2055,54 +2057,52 @@ without him none of this would be possible
|
||||
}
|
||||
if (isinstalled)
|
||||
{
|
||||
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("In place upgrade has failed.\n\nThis means the app must be uninstalled first before updating.\nRookie can attempt to do this while retaining your savedata.\nWhile the vast majority of games can be backed up there are some exceptions\n(we don't know which apps can't be backed up as there is no list online)\n\nDo you want Rookie to uninstall and reinstall the app automatically?", "In place upgrade failed", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.OK)
|
||||
if (!Properties.Settings.Default.AutoReinstall)
|
||||
{
|
||||
ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
ADB.RunAdbCommandToString($"shell pm uninstall {CurrPCKG}");
|
||||
output += ADB.RunAdbCommandToString($"install -g \"{CurrAPK}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
|
||||
|
||||
timerticked = false;
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
|
||||
ChangeTitle("");
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult2 = FlexibleMessageBox.Show("Would you like to cancel the install? Press NO to keep waiting.", "Cancel install?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("In place upgrade has failed.\n\nThis means the app must be uninstalled first before updating.\nRookie can attempt to do this while retaining your savedata.\nWhile the vast majority of games can be backed up there are some exceptions\n(we don't know which apps can't be backed up as there is no list online)\n\nDo you want Rookie to uninstall and reinstall the app automatically?", "In place upgrade failed", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
{
|
||||
ChangeTitle("Stopping Install...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
}
|
||||
else
|
||||
{
|
||||
timerticked = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
Sideloader.UninstallGame(CurrPCKG);
|
||||
ChangeTitle("Reinstalling Game");
|
||||
output += ADB.RunAdbCommandToString($"install -g \"{CurrAPK}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
|
||||
|
||||
timerticked = false;
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult2 = FlexibleMessageBox.Show("This install is taking an usual amount of time, you can keep waiting or cancel the install.\n" +
|
||||
"Would you like to cancel the installation?", "Cancel install?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
{
|
||||
ChangeTitle("Stopping Install...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
}
|
||||
else
|
||||
{
|
||||
timerticked = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
//Even if the user has already uploaded the game list, we will ask once every 24h
|
||||
if (Properties.Settings.Default.lastTimeShared != null && Properties.Settings.Default.UploadedGameList)
|
||||
{
|
||||
if((DateTime.Now - Properties.Settings.Default.lastTimeShared).TotalDays > 1)
|
||||
{
|
||||
Properties.Settings.Default.UploadedGameList = false;
|
||||
}
|
||||
}
|
||||
if (isinstalling)
|
||||
{
|
||||
var res1 = FlexibleMessageBox.Show(this, "There are downloads and/or installations in progress,\nif you exit now you'll have to start the entire process over again.\nAre you sure you want to exit?", "Still downloading/installing.",
|
||||
@@ -2128,30 +2128,6 @@ without him none of this would be possible
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
else if (newGamesList.Count > 0 && !Properties.Settings.Default.UploadedGameList)
|
||||
{
|
||||
var res = FlexibleMessageBox.Show(this, "For August 2021, we'd like to grab a list of the apps installed to make updates work better.\nDo that now?", "Upload game list?",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
|
||||
if (res == DialogResult.Yes)
|
||||
{
|
||||
string fileName = "gamesList" + DateTime.Now.ToFileTime() + ".txt";
|
||||
System.IO.File.WriteAllLines(fileName, newGamesList);
|
||||
RCLONE.runRcloneCommand($"copy " + Environment.CurrentDirectory + "\\" + fileName + " RSL-debuglogs:InstalledGamesList");
|
||||
FlexibleMessageBox.Show("Upload done! Thank for your colaboration!");
|
||||
File.Delete(fileName);
|
||||
Properties.Settings.Default.UploadedGameList = true;
|
||||
Properties.Settings.Default.lastTimeShared = DateTime.Now;
|
||||
Properties.Settings.Default.Save();
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
@@ -2294,7 +2270,7 @@ without him none of this would be possible
|
||||
{
|
||||
ChangeTitle($"Entered command: ADB {ADBcommandbox.Text}");
|
||||
ADB.RunAdbCommandToString(ADBcommandbox.Text);
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
ADBcommandbox.Visible = false;
|
||||
label9.Visible = false;
|
||||
|
||||
12
Properties/Settings.Designer.cs
generated
12
Properties/Settings.Designer.cs
generated
@@ -657,5 +657,17 @@ namespace AndroidSideloader.Properties {
|
||||
this["lastTimeShared"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool AutoReinstall {
|
||||
get {
|
||||
return ((bool)(this["AutoReinstall"]));
|
||||
}
|
||||
set {
|
||||
this["AutoReinstall"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,5 +161,8 @@
|
||||
<Setting Name="lastTimeShared" Type="System.DateTime" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="AutoReinstall" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
43
SettingsForm.Designer.cs
generated
43
SettingsForm.Designer.cs
generated
@@ -48,6 +48,7 @@
|
||||
this.CblindBox = new System.Windows.Forms.CheckBox();
|
||||
this.nodevicemodeBox = new System.Windows.Forms.CheckBox();
|
||||
this.bmbfBox = new System.Windows.Forms.CheckBox();
|
||||
this.AutoReinstBox = new System.Windows.Forms.CheckBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// checkForUpdatesCheckBox
|
||||
@@ -72,7 +73,7 @@
|
||||
this.applyButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.applyButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.applyButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.applyButton.Location = new System.Drawing.Point(67, 280);
|
||||
this.applyButton.Location = new System.Drawing.Point(67, 328);
|
||||
this.applyButton.Name = "applyButton";
|
||||
this.applyButton.Size = new System.Drawing.Size(101, 31);
|
||||
this.applyButton.TabIndex = 5;
|
||||
@@ -102,7 +103,7 @@
|
||||
this.resetSettingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.resetSettingsButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.resetSettingsButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(174, 280);
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(174, 328);
|
||||
this.resetSettingsButton.Name = "resetSettingsButton";
|
||||
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
|
||||
this.resetSettingsButton.TabIndex = 4;
|
||||
@@ -157,7 +158,7 @@
|
||||
this.BandwithTextbox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.BandwithTextbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.BandwithTextbox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.BandwithTextbox.Location = new System.Drawing.Point(52, 248);
|
||||
this.BandwithTextbox.Location = new System.Drawing.Point(52, 296);
|
||||
this.BandwithTextbox.Name = "BandwithTextbox";
|
||||
this.BandwithTextbox.Size = new System.Drawing.Size(177, 24);
|
||||
this.BandwithTextbox.TabIndex = 11;
|
||||
@@ -167,7 +168,7 @@
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.label1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.label1.Location = new System.Drawing.Point(40, 225);
|
||||
this.label1.Location = new System.Drawing.Point(40, 273);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(245, 18);
|
||||
this.label1.TabIndex = 12;
|
||||
@@ -188,7 +189,7 @@
|
||||
"K",
|
||||
"M",
|
||||
"G"});
|
||||
this.BandwithComboBox.Location = new System.Drawing.Point(235, 248);
|
||||
this.BandwithComboBox.Location = new System.Drawing.Point(235, 296);
|
||||
this.BandwithComboBox.Name = "BandwithComboBox";
|
||||
this.BandwithComboBox.Size = new System.Drawing.Size(55, 26);
|
||||
this.BandwithComboBox.TabIndex = 13;
|
||||
@@ -202,7 +203,7 @@
|
||||
this.DebugLogCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.DebugLogCopy.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.DebugLogCopy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.DebugLogCopy.Location = new System.Drawing.Point(29, 325);
|
||||
this.DebugLogCopy.Location = new System.Drawing.Point(29, 373);
|
||||
this.DebugLogCopy.Name = "DebugLogCopy";
|
||||
this.DebugLogCopy.Size = new System.Drawing.Size(285, 31);
|
||||
this.DebugLogCopy.TabIndex = 5;
|
||||
@@ -213,7 +214,7 @@
|
||||
// crashlogID
|
||||
//
|
||||
this.crashlogID.AutoSize = true;
|
||||
this.crashlogID.Location = new System.Drawing.Point(13, 441);
|
||||
this.crashlogID.Location = new System.Drawing.Point(13, 489);
|
||||
this.crashlogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.crashlogID.Name = "crashlogID";
|
||||
this.crashlogID.Size = new System.Drawing.Size(0, 13);
|
||||
@@ -228,7 +229,7 @@
|
||||
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.button1.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.button1.Location = new System.Drawing.Point(29, 360);
|
||||
this.button1.Location = new System.Drawing.Point(29, 408);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(285, 31);
|
||||
this.button1.TabIndex = 5;
|
||||
@@ -239,7 +240,7 @@
|
||||
// debuglogID
|
||||
//
|
||||
this.debuglogID.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
|
||||
this.debuglogID.Location = new System.Drawing.Point(29, 436);
|
||||
this.debuglogID.Location = new System.Drawing.Point(29, 484);
|
||||
this.debuglogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.debuglogID.Name = "debuglogID";
|
||||
this.debuglogID.Size = new System.Drawing.Size(285, 48);
|
||||
@@ -254,7 +255,7 @@
|
||||
this.DebugID.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.DebugID.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
|
||||
this.DebugID.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.DebugID.Location = new System.Drawing.Point(29, 407);
|
||||
this.DebugID.Location = new System.Drawing.Point(29, 455);
|
||||
this.DebugID.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.DebugID.Name = "DebugID";
|
||||
this.DebugID.ReadOnly = true;
|
||||
@@ -267,7 +268,7 @@
|
||||
// label2
|
||||
//
|
||||
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
|
||||
this.label2.Location = new System.Drawing.Point(29, 507);
|
||||
this.label2.Location = new System.Drawing.Point(29, 555);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(284, 86);
|
||||
@@ -284,7 +285,7 @@
|
||||
this.textBox1.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
|
||||
this.textBox1.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.textBox1.Location = new System.Drawing.Point(29, 490);
|
||||
this.textBox1.Location = new System.Drawing.Point(29, 538);
|
||||
this.textBox1.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.ReadOnly = true;
|
||||
@@ -334,12 +335,26 @@
|
||||
this.bmbfBox.UseVisualStyleBackColor = true;
|
||||
this.bmbfBox.CheckedChanged += new System.EventHandler(this.bmbfBox_CheckedChanged);
|
||||
//
|
||||
// AutoReinstBox
|
||||
//
|
||||
this.AutoReinstBox.AutoSize = true;
|
||||
this.AutoReinstBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.AutoReinstBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.AutoReinstBox.Location = new System.Drawing.Point(12, 222);
|
||||
this.AutoReinstBox.Name = "AutoReinstBox";
|
||||
this.AutoReinstBox.Size = new System.Drawing.Size(280, 22);
|
||||
this.AutoReinstBox.TabIndex = 9;
|
||||
this.AutoReinstBox.Text = "Enable auto reinstall upon install failure";
|
||||
this.AutoReinstBox.UseVisualStyleBackColor = true;
|
||||
this.AutoReinstBox.CheckedChanged += new System.EventHandler(this.AutoReinstBox_CheckedChanged);
|
||||
this.AutoReinstBox.Click += new System.EventHandler(this.AutoReinstBox_Click);
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
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(342, 606);
|
||||
this.ClientSize = new System.Drawing.Size(342, 634);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.Controls.Add(this.DebugID);
|
||||
this.Controls.Add(this.crashlogID);
|
||||
@@ -349,6 +364,7 @@
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.BandwithTextbox);
|
||||
this.Controls.Add(this.bmbfBox);
|
||||
this.Controls.Add(this.AutoReinstBox);
|
||||
this.Controls.Add(this.nodevicemodeBox);
|
||||
this.Controls.Add(this.CblindBox);
|
||||
this.Controls.Add(this.userJsonOnGameInstall);
|
||||
@@ -398,5 +414,6 @@
|
||||
private System.Windows.Forms.CheckBox CblindBox;
|
||||
private System.Windows.Forms.CheckBox nodevicemodeBox;
|
||||
private System.Windows.Forms.CheckBox bmbfBox;
|
||||
private System.Windows.Forms.CheckBox AutoReinstBox;
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,7 @@ namespace AndroidSideloader
|
||||
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
|
||||
nodevicemodeBox.Checked = Properties.Settings.Default.nodevicemode;
|
||||
bmbfBox.Checked = Properties.Settings.Default.BMBFchecked;
|
||||
AutoReinstBox.Checked = Properties.Settings.Default.AutoReinstall;
|
||||
|
||||
if (Properties.Settings.Default.BandwithLimit.Length > 1)
|
||||
{
|
||||
@@ -223,6 +224,27 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.BMBFchecked = bmbfBox.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void AutoReinstBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.AutoReinstall = AutoReinstBox.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void AutoReinstBox_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (AutoReinstBox.Checked)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("WARNING: This box enables automatic reinstall when installs fail,\ndue to some games not allowing " +
|
||||
"access to their save data (less than 5%) this\noption can lead to losing your progress." +
|
||||
" However with this option\nchecked when installs fail you won't have to agree to a prompt to preform\nthe reinstall. " +
|
||||
"(ideal when installing from a queue).\n\nNOTE: If your usb/wireless adb connection is extremely slow this option can\ncause larger" +
|
||||
"apk file installations to fail. Enable anyway?", "WARNING", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
AutoReinstBox.Checked = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -126,17 +126,22 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
}
|
||||
catch (Exception ex) { Logger.Log(ex.Message); }
|
||||
}
|
||||
|
||||
public static string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
|
||||
//uninstalls an app
|
||||
public static ProcessOutput UninstallGame(string GameName)
|
||||
public static ProcessOutput UninstallGame(string packagename)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
Program.form.ChangeTitle("Attempting to backup any savedata to Documents\\Rookie Backups...");
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
string packageName = Sideloader.gameNameToPackageName(GameName);
|
||||
output = ADB.UninstallPackage(packageName);
|
||||
//remove both data and obb if there is any
|
||||
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packageName);
|
||||
Sideloader.RemoveFolder("/sdcard/Android/data/" + packageName);
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
if (!Directory.Exists(CurrBackups))
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
output = ADB.UninstallPackage(packagename);
|
||||
Program.form.ChangeTitle("");
|
||||
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packagename);
|
||||
Sideloader.RemoveFolder("/sdcard/Android/data/" + packagename);
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace AndroidSideloader
|
||||
private static string RawGitHubUrl;
|
||||
private static string GitHubUrl;
|
||||
|
||||
static readonly public string LocalVersion = "2.9.1";
|
||||
static readonly public string LocalVersion = "2.9.2";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
|
||||
@@ -1,21 +1,28 @@
|
||||
RSL 2.9.1
|
||||
RSL 2.9.2
|
||||
|
||||
+ Added blacklist implementation to request games
|
||||
found on User's device that are not currently on
|
||||
Rookie.
|
||||
+ Added option in settings menu
|
||||
to automatically reinstall apps
|
||||
when installs fail due to previous
|
||||
version clashing with update.
|
||||
|
||||
+ Added CTRL + L shortcut to copy list of game names
|
||||
separated by new lines to clipboard.
|
||||
NOTE: If your USB or wireless ADB
|
||||
connection is extremely slow this
|
||||
setting can cause larger APK installs
|
||||
to fail in rare cases.
|
||||
|
||||
+ Added ALT + L shortcut to copy list of game names to
|
||||
a paragraph separated by commas to clipboard.
|
||||
= Fixed auto reinstall for signature
|
||||
mismatch when if ADB reports error
|
||||
properly (thanks to ADB update),
|
||||
this will lead to faster reinstalls
|
||||
in general when there are issues.
|
||||
|
||||
+ Rookie will now maintain games list position when it
|
||||
is refreshed. (e.g.: After finishing install queue,
|
||||
when pressing refresh all/updates list buttons)
|
||||
= Fixed crash that would occur when
|
||||
closing Rookie.
|
||||
|
||||
= Fixed issue where Rookie won't load game list properly
|
||||
after updating, users won't notice the issue fixed until
|
||||
the next update after this update.
|
||||
= Added check to see if AAPT was
|
||||
sucessful in retrieving mew game
|
||||
name from APK, if not RSL will just
|
||||
call the name by its package name
|
||||
instead.
|
||||
|
||||
HFP
|
||||
Reference in New Issue
Block a user