fixes found when running through the getting started process
diff --git a/packages/flutter_tools/lib/src/android/adb.dart b/packages/flutter_tools/lib/src/android/adb.dart
index e8b0f94..f5a5840 100644
--- a/packages/flutter_tools/lib/src/android/adb.dart
+++ b/packages/flutter_tools/lib/src/android/adb.dart
@@ -181,9 +181,8 @@
       }
     }
 
-    // Convert `Nexus_7` / `Nexus_5X` style names to `Nexus 7` ones.
     if (modelID != null)
-      modelID = modelID.replaceAll('_', ' ');
+      modelID = cleanAdbDeviceName(modelID);
   }
 
   static final RegExp deviceRegex = new RegExp(r'^(\S+)\s+(\S+)(.*)');
@@ -235,6 +234,16 @@
   }
 }
 
+String cleanAdbDeviceName(String name) {
+  // Some emulators use `___` in the name as separators.
+  name = name.replaceAll('___', ', ');
+
+  // Convert `Nexus_7` / `Nexus_5X` style names to `Nexus 7` ones.
+  name = name.replaceAll('_', ' ');
+
+  return name;
+}
+
 List<int> _createAdbRequest(String payload) {
   List<int> data = payload.codeUnits;
 
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 0271f3a..b67000a 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -23,7 +23,10 @@
 // Perhaps something like `flutter config --android-home=foo/bar`.
 
 /// Locate ADB. Prefer to use one from an Android SDK, if we can locate that.
-String getAdbPath() {
+String getAdbPath([AndroidSdk existingSdk]) {
+  if (existingSdk?.adbPath != null)
+    return existingSdk.adbPath;
+
   AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
 
   if (sdk?.latestVersion == null) {
diff --git a/packages/flutter_tools/lib/src/android/device_android.dart b/packages/flutter_tools/lib/src/android/device_android.dart
index 0f7c4d0..5a3ec9c 100644
--- a/packages/flutter_tools/lib/src/android/device_android.dart
+++ b/packages/flutter_tools/lib/src/android/device_android.dart
@@ -8,6 +8,7 @@
 import 'package:crypto/crypto.dart';
 import 'package:path/path.dart' as path;
 
+import '../android/android_sdk.dart';
 import '../application_package.dart';
 import '../base/common.dart';
 import '../base/globals.dart';
@@ -17,6 +18,7 @@
 import '../device.dart';
 import '../flx.dart' as flx;
 import '../toolchain.dart';
+import 'adb.dart';
 import 'android.dart';
 
 const String _defaultAdbPath = 'adb';
@@ -249,7 +251,12 @@
     if (route != null)
       cmd.addAll(<String>['--es', 'route', route]);
     cmd.add(apk.launchActivity);
-    runCheckedSync(cmd);
+    String result = runCheckedSync(cmd);
+    // This invocation returns 0 even when it fails.
+    if (result.contains('Error: ')) {
+      printError(result.trim());
+      return false;
+    }
     return true;
   }
 
@@ -410,10 +417,10 @@
 }
 
 List<AndroidDevice> getAdbDevices() {
-  if (androidSdk == null)
+  String adbPath = getAdbPath(androidSdk);
+  if (adbPath == null)
     return <AndroidDevice>[];
 
-  String adbPath = androidSdk.adbPath;
   List<AndroidDevice> devices = [];
 
   List<String> output = runSync(<String>[adbPath, 'devices', '-l']).trim().split('\n');
@@ -445,9 +452,8 @@
       String modelID = match[3];
       String deviceCodeName = match[4];
 
-      // Convert `Nexus_7` / `Nexus_5X` style names to `Nexus 7` ones.
       if (modelID != null)
-        modelID = modelID.replaceAll('_', ' ');
+        modelID = cleanAdbDeviceName(modelID);
 
       devices.add(new AndroidDevice(
         deviceID,