Detect Android SDK 28/28.0.3 (#26942) * Detect Android SDK 28/28.0.3 * revert minimumAndroidSdkVersion const change
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart index d1978a2..dfbc083 100644 --- a/packages/flutter_tools/lib/src/android/android_workflow.dart +++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -18,6 +18,9 @@ import '../globals.dart'; import 'android_sdk.dart'; +const int kAndroidSdkMinVersion = 28; +final Version kAndroidSdkBuildToolsMinVersion = Version(28, 0, 3); + AndroidWorkflow get androidWorkflow => context[AndroidWorkflow]; AndroidValidator get androidValidator => context[AndroidValidator]; AndroidLicenseValidator get androidLicenseValidator => context[AndroidLicenseValidator]; @@ -110,11 +113,19 @@ String sdkVersionText; if (androidSdk.latestVersion != null) { + if (androidSdk.latestVersion.sdkLevel < 28 || androidSdk.latestVersion.buildToolsVersion < kAndroidSdkBuildToolsMinVersion) { + messages.add(ValidationMessage.error( + userMessages.androidSdkBuildToolsOutdated(androidSdk.sdkManagerPath, kAndroidSdkMinVersion, kAndroidSdkBuildToolsMinVersion.toString())), + ); + return ValidationResult(ValidationType.missing, messages); + } sdkVersionText = userMessages.androidStatusInfo(androidSdk.latestVersion.buildToolsVersionName); messages.add(ValidationMessage(userMessages.androidSdkPlatformToolsVersion( androidSdk.latestVersion.platformName, androidSdk.latestVersion.buildToolsVersionName))); + } else { + messages.add(ValidationMessage.error(userMessages.androidMissingSdkInstructions(kAndroidHome))); } if (platform.environment.containsKey(kAndroidHome)) { @@ -271,7 +282,7 @@ final Version sdkManagerVersion = Version.parse(androidSdk.sdkManagerVersion); if (sdkManagerVersion == null || sdkManagerVersion.major < 26) { // SDK manager is found, but needs to be updated. - throwToolExit(userMessages.androidSdkOutdated(androidSdk.sdkManagerPath)); + throwToolExit(userMessages.androidSdkManagerOutdated(androidSdk.sdkManagerPath)); } final Process process = await runCommand(
diff --git a/packages/flutter_tools/lib/src/base/user_messages.dart b/packages/flutter_tools/lib/src/base/user_messages.dart index 2248d11..813247c 100644 --- a/packages/flutter_tools/lib/src/base/user_messages.dart +++ b/packages/flutter_tools/lib/src/base/user_messages.dart
@@ -76,7 +76,7 @@ String get androidLicensesSome => 'Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses'; String get androidLicensesNone => 'Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses'; String get androidLicensesUnknown => 'Android license status unknown.'; - String androidSdkOutdated(String managerPath) => + String androidSdkManagerOutdated(String managerPath) => 'A newer version of the Android SDK is required. To update, run:\n' '$managerPath --update\n'; String androidLicensesTimeout(String managerPath) => 'Intentionally killing $managerPath'; @@ -85,6 +85,11 @@ 'Android sdkmanager tool not found ($sdkManagerPath).\n' 'Try re-installing or updating your Android SDK,\n' 'visit https://flutter.io/setup/#android-setup for detailed instructions.'; + String androidSdkBuildToolsOutdated(String managerPath, int sdkMinVersion, String buildToolsMinVersion) => + 'Flutter requires Android SDK $sdkMinVersion and the Android BuildTools $buildToolsMinVersion\n' + 'To update using sdkmanager, run:\n' + ' $managerPath "platforms;android-$sdkMinVersion" "build-tools;$buildToolsMinVersion"\n' + 'or visit https://flutter.io/setup/#android-setup for detailed instructions.'; // Messages used in AndroidStudioValidator String androidStudioVersion(String version) => 'version $version';