List <string> RunWithAccept(ProcessArgumentBuilder builder, TimeSpan timeout, bool moveToolsToTemp = false) { var sdkManager = FindToolPath(AndroidSdkHome); if (!(sdkManager?.Exists ?? false)) { throw new FileNotFoundException("Could not locate sdkmanager", sdkManager?.FullName); } var ct = new CancellationTokenSource(); if (timeout != TimeSpan.Zero) { ct.CancelAfter(timeout); } // UGLY HACK AND DRAGONS 🐲🔥 // Basically, on windows sdkmanager.bat is in tools, but updating itself // tries to delete tools and move the new one in place after it downloads // which causes issues because sdkmanager.bat is running from that folder string sdkToolsTempDir = null; var didMoveToolsToTemp = false; if (moveToolsToTemp && RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // Get the actual tools dir var sdkToolsDir = Path.Combine(sdkManager.Directory.FullName, ".."); sdkToolsTempDir = Path.Combine(sdkToolsDir, "..", "tools-temp"); // Perform the copy CopyFilesRecursively(new DirectoryInfo(sdkToolsDir), new DirectoryInfo(sdkToolsTempDir)); // Set the sdkmanager.bat path to the new temp location sdkManager = new FileInfo(Path.Combine(sdkToolsTempDir, "bin", "sdkmanager.bat")); didMoveToolsToTemp = true; } var p = new ProcessRunner(sdkManager, builder, ct.Token, true); while (!p.HasExited) { Thread.Sleep(250); try { p.StandardInputWriteLine("y"); } catch { } } var r = p.WaitForExit(); // If we used the ugly hack above, let's cleanup the temp copy if (didMoveToolsToTemp) { Directory.Delete(sdkToolsTempDir, true); } return(r.StandardOutput); }
public int WaitForExit() { result = process.WaitForExit(); if (result.ExitCode != 0) { throw new SdkToolFailedExitException("avdmanager", result.ExitCode, result.StandardError, result.StandardOutput); } return(result.ExitCode); }
internal ProcessResult RunAdb(DirectoryInfo androidSdkHome, ProcessArgumentBuilder builder, System.Threading.CancellationToken cancelToken) { var adbToolPath = sdkTool.FindToolPath(androidSdkHome); if (adbToolPath == null || !File.Exists(adbToolPath.FullName)) { throw new FileNotFoundException("Could not find adb", adbToolPath?.FullName); } var p = new ProcessRunner(adbToolPath, builder, cancelToken); return(p.WaitForExit()); }
List <string> Run(ProcessArgumentBuilder builder) { var sdkManager = FindToolPath(AndroidSdkHome); if (!(sdkManager?.Exists ?? false)) { throw new FileNotFoundException("Could not locate sdkmanager", sdkManager?.FullName); } var p = new ProcessRunner(sdkManager, builder); var r = p.WaitForExit(); return(r.StandardOutput); }
bool TryGetJavaJdkInfo(string javacFilename, out JdkInfo javaJdkInfo) { var args = new ProcessArgumentBuilder(); args.Append("-version"); var p = new ProcessRunner(new FileInfo(javacFilename), args); var result = p.WaitForExit(); var m = rxJavaCVersion.Match(result.GetOutput() ?? string.Empty); var v = m?.Value; if (!string.IsNullOrEmpty(v)) { javaJdkInfo = new JdkInfo(javacFilename, v); return(true); } javaJdkInfo = default; return(false); }
IEnumerable <string> run(params string[] args) { var adbManager = FindToolPath(AndroidSdkHome); if (adbManager == null || !File.Exists(adbManager.FullName)) { throw new FileNotFoundException("Could not find avdmanager", adbManager?.FullName); } var builder = new ProcessArgumentBuilder(); foreach (var arg in args) { builder.Append(arg); } var p = new ProcessRunner(adbManager, builder); var r = p.WaitForExit(); return(r.StandardOutput); }
public int WaitForExit() { result = process.WaitForExit(); return(result.ExitCode); }