Ensure errors launching emulators are exposed to the daemon (#18446)
diff --git a/packages/flutter_tools/lib/src/android/android_emulator.dart b/packages/flutter_tools/lib/src/android/android_emulator.dart index 0379655..adb1ee7 100644 --- a/packages/flutter_tools/lib/src/android/android_emulator.dart +++ b/packages/flutter_tools/lib/src/android/android_emulator.dart
@@ -11,7 +11,6 @@ import '../base/file_system.dart'; import '../base/process.dart'; import '../emulator.dart'; -import '../globals.dart'; import 'android_sdk.dart'; class AndroidEmulators extends EmulatorDiscovery { @@ -41,22 +40,20 @@ String get label => _properties['avd.ini.displayname']; @override - Future<bool> launch() async { - final Future<bool> launchResult = + Future<void> launch() async { + final Future<void> launchResult = runAsync(<String>[getEmulatorPath(), '-avd', id]) .then((RunResult runResult) { if (runResult.exitCode != 0) { - printError('$runResult'); - return false; + throw '$runResult'; } - return true; }); // emulator continues running on a successful launch so if we // haven't quit within 3 seconds we assume that's a success and just // return. - return Future.any<bool>(<Future<bool>>[ + return Future.any<void>(<Future<void>>[ launchResult, - new Future<void>.delayed(const Duration(seconds: 3)).then((_) => true) + new Future<void>.delayed(const Duration(seconds: 3)) ]); } }
diff --git a/packages/flutter_tools/lib/src/commands/emulators.dart b/packages/flutter_tools/lib/src/commands/emulators.dart index 4909748..78b1284 100644 --- a/packages/flutter_tools/lib/src/commands/emulators.dart +++ b/packages/flutter_tools/lib/src/commands/emulators.dart
@@ -49,7 +49,7 @@ } } - Future<Null> _launchEmulator(String id) async { + Future<void> _launchEmulator(String id) async { final List<Emulator> emulators = await emulatorManager.getEmulatorsMatching(id); @@ -61,11 +61,16 @@ "More than one emulator matches '$id':", ); } else { - await emulators.first.launch(); + try { + await emulators.first.launch(); + } + catch (e) { + printError(e); + } } } - Future<Null> _listEmulators(String searchText) async { + Future<void> _listEmulators(String searchText) async { final List<Emulator> emulators = searchText == null ? await emulatorManager.getAllAvailableEmulators() : await emulatorManager.getEmulatorsMatching(searchText);
diff --git a/packages/flutter_tools/lib/src/emulator.dart b/packages/flutter_tools/lib/src/emulator.dart index d899210..81bbe2a 100644 --- a/packages/flutter_tools/lib/src/emulator.dart +++ b/packages/flutter_tools/lib/src/emulator.dart
@@ -95,7 +95,7 @@ return id == other.id; } - Future<bool> launch(); + Future<void> launch(); @override String toString() => name;
diff --git a/packages/flutter_tools/lib/src/ios/ios_emulators.dart b/packages/flutter_tools/lib/src/ios/ios_emulators.dart index c18bd71..cd85c2f 100644 --- a/packages/flutter_tools/lib/src/ios/ios_emulators.dart +++ b/packages/flutter_tools/lib/src/ios/ios_emulators.dart
@@ -36,8 +36,8 @@ String get label => null; @override - Future<bool> launch() async { - Future<bool> launchSimulator(List<String> additionalArgs) async { + Future<void> launch() async { + Future<void> launchSimulator(List<String> additionalArgs) async { final List<String> args = <String>['open'] .followedBy(additionalArgs) .followedBy(<String>['-a', getSimulatorPath()]);
diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart index 30b411a..be36d5f 100644 --- a/packages/flutter_tools/test/emulator_test.dart +++ b/packages/flutter_tools/test/emulator_test.dart
@@ -62,7 +62,7 @@ final String label; @override - Future<bool> launch() { + Future<void> launch() { throw new UnimplementedError('Not implemented in Mock'); } }