Move Android doctor SDK check to 29 and Cirrus images to 30 (#63517)
diff --git a/.cirrus.yml b/.cirrus.yml
index 4aea662..fba45ba 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -261,7 +261,7 @@
# WINDOWS SHARDS
task:
windows_container:
- image: cirrusci/android-sdk:28-windowsservercore-2019
+ image: cirrusci/android-sdk:30-windowsservercore-2019
os_version: 2019
cpu: $CPU
memory: $MEMORY
diff --git a/dev/ci/docker_linux/Dockerfile b/dev/ci/docker_linux/Dockerfile
index 9cfd321..06b3313 100644
--- a/dev/ci/docker_linux/Dockerfile
+++ b/dev/ci/docker_linux/Dockerfile
@@ -10,7 +10,7 @@
# for performing pushes to production, and so this image is quite a bit larger
# than strictly needed for just building Flutter apps.
-# Last manual update 2020-08-05 (changing this comment will re-build image)
+# Last manual update 2020-08-11 (changing this comment will re-build image)
# Note: updating past stretch (Debian 9) will bump Java past version 8,
# which will break the Android SDK.
@@ -80,7 +80,7 @@
# (it prints install progress WAY too often).
RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "tools" > /dev/null
RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "build-tools;28.0.3" > /dev/null
-RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "platforms;android-28" > /dev/null
+RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "platforms;android-30" > /dev/null
RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "platform-tools" > /dev/null
RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "extras;android;m2repository" > /dev/null
RUN yes "y" | "${ANDROID_TOOLS_ROOT}/tools/bin/sdkmanager" "extras;google;m2repository" > /dev/null
diff --git a/packages/flutter_tools/ide_templates/intellij/dev/manual_tests/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/dev/manual_tests/android.iml.copy.tmpl
index 462b903..79f6223 100644
--- a/packages/flutter_tools/ide_templates/intellij/dev/manual_tests/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/dev/manual_tests/android.iml.copy.tmpl
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$/android">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/ide_templates/intellij/examples/flutter_gallery/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/examples/flutter_gallery/android.iml.copy.tmpl
index 462b903..79f6223 100644
--- a/packages/flutter_tools/ide_templates/intellij/examples/flutter_gallery/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/examples/flutter_gallery/android.iml.copy.tmpl
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$/android">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/ide_templates/intellij/examples/hello_world/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/examples/hello_world/android.iml.copy.tmpl
index 462b903..79f6223 100644
--- a/packages/flutter_tools/ide_templates/intellij/examples/hello_world/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/examples/hello_world/android.iml.copy.tmpl
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$/android">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/ide_templates/intellij/examples/platform_channel/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/examples/platform_channel/android.iml.copy.tmpl
index 462b903..79f6223 100644
--- a/packages/flutter_tools/ide_templates/intellij/examples/platform_channel/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/examples/platform_channel/android.iml.copy.tmpl
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$/android">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/ide_templates/intellij/examples/platform_view/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/examples/platform_view/android.iml.copy.tmpl
index 1c0f432..5f07b2c 100644
--- a/packages/flutter_tools/ide_templates/intellij/examples/platform_view/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/examples/platform_view/android.iml.copy.tmpl
@@ -19,7 +19,7 @@
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/android/gen" isTestSource="false" generated="true" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/ide_templates/intellij/examples/stocks/android.iml.copy.tmpl b/packages/flutter_tools/ide_templates/intellij/examples/stocks/android.iml.copy.tmpl
index 462b903..79f6223 100644
--- a/packages/flutter_tools/ide_templates/intellij/examples/stocks/android.iml.copy.tmpl
+++ b/packages/flutter_tools/ide_templates/intellij/examples/stocks/android.iml.copy.tmpl
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$/android">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index a48801a..c22cae8 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -22,9 +22,6 @@
final RegExp _numberedAndroidPlatformRe = RegExp(r'^android-([0-9]+)$');
final RegExp _sdkVersionRe = RegExp(r'^ro.build.version.sdk=([0-9]+)$');
-/// 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
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 5c2e1af..4b1cf53 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -25,7 +25,7 @@
import 'android_sdk.dart';
import 'android_studio.dart';
-const int kAndroidSdkMinVersion = 28;
+const int kAndroidSdkMinVersion = 29;
final Version kAndroidJavaMinVersion = Version(1, 8, 0);
final Version kAndroidSdkBuildToolsMinVersion = Version(28, 0, 3);
@@ -178,7 +178,7 @@
String sdkVersionText;
if (_androidSdk.latestVersion != null) {
- if (_androidSdk.latestVersion.sdkLevel < 28 || _androidSdk.latestVersion.buildToolsVersion < kAndroidSdkBuildToolsMinVersion) {
+ if (_androidSdk.latestVersion.sdkLevel < kAndroidSdkMinVersion || _androidSdk.latestVersion.buildToolsVersion < kAndroidSdkBuildToolsMinVersion) {
messages.add(ValidationMessage.error(
_userMessages.androidSdkBuildToolsOutdated(
_androidSdk.sdkManagerPath,
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 94ab4bc9..e81d3d4 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -9,7 +9,7 @@
import 'package:yaml/yaml.dart';
import '../android/android.dart' as android_common;
-import '../android/android_sdk.dart' as android_sdk;
+import '../android/android_workflow.dart';
import '../android/gradle_utils.dart' as gradle;
import '../base/common.dart';
import '../base/context.dart';
@@ -764,7 +764,7 @@
'description': projectDescription,
'dartSdk': '$flutterRoot/bin/cache/dart-sdk',
'androidMinApiLevel': android_common.minApiLevel,
- 'androidSdkVersion': android_sdk.minimumAndroidSdkVersion,
+ 'androidSdkVersion': kAndroidSdkMinVersion,
'withDriverTest': renderDriverTest,
'pluginClass': pluginClass,
'pluginClassSnakeCase': pluginClassSnakeCase,
diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
index b591015..7df4f1e 100755
--- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
+++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
@@ -2007,6 +2007,24 @@
expect(env['flutter'].allows(Version(1, 19, 0)), false);
});
+ testUsingContext('default app uses Android sdk 29', () async {
+ Cache.flutterRoot = '../..';
+ when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision);
+ when(mockFlutterVersion.channel).thenReturn(frameworkChannel);
+
+ final CreateCommand command = CreateCommand();
+ final CommandRunner<void> runner = createTestCommandRunner(command);
+
+ await runner.run(<String>['create', '--no-pub', projectDir.path]);
+
+ expect(globals.fs.isFileSync('${projectDir.path}/android/app/build.gradle'), true);
+
+ final String buildContent = await globals.fs.file(projectDir.path + '/android/app/build.gradle').readAsString();
+
+ expect(buildContent.contains('compileSdkVersion 29'), true);
+ expect(buildContent.contains('targetSdkVersion 29'), true);
+ });
+
}
Future<void> _createProject(
diff --git a/packages/flutter_tools/test/general.shard/android/android_workflow_test.dart b/packages/flutter_tools/test/general.shard/android/android_workflow_test.dart
index 159b17b..6ea70c4 100644
--- a/packages/flutter_tools/test/general.shard/android/android_workflow_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/android_workflow_test.dart
@@ -219,7 +219,7 @@
when(sdk.platformToolsAvailable).thenReturn(true);
// Test with invalid SDK and build tools
- when(mockSdkVersion.sdkLevel).thenReturn(26);
+ when(mockSdkVersion.sdkLevel).thenReturn(28);
when(mockSdkVersion.buildToolsVersion).thenReturn(Version(26, 0, 3));
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
when(sdk.latestVersion).thenReturn(mockSdkVersion);
@@ -250,7 +250,7 @@
);
// Test with valid SDK but invalid build tools
- when(mockSdkVersion.sdkLevel).thenReturn(28);
+ when(mockSdkVersion.sdkLevel).thenReturn(29);
when(mockSdkVersion.buildToolsVersion).thenReturn(Version(28, 0, 2));
validationResult = await androidValidator.validate();
@@ -279,7 +279,7 @@
// Mock a pass through scenario to reach _checkJavaVersion()
when(sdk.licensesAvailable).thenReturn(true);
when(sdk.platformToolsAvailable).thenReturn(true);
- when(mockSdkVersion.sdkLevel).thenReturn(28);
+ when(mockSdkVersion.sdkLevel).thenReturn(29);
when(mockSdkVersion.buildToolsVersion).thenReturn(Version(28, 0, 3));
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
when(sdk.latestVersion).thenReturn(mockSdkVersion);