From 0391d6bb0ff08c6a2edd9df2f1557cbd56db6dd7 Mon Sep 17 00:00:00 2001 From: Hossain Khan Date: Wed, 15 Apr 2026 17:42:35 -0400 Subject: [PATCH 1/5] Migrate to AGP 9.0 built-in Kotlin support - Remove deprecated kotlin.android plugin from build.gradle.kts - Remove deprecated gradle.properties settings (builtInKotlin, newDsl, etc.) - Enables AGP 9.0's modern built-in Kotlin support - Eliminates deprecation warnings --- app/build.gradle.kts | 1 - gradle.properties | 3 ++- gradle/libs.versions.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4dcd05f..0bab86f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,7 +3,6 @@ import java.util.Properties plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.parcelize) alias(libs.plugins.kotlin.serialization) diff --git a/gradle.properties b/gradle.properties index 76c557d..316ec97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -45,4 +45,5 @@ org.gradle.daemon=true # Disable unused build features android.defaults.buildfeatures.resvalues=false -android.defaults.buildfeatures.shaders=false \ No newline at end of file +android.defaults.buildfeatures.shaders=false +android.dependency.useConstraints=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e54306a..ec96ad0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ adaptiveAndroid = "1.2.0" # Android Studio version and AGP version compatibility # https://developer.android.com/studio/releases#android_gradle_plugin_and_android_studio_compatibility -agp = "8.13.2" +agp = "9.1.1" # Metro - A multiplatform dependency injection framework for Kotlin # https://zacsweers.github.io/metro/ From 645d38eb0f9b4adf9016ead7aef8807a5b6e23f1 Mon Sep 17 00:00:00 2001 From: Hossain Khan Date: Wed, 15 Apr 2026 17:44:43 -0400 Subject: [PATCH 2/5] Suppress dependency constraints warning Add android.generateSyncIssueWhenLibraryConstraintsAreEnabled=false to suppress the build warning about dependency constraints optimization. --- gradle.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gradle.properties b/gradle.properties index 316ec97..030febc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -43,6 +43,9 @@ org.gradle.configuration-cache.parallel=true # https://docs.gradle.org/current/userguide/gradle_daemon.html org.gradle.daemon=true +# Suppress dependency constraints warning +android.generateSyncIssueWhenLibraryConstraintsAreEnabled=false + # Disable unused build features android.defaults.buildfeatures.resvalues=false android.defaults.buildfeatures.shaders=false From eaa858043908f888c48089d34be3231e793f2f68 Mon Sep 17 00:00:00 2001 From: Hossain Khan Date: Wed, 15 Apr 2026 17:50:48 -0400 Subject: [PATCH 3/5] Extract embedded versions to versions section Extract the following embedded versions to [versions] section for consistent dependency management: - robolectric: 4.16.1 - google-services plugin: 4.4.4 - firebase-crashlytics plugin: 3.0.6 - kotlinx-kover plugin: 0.9.8 This improves centralized version management and maintainability. --- gradle/libs.versions.toml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ec96ad0..31f4942 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,6 +35,22 @@ googleFonts = "1.10.6" googlePlayReview = "2.0.2" +# Google Services plugin +# https://developers.google.com/android/guides/google-services-plugin +googleServices = "4.4.4" + +# Firebase Crashlytics plugin +# https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk +firebaseCrashlytics = "3.0.6" + +# Robolectric for Android testing +# https://robolectric.org/ +robolectric = "4.16.1" + +# Kover - Kotlin code coverage +# https://github.com/Kotlin/kotlinx-kover +koverPlugin = "0.9.8" + # Fluent assertions for Java and Android # https://truth.dev/ | https://github.com/google/truth googleTruth = "1.4.5" @@ -177,7 +193,7 @@ moshi-kotlin-codegen = { group = "com.squareup.moshi", name = "moshi-kotlin-code eithernet = { group = "com.slack.eithernet", name = "eithernet", version.ref = "eithernet" } eithernet-integration-retrofit = { group = "com.slack.eithernet", name = "eithernet-integration-retrofit", version.ref = "eithernet" } -robolectric = { group = "org.robolectric", name = "robolectric", version = "4.16.1" } +robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } # MockK mocking library for Kotlin # https://mockk.io @@ -233,10 +249,10 @@ metro = { id = "dev.zacsweers.metro", version.ref = "metro" } kotlinter = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" } # Google Services plugin -google-services = { id = "com.google.gms.google-services", version = "4.4.4" } +google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" } # https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk -firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.6" } +firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlytics" } # Kover is a set of solutions for collecting test coverage of Kotlin code compiled for JVM and Android platforms. # https://github.com/Kotlin/kotlinx-kover?tab=readme-ov-file#kover-gradle-plugin -kotlinx-kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.8" } +kotlinx-kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "koverPlugin" } From 48d91548880e1cefe3e8a3b94243ed96a0d5c746 Mon Sep 17 00:00:00 2001 From: Hossain Khan Date: Wed, 15 Apr 2026 17:54:19 -0400 Subject: [PATCH 4/5] Update dependency versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - metro: 0.13.1 → 0.13.2 - firebaseBom: 34.11.0 → 34.12.0 - firebaseCrashlytics: 3.0.6 → 3.0.7 - kotlinxSerializationJson: 1.10.0 → 1.11.0 - kotlinxSerializationProperties: 1.10.0 → 1.11.0 - Remove unused android-library plugin definition --- gradle/libs.versions.toml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 31f4942..fcca782 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ agp = "9.1.1" # Metro - A multiplatform dependency injection framework for Kotlin # https://zacsweers.github.io/metro/ -metro = "0.13.1" +metro = "0.13.2" # https://github.com/slackhq/circuit/releases circuit = "0.33.1" @@ -28,7 +28,7 @@ dataStore = "1.2.1" # https://github.com/slackhq/EitherNet eithernet = "2.0.0" espressoCore = "3.7.0" -firebaseBom = "34.11.0" +firebaseBom = "34.12.0" # https://developer.android.com/develop/ui/compose/text/fonts googleFonts = "1.10.6" @@ -41,7 +41,7 @@ googleServices = "4.4.4" # Firebase Crashlytics plugin # https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk -firebaseCrashlytics = "3.0.6" +firebaseCrashlytics = "3.0.7" # Robolectric for Android testing # https://robolectric.org/ @@ -72,8 +72,8 @@ mockk = "1.14.9" # https://github.com/pinterest/ktlint kotlinter = "5.4.2" -kotlinxSerializationJson = "1.10.0" -kotlinxSerializationProperties = "1.10.0" +kotlinxSerializationJson = "1.11.0" +kotlinxSerializationProperties = "1.11.0" # Kotlin Symbol Processing API # https://kotlinlang.org/docs/ksp-overview.html @@ -217,11 +217,6 @@ compose-lint-checks = { module = "com.slack.lint.compose:compose-lint-checks", v # https://developer.android.com/build android-application = { id = "com.android.application", version.ref = "agp" } -# Plugin for Android Libraries -# https://developer.android.com/studio/projects/android-library -# https://developer.android.com/build -android-library = { id = "com.android.library", version.ref = "agp" } - kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } From 30755cd93fb479af239082831c31fe2f7751fcdd Mon Sep 17 00:00:00 2001 From: Hossain Khan Date: Wed, 15 Apr 2026 17:59:16 -0400 Subject: [PATCH 5/5] Update metro DSL syntax for 0.13.2 compatibility - Use .set() method for reportsDestination property (new DSL style) - Use layout.buildDirectory.dir() instead of .asFile.get().resolve() - Remove deprecated enableKotlinVersionCompatibilityChecks property - Update documentation links to point to 0.13.2 docs Metro 0.13.2 uses typed properties with .set() methods instead of direct assignment. --- app/build.gradle.kts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0bab86f..5e4f30e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,4 +1,7 @@ +@file:OptIn(DelicateMetroGradleApi::class) + import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension +import dev.zacsweers.metro.gradle.DelicateMetroGradleApi import java.util.Properties plugins { @@ -259,13 +262,9 @@ ksp { } metro { - // Enable Metro code generation for assisted injection factories. - // https://zacsweers.github.io/metro/injection-types/#automatic-assisted-factory-generation - // generateAssistedFactories.set(true) - - enableKotlinVersionCompatibilityChecks = true - - reportsDestination = layout.buildDirectory.asFile.get().resolve("reports/metro") + // Report destination for Metro debugging and analysis + // https://zacsweers.github.io/metro/0.13.2/debugging/?h=reportsdestination#reports + reportsDestination.set(layout.buildDirectory.dir("metro/reports")) }