Improves SDK Search Error Messages (#23884)

* Improves error message and adds test.
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 4c9ea22..2f7ffdb 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -317,14 +317,36 @@
 
   String get avdManagerPath => getAvdManagerPath();
 
+  Directory get _platformsDir => fs.directory(fs.path.join(directory, 'platforms'));
+
+  Iterable<Directory> get _platforms {
+    Iterable<Directory> platforms = <Directory>[];
+    if (_platformsDir.existsSync()) {
+      platforms = _platformsDir
+        .listSync()
+        .whereType<Directory>();
+    }
+    return platforms;
+  }
+
   /// Validate the Android SDK. This returns an empty list if there are no
   /// issues; otherwise, it returns a list of issues found.
   List<String> validateSdkWellFormed() {
     if (!processManager.canRun(adbPath))
       return <String>['Android SDK file not found: $adbPath.'];
 
-    if (sdkVersions.isEmpty || latestVersion == null)
-      return <String>['Android SDK is missing command line tools; download from https://goo.gl/XxQghQ'];
+    if (sdkVersions.isEmpty || latestVersion == null) {
+      final StringBuffer msg = StringBuffer('No valid Android SDK platforms found in ${_platformsDir.path}.');
+      if (_platforms.isEmpty) {
+        msg.write(' Directory was empty.');
+      } else {
+        msg.write(' Candidates were:\n');
+        msg.write(_platforms
+          .map((Directory dir) => '  - ${dir.basename}')
+          .join('\n'));
+      }
+      return <String>[msg.toString()];
+    }
 
     return latestVersion.validateSdkWellFormed();
   }
@@ -355,15 +377,6 @@
   }
 
   void _init() {
-    Iterable<Directory> platforms = <Directory>[]; // android-22, ...
-
-    final Directory platformsDir = fs.directory(fs.path.join(directory, 'platforms'));
-    if (platformsDir.existsSync()) {
-      platforms = platformsDir
-        .listSync()
-        .whereType<Directory>();
-    }
-
     List<Version> buildTools = <Version>[]; // 19.1.0, 22.0.1, ...
 
     final Directory buildToolsDir = fs.directory(fs.path.join(directory, 'build-tools'));
@@ -382,7 +395,7 @@
     }
 
     // Match up platforms with the best corresponding build-tools.
-    _sdkVersions = platforms.map<AndroidSdkVersion>((Directory platformDir) {
+    _sdkVersions = _platforms.map<AndroidSdkVersion>((Directory platformDir) {
       final String platformName = platformDir.basename;
       int platformVersion;