From ca18a58995872616bfd396f5f33b5a7730d1a9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Thu, 27 Aug 2026 18:05:32 +0200 Subject: [PATCH 1/4] build: update androidx.navigation to 2.9.8 so safeargs sees AGP 9 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2ed79bc07b..7472e98bab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ amazon = "3.0.5" androidxCardView = "1.0.0" androidxConstraintLayout = "2.1.3" androidxCore = "1.8.0" -androidxNavigation = "2.5.3" +androidxNavigation = "2.9.8" annotation = "1.3.0" annotationExperimental = "1.5.1" appcompat = "1.4.1" From 923f9f9da1567d0bb4f8368470de48dfeb5b0c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Thu, 27 Aug 2026 18:06:54 +0200 Subject: [PATCH 2/4] build: migrate the root build to AGP 9 built-in Kotlin ui/debugview/api.txt loses InternalDebugRevenueCatScreenViewModelFactory. The class lives in src/debug/kotlin, so it was never in the published defaultsRelease AAR and the signature was wrong; confirmed zero occurrences in debugview-defaults-release.aar. --- baselineprofile/build.gradle.kts | 1 - .../buildlogic/convention/ConfigureAndroidApplication.kt | 6 +++--- .../buildlogic/convention/ConfigureAndroidLibrary.kt | 2 +- .../purchases/android/buildlogic/ktx/VersionCatalog.kt | 2 -- .../plugin/AndroidApplicationConventionPlugin.kt | 1 - .../plugin/ApiTesterApplicationConventionPlugin.kt | 1 - .../buildlogic/plugin/PublicLibraryConventionPlugin.kt | 1 - build.gradle.kts | 1 - examples/rcttester/build.gradle.kts | 1 - examples/web-purchase-redemption-sample/build.gradle.kts | 1 - feature/galaxy/build.gradle.kts | 2 +- gradle.properties | 4 ---- gradle/libs.versions.toml | 3 ++- purchases/build.gradle.kts | 9 +++------ test-apps/e2etests/build.gradle.kts | 1 - .../testpurchasesandroidcompatibility/build.gradle.kts | 1 - .../testpurchasesuiandroidcompatibility/build.gradle.kts | 1 - ui/debugview/api.txt | 8 -------- ui/revenuecatui/build.gradle.kts | 6 ++---- 19 files changed, 12 insertions(+), 40 deletions(-) diff --git a/baselineprofile/build.gradle.kts b/baselineprofile/build.gradle.kts index 52cc6b0ce1..375c14e87b 100644 --- a/baselineprofile/build.gradle.kts +++ b/baselineprofile/build.gradle.kts @@ -2,7 +2,6 @@ plugins { alias(libs.plugins.android.test) - alias(libs.plugins.kotlin.android) alias(libs.plugins.baselineprofile) } diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidApplication.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidApplication.kt index 829e6a6f4b..71c427130b 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidApplication.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidApplication.kt @@ -1,6 +1,6 @@ package com.revenuecat.purchases.android.buildlogic.convention -import com.android.build.gradle.BaseExtension +import com.android.build.api.dsl.ApplicationExtension import com.revenuecat.purchases.android.buildlogic.ktx.getVersion import com.revenuecat.purchases.android.buildlogic.ktx.versionCatalog import org.gradle.api.JavaVersion @@ -14,8 +14,8 @@ internal fun Project.configureAndroidApplication() { val minSdkVersion = libs.getVersion("android-minSdk").toInt() val targetSdkVersion = libs.getVersion("android-targetSdk").toInt() - extensions.configure { - compileSdkVersion(compileSdkVersion) + extensions.configure { + compileSdk = compileSdkVersion defaultConfig { minSdk = minSdkVersion diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidLibrary.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidLibrary.kt index 849a19cf32..5510d21bb8 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidLibrary.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/convention/ConfigureAndroidLibrary.kt @@ -1,8 +1,8 @@ package com.revenuecat.purchases.android.buildlogic.convention +import com.android.build.api.dsl.LibraryExtension import com.android.build.api.variant.HasUnitTestBuilder import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.android.build.gradle.LibraryExtension import com.revenuecat.purchases.android.buildlogic.ktx.getVersion import com.revenuecat.purchases.android.buildlogic.ktx.versionCatalog import org.gradle.api.JavaVersion diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/ktx/VersionCatalog.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/ktx/VersionCatalog.kt index 6259ef279e..9850857ab7 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/ktx/VersionCatalog.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/ktx/VersionCatalog.kt @@ -26,7 +26,6 @@ internal val VersionCatalog.plugins: PluginAccessor internal class PluginAccessor(private val catalog: VersionCatalog) { val android: PluginGroup get() = PluginGroup(catalog, "android") - val kotlin: PluginGroup get() = PluginGroup(catalog, "kotlin") val kover: Provider get() = catalog.findPlugin("kover").get() val dokka: Provider get() = catalog.findPlugin("dokka").get() val mavenPublish: Provider get() = catalog.findPlugin("mavenPublish").get() @@ -37,5 +36,4 @@ internal class PluginAccessor(private val catalog: VersionCatalog) { internal class PluginGroup(private val catalog: VersionCatalog, private val prefix: String) { val library: Provider get() = catalog.findPlugin("$prefix.library").get() val application: Provider get() = catalog.findPlugin("$prefix.application").get() - val android: Provider get() = catalog.findPlugin("$prefix.android").get() } diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/AndroidApplicationConventionPlugin.kt index b997f14ad6..5869334302 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/AndroidApplicationConventionPlugin.kt @@ -15,7 +15,6 @@ class AndroidApplicationConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { with(pluginManager) { apply(libs.plugins.android.application.get().pluginId) - apply(libs.plugins.kotlin.android.get().pluginId) } configureAndroidApplication() } diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/ApiTesterApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/ApiTesterApplicationConventionPlugin.kt index cbbc7880d0..3114c8f522 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/ApiTesterApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/ApiTesterApplicationConventionPlugin.kt @@ -16,7 +16,6 @@ class ApiTesterApplicationConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { with(pluginManager) { apply(libs.plugins.android.application.get().pluginId) - apply(libs.plugins.kotlin.android.get().pluginId) } configureAndroidApplication() diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/PublicLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/PublicLibraryConventionPlugin.kt index f6422c7efe..fce42a0bff 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/PublicLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/android/buildlogic/plugin/PublicLibraryConventionPlugin.kt @@ -19,7 +19,6 @@ class PublicLibraryConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { with(pluginManager) { apply(libs.plugins.android.library.get().pluginId) - apply(libs.plugins.kotlin.android.get().pluginId) apply(libs.plugins.kover.get().pluginId) apply(libs.plugins.baselineprofile.get().pluginId) } diff --git a/build.gradle.kts b/build.gradle.kts index 417248fa68..a6bb8fb2c4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,6 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.compose.compiler) apply false - alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kover) apply false alias(libs.plugins.emerge) apply false diff --git a/examples/rcttester/build.gradle.kts b/examples/rcttester/build.gradle.kts index 7c9730efad..0671ebc210 100644 --- a/examples/rcttester/build.gradle.kts +++ b/examples/rcttester/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) alias(libs.plugins.kotlin.serialization) } diff --git a/examples/web-purchase-redemption-sample/build.gradle.kts b/examples/web-purchase-redemption-sample/build.gradle.kts index 5afc4501c7..ad088145bd 100644 --- a/examples/web-purchase-redemption-sample/build.gradle.kts +++ b/examples/web-purchase-redemption-sample/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) } diff --git a/feature/galaxy/build.gradle.kts b/feature/galaxy/build.gradle.kts index 932d9979ef..abe071606c 100644 --- a/feature/galaxy/build.gradle.kts +++ b/feature/galaxy/build.gradle.kts @@ -21,5 +21,5 @@ dependencies { implementation(libs.samsung.iap) testImplementation(libs.bundles.test) - testImplementation(libs.kotlin.test) + testImplementation(libs.kotlin.test.junit) } diff --git a/gradle.properties b/gradle.properties index 89971a4c3c..5bffab0bcd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -58,7 +58,3 @@ org.gradle.jvmargs=-Xmx4096M -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8 # Enable the Gradle build cache (local task-output cache) for the main build. org.gradle.caching=true - -# backwards compatibility flags for AGP9, to be enabled in a future PR -android.builtInKotlin=false -android.newDsl=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7472e98bab..983352f87a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -161,6 +161,8 @@ google-mobile-ads = { module = "com.google.android.gms:play-services-ads", versi hamcrest-core = { module = "org.hamcrest:hamcrest-core", version.ref = "hamcrest" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } +# Android modules need this one: plain kotlin-test leaves JUnit off the test compile classpath. +kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJSON" } material = { module = "com.google.android.material:material", version.ref = "material" } @@ -194,7 +196,6 @@ dependencyGraph = { id = "com.savvasdalkitsis.module-dependency-graph", version. detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } dokka = { id ="org.jetbrains.dokka", version.ref = "dokka"} emerge = { id = "com.emergetools.android", version.ref = "emergeGradlePlugin" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } diff --git a/purchases/build.gradle.kts b/purchases/build.gradle.kts index b0cc610e93..7b20d51619 100644 --- a/purchases/build.gradle.kts +++ b/purchases/build.gradle.kts @@ -251,14 +251,11 @@ fun DokkaSourceSetSpec.configureDocumentedSourceSet() { dokka { dokkaSourceSets { - named("customEntitlementComputation") { + // AGP registers variant source sets after this block runs, so they can only be reached lazily. + matching { it.name.startsWith("customEntitlementComputation") }.configureEach { suppress.set(true) } - named("defaults") { - dependentSourceSets.addLater(dokkaSourceSets.named("main").flatMap { it.sourceSetId }) - configureDocumentedSourceSet() - } - named("main") { + matching { it.name == "defaultsRelease" }.configureEach { configureDocumentedSourceSet() sourceLink { localDirectory.set(file("src/main/kotlin")) diff --git a/test-apps/e2etests/build.gradle.kts b/test-apps/e2etests/build.gradle.kts index cd54da1176..49cbb6c3d7 100644 --- a/test-apps/e2etests/build.gradle.kts +++ b/test-apps/e2etests/build.gradle.kts @@ -2,7 +2,6 @@ import java.util.Properties plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) } diff --git a/test-apps/testpurchasesandroidcompatibility/build.gradle.kts b/test-apps/testpurchasesandroidcompatibility/build.gradle.kts index 50fa50ba89..37871ab2a3 100644 --- a/test-apps/testpurchasesandroidcompatibility/build.gradle.kts +++ b/test-apps/testpurchasesandroidcompatibility/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) } android { diff --git a/test-apps/testpurchasesuiandroidcompatibility/build.gradle.kts b/test-apps/testpurchasesuiandroidcompatibility/build.gradle.kts index ce61c180d5..a694d94101 100644 --- a/test-apps/testpurchasesuiandroidcompatibility/build.gradle.kts +++ b/test-apps/testpurchasesuiandroidcompatibility/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.emerge) alias(libs.plugins.compose.compiler) } diff --git a/ui/debugview/api.txt b/ui/debugview/api.txt index 618ec91783..100aaa4384 100644 --- a/ui/debugview/api.txt +++ b/ui/debugview/api.txt @@ -11,11 +11,3 @@ package com.revenuecat.purchases.ui.debugview { } -package com.revenuecat.purchases.ui.debugview.models { - - public final class InternalDebugRevenueCatScreenViewModelFactory extends androidx.lifecycle.ViewModelProvider.NewInstanceFactory { - ctor public InternalDebugRevenueCatScreenViewModelFactory(kotlin.jvm.functions.Function1 onPurchaseCompleted, kotlin.jvm.functions.Function1 onPurchaseErrored); - } - -} - diff --git a/ui/revenuecatui/build.gradle.kts b/ui/revenuecatui/build.gradle.kts index 9312fca14e..99906a6c1a 100644 --- a/ui/revenuecatui/build.gradle.kts +++ b/ui/revenuecatui/build.gradle.kts @@ -142,10 +142,8 @@ dependencies { dokka { dokkaSourceSets { - named("defaults") { - dependentSourceSets.addLater(dokkaSourceSets.named("main").flatMap { it.sourceSetId }) - } - named("main") { + // AGP registers variant source sets after this block runs, so they can only be reached lazily. + matching { it.name == "defaultsRelease" }.configureEach { reportUndocumented.set(true) skipDeprecated.set(true) From 2377e6bbbf26d14f750aa910bf27461436df3f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Thu, 27 Aug 2026 18:07:29 +0200 Subject: [PATCH 3/4] build: drop the built-in Kotlin opt-out from the standalone sample apps --- .../CustomEntitlementComputationSample/app/build.gradle.kts | 1 - examples/CustomEntitlementComputationSample/build.gradle.kts | 1 - .../CustomEntitlementComputationSample/gradle.properties | 5 ----- .../gradle/libs.versions.toml | 1 - examples/MagicWeatherCompose/app/build.gradle.kts | 1 - examples/MagicWeatherCompose/build.gradle.kts | 1 - examples/MagicWeatherCompose/gradle.properties | 5 ----- examples/MagicWeatherCompose/gradle/libs.versions.toml | 1 - 8 files changed, 16 deletions(-) diff --git a/examples/CustomEntitlementComputationSample/app/build.gradle.kts b/examples/CustomEntitlementComputationSample/app/build.gradle.kts index 4336f351eb..0688f96543 100644 --- a/examples/CustomEntitlementComputationSample/app/build.gradle.kts +++ b/examples/CustomEntitlementComputationSample/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.compose.compiler) } diff --git a/examples/CustomEntitlementComputationSample/build.gradle.kts b/examples/CustomEntitlementComputationSample/build.gradle.kts index 44693b0279..86d6b44993 100644 --- a/examples/CustomEntitlementComputationSample/build.gradle.kts +++ b/examples/CustomEntitlementComputationSample/build.gradle.kts @@ -1,6 +1,5 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application).apply(false) - alias(libs.plugins.kotlin.android).apply(false) alias(libs.plugins.compose.compiler).apply(false) } diff --git a/examples/CustomEntitlementComputationSample/gradle.properties b/examples/CustomEntitlementComputationSample/gradle.properties index 378d38b3d6..2cbd6d19d3 100644 --- a/examples/CustomEntitlementComputationSample/gradle.properties +++ b/examples/CustomEntitlementComputationSample/gradle.properties @@ -21,8 +21,3 @@ kotlin.code.style=official # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true - -# Built-in Kotlin rejects the kotlin-android plugin, and that plugin casts the android extension -# to BaseExtension, which the new DSL drops. Both flags go away in AGP 10. -android.builtInKotlin=false -android.newDsl=false diff --git a/examples/CustomEntitlementComputationSample/gradle/libs.versions.toml b/examples/CustomEntitlementComputationSample/gradle/libs.versions.toml index f9955d09a7..d117c9fd88 100644 --- a/examples/CustomEntitlementComputationSample/gradle/libs.versions.toml +++ b/examples/CustomEntitlementComputationSample/gradle/libs.versions.toml @@ -6,7 +6,6 @@ androidxCore = "1.10.1" [plugins] android-application = { id = "com.android.application", version.ref = "agp" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } [libraries] diff --git a/examples/MagicWeatherCompose/app/build.gradle.kts b/examples/MagicWeatherCompose/app/build.gradle.kts index 26f4f90ab9..065d1fcfb5 100644 --- a/examples/MagicWeatherCompose/app/build.gradle.kts +++ b/examples/MagicWeatherCompose/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) } diff --git a/examples/MagicWeatherCompose/build.gradle.kts b/examples/MagicWeatherCompose/build.gradle.kts index 44693b0279..86d6b44993 100644 --- a/examples/MagicWeatherCompose/build.gradle.kts +++ b/examples/MagicWeatherCompose/build.gradle.kts @@ -1,6 +1,5 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application).apply(false) - alias(libs.plugins.kotlin.android).apply(false) alias(libs.plugins.compose.compiler).apply(false) } diff --git a/examples/MagicWeatherCompose/gradle.properties b/examples/MagicWeatherCompose/gradle.properties index 378d38b3d6..2cbd6d19d3 100644 --- a/examples/MagicWeatherCompose/gradle.properties +++ b/examples/MagicWeatherCompose/gradle.properties @@ -21,8 +21,3 @@ kotlin.code.style=official # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true - -# Built-in Kotlin rejects the kotlin-android plugin, and that plugin casts the android extension -# to BaseExtension, which the new DSL drops. Both flags go away in AGP 10. -android.builtInKotlin=false -android.newDsl=false diff --git a/examples/MagicWeatherCompose/gradle/libs.versions.toml b/examples/MagicWeatherCompose/gradle/libs.versions.toml index 216e0a3b2a..01f355e118 100644 --- a/examples/MagicWeatherCompose/gradle/libs.versions.toml +++ b/examples/MagicWeatherCompose/gradle/libs.versions.toml @@ -8,7 +8,6 @@ androidxCore = "1.10.1" [plugins] android-application = { id = "com.android.application", version.ref = "agp" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } [libraries] From e45c589742440cc08eb8488febb4570caa29853f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Fri, 28 Aug 2026 13:09:21 +0200 Subject: [PATCH 4/4] Cleanup comment --- gradle/libs.versions.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 983352f87a..fc8c1e4a55 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -161,7 +161,6 @@ google-mobile-ads = { module = "com.google.android.gms:play-services-ads", versi hamcrest-core = { module = "org.hamcrest:hamcrest-core", version.ref = "hamcrest" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -# Android modules need this one: plain kotlin-test leaves JUnit off the test compile classpath. kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJSON" }