Wrap dart:convert to track utf8 decode failures (#26650)
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 9814318..9f9833f 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:convert'; import 'package:meta/meta.dart'; @@ -18,6 +17,7 @@ import '../base/process.dart'; import '../base/process_manager.dart'; import '../build_info.dart'; +import '../convert.dart'; import '../device.dart'; import '../globals.dart'; import '../project.dart'; @@ -681,7 +681,9 @@ _timeOrigin = null; runCommand(device.adbCommandForDevice(args)).then<void>((Process process) { _process = process; - const Utf8Decoder decoder = Utf8Decoder(allowMalformed: true); + // We expect logcat streams to occasionally contain invalid utf-8, + // see: https://github.com/flutter/flutter/pull/8864. + const Utf8Decoder decoder = Utf8Decoder(reportErrors: false); _process.stdout.transform<String>(decoder).transform<String>(const LineSplitter()).listen(_onLine); _process.stderr.transform<String>(decoder).transform<String>(const LineSplitter()).listen(_onLine); _process.exitCode.whenComplete(() {
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart index 39f90f5..f97cc5b 100644 --- a/packages/flutter_tools/lib/src/android/android_sdk.dart +++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:convert'; - import 'package:meta/meta.dart'; import '../base/common.dart'; @@ -15,6 +13,7 @@ import '../base/process.dart'; import '../base/process_manager.dart'; import '../base/version.dart'; +import '../convert.dart'; import '../globals.dart'; import 'android_studio.dart' as android_studio;
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart index dfbc083..00431f0 100644 --- a/packages/flutter_tools/lib/src/android/android_workflow.dart +++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:convert'; import '../base/common.dart'; import '../base/context.dart'; @@ -14,6 +13,7 @@ import '../base/user_messages.dart'; import '../base/utils.dart'; import '../base/version.dart'; +import '../convert.dart'; import '../doctor.dart'; import '../globals.dart'; import 'android_sdk.dart'; @@ -256,13 +256,15 @@ environment: androidSdk.sdkManagerEnv, ); process.stdin.write('n\n'); + // We expect logcat streams to occasionally contain invalid utf-8, + // see: https://github.com/flutter/flutter/pull/8864. final Future<void> output = process.stdout - .transform<String>(const Utf8Decoder(allowMalformed: true)) + .transform<String>(const Utf8Decoder(reportErrors: false)) .transform<String>(const LineSplitter()) .listen(_handleLine) .asFuture<void>(null); final Future<void> errors = process.stderr - .transform<String>(const Utf8Decoder(allowMalformed: true)) + .transform<String>(const Utf8Decoder(reportErrors: false)) .transform<String>(const LineSplitter()) .listen(_handleLine) .asFuture<void>(null);
diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index a13d137..9cc182d 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart
@@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:convert'; import 'package:archive/archive.dart'; import 'package:meta/meta.dart'; @@ -20,6 +19,7 @@ import '../base/utils.dart'; import '../build_info.dart'; import '../cache.dart'; +import '../convert.dart'; import '../flutter_manifest.dart'; import '../globals.dart'; import '../project.dart';