internal void UninstallApkFromOneDevice(int deviceIndex, int startUninstallationFrom) { Process proc = null; List <App> selectedApks = UninstallManager.instance.selectedDeviceInfoList[deviceIndex].selectedApkList; try { AppManager.Instance.uninstallThreadStarted = true; print(selectedApks.Count + " " + StaticData.Instance.IntervalPeriodForAPKAtOneTime + " " + UtilityManager.GetIntervalCount(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime)); for (int j = 0; j < UtilityManager.GetIntervalCount(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime); j++) { print("UninstallApkFromOneDevice " + j); int[] MinMax = UtilityManager.GetMinMaxInInterval(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime, j); using (proc = new Process()) { CurrActiveProcess = proc; System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(CommandProcessName + ".exe"); procStartInfo.RedirectStandardInput = true; procStartInfo.RedirectStandardOutput = true; procStartInfo.RedirectStandardError = true; procStartInfo.UseShellExecute = false; procStartInfo.CreateNoWindow = true; proc.StartInfo = procStartInfo; proc.ErrorDataReceived += (object _sender, DataReceivedEventArgs _args) => ErrorDataHandlerUninstall(deviceIndex, _sender, _args); proc.Start(); for (int i = MinMax[0]; i < MinMax[1]; i++) { if (i < startUninstallationFrom) { continue; } print(i + " adb -s " + UninstallManager.instance.selectedDeviceInfoList[deviceIndex].DeviceID + " uninstall " + selectedApks[i].PackageID); proc.StandardInput.WriteLine("adb -s " + UninstallManager.instance.selectedDeviceInfoList[deviceIndex].DeviceID + " uninstall " + selectedApks[i].PackageID); } proc.StandardInput.WriteLine("exit"); proc.BeginErrorReadLine(); string Line; while ((Line = proc.StandardOutput.ReadLine()) != null) { UnityEngine.Debug.Log(Line); if (Line.Contains("Failure") || Line.Contains("error:") || Line.Contains("waiting for device")) { UnityEngine.Debug.LogError(Line); if (Line.Contains("no response: Connection reset by peer") || Line.Contains("not found") || Line.Contains("couldn't read from device") || Line.Contains("waiting for device")) { ErrorDataHandlerUninstall(deviceIndex, Line); return; } ErrorDataHandlerUninstall(deviceIndex, Line); } if (Line.Equals("Success")) { OnAPKUninstallSuccess(deviceIndex); } } proc.WaitForExit(); } } } catch (System.Exception e) { UnityEngine.Debug.Log(deviceIndex + " " + e.ToString()); } finally { OnFinallyCalledForAbort(Thread.CurrentThread); KillProcess(proc.Id); } }