[CP-stable]Reland "Upgrade template Gradle, App AGP, Module AGP, and Kotlin versions, and tests"... but no longer upgrade module AGP version (#154199)

This pull request is created by [automatic cherry pick workflow](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request)
Please fill in the form below, and a flutter domain expert will evaluate this cherry pick request.

### Issue Link:
What is the link to the issue this cherry-pick is addressing?

https://github.com/flutter/flutter/issues/153885#issue-2479189666

### Changelog Description:
Explain this cherry pick in one line that is accessible to most Flutter developers. See [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples

Upgrades template Gradle, App AGP, and Kotlin versions.

### Impact Description:
What is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)? Does it impact development (ex. flutter doctor crashes when Android Studio is installed), or the shipping production app (the app crashes on launch)

Fixes some log spam when building a freshly created template app for Android.

### Workaround:
Is there a workaround for this issue?

Yes, just upgrade the output of the template manually.

### Risk:
What is the risk level of this cherry-pick?

### Test Coverage:
Are you confident that your fix is well-tested by automated tests?

### Validation Steps:
What are the steps to validate that this fix works?

`flutter create foo`, `cd foo`, `flutter build apk`
diff --git a/.ci.yaml b/.ci.yaml
index aed6c9e..4135d40 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -1155,7 +1155,7 @@
           {"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 @@
       - 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 921fe88..115bff6 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 0000000..3ad18ca
--- /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<void> androidJava11IntegrationToolTestsRunner() async {
+  final String toolsPath = path.join(flutterRoot, 'packages', 'flutter_tools');
+
+  final List<String> allTests = Directory(path.join(toolsPath, 'test', 'android_java11_integration.shard'))
+      .listSync(recursive: true).whereType<File>()
+      .map<String>((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<String>(allTests),
+    collectMetrics: true,
+  );
+}
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 0cfe0e9..7f25aba 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -59,6 +59,7 @@
 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 @@
       '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 5023d6a..f3f1a06 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 @@
 // 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 templateDefaultGradleVersion = '8.3';
+const String templateAndroidGradlePluginVersion = '8.1.0';
 const String templateAndroidGradlePluginVersionForModule = '7.3.0';
-const String templateKotlinGradlePluginVersion = '1.7.10';
+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 @@
 // 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 @@
   }
 
   // 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 @@
     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),
@@ -889,6 +911,24 @@
 /// details.
 List<JavaGradleCompat> _javaGradleCompatList = const <JavaGradleCompat>[
     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',
       gradleMin: '7.6',
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 9c0e086..a1471ca 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 @@
       logger.clear();
     }
   }, overrides: <Type, Generator>{
-    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 @@
       logger.clear();
     }
   }, overrides: <Type, Generator>{
-    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 @@
       logger.clear();
     }
   }, overrides: <Type, Generator>{
-    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 f710c06..cb3d228 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 @@
           '│ To fix this issue, replace the following content:                                │\n'
           '│ /android/build.gradle:                                                           │\n'
           "│     - classpath 'com.android.tools.build:gradle:<current-version>'               │\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-<current-version>-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 5b2a18d..64d28be 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' as gradle_utils;
 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';
@@ -559,7 +560,7 @@
         'gradle',
         label: 'gradle-expected-file-not-found',
         parameters: CustomDimensions.fromMap(<String, String> {
-          'cd37': 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab',
+          'cd37': 'androidGradlePluginVersion: 8.3, fileExtension: .aab',
         }),
       ),
     ));
@@ -570,7 +571,7 @@
         Event.flutterBuildInfo(
           label: 'gradle-expected-file-not-found',
           buildType: 'gradle',
-          settings: 'androidGradlePluginVersion: 7.6.3, fileExtension: .aab',
+          settings: 'androidGradlePluginVersion: ${gradle_utils.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 41bae58..39c91bb 100644
--- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart
@@ -546,9 +546,9 @@
     });
   });
 
-  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');
@@ -558,7 +558,7 @@
       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');
 
@@ -592,7 +592,11 @@
       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 0e3522e..05d9d1c 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 @@
           '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 @@
           '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(
@@ -967,19 +967,22 @@
       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.2'),
       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,12 +1033,42 @@
       // 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(
           equals(getValidGradleVersionRangeForJavaVersion(testLogger, javaV: '19.0.2')),
@@ -1175,7 +1208,7 @@
             javaMin: '17',
             javaDefault: '17',
             agpMin: '8.0',
-            agpMax: '8.1')));
+            agpMax: maxKnownAndSupportedAgpVersion)));
       // Known Java versions.
       expect(
         getMinimumAgpVersionForJavaVersion(testLogger, javaV: '17'),
@@ -1186,7 +1219,7 @@
               javaMin: '17',
               javaDefault: '17',
               agpMin: '8.0',
-              agpMax: '8.1'))));
+              agpMax: maxKnownAndSupportedAgpVersion))));
       expect(
         getMinimumAgpVersionForJavaVersion(testLogger, javaV: '15'),
         allOf(
@@ -1242,13 +1275,13 @@
       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 +1289,8 @@
       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')));
     });
   });
 }