Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
            public int WaitForExit()
            {
                result = process.WaitForExit();

                if (result.ExitCode != 0)
                {
                    throw new SdkToolFailedExitException("avdmanager", result.ExitCode, result.StandardError, result.StandardOutput);
                }

                return(result.ExitCode);
            }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
            public int WaitForExit()
            {
                result = process.WaitForExit();

                return(result.ExitCode);
            }