diff --git a/packages/flutter_tools/lib/src/ohos/hvigor.dart b/packages/flutter_tools/lib/src/ohos/hvigor.dart index 76765f4b1593643018e0114239a7c46a065bdb99..9619e58d9c2be018bceba97bdb8a57979255e80a 100644 --- a/packages/flutter_tools/lib/src/ohos/hvigor.dart +++ b/packages/flutter_tools/lib/src/ohos/hvigor.dart @@ -13,6 +13,7 @@ * limitations under the License. */ +import 'dart:convert'; import 'dart:io'; import 'package:json5/json5.dart'; @@ -157,15 +158,53 @@ void replaceKey(File file, File target, String key, String value) { target.writeAsStringSync(content); } +Future invokeCmd( + {required List command, + required String workDirectory, + required ProcessManager processManager, + Logger? logger}) async { + final String cmd = command.join(' '); + logger?.printTrace('Invoke cmd: $cmd'); + final Process server = + await processManager.start(command, workingDirectory: workDirectory); + + server.stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + if (line.toLowerCase().contains('error:')) { + logger?.printError(line); + } else { + logger?.printTrace(line); + } + }); + server.stdout + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + logger?.printTrace(line); + }); + final int exitCode = await server.exitCode; + if (exitCode == 0) { + logger?.printTrace('Invoke success: $cmd'); + } else { + logger?.printError('Invoke error: $cmd'); + } + return exitCode; +} + ///hvigorw任务 Future hvigorwTask(List taskCommand, {required ProcessUtils processUtils, required String workPath, required String hvigorwPath, Logger? logger}) async { - final RunResult result = processUtils.runSync(taskCommand, - workingDirectory: workPath, throwOnError: true); - return result.exitCode; + final int code = await invokeCmd( + command: taskCommand, + workDirectory: workPath, + processManager: globals.processManager, + logger: logger); + return code; } Future assembleHap(