Add suggestion for compileSdkVersion warning (#95369)

diff --git a/packages/flutter_tools/lib/src/android/gradle_errors.dart b/packages/flutter_tools/lib/src/android/gradle_errors.dart
index fe69a5f..4aeac61 100644
--- a/packages/flutter_tools/lib/src/android/gradle_errors.dart
+++ b/packages/flutter_tools/lib/src/android/gradle_errors.dart
@@ -76,6 +76,7 @@
   lockFileDepMissing,
   multidexErrorHandler,
   incompatibleKotlinVersionHandler,
+  minCompileSdkVersionHandler,
 ];
 
 const String _boxTitle = 'Flutter Fix';
@@ -505,3 +506,34 @@
   },
   eventLabel: 'incompatible-kotlin-version',
 );
+
+final RegExp _minCompileSdkVersionPattern = RegExp(r'The minCompileSdk \(([0-9]+)\) specified in a');
+
+@visibleForTesting
+final GradleHandledError minCompileSdkVersionHandler = GradleHandledError(
+  test: _minCompileSdkVersionPattern.hasMatch,
+  handler: ({
+    required String line,
+    required FlutterProject project,
+    required bool usesAndroidX,
+    required bool multidexEnabled,
+  }) async {
+    final Match? minSdkVersionMatch = _minCompileSdkVersionPattern.firstMatch(line);
+    assert(minSdkVersionMatch?.groupCount == 1);
+
+    final File gradleFile = project.directory
+        .childDirectory('android')
+        .childDirectory('app')
+        .childFile('build.gradle');
+    globals.printBox(
+      '${globals.logger.terminal.warningMark} Your project requires a higher compileSdkVersion.\n'
+      'Fix this issue by bumping the compileSdkVersion in ${gradleFile.path}:\n'
+      'android {\n'
+      '  compileSdkVersion ${minSdkVersionMatch?.group(1)}\n'
+      '}',
+      title: _boxTitle,
+    );
+    return GradleBuildStatus.exit;
+  },
+  eventLabel: 'min-compile-sdk-version',
+);
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 41ec6b8..b251ffd 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
@@ -34,6 +34,7 @@
           lockFileDepMissing,
           multidexErrorHandler,
           incompatibleKotlinVersionHandler,
+          minCompileSdkVersionHandler,
         ])
       );
     });
@@ -907,6 +908,59 @@
       ProcessManager: () => FakeProcessManager.empty(),
     });
   });
+
+  group('Required compileSdkVersion', () {
+    const String errorMessage = '''
+Execution failed for task ':app:checkDebugAarMetadata'.
+> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
+   > One or more issues found when checking AAR metadata values:
+
+     The minCompileSdk (31) specified in a
+     dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
+     is greater than this module's compileSdkVersion (android-30).
+     Dependency: androidx.window:window-java:1.0.0-beta04.
+     AAR metadata file: ~/.gradle/caches/transforms-3/2adc32c5b3f24bed763d33fbfb203338/transformed/jetified-window-java-1.0.0-beta04/META-INF/com/android/build/gradle/aar-metadata.properties.
+
+     The minCompileSdk (31) specified in a
+     dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
+     is greater than this module's compileSdkVersion (android-30).
+     Dependency: androidx.window:window:1.0.0-beta04.
+     AAR metadata file: ~/.gradle/caches/transforms-3/88f7e476ef68cecca729426edff955b5/transformed/jetified-window-1.0.0-beta04/META-INF/com/android/build/gradle/aar-metadata.properties.
+''';
+
+    testWithoutContext('pattern', () {
+      expect(
+        minCompileSdkVersionHandler.test(errorMessage),
+        isTrue,
+      );
+    });
+
+    testUsingContext('suggestion', () async {
+      await minCompileSdkVersionHandler.handler(
+        line: errorMessage,
+        project: FlutterProject.fromDirectoryTest(globals.fs.currentDirectory),
+      );
+
+      expect(
+        testLogger.statusText,
+        contains(
+          '\n'
+          '┌─ Flutter Fix ─────────────────────────────────────────────────────────────────┐\n'
+          '│ [!] Your project requires a higher compileSdkVersion.                         │\n'
+          '│ Fix this issue by bumping the compileSdkVersion in /android/app/build.gradle: │\n'
+          '│ android {                                                                     │\n'
+          '│   compileSdkVersion 31                                                        │\n'
+          '│ }                                                                             │\n'
+          '└───────────────────────────────────────────────────────────────────────────────┘\n'
+        )
+      );
+    }, overrides: <Type, Generator>{
+      GradleUtils: () => FakeGradleUtils(),
+      Platform: () => fakePlatform('android'),
+      FileSystem: () => MemoryFileSystem.test(),
+      ProcessManager: () => FakeProcessManager.empty(),
+    });
+  });
 }
 
 bool formatTestErrorMessage(String errorMessage, GradleHandledError error) {