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');
}
}