runSdkManager function
Implementation
Future<ProcessResult> runSdkManager(List<String> args) async {
final environment = Map<String, String>.from(Platform.environment);
final javaHome = Platform.environment['JAVA_HOME'];
if (javaHome != null) {
environment['JAVA_HOME'] = javaHome;
}
final process = await Process.start(
'sdkmanager',
['--install', ...args],
environment: environment,
runInShell: false,
);
// Pre-answer any prompt with yes so sdkmanager can proceed.
for (var i = 0; i < 20; i++) {
process.stdin.writeln('y');
}
await process.stdin.close();
final stdoutBuffer = StringBuffer();
final stderrBuffer = StringBuffer();
final stdoutDone = process.stdout.transform(utf8.decoder).forEach((chunk) {
stdoutBuffer.write(chunk);
stdout.write(chunk);
});
final stderrDone = process.stderr.transform(utf8.decoder).forEach((chunk) {
stderrBuffer.write(chunk);
stderr.write(chunk);
});
final exitCode = await process.exitCode.timeout(
const Duration(minutes: 30),
onTimeout: () {
process.kill(ProcessSignal.sigkill);
return -1;
},
);
await Future.wait([stdoutDone, stderrDone]);
return ProcessResult(
process.pid,
exitCode,
stdoutBuffer.toString(),
stderrBuffer.toString(),
);
}