From 4690dc4055d08ad60117480864c6db4a4e55d6d5 Mon Sep 17 00:00:00 2001 From: jesswrd Date: Wed, 23 Jul 2025 11:16:52 -0700 Subject: [PATCH 1/2] revert hardcoded compilesdk back to flutter.compileSdkVersion --- packages/camera/camera_android/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index c081c3d47d6..685caaa3238 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -31,7 +31,7 @@ buildFeatures { buildConfig true } namespace 'io.flutter.plugins.camera' - compileSdk = 36 + compileSdk = flutter.compileSdkVersion defaultConfig { minSdkVersion 21 From f8f999c72bbe2cade347e4b287c1d093936e8215 Mon Sep 17 00:00:00 2001 From: jesswrd Date: Wed, 23 Jul 2025 14:37:31 -0700 Subject: [PATCH 2/2] added check for hardcoding compilesdk version number --- script/tool/lib/src/gradle_check_command.dart | 21 +++++++++----- .../tool/test/gradle_check_command_test.dart | 29 +++++++++++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/script/tool/lib/src/gradle_check_command.dart b/script/tool/lib/src/gradle_check_command.dart index 130d428b776..387403d124e 100644 --- a/script/tool/lib/src/gradle_check_command.dart +++ b/script/tool/lib/src/gradle_check_command.dart @@ -428,6 +428,15 @@ for more details.'''; final RegExp legacySettingPattern = RegExp(r'^\s*compileSdkVersion'); final String? compileSdkLine = gradleLines .firstWhereOrNull((String line) => linePattern.hasMatch(line)); + + final Pubspec pubspec = package.parsePubspec(); + final VersionConstraint? flutterConstraint = + pubspec.environment['flutter']; + final Version? minFlutterVersion = + flutterConstraint != null && flutterConstraint is VersionRange + ? flutterConstraint.min + : null; + if (compileSdkLine == null) { // Equals regex not found check for method pattern. final RegExp compileSpacePattern = RegExp(r'^\s*compileSdk'); @@ -447,13 +456,6 @@ for more details.'''; return false; } if (compileSdkLine.contains('flutter.compileSdkVersion')) { - final Pubspec pubspec = package.parsePubspec(); - final VersionConstraint? flutterConstraint = - pubspec.environment['flutter']; - final Version? minFlutterVersion = - flutterConstraint != null && flutterConstraint is VersionRange - ? flutterConstraint.min - : null; if (minFlutterVersion == null) { printError('${indentation}Unable to find a Flutter SDK version ' 'constraint. Use of flutter.compileSdkVersion requires a minimum ' @@ -469,6 +471,11 @@ for more details.'''; return false; } } + if (!compileSdkLine.contains('flutter.compileSdkVersion') && minFlutterVersion! >= Version(3, 27, 0)) { + printError('${indentation}Please use flutter.compileSdkVersion instead ' + 'of a hardcoded compileSdk version number'); + return false; + } return true; } diff --git a/script/tool/test/gradle_check_command_test.dart b/script/tool/test/gradle_check_command_test.dart index 63c766d0a32..6a23e5bcd28 100644 --- a/script/tool/test/gradle_check_command_test.dart +++ b/script/tool/test/gradle_check_command_test.dart @@ -1044,6 +1044,35 @@ dependencies { ); }); + test('fails if set to a number with Flutter >=3.27', () async { + const String packageName = 'a_package'; + final RepositoryPackage package = createFakePackage( + packageName, packagesDir, + isFlutter: true, flutterConstraint: '>=3.27.0'); + writeFakePluginBuildGradle(package, + includeLanguageVersion: true, compileSdk: '35'); + writeFakeManifest(package); + final RepositoryPackage example = package.getExamples().first; + writeFakeExampleBuildGradles(example, pluginName: packageName); + writeFakeManifest(example, isApp: true); + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['gradle-check'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + 'Please use flutter.compileSdkVersion instead of a hardcoded ' + 'compileSdk version number'), + ]), + ); + }); + test('fails if set to flutter.compileSdkVersion with Flutter <3.27', () async { const String packageName = 'a_package';