diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 954d384e8c86..a98f51e54eae 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.7.2+1 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 0.7.2 diff --git a/packages/camera/camera_android_camerax/android/build.gradle.kts b/packages/camera/camera_android_camerax/android/build.gradle.kts index b90a4c5bd48d..03dd584cf33c 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle.kts +++ b/packages/camera/camera_android_camerax/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.camerax" version = "1.0" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/camera/camera_android_camerax/example/android/app/build.gradle.kts b/packages/camera/camera_android_camerax/example/android/app/build.gradle.kts index 34eeda4f747e..bf7a098b7080 100644 --- a/packages/camera/camera_android_camerax/example/android/app/build.gradle.kts +++ b/packages/camera/camera_android_camerax/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -14,10 +13,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.cameraxexample" minSdk = flutter.minSdkVersion @@ -34,6 +29,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/camera/camera_android_camerax/example/android/gradle.properties b/packages/camera/camera_android_camerax/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/camera/camera_android_camerax/example/android/gradle.properties +++ b/packages/camera/camera_android_camerax/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/camera/camera_android_camerax/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera_android_camerax/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/camera/camera_android_camerax/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera_android_camerax/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/camera/camera_android_camerax/example/android/settings.gradle.kts b/packages/camera/camera_android_camerax/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/camera/camera_android_camerax/example/android/settings.gradle.kts +++ b/packages/camera/camera_android_camerax/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index a1d93d1210dd..e5fbd9bf008e 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,11 +2,11 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.7.2 +version: 0.7.2+1 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/file_selector/file_selector_android/CHANGELOG.md b/packages/file_selector/file_selector_android/CHANGELOG.md index c5b89b9312f8..3d19376b6c81 100644 --- a/packages/file_selector/file_selector_android/CHANGELOG.md +++ b/packages/file_selector/file_selector_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.5.2+7 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 0.5.2+6 diff --git a/packages/file_selector/file_selector_android/android/build.gradle.kts b/packages/file_selector/file_selector_android/android/build.gradle.kts index 680f83d1130a..a26ba311b685 100644 --- a/packages/file_selector/file_selector_android/android/build.gradle.kts +++ b/packages/file_selector/file_selector_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "dev.flutter.packages.file_selector_android" version = "1.0" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/file_selector/file_selector_android/android/src/test/java/dev/flutter/packages/file_selector_android/FileUtilsTest.java b/packages/file_selector/file_selector_android/android/src/test/java/dev/flutter/packages/file_selector_android/FileUtilsTest.java index 2f30e6499961..59784dc9c3cb 100644 --- a/packages/file_selector/file_selector_android/android/src/test/java/dev/flutter/packages/file_selector_android/FileUtilsTest.java +++ b/packages/file_selector/file_selector_android/android/src/test/java/dev/flutter/packages/file_selector_android/FileUtilsTest.java @@ -61,7 +61,7 @@ public void before() { // present already. //noinspection deprecation var mimeTypeMap = shadowOf(MimeTypeMap.getSingleton()); - mimeTypeMap.addExtensionMimeTypeMapping("txt", "document/txt"); + mimeTypeMap.addExtensionMimeTypeMapping("txt", "text/plain"); mimeTypeMap.addExtensionMimeTypeMapping("jpg", "image/jpeg"); mimeTypeMap.addExtensionMimeTypeMapping("png", "image/png"); mimeTypeMap.addExtensionMimeTypeMapping("webp", "image/webp"); @@ -225,7 +225,7 @@ public Cursor query( @Nullable @Override public String getType(@NonNull Uri uri) { - if (uri.equals(TXT_URI)) return "document/txt"; + if (uri.equals(TXT_URI)) return "text/plain"; if (uri.equals(PNG_URI)) return "image/png"; if (uri.equals(WEBP_URI)) return "image/webp"; if (uri.equals(NO_EXTENSION_URI)) return "image/png"; diff --git a/packages/file_selector/file_selector_android/example/android/app/build.gradle.kts b/packages/file_selector/file_selector_android/example/android/app/build.gradle.kts index d687271b70c4..798406d1c00b 100644 --- a/packages/file_selector/file_selector_android/example/android/app/build.gradle.kts +++ b/packages/file_selector/file_selector_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -30,6 +29,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/file_selector/file_selector_android/example/android/app/src/androidTest/java/dev/flutter/packages/file_selector_android_example/FileSelectorAndroidTest.java b/packages/file_selector/file_selector_android/example/android/app/src/androidTest/java/dev/flutter/packages/file_selector_android_example/FileSelectorAndroidTest.java index d23a9e17fcb1..77385ce97609 100644 --- a/packages/file_selector/file_selector_android/example/android/app/src/androidTest/java/dev/flutter/packages/file_selector_android_example/FileSelectorAndroidTest.java +++ b/packages/file_selector/file_selector_android/example/android/app/src/androidTest/java/dev/flutter/packages/file_selector_android_example/FileSelectorAndroidTest.java @@ -21,6 +21,7 @@ import android.content.ClipData; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.view.View; import androidx.test.core.app.ActivityScenario; import androidx.test.espresso.flutter.api.WidgetAssertion; @@ -39,14 +40,21 @@ public class FileSelectorAndroidTest { @Rule public IntentsRule intentsRule = new IntentsRule(); public void clearAnySystemDialog() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return; + } myActivityTestRule .getScenario() .onActivity( new ActivityScenario.ActivityAction() { @Override public void perform(DriverExtensionActivity activity) { - Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - activity.sendBroadcast(closeDialog); + try { + Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); + activity.sendBroadcast(closeDialog); + } catch (SecurityException e) { + // Suppress exception on S+ emulator devices. + } } }); } diff --git a/packages/file_selector/file_selector_android/example/android/gradle.properties b/packages/file_selector/file_selector_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/file_selector/file_selector_android/example/android/gradle.properties +++ b/packages/file_selector/file_selector_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/file_selector/file_selector_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/file_selector/file_selector_android/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/file_selector/file_selector_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/file_selector/file_selector_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/file_selector/file_selector_android/example/android/settings.gradle.kts b/packages/file_selector/file_selector_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/file_selector/file_selector_android/example/android/settings.gradle.kts +++ b/packages/file_selector/file_selector_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/file_selector/file_selector_android/pubspec.yaml b/packages/file_selector/file_selector_android/pubspec.yaml index 73cc458743d5..7107b9e481d7 100644 --- a/packages/file_selector/file_selector_android/pubspec.yaml +++ b/packages/file_selector/file_selector_android/pubspec.yaml @@ -2,11 +2,11 @@ name: file_selector_android description: Android implementation of the file_selector package. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.5.2+6 +version: 0.5.2+7 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index 9a7af3661758..a88fbd42a35d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.19.11 + +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. + ## 2.19.10 * Updates README to include setup information. @@ -5,7 +10,6 @@ ## 2.19.9 * Adds attribution ID for Google Maps SDK usage. -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. ## 2.19.8 diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts index 636637dfaf44..e1c689d19a1a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.googlemaps" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle.kts b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle.kts index ce958702fc11..dcb483acd190 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle.kts +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -13,10 +12,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.googlemapsexample" minSdk = flutter.minSdkVersion @@ -43,6 +38,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } @@ -55,3 +56,7 @@ dependencies { testImplementation("com.google.android.gms:play-services-maps:17.0.0") testImplementation("com.google.maps.android:android-maps-utils:4.0.0") } + +tasks.matching { it.name == "packageDebugUnitTestForUnitTest" }.configureEach { + dependsOn("copyFlutterAssetsDebug") +} diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index c24d16c7e31b..a0f0c4305350 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/settings.gradle.kts b/packages/google_maps_flutter/google_maps_flutter_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/settings.gradle.kts +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 9d7c01b45d0b..1cd667db25f6 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,11 +2,11 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.19.10 +version: 2.19.11 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md index 52a3209b974b..bfe825a19f78 100644 --- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 7.2.12 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 7.2.11 diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts b/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts index 3e293f1a639e..3114b8a8920b 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.googlesignin" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle.kts b/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle.kts index fd57346bf3bb..11532edb2350 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle.kts +++ b/packages/google_sign_in/google_sign_in_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") id("com.google.gms.google-services") } @@ -14,10 +13,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.googlesigninexample" minSdk = flutter.minSdkVersion @@ -43,6 +38,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/google_sign_in/google_sign_in_android/example/android/gradle.properties b/packages/google_sign_in/google_sign_in_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/gradle.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties index 02767eb1ca47..2d428bfb1672 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/google_sign_in/google_sign_in_android/example/android/settings.gradle.kts b/packages/google_sign_in/google_sign_in_android/example/android/settings.gradle.kts index e7acb260f1a5..ecf16791af1f 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/settings.gradle.kts +++ b/packages/google_sign_in/google_sign_in_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" id("com.google.gms.google-services") version "4.4.2" apply false } diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml index 55bac0edd851..f8f7646448b4 100644 --- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml @@ -2,11 +2,11 @@ name: google_sign_in_android description: Android implementation of the google_sign_in plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 7.2.11 +version: 7.2.12 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index a5ea80375249..e81bba8861a1 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.8.13+18 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 0.8.13+17 diff --git a/packages/image_picker/image_picker_android/android/build.gradle.kts b/packages/image_picker/image_picker_android/android/build.gradle.kts index c6d09be0e912..7f24b9a3f59a 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle.kts +++ b/packages/image_picker/image_picker_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.imagepicker" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/image_picker/image_picker_android/android/src/main/AndroidManifest.xml b/packages/image_picker/image_picker_android/android/src/main/AndroidManifest.xml index 5f9bcd822e5f..067717b88ab0 100755 --- a/packages/image_picker/image_picker_android/android/src/main/AndroidManifest.xml +++ b/packages/image_picker/image_picker_android/android/src/main/AndroidManifest.xml @@ -2,6 +2,15 @@ xmlns:tools="http://schemas.android.com/tools" package="io.flutter.plugins.imagepicker"> + + + + + + + + + =3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md index 4724caf0e208..c1ba013f6f57 100644 --- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md @@ -1,6 +1,10 @@ +## 0.5.0+1 + +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. + ## 0.5.0 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. * Updates Google Play Billing Library from 7.1.1 to 8.0.0. * **BREAKING CHANGES**: * Removes `queryPurchaseHistory` and its wrapper `queryPurchaseHistoryAsync`. Use `queryPurchases` instead. diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts index 94d243766b06..64a5be3f4a26 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.inapppurchase" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle.kts b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle.kts index 906da677af01..f876f925f276 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle.kts +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle.kts @@ -2,7 +2,6 @@ import java.util.Properties plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -42,10 +41,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - signingConfigs { create("release") { storeFile = keystoreStoreFile @@ -91,6 +86,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties index c24d16c7e31b..a0f0c4305350 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/settings.gradle.kts b/packages/in_app_purchase/in_app_purchase_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/settings.gradle.kts +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml index cc769821eaea..14e1a36bcbc3 100644 --- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml @@ -3,11 +3,11 @@ description: An implementation for the Android platform of the Flutter `in_app_p repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.5.0 +version: 0.5.0+1 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index c707e2fedbe4..f9a205781b12 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.3.0+15 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 0.3.0+14 diff --git a/packages/interactive_media_ads/android/build.gradle.kts b/packages/interactive_media_ads/android/build.gradle.kts index a9ef29108629..859e3e7ba24d 100644 --- a/packages/interactive_media_ads/android/build.gradle.kts +++ b/packages/interactive_media_ads/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "dev.flutter.packages.interactive_media_ads" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index 1235e312ccf1..7a5f82e561dd 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.3.0+14" + const val pluginVersion = "0.3.0+15" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/example/android/app/build.gradle.kts b/packages/interactive_media_ads/example/android/app/build.gradle.kts index 6869e19efec5..cfb11daa8d22 100644 --- a/packages/interactive_media_ads/example/android/app/build.gradle.kts +++ b/packages/interactive_media_ads/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -21,10 +20,6 @@ android { } // #enddocregion android_desugaring - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "dev.flutter.packages.interactive_media_ads_example" minSdk = flutter.minSdkVersion @@ -43,6 +38,12 @@ android { } // #enddocregion android_desugaring +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/interactive_media_ads/example/android/gradle.properties b/packages/interactive_media_ads/example/android/gradle.properties index 9112aa54cc0d..6ae614020dcf 100644 --- a/packages/interactive_media_ads/example/android/gradle.properties +++ b/packages/interactive_media_ads/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/interactive_media_ads/example/android/settings.gradle.kts b/packages/interactive_media_ads/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/interactive_media_ads/example/android/settings.gradle.kts +++ b/packages/interactive_media_ads/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index 617641a1d5cc..6be067040617 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.3.0+14" + static let pluginVersion = "0.3.0+15" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index cd9b6deb9dfd..46b210097b80 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,13 +2,13 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.3.0+14 # This must match the version in +version: 0.3.0+15 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index 0f6f43d7012c..19ec5cccb452 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.0.9 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 2.0.8 diff --git a/packages/local_auth/local_auth_android/android/build.gradle.kts b/packages/local_auth/local_auth_android/android/build.gradle.kts index e9321f91a6d9..49564362dcf8 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle.kts +++ b/packages/local_auth/local_auth_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.localauth" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ rootProject.allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/local_auth/local_auth_android/example/android/app/build.gradle.kts b/packages/local_auth/local_auth_android/example/android/app/build.gradle.kts index 520bcf8c629b..d2eb441fe283 100644 --- a/packages/local_auth/local_auth_android/example/android/app/build.gradle.kts +++ b/packages/local_auth/local_auth_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -13,10 +12,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.localauthexample" minSdk = flutter.minSdkVersion @@ -36,6 +31,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/local_auth/local_auth_android/example/android/gradle.properties b/packages/local_auth/local_auth_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/local_auth/local_auth_android/example/android/gradle.properties +++ b/packages/local_auth/local_auth_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties index e42be75d1b3d..1664b7f6f4b7 100644 --- a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/local_auth/local_auth_android/example/android/settings.gradle.kts b/packages/local_auth/local_auth_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/local_auth/local_auth_android/example/android/settings.gradle.kts +++ b/packages/local_auth/local_auth_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index 0d611772ac13..392b3cf19bd6 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,11 +2,11 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 2.0.8 +version: 2.0.9 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts b/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts index 284efe74ecb6..ea69599c7094 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts +++ b/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "com.example.test_plugin" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 allWarningsAsErrors = true } } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/PrimitiveTest.kt b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/PrimitiveTest.kt index d2035541b292..0576a748130e 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/PrimitiveTest.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/PrimitiveTest.kt @@ -42,7 +42,7 @@ class PrimitiveTest { } verify { binaryMessenger.setMessageHandler(channelName, handlerSlot.captured) } - verify { api.anInt(input.toLong()) } + verify { api.anInt(input) } } @Test diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle.kts b/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle.kts index a5f1632dd97b..b0a909c00d4f 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle.kts +++ b/packages/pigeon/platform_tests/test_plugin/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -14,10 +13,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - lint { baseline = file("lint-baseline.xml") } @@ -37,6 +32,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/gradle.properties b/packages/pigeon/platform_tests/test_plugin/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/gradle.properties +++ b/packages/pigeon/platform_tests/test_plugin/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/settings.gradle.kts b/packages/pigeon/platform_tests/test_plugin/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/settings.gradle.kts +++ b/packages/pigeon/platform_tests/test_plugin/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/pigeon/platform_tests/test_plugin/pubspec.yaml b/packages/pigeon/platform_tests/test_plugin/pubspec.yaml index 9b8d7e5c8989..22e69f2ecbf3 100644 --- a/packages/pigeon/platform_tests/test_plugin/pubspec.yaml +++ b/packages/pigeon/platform_tests/test_plugin/pubspec.yaml @@ -4,8 +4,8 @@ version: 0.0.1 publish_to: none environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md index afbef2b131f8..0ebbf0ec72c9 100644 --- a/packages/quick_actions/quick_actions_android/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 1.0.31 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 1.0.30 diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle.kts b/packages/quick_actions/quick_actions_android/android/build.gradle.kts index c9007e37c083..3279b71e03aa 100644 --- a/packages/quick_actions/quick_actions_android/android/build.gradle.kts +++ b/packages/quick_actions/quick_actions_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.quickactions" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle.kts b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle.kts index 946557001ac0..2d52c3bc6d27 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle.kts +++ b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -13,10 +12,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.quickactionsexample" minSdk = flutter.minSdkVersion @@ -36,6 +31,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java b/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java index 6eed13b30aaf..36befe7f00bd 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java +++ b/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java @@ -12,6 +12,7 @@ import android.content.Intent; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; +import android.os.Build; import android.util.Log; import androidx.lifecycle.Lifecycle; import androidx.test.core.app.ActivityScenario; @@ -154,6 +155,13 @@ private ActivityScenario ensureAppRunToView() { // Broadcast a request to clear any system dialog that blocks the application from obtaining // focus. See https://github.com/flutter/flutter/issues/140987 private void clearAnySystemDialog(Context context) { - context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return; + } + try { + context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); + } catch (SecurityException e) { + // Suppress exception on Android 12+ where this broadcast is restricted. + } } } diff --git a/packages/quick_actions/quick_actions_android/example/android/gradle.properties b/packages/quick_actions/quick_actions_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/quick_actions/quick_actions_android/example/android/gradle.properties +++ b/packages/quick_actions/quick_actions_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/quick_actions/quick_actions_android/example/android/settings.gradle.kts b/packages/quick_actions/quick_actions_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/quick_actions/quick_actions_android/example/android/settings.gradle.kts +++ b/packages/quick_actions/quick_actions_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index 6394a14c4548..54fda8fe3ee3 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -2,11 +2,11 @@ name: quick_actions_android description: An implementation for the Android platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.30 +version: 1.0.31 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index f2f058a501d1..830e1dbc59e3 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.4.24 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 2.4.23 diff --git a/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts b/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts index edf15edc0ca4..2ef58d6a0a8c 100644 --- a/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts +++ b/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.sharedpreferences" version = "1.0-SNAPSHOT" @@ -31,12 +29,11 @@ tasks.withType().configureEach { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle.kts b/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle.kts index 42f5ba3743f0..236fa8135fce 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle.kts +++ b/packages/shared_preferences/shared_preferences_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -14,10 +13,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "dev.flutter.plugins.shared_preferences_example" minSdk = flutter.minSdkVersion @@ -37,6 +32,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/shared_preferences/shared_preferences_android/example/android/gradle.properties b/packages/shared_preferences/shared_preferences_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/gradle.properties +++ b/packages/shared_preferences/shared_preferences_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties index 6064aebd5424..e053c52b9410 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/shared_preferences/shared_preferences_android/example/android/settings.gradle.kts b/packages/shared_preferences/shared_preferences_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/settings.gradle.kts +++ b/packages/shared_preferences/shared_preferences_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index 901b11bce248..e7c022ebe874 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,11 +2,11 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.23 +version: 2.4.24 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md index 5d6c25a8f7a3..109f0d1775f4 100644 --- a/packages/url_launcher/url_launcher_android/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 6.3.31 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 6.3.30 diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle.kts b/packages/url_launcher/url_launcher_android/android/build.gradle.kts index 071bce13b0db..cb15914e7ec5 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle.kts +++ b/packages/url_launcher/url_launcher_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.urllauncher" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/url_launcher/url_launcher_android/android/src/main/AndroidManifest.xml b/packages/url_launcher/url_launcher_android/android/src/main/AndroidManifest.xml index 175c99e594b3..2a161d4113aa 100644 --- a/packages/url_launcher/url_launcher_android/android/src/main/AndroidManifest.xml +++ b/packages/url_launcher/url_launcher_android/android/src/main/AndroidManifest.xml @@ -1,5 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(activity).startActivity(intentCaptor.capture(), isNull()); + verify(activity).startActivity(intentCaptor.capture(), any()); assertTrue(result); assertEquals(Intent.ACTION_VIEW, intentCaptor.getValue().getAction()); assertNull(intentCaptor.getValue().getComponent()); @@ -235,7 +234,7 @@ public void openWebView_opensUrlInCustomTabsWithCORSAllowedHeader() { url, true, new WebViewOptions(false, false, headers), new BrowserOptions(false)); final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(activity).startActivity(intentCaptor.capture(), isNull()); + verify(activity).startActivity(intentCaptor.capture(), any()); assertTrue(result); assertEquals(Intent.ACTION_VIEW, intentCaptor.getValue().getAction()); assertNull(intentCaptor.getValue().getComponent()); @@ -257,7 +256,7 @@ public void openWebView_opensUrlInCustomTabsWithShowTitle() { url, true, new WebViewOptions(false, false, headers), new BrowserOptions(true)); final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(activity).startActivity(intentCaptor.capture(), isNull()); + verify(activity).startActivity(intentCaptor.capture(), any()); assertTrue(result); assertEquals(Intent.ACTION_VIEW, intentCaptor.getValue().getAction()); assertNull(intentCaptor.getValue().getComponent()); @@ -279,7 +278,7 @@ public void openWebView_opensUrlInCustomTabsWithoutShowTitle() { url, true, new WebViewOptions(false, false, headers), new BrowserOptions(false)); final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(activity).startActivity(intentCaptor.capture(), isNull()); + verify(activity).startActivity(intentCaptor.capture(), any()); assertTrue(result); assertEquals(Intent.ACTION_VIEW, intentCaptor.getValue().getAction()); assertNull(intentCaptor.getValue().getComponent()); @@ -296,7 +295,7 @@ public void openWebView_fallsBackToWebViewIfCustomTabFails() { String url = "https://flutter.dev"; doThrow(new ActivityNotFoundException()) .when(activity) - .startActivity(any(), isNull()); // for custom tabs intent + .startActivity(any(), any()); // for custom tabs intent boolean result = api.openUrlInApp( @@ -399,7 +398,7 @@ public void openWebView_handlesEnableShowTitle() { new BrowserOptions(showTitle)); final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(activity).startActivity(intentCaptor.capture(), isNull()); + verify(activity).startActivity(intentCaptor.capture(), any()); assertEquals( CustomTabsIntent.SHOW_PAGE_TITLE, @@ -430,7 +429,7 @@ public void openWebView_returnsFalse() { api.setActivity(activity); doThrow(new ActivityNotFoundException()) .when(activity) - .startActivity(any(), isNull()); // for custom tabs intent + .startActivity(any(), any()); // for custom tabs intent doThrow(new ActivityNotFoundException()) .when(activity) .startActivity(any()); // for webview intent diff --git a/packages/url_launcher/url_launcher_android/example/android/app/build.gradle.kts b/packages/url_launcher/url_launcher_android/example/android/app/build.gradle.kts index 402d90a1fd67..ff59359725b6 100644 --- a/packages/url_launcher/url_launcher_android/example/android/app/build.gradle.kts +++ b/packages/url_launcher/url_launcher_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -13,10 +12,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.urllauncherexample" minSdk = flutter.minSdkVersion @@ -36,6 +31,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/url_launcher/url_launcher_android/example/android/gradle.properties b/packages/url_launcher/url_launcher_android/example/android/gradle.properties index bfb7805f5662..449af8303e19 100644 --- a/packages/url_launcher/url_launcher_android/example/android/gradle.properties +++ b/packages/url_launcher/url_launcher_android/example/android/gradle.properties @@ -1,3 +1,8 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true android.enableJetifier=false + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties index 4389a446aa9e..8f607254eb20 100644 --- a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/url_launcher/url_launcher_android/example/android/settings.gradle.kts b/packages/url_launcher/url_launcher_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/url_launcher/url_launcher_android/example/android/settings.gradle.kts +++ b/packages/url_launcher/url_launcher_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml index 40a8fc6252ae..f29206cb026d 100644 --- a/packages/url_launcher/url_launcher_android/pubspec.yaml +++ b/packages/url_launcher/url_launcher_android/pubspec.yaml @@ -2,11 +2,11 @@ name: url_launcher_android description: Android implementation of the url_launcher plugin. repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 6.3.30 +version: 6.3.31 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 0cd9672cdb05..6341b5de7078 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 4.12.1 -* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. +* Migrates to Built-in Kotlin to support AGP 9. +* Updates minimum supported SDK version to Flutter 3.44/Dart 3.12. ## 4.12.0 diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts b/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts index 6872533d581d..24350b5cb692 100644 --- a/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts +++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - group = "io.flutter.plugins.webviewflutter" version = "1.0-SNAPSHOT" @@ -25,12 +23,11 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") } kotlin { compilerOptions { - jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java index 41e3aad75952..ea86ebea2a6b 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java @@ -6,6 +6,7 @@ import static android.hardware.display.DisplayManager.DisplayListener; +import android.annotation.SuppressLint; import android.hardware.display.DisplayManager; import android.os.Build; import android.util.Log; @@ -107,6 +108,7 @@ public void onDisplayChanged(int displayId) { } } + @SuppressLint("SoonBlockedPrivateApi") @SuppressWarnings({"unchecked", "PrivateApi"}) private static ArrayList yoinkDisplayListeners(DisplayManager displayManager) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle.kts b/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle.kts index 7870623725c2..19c0aa627804 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle.kts +++ b/packages/webview_flutter/webview_flutter_android/example/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -14,10 +13,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { applicationId = "io.flutter.plugins.webviewflutterandroidexample" minSdk = flutter.minSdkVersion @@ -37,6 +32,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/packages/webview_flutter/webview_flutter_android/example/android/gradle.properties b/packages/webview_flutter/webview_flutter_android/example/android/gradle.properties index da87b2c8f892..6146589810a7 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/gradle.properties +++ b/packages/webview_flutter/webview_flutter_android/example/android/gradle.properties @@ -1,2 +1,7 @@ org.gradle.jvmargs=-Xmx4G android.useAndroidX=true + +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index c24d16c7e31b..a0f0c4305350 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/packages/webview_flutter/webview_flutter_android/example/android/settings.gradle.kts b/packages/webview_flutter/webview_flutter_android/example/android/settings.gradle.kts index a0118892641d..eac6896b474d 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/settings.gradle.kts +++ b/packages/webview_flutter/webview_flutter_android/example/android/settings.gradle.kts @@ -20,8 +20,8 @@ pluginManagement { // See https://github.com/flutter/flutter/blob/master/docs/ecosystem/Plugins-and-Packages-repository-structure.md#gradle-structure for more info. plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.11.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false id("com.google.cloud.artifactregistry.gradle-plugin") version "2.2.1" } diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_ssl_auth_error.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_ssl_auth_error.dart index 055520d14212..5ee8932b16a4 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_ssl_auth_error.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_ssl_auth_error.dart @@ -12,9 +12,9 @@ class AndroidSslAuthError extends PlatformSslAuthError { AndroidSslAuthError._({ required super.certificate, required super.description, - required android.SslErrorHandler handler, + required this._handler, required this.url, - }) : _handler = handler; + }); final android.SslErrorHandler _handler; diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart index f33fba2dc0fa..96c39599dec9 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart @@ -942,8 +942,8 @@ class AndroidWebViewController extends PlatformWebViewController { class AndroidWebViewPermissionRequest extends PlatformWebViewPermissionRequest { const AndroidWebViewPermissionRequest._({ required super.types, - required android_webview.PermissionRequest request, - }) : _request = request; + required this._request, + }); final android_webview.PermissionRequest _request; diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 90a7c38df3d7..01507ffab8e2 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,11 +2,11 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.12.0 +version: 4.12.1 environment: - sdk: ^3.10.0 - flutter: ">=3.38.0" + sdk: ^3.12.0 + flutter: ">=3.44.0" flutter: plugin: diff --git a/script/tool/lib/src/validators/gradle_validator.dart b/script/tool/lib/src/validators/gradle_validator.dart index 9797f313c8df..e1cea3d76028 100644 --- a/script/tool/lib/src/validators/gradle_validator.dart +++ b/script/tool/lib/src/validators/gradle_validator.dart @@ -16,7 +16,7 @@ import '../common/repository_package.dart'; /// The lowest `ext.kotlin_version` that example apps are allowed to use. @visibleForTesting -final Version minKotlinVersion = Version(1, 7, 10); +final Version minKotlinVersion = Version(2, 0, 0); /// A validator that checks that Gradle files follow repository conventions. class GradleValidator { @@ -164,10 +164,13 @@ class GradleValidator { if (!_validateCompatibilityVersions(lines)) { succeeded = false; } + if (!_validateKotlinPluginUsage(lines)) { + succeeded = false; + } if (!_validateKotlinJvmCompatibility(lines)) { succeeded = false; } - if (!_validateJavaKotlinCompileOptionsAlignment(lines)) { + if (!_validateJavaKotlinCompilerOptionsAlignment(lines)) { succeeded = false; } if (!_validateGradleDrivenLintConfig(lines)) { @@ -493,17 +496,69 @@ for more details.'''; bool isKotlinOptions(String line) => line.contains('kotlinOptions') && !_isCommented(line); final bool hasKotlinOptions = gradleLines.any(isKotlinOptions); - final bool kotlinOptionsUsesJavaVersion = gradleLines.any( + if (hasKotlinOptions) { + const kotlinOptionsErrorMessage = + ''' +build.gradle.kts must not use the deprecated "kotlinOptions" DSL. Use "kotlin.compilerOptions" instead: + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_$_minimumJavaVersion + } +} +'''; + printError( + '$_indentation${kotlinOptionsErrorMessage.split('\n').join('\n$_indentation')}', + ); + return false; + } + + bool isCompilerOptions(String line) => + line.contains('compilerOptions') && !_isCommented(line); + final bool hasCompilerOptions = gradleLines.any(isCompilerOptions); + + if (hasCompilerOptions && _isCompilerOptionsInsideAndroid(gradleLines)) { + const nestedCompilerOptionsErrorMessage = + ''' +build.gradle.kts must not nest "kotlin" or "compilerOptions" inside the "android" block. It must be at the top-level: + Good: + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_$_minimumJavaVersion + } + } + + android { + ... + } + BAD: + android { + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_$_minimumJavaVersion + } + } + } +'''; + printError( + '$_indentation${nestedCompilerOptionsErrorMessage.split('\n').join('\n$_indentation')}', + ); + return false; + } + + final bool compilerOptionsUsesJvmTargetEnum = gradleLines.any( (String line) => - line.contains('jvmTarget = JavaVersion.VERSION_') && + RegExp( + r'jvmTarget\s*=\s*(?:[a-zA-Z0-9.]+)?JvmTarget\.JVM_\d+', + ).hasMatch(line) && !_isCommented(line), ); - // Either does not set kotlinOptions or does and uses non-string based syntax. - if (hasKotlinOptions && !kotlinOptionsUsesJavaVersion) { - // Bad lines contains the first 4 lines including the kotlinOptions section. + + // Either does not set compilerOptions or does and uses non-string based syntax. + if (hasCompilerOptions && !compilerOptionsUsesJvmTargetEnum) { var badLines = ''; final int startIndex = gradleLines.indexOf( - gradleLines.firstWhere(isKotlinOptions), + gradleLines.firstWhere(isCompilerOptions), ); for ( var i = startIndex; @@ -512,17 +567,18 @@ for more details.'''; ) { badLines += '${gradleLines[i]}\n'; } + final kotlinErrorMessage = ''' -If build.gradle.kts sets jvmTarget then it must use JavaVersion syntax. +If build.gradle.kts sets jvmTarget inside kotlin.compilerOptions, it must use JvmTarget syntax. Good: - android { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_$_minimumJavaVersion.toString() - } + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_$_minimumJavaVersion + } } BAD: - $badLines + ${badLines.trim()} '''; printError( '$_indentation${kotlinErrorMessage.split('\n').join('\n$_indentation')}', @@ -533,17 +589,100 @@ If build.gradle.kts sets jvmTarget then it must use JavaVersion syntax. return true; } - bool _validateJavaKotlinCompileOptionsAlignment(List gradleLines) { + bool _isCompilerOptionsInsideAndroid(List gradleLines) { + final int androidIndex = gradleLines.indexWhere( + (String line) => line.contains('android {') && !_isCommented(line), + ); + if (androidIndex == -1) { + return false; + } + + // Find closing brace of android block. + var braceCount = 1; + var androidEndIndex = -1; + for (int i = androidIndex + 1; i < gradleLines.length; i++) { + final String line = gradleLines[i]; + if (_isCommented(line)) { + continue; + } + braceCount += line.split('{').length - 1; + braceCount -= line.split('}').length - 1; + if (braceCount == 0) { + androidEndIndex = i; + break; + } + } + + if (androidEndIndex == -1) { + return false; + } + + final int compilerOptionsIndex = gradleLines.indexWhere( + (String line) => line.contains('compilerOptions') && !_isCommented(line), + ); + + return compilerOptionsIndex > androidIndex && + compilerOptionsIndex < androidEndIndex; + } + + bool _validateKotlinPluginUsage(List gradleLines) { + final kotlinPluginRegex = RegExp( + r'''id\s*\(?\s*["'](?:kotlin-android|org\.jetbrains\.kotlin\.android)["']\s*\)?''', + ); + final bool hasKotlinPlugin = gradleLines.any( + (String line) => kotlinPluginRegex.hasMatch(line) && !_isCommented(line), + ); + + if (hasKotlinPlugin) { + const kotlinPluginErrorMessage = ''' +The kotlin-android plugin should not be applied in the plugin module's build.gradle.kts. + Good: + plugins { + id("com.android.library") + } + BAD: + plugins { + id("com.android.library") + id("kotlin-android") + } +'''; + printError( + '$_indentation${kotlinPluginErrorMessage.split('\n').join('\n$_indentation')}', + ); + return false; + } + + return true; + } + + bool _validateJavaKotlinCompilerOptionsAlignment(List gradleLines) { final javaVersions = []; // Some java versions have the format VERSION_1_8 but we dont need to handle those // because they are below the minimum. final javaVersionMatcher = RegExp( r'JavaVersion.VERSION_(?\d+)', ); + final kotlinJvmTargetMatcher = RegExp( + r'JvmTarget.JVM_(?\d+)', + ); for (final line in gradleLines) { - final RegExpMatch? match = javaVersionMatcher.firstMatch(line); - if (!_isCommented(line) && match != null) { - final String? foundVersion = match.namedGroup('javaVersion'); + if (_isCommented(line)) { + continue; + } + final RegExpMatch? javaMatch = javaVersionMatcher.firstMatch(line); + if (javaMatch != null) { + final String? foundVersion = javaMatch.namedGroup('javaVersion'); + if (foundVersion != null) { + javaVersions.add(foundVersion); + } + } + final RegExpMatch? kotlinJvmMatch = kotlinJvmTargetMatcher.firstMatch( + line, + ); + if (kotlinJvmMatch != null) { + final String? foundVersion = kotlinJvmMatch.namedGroup( + 'kotlinJvmVersion', + ); if (foundVersion != null) { javaVersions.add(foundVersion); } @@ -553,7 +692,7 @@ If build.gradle.kts sets jvmTarget then it must use JavaVersion syntax. final int version = int.parse(javaVersions.first); if (!javaVersions.every((String element) => element == '$version')) { const javaVersionAlignmentError = ''' -If build.gradle.kts uses JavaVersion.* versions must be the same. +If build.gradle.kts uses JavaVersion.* and JvmTarget.*, the versions must be the same. '''; printError( '$_indentation${javaVersionAlignmentError.split('\n').join('\n$_indentation')}', diff --git a/script/tool/test/validate_command_gradle_test.dart b/script/tool/test/validate_command_gradle_test.dart index cb5470ec8d83..a5942ba529ae 100644 --- a/script/tool/test/validate_command_gradle_test.dart +++ b/script/tool/test/validate_command_gradle_test.dart @@ -50,11 +50,12 @@ void main() { bool commentNamespace = false, bool warningsConfigured = true, String compileSdk = '36', - bool includeKotlinOptions = true, - bool commentKotlinOptions = false, + bool includeKotlinCompilerOptions = true, + bool commentKotlinCompilerOptions = false, bool useDeprecatedJvmTargetStyle = false, int jvmTargetValue = 17, int kotlinJvmValue = 17, + bool includeKotlinGradlePlugin = false, }) { final File buildGradle = package .platformDirectory(FlutterPlatform.android) @@ -85,13 +86,15 @@ java { final namespace = ' ${commentNamespace ? '// ' : ''}namespace = "$_defaultFakeNamespace"'; final kotlinJvmTarget = useDeprecatedJvmTargetStyle - ? '$jvmTargetValue' - : 'JavaVersion.VERSION_$kotlinJvmValue.toString()'; + ? '"$jvmTargetValue"' + : 'org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_$kotlinJvmValue'; final kotlinConfig = ''' - ${commentKotlinOptions ? '//' : ''}kotlinOptions { - ${commentKotlinOptions ? '//' : ''}jvmTarget = $kotlinJvmTarget - ${commentKotlinOptions ? '//' : ''}}'''; +${commentKotlinCompilerOptions ? '// ' : ''}kotlin { +${commentKotlinCompilerOptions ? '// ' : ''} compilerOptions { +${commentKotlinCompilerOptions ? '// ' : ''} jvmTarget = $kotlinJvmTarget +${commentKotlinCompilerOptions ? '// ' : ''} } +${commentKotlinCompilerOptions ? '// ' : ''}}'''; buildGradle.writeAsStringSync(''' group = "dev.flutter.plugins.fake" @@ -113,10 +116,12 @@ allprojects { plugins { id("com.android.library") - id("kotlin-android") + ${includeKotlinGradlePlugin ? 'id("kotlin-android")' : ''} } ${includeLanguageVersion ? javaSection : ''} +${includeKotlinCompilerOptions ? kotlinConfig : ''} + android { ${includeNamespace ? namespace : ''} compileSdk = $compileSdk @@ -129,7 +134,6 @@ ${warningsConfigured ? warningConfig : ''} ${includeSourceCompat ? sourceCompat : ''} ${includeTargetCompat ? targetCompat : ''} } - ${includeKotlinOptions ? kotlinConfig : ''} testOptions { unitTests { isIncludeAndroidResources = true @@ -460,41 +464,44 @@ flutter { }, ); - test('fails when compatibility values do not match kotlinOptions', () async { - final RepositoryPackage package = createFakePlugin( - 'a_plugin', - packagesDir, - examples: [], - ); - writeFakePluginBuildGradle( - package, - includeSourceCompat: true, - includeTargetCompat: true, - jvmTargetValue: 21, - // ignore: avoid_redundant_argument_values - kotlinJvmValue: 17, - ); - writeFakeManifest(package); + test( + 'fails when compatibility values do not match kotlin compiler options', + () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakePluginBuildGradle( + package, + includeSourceCompat: true, + includeTargetCompat: true, + jvmTargetValue: 21, + // ignore: avoid_redundant_argument_values + kotlinJvmValue: 17, + ); + writeFakeManifest(package); - Error? commandError; - final List output = await runCapturingPrint( - runner, - ['validate'], - errorHandler: (Error e) { - commandError = e; - }, - ); + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['validate'], + errorHandler: (Error e) { + commandError = e; + }, + ); - expect(commandError, isA()); - expect( - output, - containsAllInOrder([ - contains( - 'If build.gradle.kts uses JavaVersion.* versions must be the same.', - ), - ]), - ); - }); + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + 'If build.gradle.kts uses JavaVersion.* and JvmTarget.*, the versions must be the same.', + ), + ]), + ); + }, + ); test('passes when jvmValues are higher than minimim', () async { final RepositoryPackage package = createFakePlugin( @@ -1198,7 +1205,7 @@ flutter { writeFakeExampleBuildGradles( example, pluginName: packageName, - kotlinVersion: '1.6.21', + kotlinVersion: '1.9.20', ); writeFakeManifest(example, isApp: true); @@ -1217,7 +1224,7 @@ flutter { containsAllInOrder([ contains( 'settings.gradle.kts sets the "org.jetbrains.kotlin.android" plugin ' - 'version to "1.6.21". The minimum Kotlin version that can be ' + 'version to "1.9.20". The minimum Kotlin version that can be ' 'specified is $minKotlinVersion, for compatibility with modern ' 'dependencies.', ), @@ -1381,8 +1388,64 @@ flutter { ); }); - group('kotlinOptions check', () { - test('passes when kotlin options are specified', () async { + group('kotlin gradle plugin check', () { + test('passes when kotlin gradle plugin is not applied', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakePluginBuildGradle(package, includeLanguageVersion: true); + writeFakeManifest(package); + + final List output = await runCapturingPrint(runner, [ + 'validate', + ]); + + expect( + output, + containsAllInOrder([ + contains('Validating android/build.gradle.kts'), + ]), + ); + }); + + test('fails when kotlin gradle plugin is applied', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakePluginBuildGradle( + package, + includeLanguageVersion: true, + includeKotlinGradlePlugin: true, + ); + writeFakeManifest(package); + + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['validate'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + "The kotlin-android plugin should not be applied in the plugin module's build.gradle.kts", + ), + ]), + ); + }); + }); + + group('kotlin compiler options check', () { + test('passes when kotlin compiler options are specified', () async { final RepositoryPackage package = createFakePlugin( 'a_plugin', packagesDir, @@ -1392,7 +1455,7 @@ flutter { package, includeLanguageVersion: true, // ignore: avoid_redundant_argument_values ensure codepath is tested if defaults change. - includeKotlinOptions: true, + includeKotlinCompilerOptions: true, ); writeFakeManifest(package); @@ -1408,7 +1471,7 @@ flutter { ); }); - test('passes when kotlin options are not specified', () async { + test('passes when kotlin compiler options are not specified', () async { final RepositoryPackage package = createFakePlugin( 'a_plugin', packagesDir, @@ -1417,7 +1480,7 @@ flutter { writeFakePluginBuildGradle( package, includeLanguageVersion: true, - includeKotlinOptions: false, + includeKotlinCompilerOptions: false, ); writeFakeManifest(package); @@ -1433,7 +1496,7 @@ flutter { ); }); - test('passes when kotlin options commented out', () async { + test('passes when kotlin compiler options is commented out', () async { final RepositoryPackage package = createFakePlugin( 'a_plugin', packagesDir, @@ -1442,7 +1505,7 @@ flutter { writeFakePluginBuildGradle( package, includeLanguageVersion: true, - commentKotlinOptions: true, + commentKotlinCompilerOptions: true, ); writeFakeManifest(package); @@ -1458,7 +1521,7 @@ flutter { ); }); - test('fails when kotlin options uses string jvm version', () async { + test('fails when kotlin compiler options uses string jvm version', () async { final RepositoryPackage package = createFakePlugin( 'a_plugin', packagesDir, @@ -1485,10 +1548,99 @@ flutter { output, containsAllInOrder([ contains( - 'build.gradle.kts sets jvmTarget then it must use JavaVersion syntax', + 'If build.gradle.kts sets jvmTarget inside kotlin.compilerOptions, it must use JvmTarget syntax.', ), ]), ); }); + + test('fails when there is a kotlin options DSL block', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakePluginBuildGradle( + package, + includeLanguageVersion: true, + includeKotlinCompilerOptions: false, + ); + + final File buildGradle = package + .platformDirectory(FlutterPlatform.android) + .childFile('build.gradle.kts'); + final String contents = buildGradle.readAsStringSync(); + final String updatedContents = contents.replaceFirst( + 'android {', + 'android {\n kotlinOptions {\n jvmTarget = JavaVersion.VERSION_17.toString()\n }', + ); + buildGradle.writeAsStringSync(updatedContents); + writeFakeManifest(package); + + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['validate'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + 'build.gradle.kts must not use the deprecated "kotlinOptions" DSL. Use "kotlin.compilerOptions" instead', + ), + ]), + ); + }); + + test( + 'fails when there is a kotlin compiler options DSL block in the android block', + () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakePluginBuildGradle( + package, + includeLanguageVersion: true, + includeKotlinCompilerOptions: false, + ); + + final File buildGradle = package + .platformDirectory(FlutterPlatform.android) + .childFile('build.gradle.kts'); + final String contents = buildGradle.readAsStringSync(); + final String updatedContents = contents.replaceFirst( + 'android {', + 'android {\n kotlin {\n compilerOptions {\n jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17\n }\n }', + ); + buildGradle.writeAsStringSync(updatedContents); + writeFakeManifest(package); + + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['validate'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + 'build.gradle.kts must not nest "kotlin" or "compilerOptions" inside the "android" block. It must be at the top-level', + ), + ]), + ); + }, + ); }); }