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