From a3f8c5349fccc099e061ca5cc4cc1ae1b6b6cd91 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 14 Oct 2025 13:27:17 +0100 Subject: [PATCH 1/2] chore: update Android Gradle build to support the newer Flutter SDK - Upgraded Gradle to 8.12.1 - Changed compile and target compatibility to Java 17 - Set `compileSdkVersion` to use Flutter's value. - Added compiler flags for unchecked and deprecation warnings. --- .github/workflows/flutter_integration.yaml | 4 +-- .tool-versions | 2 +- android/build.gradle | 28 +++++++++++-------- example/android/app/build.gradle | 6 ++-- example/android/settings.gradle | 2 +- test_integration/android/app/build.gradle | 13 +++++++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- test_integration/android/settings.gradle | 5 ++-- 8 files changed, 37 insertions(+), 25 deletions(-) diff --git a/.github/workflows/flutter_integration.yaml b/.github/workflows/flutter_integration.yaml index fd49de9bf..db1fde8d8 100644 --- a/.github/workflows/flutter_integration.yaml +++ b/.github/workflows/flutter_integration.yaml @@ -53,7 +53,7 @@ jobs: - uses: subosito/flutter-action@v2 with: - flutter-version: '3.24' + flutter-version: '3.29' cache: true - name: 'Run Flutter Driver tests' @@ -65,4 +65,4 @@ jobs: disable-animations: true script: | flutter pub get - cd test_integration && flutter drive + cd test_integration && flutter build apk && flutter drive diff --git a/.tool-versions b/.tool-versions index 02d04683e..2d7c47ed4 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -ruby 3.0.1 +ruby 3.4.5 flutter 3.29.0 diff --git a/android/build.gradle b/android/build.gradle index eae63b9af..5a874d16e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,14 +1,16 @@ group 'io.ably.flutter.plugin' -version '1.0' +// Use the snapshot suffix to show that build artifacts are not shared. +// This Gradle file is used by Flutter to build itself. +version '1.0-SNAPSHOT' buildscript { repositories { google() - mavenCentral() // for firebase-messaging + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.0' + classpath 'com.android.tools.build:gradle:8.12.1' } } @@ -26,32 +28,28 @@ dependencies { implementation 'io.ably:ably-android:1.2.40' // https://firebase.google.com/docs/cloud-messaging/android/client - implementation 'com.google.firebase:firebase-messaging:23.0.4' + implementation 'com.google.firebase:firebase-messaging:23.0.6' // https://github.com/google/desugar_jdk_libs coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' } android { - compileSdkVersion 34 + // Older versions of the Flutter SDK don't provide `compileSdkVersion`, so it defaults to 34 + compileSdkVersion flutter.compileSdkVersion ?: 34 // Conditional for compatibility with AGP <4.2. if (project.android.hasProperty("namespace")) { namespace 'io.ably.flutter.plugin' } - // Require Java language level 8 so we can use Method References (used with Lambdas) compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - - // Flag to enable Java 8 language APIs while supporting to older SDK Versions - coreLibraryDesugaringEnabled true + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } defaultConfig { minSdkVersion 19 - // Required when setting minSdkVersion to 20 or lower so we can use // the Java 8 language APIs as mentioned here: // https://developer.android.com/studio/write/java8-support#library-desugaring @@ -66,4 +64,10 @@ android { } } +gradle.projectsEvaluated { + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" + } +} + apply from: file("./ably-agent.gradle") diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index afeda6e5e..c307e56d1 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -14,12 +14,12 @@ android { compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_17 } defaultConfig { diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 4262f8c79..2c5e3a732 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -19,7 +19,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "8.7.0" apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false + id "org.jetbrains.kotlin.android" version "2.2.20" apply false id "com.google.gms.google-services" version "4.3.10" apply false } diff --git a/test_integration/android/app/build.gradle b/test_integration/android/app/build.gradle index 3d19bae21..c4e3031da 100644 --- a/test_integration/android/app/build.gradle +++ b/test_integration/android/app/build.gradle @@ -11,12 +11,14 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + coreLibraryDesugaringEnabled true + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_17 } defaultConfig { @@ -42,3 +44,8 @@ android { flutter { source = "../.." } + +dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' +} + diff --git a/test_integration/android/gradle/wrapper/gradle-wrapper.properties b/test_integration/android/gradle/wrapper/gradle-wrapper.properties index 91dc34173..5c40527d4 100644 --- a/test_integration/android/gradle/wrapper/gradle-wrapper.properties +++ b/test_integration/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/test_integration/android/settings.gradle b/test_integration/android/settings.gradle index cef42b686..6f0fcae6a 100644 --- a/test_integration/android/settings.gradle +++ b/test_integration/android/settings.gradle @@ -18,8 +18,9 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.4.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.7.0" apply false + id "org.jetbrains.kotlin.android" version "2.2.20" apply false + id "com.google.gms.google-services" version "4.3.10" apply false } include ":app" \ No newline at end of file From 156684084de133dd0c665e962d9d0575ce125198 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 27 Oct 2025 15:01:54 +0000 Subject: [PATCH 2/2] chore: removed desugaring from the build script we never used any API that needs desugaring, like streams, `java.time.*`, etc. No need to overcomplicate things for end users. --- android/build.gradle | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 5a874d16e..87e826576 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -29,13 +29,10 @@ dependencies { // https://firebase.google.com/docs/cloud-messaging/android/client implementation 'com.google.firebase:firebase-messaging:23.0.6' - - // https://github.com/google/desugar_jdk_libs - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' } android { - // Older versions of the Flutter SDK don't provide `compileSdkVersion`, so it defaults to 34 + // older version of flutter sdk doesn't provide `compileSdkVersion` defaults to 34 compileSdkVersion flutter.compileSdkVersion ?: 34 // Conditional for compatibility with AGP <4.2. @@ -50,10 +47,6 @@ android { defaultConfig { minSdkVersion 19 - // Required when setting minSdkVersion to 20 or lower so we can use - // the Java 8 language APIs as mentioned here: - // https://developer.android.com/studio/write/java8-support#library-desugaring - multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions {