Request the user upgrade if the Android SDK version is 24 (#8462)
* Request the user upgrade if the Android SDK version is 24
* Update android_sdk_test.dart
* Update android_sdk.dart
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 0a7389f..c3fec0d 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -2,14 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:pub_semver/pub_semver.dart';
-
import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart';
import '../base/os.dart';
import '../base/platform.dart';
import '../base/process_manager.dart';
+import '../base/version.dart';
import '../globals.dart';
AndroidSdk get androidSdk => context[AndroidSdk];
@@ -36,6 +35,9 @@
'android-stable': 24,
};
+/// The minimum Android SDK version we support.
+const int minimumAndroidSdkVersion = 25;
+
/// Locate ADB. Prefer to use one from an Android SDK, if we can locate that.
/// This should be used over accessing androidSdk.adbPath directly because it
/// will work for those users who have Android Platform Tools installed but
@@ -188,7 +190,7 @@
return new AndroidSdkVersion(
this,
platformVersionName: platformName,
- buildToolsVersionName: buildToolsVersion.toString()
+ buildToolsVersion: buildToolsVersion
);
}).where((AndroidSdkVersion version) => version != null).toList();
@@ -204,12 +206,13 @@
class AndroidSdkVersion implements Comparable<AndroidSdkVersion> {
AndroidSdkVersion(this.sdk, {
this.platformVersionName,
- this.buildToolsVersionName
+ this.buildToolsVersion,
});
final AndroidSdk sdk;
final String platformVersionName;
- final String buildToolsVersionName;
+ final Version buildToolsVersion;
+ String get buildToolsVersionName => buildToolsVersion.toString();
int get sdkLevel {
if (_namedVersionMap.containsKey(platformVersionName))
@@ -229,6 +232,10 @@
String get apksignerPath => getBuildToolsPath('apksigner');
List<String> validateSdkWellFormed({bool requireApkSigner = true}) {
+ if (buildToolsVersion.major < minimumAndroidSdkVersion) {
+ return <String>['Minimum supported Android SDK version is $minimumAndroidSdkVersion '
+ 'but this system has ${buildToolsVersion.major}. Please upgrade.'];
+ }
if (_exists(androidJarPath) != null)
return <String>[_exists(androidJarPath)];
diff --git a/packages/flutter_tools/lib/src/base/version.dart b/packages/flutter_tools/lib/src/base/version.dart
index 5ef31f6..2f428ac 100644
--- a/packages/flutter_tools/lib/src/base/version.dart
+++ b/packages/flutter_tools/lib/src/base/version.dart
@@ -58,6 +58,20 @@
}
}
+ /// Returns the primary version out of a list of candidates.
+ ///
+ /// This is the highest-numbered stable version.
+ static Version primary(List<Version> versions) {
+ Version primary;
+ for (Version version in versions) {
+ if (primary == null || (version > primary)) {
+ primary = version;
+ }
+ }
+ return primary;
+ }
+
+
static Version get unknown => new Version(0, 0, 0, text: 'unknown');
/// Two [Version]s are equal if their version numbers are. The version text
diff --git a/packages/flutter_tools/lib/src/ios/ios_workflow.dart b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
index 3154fab..5549284 100644
--- a/packages/flutter_tools/lib/src/ios/ios_workflow.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
@@ -4,12 +4,11 @@
import 'dart:async';
-import 'package:pub_semver/pub_semver.dart' show Version;
-
import '../base/io.dart';
import '../base/os.dart';
import '../base/platform.dart';
import '../base/process.dart';
+import '../base/version.dart';
import '../doctor.dart';
import 'mac.dart';