diff --git a/.ci.yaml b/.ci.yaml index aed6c9ea16b..4135d40e8d0 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1155,7 +1155,7 @@ targets: {"dependency": "cmake", "version": "build_id:8787856497187628321"}, {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"}, {"dependency": "ninja", "version": "version:1.9.0"}, - {"dependency": "open_jdk", "version": "version:11"} + {"dependency": "open_jdk", "version": "version:17"} ] shard: android_preview_tool_integration_tests tags: > @@ -1167,6 +1167,32 @@ targets: - bin/** - .ci.yaml + - name: Linux android_java11_tool_integration_tests + recipe: flutter/flutter_drone + bringup: true + timeout: 60 + properties: + add_recipes_cq: "true" + dependencies: >- + [ + {"dependency": "android_sdk", "version": "version:34v3"}, + {"dependency": "chrome_and_driver", "version": "version:125.0.6422.141"}, + {"dependency": "clang", "version": "git_revision:5d5aba78dbbee75508f01bcaa69aedb2ab79065a"}, + {"dependency": "cmake", "version": "build_id:8787856497187628321"}, + {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"}, + {"dependency": "ninja", "version": "version:1.9.0"}, + {"dependency": "open_jdk", "version": "version:11"} + ] + shard: android_java11_tool_integration_tests + tags: > + ["framework", "hostonly", "shard", "linux"] + test_timeout_secs: "2700" + runIf: + - dev/** + - packages/flutter_tools/** + - bin/** + - .ci.yaml + - name: Linux tool_tests_commands recipe: flutter/flutter_drone timeout: 60 diff --git a/TESTOWNERS b/TESTOWNERS index 921fe8810d9..115bff67568 100644 --- a/TESTOWNERS +++ b/TESTOWNERS @@ -332,6 +332,8 @@ # test_ownership @keyonghan # tool_host_cross_arch_tests @andrewkolos @flutter/tool # tool_integration_tests @christopherfujino @flutter/tool +# android_preview_tool_integration_tests @gmackall @flutter/android +# android_java11_tool_integration_tests @gmackall @flutter/android # tool_tests @andrewkolos @flutter/tool # verify_binaries_codesigned @cbracken @flutter/releases # web_canvaskit_tests @yjbanov @flutter/web diff --git a/dev/bots/suite_runners/run_android_java11_integration_tool_tests.dart b/dev/bots/suite_runners/run_android_java11_integration_tool_tests.dart new file mode 100644 index 00000000000..3ad18cad69f --- /dev/null +++ b/dev/bots/suite_runners/run_android_java11_integration_tool_tests.dart @@ -0,0 +1,25 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:io'; + +import 'package:path/path.dart' as path; + +import '../utils.dart'; + +Future androidJava11IntegrationToolTestsRunner() async { + final String toolsPath = path.join(flutterRoot, 'packages', 'flutter_tools'); + + final List allTests = Directory(path.join(toolsPath, 'test', 'android_java11_integration.shard')) + .listSync(recursive: true).whereType() + .map((FileSystemEntity entry) => path.relative(entry.path, from: toolsPath)) + .where((String testPath) => path.basename(testPath).endsWith('_test.dart')).toList(); + + await runDartTest( + toolsPath, + forceSingleCore: true, + testPaths: selectIndexOfTotalSubshard(allTests), + collectMetrics: true, + ); +} diff --git a/dev/bots/test.dart b/dev/bots/test.dart index 0cfe0e962f8..7f25aba313f 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -59,6 +59,7 @@ import 'package:path/path.dart' as path; import 'run_command.dart'; import 'suite_runners/run_add_to_app_life_cycle_tests.dart'; import 'suite_runners/run_analyze_tests.dart'; +import 'suite_runners/run_android_java11_integration_tool_tests.dart'; import 'suite_runners/run_android_preview_integration_tool_tests.dart'; import 'suite_runners/run_customer_testing_tests.dart'; import 'suite_runners/run_docs_tests.dart'; @@ -131,6 +132,7 @@ Future main(List args) async { 'web_tool_tests': _runWebToolTests, 'tool_integration_tests': _runIntegrationToolTests, 'android_preview_tool_integration_tests': androidPreviewIntegrationToolTestsRunner, + 'android_java11_tool_integration_tests': androidJava11IntegrationToolTestsRunner, 'tool_host_cross_arch_tests': _runToolHostCrossArchTests, // All the unit/widget tests run using `flutter test --platform=chrome --web-renderer=html` 'web_tests': webTestsSuite.runWebHtmlUnitTests, diff --git a/packages/flutter_tools/lib/src/android/gradle_utils.dart b/packages/flutter_tools/lib/src/android/gradle_utils.dart index 5023d6abe90..bd5b9d7a2b9 100644 --- a/packages/flutter_tools/lib/src/android/gradle_utils.dart +++ b/packages/flutter_tools/lib/src/android/gradle_utils.dart @@ -27,10 +27,10 @@ import 'android_sdk.dart'; // However, this currently requires to migrate existing integration tests to the latest supported values. // // Please see the README before changing any of these values. -const String templateDefaultGradleVersion = '7.6.3'; -const String templateAndroidGradlePluginVersion = '7.3.0'; -const String templateAndroidGradlePluginVersionForModule = '7.3.0'; -const String templateKotlinGradlePluginVersion = '1.7.10'; +const String templateDefaultGradleVersion = '8.3'; +const String templateAndroidGradlePluginVersion = '8.1.0'; +const String templateAndroidGradlePluginVersionForModule = '8.1.0'; +const String templateKotlinGradlePluginVersion = '1.8.22'; // The Flutter Gradle Plugin is only applied to app projects, and modules that // are built from source using (`include_flutter.groovy`). The remaining @@ -48,24 +48,24 @@ const String ndkVersion = '23.1.7779620'; // Update these when new major versions of Java are supported by new Gradle // versions that we support. // Source of truth: https://docs.gradle.org/current/userguide/compatibility.html -const String oneMajorVersionHigherJavaVersion = '20'; +const String oneMajorVersionHigherJavaVersion = '23'; // Update this when new versions of Gradle come out including minor versions // and should correspond to the maximum Gradle version we test in CI. // // Supported here means supported by the tooling for // flutter analyze --suggestions and does not imply broader flutter support. -const String maxKnownAndSupportedGradleVersion = '8.0.2'; +const String maxKnownAndSupportedGradleVersion = '8.7'; // Update this when new versions of AGP come out. // // Supported here means tooling is aware of this version's Java <-> AGP // compatibility. @visibleForTesting -const String maxKnownAndSupportedAgpVersion = '8.1'; +const String maxKnownAndSupportedAgpVersion = '8.4.0'; // Update this when new versions of AGP come out. -const String maxKnownAgpVersion = '8.3'; +const String maxKnownAgpVersion = '8.5'; // Oldest documented version of AGP that has a listed minimum // compatible Java version. @@ -440,6 +440,22 @@ bool validateGradleAndAgp(Logger logger, } // Begin Known Gradle <-> AGP validation. + if (isWithinVersionRange(agpV, min: '8.4.0', max: '8.4.99')) { + return isWithinVersionRange(gradleV, + min: '8.6', max: maxKnownAndSupportedGradleVersion); + } + if (isWithinVersionRange(agpV, min: '8.3.0', max: '8.3.99')) { + return isWithinVersionRange(gradleV, + min: '8.4', max: maxKnownAndSupportedGradleVersion); + } + if (isWithinVersionRange(agpV, min: '8.2.0', max: '8.2.99')) { + return isWithinVersionRange(gradleV, + min: '8.2', max: maxKnownAndSupportedGradleVersion); + } + if (isWithinVersionRange(agpV, min: '8.0.0', max: '8.1.99')) { + return isWithinVersionRange(gradleV, + min: '8.0', max: maxKnownAndSupportedGradleVersion); + } // Max agp here is a made up version to contain all 7.4 changes. if (isWithinVersionRange(agpV, min: '7.4', max: '7.5')) { return isWithinVersionRange(gradleV, @@ -693,7 +709,13 @@ String getGradleVersionFor(String androidPluginVersion) { GradleForAgp(agpMin: '4.0.0', agpMax: '4.1.0', minRequiredGradle: '6.7'), // 7.5 is a made up value to include everything through 7.4.* GradleForAgp(agpMin: '7.0.0', agpMax: '7.5', minRequiredGradle: '7.5'), - GradleForAgp(agpMin: '7.5.0', agpMax: '100.100', minRequiredGradle: '8.0'), + // Use 0 and 99 as a patch values to signify every AGP patch version with + // that major and minor version. + GradleForAgp(agpMin: '8.0.0', agpMax: '8.1.99', minRequiredGradle: '8.0'), + GradleForAgp(agpMin: '8.2.0', agpMax: '8.2.99', minRequiredGradle: '8.2'), + GradleForAgp(agpMin: '8.3.0', agpMax: '8.3.99', minRequiredGradle: '8.4'), + GradleForAgp(agpMin: '8.4.0', agpMax: '8.4.99', minRequiredGradle: '8.6'), + GradleForAgp(agpMin: '8.5.0', agpMax: '100.100', minRequiredGradle: '8.7'), // Assume if AGP is newer than this code know about return the highest gradle // version we know about. GradleForAgp(agpMin: maxKnownAgpVersion, agpMax: maxKnownAgpVersion, minRequiredGradle: maxKnownAndSupportedGradleVersion), @@ -888,6 +910,24 @@ String getGradlewFileName(Platform platform) { /// of Gradle, as https://docs.gradle.org/current/userguide/compatibility.html /// details. List _javaGradleCompatList = const [ + JavaGradleCompat( + javaMin: '22', + javaMax: '23', + gradleMin: '8.7', + gradleMax: maxKnownAndSupportedGradleVersion, + ), + JavaGradleCompat( + javaMin: '21', + javaMax: '22', + gradleMin: '8.4', + gradleMax: maxKnownAndSupportedGradleVersion, + ), + JavaGradleCompat( + javaMin: '20', + javaMax: '21', + gradleMin: '8.1', + gradleMax: maxKnownAndSupportedGradleVersion, + ), JavaGradleCompat( javaMin: '19', javaMax: '20', diff --git a/packages/flutter_tools/test/android_preview_integration.shard/android_dependency_version_checking_test.dart b/packages/flutter_tools/test/android_java11_integration.shard/android_dependency_version_checking_test.dart similarity index 100% rename from packages/flutter_tools/test/android_preview_integration.shard/android_dependency_version_checking_test.dart rename to packages/flutter_tools/test/android_java11_integration.shard/android_dependency_version_checking_test.dart 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 9c0e086ab92..a1471ca16ee 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -3735,7 +3735,7 @@ void main() { logger.clear(); } }, overrides: { - Java: () => FakeJava(version: const software.Version.withText(14, 0, 0, '14.0.0')), // Middle compatible Java version with current template AGP/Gradle versions. + Java: () => FakeJava(version: const software.Version.withText(20, 0, 0, '20.0.0')), // Middle compatible Java version with current template AGP/Gradle versions. Logger: () => logger, }); @@ -3762,7 +3762,7 @@ void main() { logger.clear(); } }, overrides: { - Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '18.0.0')), // Maximum compatible Java version with current template AGP/Gradle versions. + Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '22.0.0')), // Maximum compatible Java version with current template AGP/Gradle versions. Logger: () => logger, }); @@ -3789,7 +3789,7 @@ void main() { logger.clear(); } }, overrides: { - Java: () => FakeJava(version: const software.Version.withText(11, 0, 0, '11.0.0')), // Minimum compatible Java version with current template AGP/Gradle versions. + Java: () => FakeJava(version: const software.Version.withText(17, 0, 0, '17.0.0')), // Minimum compatible Java version with current template AGP/Gradle versions. Logger: () => logger, }); diff --git a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart index f710c06676a..cb3d228c995 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart @@ -913,10 +913,10 @@ A problem occurred evaluating project ':app'. '│ To fix this issue, replace the following content: │\n' '│ /android/build.gradle: │\n' "│ - classpath 'com.android.tools.build:gradle:' │\n" - "│ + classpath 'com.android.tools.build:gradle:7.3.0' │\n" + "│ + classpath 'com.android.tools.build:gradle:$templateAndroidGradlePluginVersion' │\n" '│ /android/gradle/wrapper/gradle-wrapper.properties: │\n' '│ - https://services.gradle.org/distributions/gradle--all.zip │\n' - '│ + https://services.gradle.org/distributions/gradle-7.6.3-all.zip │\n' + '│ + https://services.gradle.org/distributions/gradle-$templateDefaultGradleVersion-all.zip │\n' '└──────────────────────────────────────────────────────────────────────────────────┘\n' ) ); diff --git a/packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart index caa61386d44..e6796cddd1b 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart @@ -4,6 +4,7 @@ import 'package:file/memory.dart'; import 'package:flutter_tools/src/android/gradle.dart'; +import 'package:flutter_tools/src/android/gradle_utils.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/build_info.dart'; @@ -431,7 +432,7 @@ void main() { 'gradle', label: 'gradle-expected-file-not-found', parameters: CustomDimensions.fromMap( { - 'cd37': 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab', + 'cd37': 'androidGradlePluginVersion: $templateDefaultGradleVersion, fileExtension: .aab', }), ), )); @@ -442,7 +443,7 @@ void main() { Event.flutterBuildInfo( label: 'gradle-expected-file-not-found', buildType: 'gradle', - settings: 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab', + settings: 'androidGradlePluginVersion: $templateDefaultGradleVersion, fileExtension: .aab', ), ), ); diff --git a/packages/flutter_tools/test/general.shard/android/gradle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_test.dart index c6c713c2619..89748986191 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -415,9 +415,9 @@ flutter: }); }); - group('gradgradle_utils.le version', () { + group('gradle version', () { testWithoutContext('should be compatible with the Android plugin version', () { - // Grangradle_utils.ular versions. + // Granular versions. expect(gradle_utils.getGradleVersionFor('1.0.0'), '2.3'); expect(gradle_utils.getGradleVersionFor('1.0.1'), '2.3'); expect(gradle_utils.getGradleVersionFor('1.0.2'), '2.3'); @@ -427,7 +427,7 @@ flutter: expect(gradle_utils.getGradleVersionFor('1.1.2'), '2.3'); expect(gradle_utils.getGradleVersionFor('1.1.2'), '2.3'); expect(gradle_utils.getGradleVersionFor('1.1.3'), '2.3'); - // Versgradle_utils.ion Ranges. + // Version Ranges. expect(gradle_utils.getGradleVersionFor('1.2.0'), '2.9'); expect(gradle_utils.getGradleVersionFor('1.3.1'), '2.9'); @@ -461,7 +461,11 @@ flutter: expect(gradle_utils.getGradleVersionFor('7.1.2'), '7.5'); expect(gradle_utils.getGradleVersionFor('7.2'), '7.5'); expect(gradle_utils.getGradleVersionFor('8.0'), '8.0'); - expect(gradle_utils.getGradleVersionFor(gradle_utils.maxKnownAgpVersion), '8.0'); + expect(gradle_utils.getGradleVersionFor('8.1'), '8.0'); + expect(gradle_utils.getGradleVersionFor('8.2'), '8.2'); + expect(gradle_utils.getGradleVersionFor('8.3'), '8.4'); + expect(gradle_utils.getGradleVersionFor('8.4'), '8.6'); + expect(gradle_utils.getGradleVersionFor(gradle_utils.maxKnownAgpVersion), '8.7'); }); testWithoutContext('throws on unsupported versions', () { diff --git a/packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart index 0e3522edb27..dad03e57539 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart @@ -82,7 +82,7 @@ void main() { 'distributionPath=wrapper/dists\n' 'zipStoreBase=GRADLE_USER_HOME\n' 'zipStorePath=wrapper/dists\n' - 'distributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.3-all.zip\n'); + 'distributionUrl=https\\://services.gradle.org/distributions/gradle-$templateDefaultGradleVersion-all.zip\n'); }); testWithoutContext('injects the wrapper when some files are missing', () { @@ -127,7 +127,7 @@ void main() { 'distributionPath=wrapper/dists\n' 'zipStoreBase=GRADLE_USER_HOME\n' 'zipStorePath=wrapper/dists\n' - 'distributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.3-all.zip\n'); + 'distributionUrl=https\\://services.gradle.org/distributions/gradle-$templateDefaultGradleVersion-all.zip\n'); }); testWithoutContext( @@ -779,7 +779,7 @@ dependencies { gradleV: data.gradleVersion, agpV: data.agpVersion, ), - data.validPair ? isTrue : isFalse, + data.validPair, reason: 'G: ${data.gradleVersion}, AGP: ${data.agpVersion}'); }); } @@ -967,19 +967,21 @@ allprojects { JavaAgpTestData(true, javaVersion: '18', agpVersion: '4.2'), // Strictly too new AGP versions. // *The tests that follow need to be updated* when max supported AGP versions are updated: - JavaAgpTestData(false, javaVersion: '24', agpVersion: '8.3'), - JavaAgpTestData(false, javaVersion: '20', agpVersion: '8.3'), - JavaAgpTestData(false, javaVersion: '17', agpVersion: '8.3'), + JavaAgpTestData(false, javaVersion: '24', agpVersion: '8.5'), + JavaAgpTestData(false, javaVersion: '20', agpVersion: '8.5'), + JavaAgpTestData(false, javaVersion: '17', agpVersion: '8.5'), // Java 17 & patch versions compatibility cases // *The tests that follow need to be updated* when maxKnownAndSupportedAgpVersion is // updated: - JavaAgpTestData(false, javaVersion: '17', agpVersion: '8.2'), + JavaAgpTestData(false, javaVersion: '17', agpVersion: '8.5'), JavaAgpTestData(true, javaVersion: '17', agpVersion: maxKnownAndSupportedAgpVersion), + JavaAgpTestData(true, javaVersion: '17', agpVersion: '8.3'), JavaAgpTestData(true, javaVersion: '17', agpVersion: '8.1'), JavaAgpTestData(true, javaVersion: '17', agpVersion: '8.0'), JavaAgpTestData(true, javaVersion: '17', agpVersion: '7.4'), - JavaAgpTestData(false, javaVersion: '17.0.3', agpVersion: '8.2'), + JavaAgpTestData(false, javaVersion: '17.0.3', agpVersion: '8.5'), JavaAgpTestData(true, javaVersion: '17.0.3', agpVersion: maxKnownAndSupportedAgpVersion), + JavaAgpTestData(true, javaVersion: '17.0.3', agpVersion: '8.3'), JavaAgpTestData(true, javaVersion: '17.0.3', agpVersion: '8.1'), JavaAgpTestData(true, javaVersion: '17.0.3', agpVersion: '8.0'), JavaAgpTestData(true, javaVersion: '17.0.3', agpVersion: '7.4'), @@ -1030,11 +1032,41 @@ allprojects { // Maximum known Java version. // *The test case that follows needs to be updated* when higher versions of Java are supported: expect( - getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '20'), + getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '23'), allOf( - equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '20.0.2')), + equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '23.0.2')), isNull)); // Known supported Java versions. + expect( + getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '22'), + allOf( + equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '22.0.2')), + equals( + const JavaGradleCompat( + javaMin: '22', + javaMax: '23', + gradleMin: '8.7', + gradleMax: maxKnownAndSupportedGradleVersion)))); + expect( + getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '21'), + allOf( + equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '21.0.2')), + equals( + const JavaGradleCompat( + javaMin: '21', + javaMax: '22', + gradleMin: '8.4', + gradleMax: maxKnownAndSupportedGradleVersion)))); + expect( + getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '20'), + allOf( + equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '20.0.2')), + equals( + const JavaGradleCompat( + javaMin: '20', + javaMax: '21', + gradleMin: '8.1', + gradleMax: maxKnownAndSupportedGradleVersion)))); expect( getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '19'), allOf( @@ -1175,7 +1207,7 @@ allprojects { javaMin: '17', javaDefault: '17', agpMin: '8.0', - agpMax: '8.1'))); + agpMax: maxKnownAndSupportedAgpVersion))); // Known Java versions. expect( getMinimumAgpVersionForJavaVersion(testLogger, javaV: '17'), @@ -1186,7 +1218,7 @@ allprojects { javaMin: '17', javaDefault: '17', agpMin: '8.0', - agpMax: '8.1')))); + agpMax: maxKnownAndSupportedAgpVersion)))); expect( getMinimumAgpVersionForJavaVersion(testLogger, javaV: '15'), allOf( @@ -1242,13 +1274,13 @@ allprojects { expect(getJavaVersionFor(gradleV: '1.9', agpV: '4.2'), equals(const VersionRange('1.8', null))); expect(getJavaVersionFor(gradleV: '2.0', agpV: '4.1'), equals(const VersionRange(null, '1.9'))); // Strictly too new Gradle and AGP versions. - expect(getJavaVersionFor(gradleV: '8.1', agpV: '8.2'), equals(const VersionRange(null, null))); + expect(getJavaVersionFor(gradleV: '8.8', agpV: '8.6'), equals(const VersionRange(null, null))); // Strictly too new Gradle version and maximum version of AGP. //*This test case will need its expected Java range updated when a new version of AGP is supported.* - expect(getJavaVersionFor(gradleV: '8.1', agpV: maxKnownAndSupportedAgpVersion), equals(const VersionRange('17', null))); + expect(getJavaVersionFor(gradleV: '8.8', agpV: maxKnownAndSupportedAgpVersion), equals(const VersionRange('17', null))); // Strictly too new AGP version and maximum version of Gradle. //*This test case will need its expected Java range updated when a new version of Gradle is supported.* - expect(getJavaVersionFor(gradleV: maxKnownAndSupportedGradleVersion, agpV: '8.2'), equals(const VersionRange(null, '20'))); + expect(getJavaVersionFor(gradleV: maxKnownAndSupportedGradleVersion, agpV: '8.6'), equals(const VersionRange(null, '23'))); // Tests with a known compatible Gradle/AGP version pair. expect(getJavaVersionFor(gradleV: '7.0', agpV: '7.2'), equals(const VersionRange('11', '17'))); expect(getJavaVersionFor(gradleV: '7.1', agpV: '7.2'), equals(const VersionRange('11', '17'))); @@ -1256,6 +1288,8 @@ allprojects { expect(getJavaVersionFor(gradleV: '7.1', agpV: '7.0'), equals(const VersionRange('11', '17'))); expect(getJavaVersionFor(gradleV: '7.1', agpV: '7.2'), equals(const VersionRange('11', '17'))); expect(getJavaVersionFor(gradleV: '7.1', agpV: '7.4'), equals(const VersionRange('11', '17'))); + expect(getJavaVersionFor(gradleV: '8.4', agpV: '8.1'), equals(const VersionRange('17', '22'))); + expect(getJavaVersionFor(gradleV: '8.7', agpV: '8.1'), equals(const VersionRange('17', '23'))); }); }); }