Revert "Revert "Replace jarsigner with apksigner" (#8164)" (#8320)

This reverts commit 70d7fe3a0dede9f3556fda8fe018dc4ed4a08490.

The Java version missmatch on the bots has been resolved.
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index d590d65..7c00697 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -24,6 +24,7 @@
 // $ANDROID_HOME/build-tools/22.0.1/aapt
 // $ANDROID_HOME/build-tools/23.0.2/aapt
 // $ANDROID_HOME/build-tools/24.0.0-preview/aapt
+// $ANDROID_HOME/build-tools/25.0.2/apksigner
 
 // $ANDROID_HOME/platforms/android-22/android.jar
 // $ANDROID_HOME/platforms/android-23/android.jar
@@ -225,6 +226,8 @@
 
   String get zipalignPath => getBuildToolsPath('zipalign');
 
+  String get apksignerPath => getBuildToolsPath('apksigner');
+
   List<String> validateSdkWellFormed() {
     if (_exists(androidJarPath) != null)
       return <String>[_exists(androidJarPath)];
@@ -238,6 +241,9 @@
     if (_canRun(zipalignPath) != null)
       return <String>[_canRun(zipalignPath)];
 
+    if (_canRun(apksignerPath) != null)
+      return <String>[_canRun(apksignerPath) + '\napksigner requires Android SDK Build Tools 24.0.3 or newer.'];
+
     return <String>[];
   }
 
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 0999d61..a81cdad 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import '../base/io.dart';
-import '../base/os.dart';
 import '../base/platform.dart';
 import '../base/process_manager.dart';
 import '../doctor.dart';
@@ -63,11 +62,11 @@
       }
 
       List<String> validationResult = androidSdk.validateSdkWellFormed();
-      // Empty result means SDK is well formed.
 
       if (validationResult.isEmpty) {
+        // Empty result means SDK is well formed.
+        // The SDK also requires a valid Java JDK installation.
         const String _kJdkDownload = 'https://www.oracle.com/technetwork/java/javase/downloads/';
-
         String javaVersion;
 
         try {
@@ -82,27 +81,20 @@
         } catch (error) {
         }
 
-        if (javaVersion != null) {
-          messages.add(new ValidationMessage(javaVersion));
-
-          if (os.which('jarsigner') == null) {
-            messages.add(new ValidationMessage.error(
-              'The jarsigner utility was not found; this is used to build Android APKs. You may need to install\n'
-              'or re-install the Java JDK: $_kJdkDownload.'
-            ));
-          } else {
-            type = ValidationType.installed;
-          }
-        } else {
+        if (javaVersion == null) {
           messages.add(new ValidationMessage.error(
-            'No Java Development Kit (JDK) found; you can download the JDK from $_kJdkDownload.'
+              'No Java Development Kit (JDK) found; you can download the JDK from $_kJdkDownload.'
           ));
+        } else {
+          type = ValidationType.installed;
         }
       } else {
         messages.addAll(validationResult.map((String message) {
           return new ValidationMessage.error(message);
         }));
-        messages.add(new ValidationMessage('Try re-installing or updating your Android SDK.'));
+        messages.add(new ValidationMessage(
+          'Try re-installing or updating your Android SDK,\n'
+          'visit https://flutter.io/setup/#android-setup for detailed instructions.'));
       }
     }