public void EntryPoint(ILeafUI ui, IDevice device, ICommandExecutor executor) { using (ui) { using (executor) { executor.OutputReceived += (s, e) => ui.WriteLineToDetails(e.Text); var text = ClassTextReaderCache.Acquire <EGCM>(); ui.Show(); if (device is NetDevice) { ui.ShowMessage(text["isNet"]); ui.EFinish(); } else if (device is UsbDevice usbDevice) { var endPoint = usbDevice.OpenNetDebugging(5555); if (endPoint != null) { executor.Adb($"connect {endPoint}"); } ui.Finish(); } else { ui.Finish(text["notsupport"]); } } } }
/// <summary> /// 捕获,并保存到电脑指定文件夹 /// </summary> /// <param name="savePath"></param> public void CaptureAndSaveToFile(string savePath) { var tmpPath = GenerateTmpFilePath(); executor.AdbShell(device, $"screencap -p {tmpPath}").ThrowIfError(); executor.Adb(device, $"pull {tmpPath} \"{savePath}\"").ThrowIfError(); executor.AdbShell(device, $"rm {tmpPath}").ThrowIfError(); }
public int PushToDevice() { DirectoryInfo dirInfo = storage.CacheDirectory; string path = Path.Combine(dirInfo.FullName, PATH_OF_TMP_APK); string command = $"push \"{path}\" {PATH_OF_ATMP_APK}"; return(executor.Adb(device, command).ExitCode); }
public void EntryPoint(ILeafUI ui, IDevice device, ICommandExecutor executor) { using (ui) { ui.Show(); if (device is UsbDevice usbDevice) { string input = null; ushort port = 0; do { input = ui.InputString(this.RxGetClassText("input_hint"), "5555"); if (input == null) { ui.EShutdown(); } } while (!ushort.TryParse(input, out port)); ui.StatusInfo = this.RxGetClassText("stauts_enabling"); IPEndPoint endPoint = null; try { endPoint = usbDevice.OpenNetDebugging(port); } catch (AdbCommandFailedException e) { ui.WriteLineToDetails($"exit code : {e.ExitCode}"); ui.EShutdown(); } ui.WriteLineToDetails($"Device's IPEndPoint: {endPoint?.ToString() ?? "Can not read"}"); if (endPoint != null) { if (ui.DoYN(this.RxGetClassText("yn_try_to_connect"))) { ui.StatusInfo = this.RxGetClassText("status_connecting"); Thread.Sleep(1500); string msg = executor.Adb($"connect {endPoint}").ExitCode == 0 ? StatusMessages.Success : StatusMessages.Failed; ui.Finish(msg); } else { ui.Finish(StatusMessages.Success); } } else { ui.ShowMessage(this.RxGetClassText("can_not_read_ip")); ui.Finish(StatusMessages.Success); } } else { ui.ShowMessage(this.RxGetClassText("is_not_usb_device")); ui.Shutdown(); } } }
public void EntryPoint(ILeafUI ui, IDevice device, ICommandExecutor executor) { using (ui) { using (executor) { var text = ClassTextReaderCache.Acquire <EUnlockSystemParation>(); ui.Show(); executor.OutputReceived += (s, e) => ui.WriteLineToDetails(e.Text); executor.Adb(device, "root"); var result = executor.Adb(device, "disable-verity"); if (result.ExitCode == 0 && ui.DoYN(text["reboot"])) { device.Reboot2System(); } ui.Finish(result.ExitCode == 0 ? StatusMessages.Success : StatusMessages.Failed); } } }
/// <summary> /// 安装位于PC机上的APK文件 /// </summary> /// <returns></returns> public ICommandResult Install(FileInfo packageFile, bool allowDowngrade = true) { if (packageFile == null) { throw new ArgumentNullException(nameof(packageFile)); } string args = allowDowngrade ? "-d" : ""; return(executor.Adb(device, $"install {args} {packageFile}")); }
/// <summary> /// 截图 /// </summary> /// <exception cref="CommandErrorException">命令执行失败</exception> /// <exception cref="CommandCancelledException">命令被外部进程终止</exception> /// <returns>保存到PC上的截图文件名</returns> public FileInfo Cap(bool wakeUpDevice = true) { if (wakeUpDevice) { new KeyInputer(device, executor).RaiseKeyEvent(AndroidKeyCode.WakeUp); } string fileName = GenerateUniqueFileName(); string pcFileName = Path.Combine(tmpDir, fileName); executor.AdbShell(device, $"screencap -p /sdcard/{fileName}").ThrowIfError(); executor.Adb(device, $"pull /sdcard/{fileName} {pcFileName}").ThrowIfError(); executor.AdbShell(device, $"rm /sdcard/{fileName}"); return(new FileInfo(pcFileName)); }
private Tuple <int, int, int> Install(List <FileInfo> files) { int successed = 0; int error = 0; int currentInstalling = 1; int totalCount = files.Count; SetTip(currentInstalling, totalCount); foreach (var file in files) { try { var result = executor.Adb(device, $"install -r -t -d \"{file.FullName}\""); if (result.ExitCode == 0) { successed++; } else { error++; } } catch (Exception ex) { SLogger <EApkInstaller> .Warn("install apk failed", ex); error++; } if (currentInstalling < totalCount) { currentInstalling++; SetTip(currentInstalling, totalCount); } } ; string fmtString = this.RxGetClassText("result_fmt"); ui.StatusDescription = (string.Format(fmtString, successed, error, totalCount)); return(new Tuple <int, int, int>(totalCount, successed, error)); }
public void EntryPoint(ILeafUI ui, ICommandExecutor executor) { var textCarrier = new TextCarrier(); using (ui) { ui.Show(); string input = null; IPEndPoint endPoint = null; do { if (input != null)//输入错误 { if (!ui.DoYN(textCarrier.RxGetClassText("input_error"), textCarrier.RxGetClassText("input_retry"), textCarrier.RxGetClassText("input_cancel"))) { ui.EShutdown(); } } input = ui.InputString(textCarrier.RxGetClassText("input_hint"), input ?? "192.168.XX.X:5555"); if (input == null) { ui.EShutdown(); } } while (!TryParse(input, out endPoint)); ui.Closing += (s, e) => { executor.CancelCurrent(); return(true); }; executor.OutputReceived += (s, e) => ui.WriteLineToDetails(e.Text); if (executor.Adb($"connect {endPoint}").ExitCode == 0) { ui.Finish(StatusMessages.Success); } else { ui.Finish(StatusMessages.Failed); } } }