Skip to content

Commit bd5ab96

Browse files
authored
Upgrade template Gradle, App AGP, Module AGP, and Kotlin versions, and tests (#150969)
After the land of flutter/engine#53592, there is some log spam: ``` e: /Users/mackall/.gradle/caches/transforms-3/c1e137371ec1afe9bc9bd7b05823752d/transformed/fragment-1.7.1/jars/classes.jar!/META-INF/fragment_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.6.0. e: /Users/mackall/.gradle/caches/transforms-3/d86c7cb1c556fe1655fa56db671c649c/transformed/jetified-activity-1.8.1/jars/classes.jar!/META-INF/activity_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.6.0. ... ``` I think this is harmless, but still annoying. Upgrading the AGP version fixes it. To be honest, I don't know why (I expected the Kotlin version would do it). But after flutter/flutter#146307, our tests have been running on AGP/Gradle 8.1/8.3 for a while, so it makes sense to upgrade anyways. In a follow up PR: 1. Also upgrade the tests that were left behind in flutter/flutter#146307, as I think removal of discontinued plugins paved the way here.
1 parent 44622da commit bd5ab96

File tree

11 files changed

+170
-36
lines changed

11 files changed

+170
-36
lines changed

.ci.yaml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1155,7 +1155,7 @@ targets:
11551155
{"dependency": "cmake", "version": "build_id:8787856497187628321"},
11561156
{"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"},
11571157
{"dependency": "ninja", "version": "version:1.9.0"},
1158-
{"dependency": "open_jdk", "version": "version:11"}
1158+
{"dependency": "open_jdk", "version": "version:17"}
11591159
]
11601160
shard: android_preview_tool_integration_tests
11611161
tags: >
@@ -1167,6 +1167,32 @@ targets:
11671167
- bin/**
11681168
- .ci.yaml
11691169

1170+
- name: Linux android_java11_tool_integration_tests
1171+
recipe: flutter/flutter_drone
1172+
bringup: true
1173+
timeout: 60
1174+
properties:
1175+
add_recipes_cq: "true"
1176+
dependencies: >-
1177+
[
1178+
{"dependency": "android_sdk", "version": "version:34v3"},
1179+
{"dependency": "chrome_and_driver", "version": "version:125.0.6422.141"},
1180+
{"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"},
1181+
{"dependency": "cmake", "version": "build_id:8787856497187628321"},
1182+
{"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"},
1183+
{"dependency": "ninja", "version": "version:1.9.0"},
1184+
{"dependency": "open_jdk", "version": "version:11"}
1185+
]
1186+
shard: android_java11_tool_integration_tests
1187+
tags: >
1188+
["framework", "hostonly", "shard", "linux"]
1189+
test_timeout_secs: "2700"
1190+
runIf:
1191+
- dev/**
1192+
- packages/flutter_tools/**
1193+
- bin/**
1194+
- .ci.yaml
1195+
11701196
- name: Linux tool_tests_commands
11711197
recipe: flutter/flutter_drone
11721198
timeout: 60

TESTOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@
332332
# test_ownership @keyonghan
333333
# tool_host_cross_arch_tests @andrewkolos @flutter/tool
334334
# tool_integration_tests @christopherfujino @flutter/tool
335+
# android_preview_tool_integration_tests @gmackall @flutter/android
336+
# android_java11_tool_integration_tests @gmackall @flutter/android
335337
# tool_tests @andrewkolos @flutter/tool
336338
# verify_binaries_codesigned @cbracken @flutter/releases
337339
# web_canvaskit_tests @yjbanov @flutter/web
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:io';
6+
7+
import 'package:path/path.dart' as path;
8+
9+
import '../utils.dart';
10+
11+
Future<void> androidJava11IntegrationToolTestsRunner() async {
12+
final String toolsPath = path.join(flutterRoot, 'packages', 'flutter_tools');
13+
14+
final List<String> allTests = Directory(path.join(toolsPath, 'test', 'android_java11_integration.shard'))
15+
.listSync(recursive: true).whereType<File>()
16+
.map<String>((FileSystemEntity entry) => path.relative(entry.path, from: toolsPath))
17+
.where((String testPath) => path.basename(testPath).endsWith('_test.dart')).toList();
18+
19+
await runDartTest(
20+
toolsPath,
21+
forceSingleCore: true,
22+
testPaths: selectIndexOfTotalSubshard<String>(allTests),
23+
collectMetrics: true,
24+
);
25+
}

dev/bots/test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import 'package:path/path.dart' as path;
5959
import 'run_command.dart';
6060
import 'suite_runners/run_add_to_app_life_cycle_tests.dart';
6161
import 'suite_runners/run_analyze_tests.dart';
62+
import 'suite_runners/run_android_java11_integration_tool_tests.dart';
6263
import 'suite_runners/run_android_preview_integration_tool_tests.dart';
6364
import 'suite_runners/run_customer_testing_tests.dart';
6465
import 'suite_runners/run_docs_tests.dart';
@@ -131,6 +132,7 @@ Future<void> main(List<String> args) async {
131132
'web_tool_tests': _runWebToolTests,
132133
'tool_integration_tests': _runIntegrationToolTests,
133134
'android_preview_tool_integration_tests': androidPreviewIntegrationToolTestsRunner,
135+
'android_java11_tool_integration_tests': androidJava11IntegrationToolTestsRunner,
134136
'tool_host_cross_arch_tests': _runToolHostCrossArchTests,
135137
// All the unit/widget tests run using `flutter test --platform=chrome --web-renderer=html`
136138
'web_tests': webTestsSuite.runWebHtmlUnitTests,

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

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ import 'android_sdk.dart';
2727
// However, this currently requires to migrate existing integration tests to the latest supported values.
2828
//
2929
// Please see the README before changing any of these values.
30-
const String templateDefaultGradleVersion = '7.6.3';
31-
const String templateAndroidGradlePluginVersion = '7.3.0';
32-
const String templateAndroidGradlePluginVersionForModule = '7.3.0';
33-
const String templateKotlinGradlePluginVersion = '1.7.10';
30+
const String templateDefaultGradleVersion = '8.3';
31+
const String templateAndroidGradlePluginVersion = '8.1.0';
32+
const String templateAndroidGradlePluginVersionForModule = '8.1.0';
33+
const String templateKotlinGradlePluginVersion = '1.8.22';
3434

3535
// The Flutter Gradle Plugin is only applied to app projects, and modules that
3636
// are built from source using (`include_flutter.groovy`). The remaining
@@ -48,24 +48,24 @@ const String ndkVersion = '23.1.7779620';
4848
// Update these when new major versions of Java are supported by new Gradle
4949
// versions that we support.
5050
// Source of truth: https://docs.gradle.org/current/userguide/compatibility.html
51-
const String oneMajorVersionHigherJavaVersion = '20';
51+
const String oneMajorVersionHigherJavaVersion = '23';
5252

5353
// Update this when new versions of Gradle come out including minor versions
5454
// and should correspond to the maximum Gradle version we test in CI.
5555
//
5656
// Supported here means supported by the tooling for
5757
// flutter analyze --suggestions and does not imply broader flutter support.
58-
const String maxKnownAndSupportedGradleVersion = '8.0.2';
58+
const String maxKnownAndSupportedGradleVersion = '8.7';
5959

6060
// Update this when new versions of AGP come out.
6161
//
6262
// Supported here means tooling is aware of this version's Java <-> AGP
6363
// compatibility.
6464
@visibleForTesting
65-
const String maxKnownAndSupportedAgpVersion = '8.1';
65+
const String maxKnownAndSupportedAgpVersion = '8.4.0';
6666

6767
// Update this when new versions of AGP come out.
68-
const String maxKnownAgpVersion = '8.3';
68+
const String maxKnownAgpVersion = '8.5';
6969

7070
// Oldest documented version of AGP that has a listed minimum
7171
// compatible Java version.
@@ -440,6 +440,22 @@ bool validateGradleAndAgp(Logger logger,
440440
}
441441

442442
// Begin Known Gradle <-> AGP validation.
443+
if (isWithinVersionRange(agpV, min: '8.4.0', max: '8.4.99')) {
444+
return isWithinVersionRange(gradleV,
445+
min: '8.6', max: maxKnownAndSupportedGradleVersion);
446+
}
447+
if (isWithinVersionRange(agpV, min: '8.3.0', max: '8.3.99')) {
448+
return isWithinVersionRange(gradleV,
449+
min: '8.4', max: maxKnownAndSupportedGradleVersion);
450+
}
451+
if (isWithinVersionRange(agpV, min: '8.2.0', max: '8.2.99')) {
452+
return isWithinVersionRange(gradleV,
453+
min: '8.2', max: maxKnownAndSupportedGradleVersion);
454+
}
455+
if (isWithinVersionRange(agpV, min: '8.0.0', max: '8.1.99')) {
456+
return isWithinVersionRange(gradleV,
457+
min: '8.0', max: maxKnownAndSupportedGradleVersion);
458+
}
443459
// Max agp here is a made up version to contain all 7.4 changes.
444460
if (isWithinVersionRange(agpV, min: '7.4', max: '7.5')) {
445461
return isWithinVersionRange(gradleV,
@@ -693,7 +709,13 @@ String getGradleVersionFor(String androidPluginVersion) {
693709
GradleForAgp(agpMin: '4.0.0', agpMax: '4.1.0', minRequiredGradle: '6.7'),
694710
// 7.5 is a made up value to include everything through 7.4.*
695711
GradleForAgp(agpMin: '7.0.0', agpMax: '7.5', minRequiredGradle: '7.5'),
696-
GradleForAgp(agpMin: '7.5.0', agpMax: '100.100', minRequiredGradle: '8.0'),
712+
// Use 0 and 99 as a patch values to signify every AGP patch version with
713+
// that major and minor version.
714+
GradleForAgp(agpMin: '8.0.0', agpMax: '8.1.99', minRequiredGradle: '8.0'),
715+
GradleForAgp(agpMin: '8.2.0', agpMax: '8.2.99', minRequiredGradle: '8.2'),
716+
GradleForAgp(agpMin: '8.3.0', agpMax: '8.3.99', minRequiredGradle: '8.4'),
717+
GradleForAgp(agpMin: '8.4.0', agpMax: '8.4.99', minRequiredGradle: '8.6'),
718+
GradleForAgp(agpMin: '8.5.0', agpMax: '100.100', minRequiredGradle: '8.7'),
697719
// Assume if AGP is newer than this code know about return the highest gradle
698720
// version we know about.
699721
GradleForAgp(agpMin: maxKnownAgpVersion, agpMax: maxKnownAgpVersion, minRequiredGradle: maxKnownAndSupportedGradleVersion),
@@ -888,6 +910,24 @@ String getGradlewFileName(Platform platform) {
888910
/// of Gradle, as https://docs.gradle.org/current/userguide/compatibility.html
889911
/// details.
890912
List<JavaGradleCompat> _javaGradleCompatList = const <JavaGradleCompat>[
913+
JavaGradleCompat(
914+
javaMin: '22',
915+
javaMax: '23',
916+
gradleMin: '8.7',
917+
gradleMax: maxKnownAndSupportedGradleVersion,
918+
),
919+
JavaGradleCompat(
920+
javaMin: '21',
921+
javaMax: '22',
922+
gradleMin: '8.4',
923+
gradleMax: maxKnownAndSupportedGradleVersion,
924+
),
925+
JavaGradleCompat(
926+
javaMin: '20',
927+
javaMax: '21',
928+
gradleMin: '8.1',
929+
gradleMax: maxKnownAndSupportedGradleVersion,
930+
),
891931
JavaGradleCompat(
892932
javaMin: '19',
893933
javaMax: '20',

packages/flutter_tools/test/android_preview_integration.shard/android_dependency_version_checking_test.dart renamed to packages/flutter_tools/test/android_java11_integration.shard/android_dependency_version_checking_test.dart

File renamed without changes.

packages/flutter_tools/test/commands.shard/permeable/create_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3735,7 +3735,7 @@ void main() {
37353735
logger.clear();
37363736
}
37373737
}, overrides: <Type, Generator>{
3738-
Java: () => FakeJava(version: const software.Version.withText(14, 0, 0, '14.0.0')), // Middle compatible Java version with current template AGP/Gradle versions.
3738+
Java: () => FakeJava(version: const software.Version.withText(20, 0, 0, '20.0.0')), // Middle compatible Java version with current template AGP/Gradle versions.
37393739
Logger: () => logger,
37403740
});
37413741

@@ -3762,7 +3762,7 @@ void main() {
37623762
logger.clear();
37633763
}
37643764
}, overrides: <Type, Generator>{
3765-
Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '18.0.0')), // Maximum compatible Java version with current template AGP/Gradle versions.
3765+
Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '22.0.0')), // Maximum compatible Java version with current template AGP/Gradle versions.
37663766
Logger: () => logger,
37673767
});
37683768

@@ -3789,7 +3789,7 @@ void main() {
37893789
logger.clear();
37903790
}
37913791
}, overrides: <Type, Generator>{
3792-
Java: () => FakeJava(version: const software.Version.withText(11, 0, 0, '11.0.0')), // Minimum compatible Java version with current template AGP/Gradle versions.
3792+
Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '17.0.0')), // Minimum compatible Java version with current template AGP/Gradle versions.
37933793
Logger: () => logger,
37943794
});
37953795

packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -913,10 +913,10 @@ A problem occurred evaluating project ':app'.
913913
'│ To fix this issue, replace the following content: │\n'
914914
'│ /android/build.gradle: │\n'
915915
"│ - classpath 'com.android.tools.build:gradle:<current-version>' │\n"
916-
"│ + classpath 'com.android.tools.build:gradle:7.3.0' │\n"
916+
"│ + classpath 'com.android.tools.build:gradle:$templateAndroidGradlePluginVersion' │\n"
917917
'│ /android/gradle/wrapper/gradle-wrapper.properties: │\n'
918918
'│ - https://services.gradle.org/distributions/gradle-<current-version>-all.zip │\n'
919-
'│ + https://services.gradle.org/distributions/gradle-7.6.3-all.zip │\n'
919+
'│ + https://services.gradle.org/distributions/gradle-$templateDefaultGradleVersion-all.zip \n'
920920
'└──────────────────────────────────────────────────────────────────────────────────┘\n'
921921
)
922922
);

packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:file/memory.dart';
66
import 'package:flutter_tools/src/android/gradle.dart';
7+
import 'package:flutter_tools/src/android/gradle_utils.dart';
78
import 'package:flutter_tools/src/base/file_system.dart';
89
import 'package:flutter_tools/src/base/logger.dart';
910
import 'package:flutter_tools/src/build_info.dart';
@@ -431,7 +432,7 @@ void main() {
431432
'gradle',
432433
label: 'gradle-expected-file-not-found',
433434
parameters: CustomDimensions.fromMap(<String, String> {
434-
'cd37': 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab',
435+
'cd37': 'androidGradlePluginVersion: $templateDefaultGradleVersion, fileExtension: .aab',
435436
}),
436437
),
437438
));
@@ -442,7 +443,7 @@ void main() {
442443
Event.flutterBuildInfo(
443444
label: 'gradle-expected-file-not-found',
444445
buildType: 'gradle',
445-
settings: 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab',
446+
settings: 'androidGradlePluginVersion: $templateDefaultGradleVersion, fileExtension: .aab',
446447
),
447448
),
448449
);

packages/flutter_tools/test/general.shard/android/gradle_test.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,9 @@ flutter:
415415
});
416416
});
417417

418-
group('gradgradle_utils.le version', () {
418+
group('gradle version', () {
419419
testWithoutContext('should be compatible with the Android plugin version', () {
420-
// Grangradle_utils.ular versions.
420+
// Granular versions.
421421
expect(gradle_utils.getGradleVersionFor('1.0.0'), '2.3');
422422
expect(gradle_utils.getGradleVersionFor('1.0.1'), '2.3');
423423
expect(gradle_utils.getGradleVersionFor('1.0.2'), '2.3');
@@ -427,7 +427,7 @@ flutter:
427427
expect(gradle_utils.getGradleVersionFor('1.1.2'), '2.3');
428428
expect(gradle_utils.getGradleVersionFor('1.1.2'), '2.3');
429429
expect(gradle_utils.getGradleVersionFor('1.1.3'), '2.3');
430-
// Versgradle_utils.ion Ranges.
430+
// Version Ranges.
431431
expect(gradle_utils.getGradleVersionFor('1.2.0'), '2.9');
432432
expect(gradle_utils.getGradleVersionFor('1.3.1'), '2.9');
433433

@@ -461,7 +461,11 @@ flutter:
461461
expect(gradle_utils.getGradleVersionFor('7.1.2'), '7.5');
462462
expect(gradle_utils.getGradleVersionFor('7.2'), '7.5');
463463
expect(gradle_utils.getGradleVersionFor('8.0'), '8.0');
464-
expect(gradle_utils.getGradleVersionFor(gradle_utils.maxKnownAgpVersion), '8.0');
464+
expect(gradle_utils.getGradleVersionFor('8.1'), '8.0');
465+
expect(gradle_utils.getGradleVersionFor('8.2'), '8.2');
466+
expect(gradle_utils.getGradleVersionFor('8.3'), '8.4');
467+
expect(gradle_utils.getGradleVersionFor('8.4'), '8.6');
468+
expect(gradle_utils.getGradleVersionFor(gradle_utils.maxKnownAgpVersion), '8.7');
465469
});
466470

467471
testWithoutContext('throws on unsupported versions', () {

0 commit comments

Comments
 (0)