Skip to content

Commit c54d424

Browse files
reidbakerazatech
authored andcommitted
Bump warn and error versions of agp, kotlin and gradle versions in preparation for gradle 9 (flutter#171399)
https://gradle.org/whats-new/gradle-9/ is coming and with it includes some deprecated methods. Some like flutter#171397 can be fixed by annotations and calling new methods. Some like the deprecation of minsdkversion on Variant require bumping the minimum versions to be able to compile code that will work. b/368604254 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
1 parent fda941a commit c54d424

File tree

9 files changed

+41
-220
lines changed

9 files changed

+41
-220
lines changed

dev/bots/suite_runners/run_android_java11_integration_tool_tests.dart

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,5 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'dart:io';
6-
7-
import 'package:path/path.dart' as path;
8-
9-
import '../utils.dart';
10-
11-
/// To run this test locally:
12-
///
13-
/// 1. Connect an Android device or emulator.
14-
/// 2. Run `dart pub get` in dev/bots
15-
/// 3. Set flutter to use Java 11
16-
/// flutter config --jdk-dir=<Path to java 11>
17-
/// On a Mac you can run `/usr/libexec/java_home -V1 to find the installed
18-
/// versions of java. Remember to clear this value after testing.
19-
/// `flutter config --jdk-dir=`
20-
/// 4. Run the following command from the root of the Flutter repository:
21-
///
22-
/// ```sh
23-
/// SHARD=android_java11_tool_integration_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
24-
/// ```
25-
Future<void> androidJava11IntegrationToolTestsRunner() async {
26-
final String toolsPath = path.join(flutterRoot, 'packages', 'flutter_tools');
27-
28-
final List<String> allTests =
29-
Directory(path.join(toolsPath, 'test', 'android_java11_integration.shard'))
30-
.listSync(recursive: true)
31-
.whereType<File>()
32-
.map<String>((FileSystemEntity entry) => path.relative(entry.path, from: toolsPath))
33-
.where((String testPath) => path.basename(testPath).endsWith('_test.dart'))
34-
.toList();
35-
36-
await runDartTest(
37-
toolsPath,
38-
forceSingleCore: true,
39-
testPaths: selectIndexOfTotalSubshard<String>(allTests),
40-
collectMetrics: true,
41-
);
42-
}
5+
// Empty until ci can be modified.
6+
Future<void> androidJava11IntegrationToolTestsRunner() async {}

dev/devicelab/bin/tasks/android_java11_dependency_smoke_tests.dart

Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,12 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'dart:io';
6-
7-
import 'package:file/local.dart';
8-
import 'package:flutter_devicelab/framework/dependency_smoke_test_task_definition.dart';
95
import 'package:flutter_devicelab/framework/framework.dart';
6+
import 'package:flutter_devicelab/framework/task_result.dart';
107

11-
// Methodology:
12-
// - AGP: all versions within our support range (*).
13-
// - Gradle: The version that AGP lists as the default Gradle version for that
14-
// AGP version under the release notes, e.g.
15-
// https://developer.android.com/build/releases/past-releases/agp-8-4-0-release-notes.
16-
// - Kotlin: No methodology as of yet.
17-
// (*) - support range defined in packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts.
18-
List<VersionTuple> versionTuples = <VersionTuple>[
19-
VersionTuple(
20-
agpVersion: '7.0.1',
21-
gradleVersion: '7.0.2',
22-
kotlinVersion: '1.7.10',
23-
compileSdkVersion: '34',
24-
),
25-
VersionTuple(
26-
agpVersion: '7.1.0',
27-
gradleVersion: '7.2',
28-
kotlinVersion: '1.7.10',
29-
compileSdkVersion: '34',
30-
),
31-
VersionTuple(
32-
agpVersion: '7.2.0',
33-
gradleVersion: '7.3.3',
34-
kotlinVersion: '1.7.10',
35-
compileSdkVersion: '34',
36-
),
37-
VersionTuple(
38-
agpVersion: '7.3.0',
39-
gradleVersion: '7.4',
40-
kotlinVersion: '1.7.10',
41-
compileSdkVersion: '34',
42-
),
43-
// minSdk bump required due to a bug in the default version of r8 used by AGP
44-
// 7.4.0. See http://issuetracker.google.com/issues/357553178.
45-
VersionTuple(
46-
agpVersion: '7.4.0',
47-
gradleVersion: '7.5',
48-
kotlinVersion: '1.8.10',
49-
compileSdkVersion: '34',
50-
minSdkVersion: '24',
51-
),
52-
];
53-
54-
// This test requires a Java version less than 17 due to the intentionally low
55-
// version of Gradle. We choose 11 because this was the primary version used in
56-
// CI before 17, and hence it is also hosted on CIPD. It also overrides to
57-
// compileSdkVersion 34 because compileSdk 35 requires AGP 8.0+.
58-
// https://docs.gradle.org/current/userguide/compatibility.html
598
Future<void> main() async {
60-
/// The [FileSystem] for the integration test environment.
61-
const LocalFileSystem fileSystem = LocalFileSystem();
62-
63-
final Directory tempDir = fileSystem.systemTempDirectory.createTempSync(
64-
'flutter_android_dependency_version_tests',
65-
);
66-
await task(() {
67-
return buildFlutterApkWithSpecifiedDependencyVersions(
68-
versionTuples: versionTuples,
69-
tempDir: tempDir,
70-
localFileSystem: fileSystem,
71-
);
9+
// Empty so that version minimum can land before removal of java 11 tests ci config.
10+
await task(() async {
11+
return TaskResult.success(null);
7212
});
7313
}

dev/devicelab/bin/tasks/android_java17_dependency_smoke_tests.dart

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,25 @@ import 'package:flutter_devicelab/framework/dependency_smoke_test_task_definitio
99
import 'package:flutter_devicelab/framework/framework.dart';
1010

1111
// Methodology:
12-
// - AGP: all versions within our support range (*).
12+
// - AGP: versions within our support range (*). Minimum, Maximum known supported versions and template versions.
1313
// - Gradle: The version that AGP lists as the default Gradle version for that
1414
// AGP version under the release notes, e.g.
1515
// https://developer.android.com/build/releases/past-releases/agp-8-4-0-release-notes.
1616
// - Kotlin: No methodology as of yet.
1717
// (*) - support range defined in packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts.
1818
List<VersionTuple> versionTuples = <VersionTuple>[
19-
// compileSdk 35 requires AGP 8.1.0+, so override to compileSdk 34 for AGP 8.0.
20-
VersionTuple(
21-
agpVersion: '8.0.0',
22-
gradleVersion: '8.0',
23-
kotlinVersion: '1.8.22',
24-
compileSdkVersion: '34',
25-
),
26-
VersionTuple(agpVersion: '8.1.0', gradleVersion: '8.0', kotlinVersion: '1.8.22'),
27-
VersionTuple(agpVersion: '8.2.0', gradleVersion: '8.2', kotlinVersion: '1.8.22'),
28-
VersionTuple(agpVersion: '8.3.0', gradleVersion: '8.4', kotlinVersion: '1.8.22'),
19+
// Minimum supported
20+
VersionTuple(agpVersion: '8.1.1', gradleVersion: '8.3', kotlinVersion: '1.8.10'),
21+
// Template
22+
VersionTuple(agpVersion: '8.9.1', gradleVersion: '8.12', kotlinVersion: '2.1.0'),
23+
// Max known
24+
VersionTuple(agpVersion: '8.10.0', gradleVersion: '8.12', kotlinVersion: '2.2.0'),
25+
/* Others */
2926
VersionTuple(agpVersion: '8.4.0', gradleVersion: '8.6', kotlinVersion: '1.8.22'),
30-
VersionTuple(agpVersion: '8.5.0', gradleVersion: '8.7', kotlinVersion: '1.8.22'),
3127
VersionTuple(agpVersion: '8.6.0', gradleVersion: '8.7', kotlinVersion: '1.8.22'),
32-
VersionTuple(agpVersion: '8.7.0', gradleVersion: '8.12', kotlinVersion: '2.1.0'),
33-
];
34-
// TODO(jesswrd): Re enable the following VersionTuples after splitting the test target into multiple.
35-
// See https://github.com/flutter/flutter/issues/167495.
36-
// VersionTuple(agpVersion: '8.7.0', gradleVersion: '8.9', kotlinVersion: '1.8.22'),
37-
// VersionTuple(agpVersion: '8.7.0', gradleVersion: '8.9', kotlinVersion: '2.1.0'),
28+
VersionTuple(agpVersion: '8.7.0', gradleVersion: '8.9', kotlinVersion: '2.1.0'),
29+
VersionTuple(agpVersion: '8.10.0', gradleVersion: '8.11.1', kotlinVersion: '2.2.0'),
30+
]; // Max length is 7 entries until this test is split See https://github.com/flutter/flutter/issues/167495.
3831

3932
Future<void> main() async {
4033
/// The [FileSystem] for the integration test environment.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
gradlew
22
gradlew.bat
33
gradle/**
4+
bin/**

packages/flutter_tools/gradle/src/main/kotlin/DependencyVersionChecker.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,21 @@ object DependencyVersionChecker {
8888
// Before updating any "error" version, ensure that you have updated the corresponding
8989
// "warn" version for a full release to provide advanced warning. See
9090
// flutter.dev/go/android-dependency-versions for more.
91-
@VisibleForTesting internal val warnGradleVersion: Version = Version(7, 4, 2)
91+
@VisibleForTesting internal val warnGradleVersion: Version = Version(8, 7, 2)
9292

93-
@VisibleForTesting internal val errorGradleVersion: Version = Version(7, 0, 2)
93+
@VisibleForTesting internal val errorGradleVersion: Version = Version(8, 3, 0)
9494

95-
@VisibleForTesting internal val warnJavaVersion: JavaVersion = JavaVersion.VERSION_11
95+
@VisibleForTesting internal val warnJavaVersion: JavaVersion = JavaVersion.VERSION_17
9696

97-
@VisibleForTesting internal val errorJavaVersion: JavaVersion = JavaVersion.VERSION_1_1
97+
@VisibleForTesting internal val errorJavaVersion: JavaVersion = JavaVersion.VERSION_11
9898

99-
@VisibleForTesting internal val warnAGPVersion: AndroidPluginVersion = AndroidPluginVersion(8, 3, 0)
99+
@VisibleForTesting internal val warnAGPVersion: AndroidPluginVersion = AndroidPluginVersion(8, 6, 0)
100100

101-
@VisibleForTesting internal val errorAGPVersion: AndroidPluginVersion = AndroidPluginVersion(7, 0, 0)
101+
@VisibleForTesting internal val errorAGPVersion: AndroidPluginVersion = AndroidPluginVersion(8, 1, 1)
102102

103-
@VisibleForTesting internal val warnKGPVersion: Version = Version(1, 8, 10)
103+
@VisibleForTesting internal val warnKGPVersion: Version = Version(2, 1, 0)
104104

105-
@VisibleForTesting internal val errorKGPVersion: Version = Version(1, 7, 0)
105+
@VisibleForTesting internal val errorKGPVersion: Version = Version(1, 8, 10)
106106

107107
// If this value is changed, then make sure to change the documentation on https://docs.flutter.dev/reference/supported-platforms
108108
// Non inclusive.
@@ -183,6 +183,9 @@ object DependencyVersionChecker {
183183
it: Variant
184184
): MinSdkVersion {
185185
val agpVersion: AndroidPluginVersion? = VersionFetcher.getAGPVersion(project)
186+
// TODO(reidbaker): Remove version check as 8.3 is the minimum supported version.
187+
// Keeping the check around so that users that bypass will get the error message and not
188+
// a compile time error. See https://github.com/flutter/flutter/pull/171399
186189
return if (agpVersion != null && agpVersion.major >= 8 && agpVersion.minor >= 1) {
187190
MinSdkVersion(it.name, it.minSdk.apiLevel)
188191
} else {

packages/flutter_tools/gradle/src/test/kotlin/DependencyVersionCheckerTest.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,18 @@ private const val FAKE_PROJECT_ROOT_DIR = "/fake/root/dir"
5151

5252
// The following values will need to be modified when the corresponding "warn$DepName" versions
5353
// are updated in DependencyVersionChecker.kt
54-
private const val SUPPORTED_GRADLE_VERSION: String = "7.4.2"
55-
private val SUPPORTED_JAVA_VERSION: JavaVersion = JavaVersion.VERSION_11
56-
private val SUPPORTED_AGP_VERSION: AndroidPluginVersion = AndroidPluginVersion(8, 3, 0)
57-
private const val SUPPORTED_KGP_VERSION: String = "1.8.10"
54+
// These values should match the flutter create template values.
55+
// In //packages/flutter_tools/lib/src/android/gradle_utils.dart
56+
private const val SUPPORTED_GRADLE_VERSION: String = "8.12"
57+
private val SUPPORTED_JAVA_VERSION: JavaVersion = JavaVersion.VERSION_17
58+
private val SUPPORTED_AGP_VERSION: AndroidPluginVersion = AndroidPluginVersion(8, 9, 1)
59+
private const val SUPPORTED_KGP_VERSION: String = "2.1.0"
5860
private val SUPPORTED_SDK_VERSION: MinSdkVersion = MinSdkVersion("release", 30)
5961

6062
class DependencyVersionCheckerTest {
6163
@Test
6264
fun `AGP version in error range results in DependencyValidationException`() {
63-
val exampleErrorAgpVersion = AndroidPluginVersion(4, 2, 0)
65+
val exampleErrorAgpVersion = AndroidPluginVersion(8, 1, 0)
6466
val mockProject = MockProjectFactory.createMockProjectWithSpecifiedDependencyVersions(agpVersion = exampleErrorAgpVersion)
6567

6668
val mockExtraPropertiesExtension = mockProject.extra
@@ -130,7 +132,7 @@ class DependencyVersionCheckerTest {
130132

131133
@Test
132134
fun `KGP version in warn range results in warning logs`() {
133-
val exampleWarnKgpVersion = "1.8.0"
135+
val exampleWarnKgpVersion = "1.8.20"
134136
val mockProject = MockProjectFactory.createMockProjectWithSpecifiedDependencyVersions(kgpVersion = exampleWarnKgpVersion)
135137

136138
val mockExtraPropertiesExtension = mockProject.extra
@@ -157,7 +159,7 @@ class DependencyVersionCheckerTest {
157159

158160
@Test
159161
fun `Java version in warn range results in warning logs`() {
160-
val exampleWarnJavaVersion = JavaVersion.VERSION_1_8
162+
val exampleWarnJavaVersion = JavaVersion.VERSION_16
161163
val mockProject = MockProjectFactory.createMockProjectWithSpecifiedDependencyVersions(javaVersion = exampleWarnJavaVersion)
162164

163165
val mockExtraPropertiesExtension = mockProject.extra
@@ -204,7 +206,7 @@ class DependencyVersionCheckerTest {
204206

205207
@Test
206208
fun `Gradle version in warn range results in warning logs`() {
207-
val exampleWarnGradleVersion = "7.4.0"
209+
val exampleWarnGradleVersion = "8.5.0"
208210
val mockProject = MockProjectFactory.createMockProjectWithSpecifiedDependencyVersions(gradleVersion = exampleWarnGradleVersion)
209211

210212
val mockExtraPropertiesExtension = mockProject.extra
@@ -475,10 +477,6 @@ private object MockProjectFactory {
475477
val variant = mockk<Variant>()
476478
every { variant.name } returns it.flavor
477479
every { variant.minSdk } returns mockk { every { apiLevel } returns it.version }
478-
// Gradle prints a warning about this api being removed in gradle 9 but there is
479-
// no way to suppress individual warnings. We can remove this line when our tests
480-
// use gradle 9 or higher.
481-
every { variant.minSdkVersion } returns mockk { every { apiLevel } returns it.version }
482480
onVariantsFnSlot.captured.invoke(variant)
483481
}
484482
return@answers Unit

packages/flutter_tools/gradle/src/test/kotlin/FlutterPluginUtilsTest.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,9 +1230,7 @@ class FlutterPluginUtilsTest {
12301230
}
12311231

12321232
@Test
1233-
fun addTasksForOutputsAppLinkSettingsNoAndroid(
1234-
@TempDir tempDir: Path
1235-
) {
1233+
fun addTasksForOutputsAppLinkSettingsNoAndroid() {
12361234
val mockProject = mockk<Project>()
12371235
val mockLogger = mockk<Logger>()
12381236
every { mockProject.logger } returns mockLogger

packages/flutter_tools/lib/src/android/gradle_utils.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const String templateDefaultGradleVersion = '8.12';
3636
// * ndkVersion constant in this file
3737
// * ndkVersion in FlutterExtension in packages/flutter_tools/gradle/src/main/kotlin/FlutterExtension.kt
3838
// * AGP version constants in packages/flutter_tools/gradle/build.gradle.kts
39+
// * AGP test constants in packages/flutter_tools/gradle/src/test/kotlin/DependencyVersionCheckerTest.kt
3940
// See https://mvnrepository.com/artifact/com.android.tools.build/gradle
4041
const String templateAndroidGradlePluginVersion = '8.9.1';
4142
const String templateAndroidGradlePluginVersionForModule = '8.9.1';

packages/flutter_tools/test/android_java11_integration.shard/android_dependency_version_checking_test.dart

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)