From d46b9dc291c0d0adb8f552247ad68d300a841672 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 31 Aug 2025 11:29:09 +0200 Subject: [PATCH 01/22] =?UTF-8?q?=F0=9F=9A=A7=20AGP=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-logic/convention/build.gradle.kts | 2 +- .../AndroidApplicationConventionPlugin.kt | 4 ++-- ...droidApplicationFirebaseConventionPlugin.kt | 3 ++- .../kotlin/AndroidLibraryConventionPlugin.kt | 2 -- .../main/kotlin/AndroidTestConventionPlugin.kt | 1 - .../apps/nowinandroid/AndroidCompose.kt | 6 ++---- .../samples/apps/nowinandroid/Badging.kt | 4 ++-- .../apps/nowinandroid/GradleManagedDevices.kt | 2 +- .../samples/apps/nowinandroid/KotlinAndroid.kt | 6 ++---- .../samples/apps/nowinandroid/NiaFlavor.kt | 18 ++++++++---------- gradle/libs.versions.toml | 6 +++--- 11 files changed, 23 insertions(+), 31 deletions(-) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 166b54907f..148a1eab61 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -37,7 +37,7 @@ kotlin { } dependencies { - compileOnly(libs.android.gradleApiPlugin) + compileOnly(libs.android.gradlePlugin) compileOnly(libs.android.tools.common) compileOnly(libs.compose.gradlePlugin) compileOnly(libs.firebase.crashlytics.gradlePlugin) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index f45d664b7a..e952a8f5c7 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -15,6 +15,7 @@ */ import com.android.build.api.dsl.ApplicationExtension +import com.android.build.api.dsl.CommonExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.google.samples.apps.nowinandroid.configureBadgingTasks import com.google.samples.apps.nowinandroid.configureGradleManagedDevices @@ -30,7 +31,6 @@ class AndroidApplicationConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.application") - apply(plugin = "org.jetbrains.kotlin.android") apply(plugin = "nowinandroid.android.lint") apply(plugin = "com.dropbox.dependency-guard") @@ -43,7 +43,7 @@ class AndroidApplicationConventionPlugin : Plugin { } extensions.configure { configurePrintApksTask(this) - configureBadgingTasks(extensions.getByType(), this) + configureBadgingTasks(extensions.getByType(), this) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt index be3ec03655..c6346f5690 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt @@ -28,7 +28,8 @@ class AndroidApplicationFirebaseConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.google.gms.google-services") - apply(plugin = "com.google.firebase.firebase-perf") + // https://github.com/firebase/firebase-android-sdk/issues/7293 + // apply(plugin = "com.google.firebase.firebase-perf") apply(plugin = "com.google.firebase.crashlytics") dependencies { diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 0f6fde8848..37de193dfc 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -32,12 +32,10 @@ class AndroidLibraryConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.library") - apply(plugin = "org.jetbrains.kotlin.android") apply(plugin = "nowinandroid.android.lint") extensions.configure { configureKotlinAndroid(this) - testOptions.targetSdk = 35 lint.targetSdk = 35 defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testOptions.animationsDisabled = true diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt index 49c2eececa..ddfd03e241 100644 --- a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -26,7 +26,6 @@ class AndroidTestConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.test") - apply(plugin = "org.jetbrains.kotlin.android") extensions.configure { configureKotlinAndroid(this) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 3d050d86b6..1daa63d2e6 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -28,12 +28,10 @@ import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginE * Configure Compose-specific options */ internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *, *, *>, + commonExtension: CommonExtension, ) { commonExtension.apply { - buildFeatures { - compose = true - } + buildFeatures.compose = true dependencies { val bom = libs.findLibrary("androidx-compose-bom").get() diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt index 2293880013..ea6f83a833 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt @@ -18,7 +18,7 @@ package com.google.samples.apps.nowinandroid import com.android.SdkConstants import com.android.build.api.artifact.SingleArtifact -import com.android.build.api.dsl.ApplicationExtension +import com.android.build.api.dsl.CommonExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.google.common.truth.Truth.assertWithMessage import org.gradle.api.DefaultTask @@ -110,7 +110,7 @@ private fun String.capitalized() = replaceFirstChar { } fun Project.configureBadgingTasks( - baseExtension: ApplicationExtension, + baseExtension: CommonExtension, componentsExtension: ApplicationAndroidComponentsExtension, ) { // Registers a callback to be called, when a new variant is configured diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt index f67e9093dc..9f5cb66373 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt @@ -25,7 +25,7 @@ import org.gradle.kotlin.dsl.invoke * Configure project for Gradle managed devices */ internal fun configureGradleManagedDevices( - commonExtension: CommonExtension<*, *, *, *, *, *>, + commonExtension: CommonExtension, ) { val pixel4 = DeviceConfig("Pixel 4", 30, "aosp-atd") val pixel6 = DeviceConfig("Pixel 6", 31, "aosp") diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 2ac96e556b..5c0b2a4b1b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -32,14 +32,12 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension * Configure base Kotlin with Android options */ internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *, *, *>, + commonExtension: CommonExtension, ) { commonExtension.apply { compileSdk = 35 - defaultConfig { - minSdk = 23 - } + defaultConfig.minSdk = 23 compileOptions { // Up to Java 11 APIs are available through desugaring diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt index f57e634ccb..9778eb6416 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt @@ -20,7 +20,7 @@ enum class NiaFlavor(val dimension: FlavorDimension, val applicationIdSuffix: St } fun configureFlavors( - commonExtension: CommonExtension<*, *, *, *, *, *>, + commonExtension: CommonExtension, flavorConfigurationBlock: ProductFlavor.(flavor: NiaFlavor) -> Unit = {}, ) { commonExtension.apply { @@ -28,15 +28,13 @@ fun configureFlavors( flavorDimensions += flavorDimension.name } - productFlavors { - NiaFlavor.values().forEach { niaFlavor -> - register(niaFlavor.name) { - dimension = niaFlavor.dimension.name - flavorConfigurationBlock(this, niaFlavor) - if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) { - if (niaFlavor.applicationIdSuffix != null) { - applicationIdSuffix = niaFlavor.applicationIdSuffix - } + NiaFlavor.values().forEach { niaFlavor -> + productFlavors.register(niaFlavor.name) { + dimension = niaFlavor.dimension.name + flavorConfigurationBlock(this, niaFlavor) + if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) { + if (niaFlavor.applicationIdSuffix != null) { + applicationIdSuffix = niaFlavor.applicationIdSuffix } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bcd784e215..472e154254 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "8.13.0" -androidTools = "31.13.0" +androidGradlePlugin = "9.0.0-alpha05" +androidTools = "32.0.0-alpha05" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" @@ -150,7 +150,7 @@ truth = { group = "com.google.truth", name = "truth", version.ref = "truth" } turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" } # Dependencies of the included build-logic -android-gradleApiPlugin = { group = "com.android.tools.build", name = "gradle-api", version.ref = "androidGradlePlugin" } +android-gradlePlugin = { group = "com.android.tools.build", name = "gradle-api", version.ref = "androidGradlePlugin" } android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" } compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } firebase-crashlytics-gradlePlugin = { group = "com.google.firebase", name = "firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsPlugin" } From 9908869a36f35b1857a3303d7f0e948121d1455f Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:06:46 +0200 Subject: [PATCH 02/22] android.newDsl=false --- gradle.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gradle.properties b/gradle.properties index 2e9d9fc306..b941705081 100644 --- a/gradle.properties +++ b/gradle.properties @@ -63,3 +63,5 @@ roborazzi.test.verify=true # Prevent uninstall app after instrumented tests # https://issuetracker.google.com/issues/295039976 android.injected.androidTest.leaveApksInstalledAfterRun=true + +android.newDsl=false From a0ad9253c96145ebecb30146220ae3c6c41ec1b8 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:14:35 +0200 Subject: [PATCH 03/22] `devices` is deprecated in `managedDevices` --- .../google/samples/apps/nowinandroid/GradleManagedDevices.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt index 9f5cb66373..eaab1175fd 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt @@ -36,7 +36,7 @@ internal fun configureGradleManagedDevices( commonExtension.testOptions { managedDevices { - devices { + allDevices { allDevices.forEach { deviceConfig -> maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply { device = deviceConfig.device @@ -48,7 +48,7 @@ internal fun configureGradleManagedDevices( groups { maybeCreate("ci").apply { ciDevices.forEach { deviceConfig -> - targetDevices.add(devices[deviceConfig.taskName]) + targetDevices.add(localDevices[deviceConfig.taskName]) } } } From fd939d5a48898f263c9e737fcd8428395932d8bd Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:27:12 +0200 Subject: [PATCH 04/22] Move internal modifier to the object to work around build errors `error: cannot find symbol` on: - `DataStoreModule.INSTANCE.providesUserPreferencesDataStore$datastore_demoDebug` - `SyncModule.Companion.provideFirebaseMessaging$work_prodDebug()` --- .../apps/nowinandroid/core/datastore/di/DataStoreModule.kt | 4 +++- .../google/samples/apps/nowinandroid/sync/di/SyncModule.kt | 2 ++ .../google/samples/apps/nowinandroid/sync/di/SyncModule.kt | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt index 8e0d7d4d89..6c4486880d 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt @@ -33,15 +33,17 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope +import org.jetbrains.annotations.VisibleForTesting import javax.inject.Singleton +@VisibleForTesting @Module @InstallIn(SingletonComponent::class) object DataStoreModule { @Provides @Singleton - internal fun providesUserPreferencesDataStore( + fun providesUserPreferencesDataStore( @ApplicationContext context: Context, @Dispatcher(IO) ioDispatcher: CoroutineDispatcher, @ApplicationScope scope: CoroutineScope, diff --git a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 91ef476f6a..054cd913d4 100644 --- a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -24,7 +24,9 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import org.jetbrains.annotations.VisibleForTesting +@VisibleForTesting @Module @InstallIn(SingletonComponent::class) abstract class SyncModule { diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index ceeb395486..e591478135 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -28,8 +28,10 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import org.jetbrains.annotations.VisibleForTesting import javax.inject.Singleton +@VisibleForTesting @Module @InstallIn(SingletonComponent::class) abstract class SyncModule { @@ -43,9 +45,9 @@ abstract class SyncModule { syncSubscriber: FirebaseSyncSubscriber, ): SyncSubscriber - companion object { + internal companion object { @Provides @Singleton - internal fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging + fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging } } From 80bee3db34323bc4fbac9dfb5fc5f4ebff27d588 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 21 Sep 2025 11:12:07 +0200 Subject: [PATCH 05/22] Add explicit junit dependency on Android library modules They must have been removed as they are no longer resolved by default. --- .../convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt | 1 + gradle/libs.versions.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 37de193dfc..17c4379e7b 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -54,6 +54,7 @@ class AndroidLibraryConventionPlugin : Plugin { dependencies { "androidTestImplementation"(libs.findLibrary("kotlin.test").get()) "testImplementation"(libs.findLibrary("kotlin.test").get()) + "testImplementation"(libs.findLibrary("junit").get()) "implementation"(libs.findLibrary("androidx.tracing.ktx").get()) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 472e154254..f8a5111820 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -124,6 +124,7 @@ hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hi hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } javax-inject = { module = "javax.inject:javax.inject", version = "1" } +junit = { module = "junit:junit", version.ref = "junit4" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin" } kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" } From ee84562c3704939613c3d101e6d85b9acadf03bb Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 12 Oct 2025 11:23:11 +0200 Subject: [PATCH 06/22] 9.0.0-alpha10 Updated Android Gradle Plugin and Tools versions. --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f8a5111820..dfd721946a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-alpha05" -androidTools = "32.0.0-alpha05" +androidGradlePlugin = "9.0.0-alpha10" +androidTools = "32.0.0-alpha10" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From dbce15ce266e30d70fbaf28c63916664fc446115 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Tue, 28 Oct 2025 20:19:01 +0100 Subject: [PATCH 07/22] 9.0.0-alpha12 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dfd721946a..e7956e7cbb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-alpha10" -androidTools = "32.0.0-alpha10" +androidGradlePlugin = "9.0.0-alpha12" +androidTools = "32.0.0-alpha12" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From f1043ef7ea6e0f58418bd696d6c445e3264cb8e3 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Tue, 28 Oct 2025 20:24:03 +0100 Subject: [PATCH 08/22] KSP 2.3.0 --- 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 e7956e7cbb..12a1c04323 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ kotlin = "2.2.20" kotlinxCoroutines = "1.10.1" kotlinxDatetime = "0.6.1" kotlinxSerializationJson = "1.8.0" -ksp = "2.2.20-2.0.4" +ksp = "2.3.0" okhttp = "4.12.0" protobuf = "4.29.2" protobufPlugin = "0.9.4" From 61d7a3b9eedbd85182267153d5a8422452a504c2 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 31 Oct 2025 19:24:48 +0100 Subject: [PATCH 09/22] 9.0.0-alpha13 --- 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 12a1c04323..69383eeb06 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-alpha12" +androidGradlePlugin = "9.0.0-alpha13" androidTools = "32.0.0-alpha12" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" From fb4a5ca97095f4bbe0ace6847b8efed03d9d464f Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 31 Oct 2025 19:27:45 +0100 Subject: [PATCH 10/22] KSP 2.3.1-SNAPSHOT --- build-logic/settings.gradle.kts | 1 + gradle/libs.versions.toml | 2 +- settings.gradle.kts | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index ff96cc84a4..14a4912b06 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -31,6 +31,7 @@ dependencyResolutionManagement { } } mavenCentral() + maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } versionCatalogs { create("libs") { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 69383eeb06..bfa0de7797 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ kotlin = "2.2.20" kotlinxCoroutines = "1.10.1" kotlinxDatetime = "0.6.1" kotlinxSerializationJson = "1.8.0" -ksp = "2.3.0" +ksp = "2.3.1-SNAPSHOT" okhttp = "4.12.0" protobuf = "4.29.2" protobufPlugin = "0.9.4" diff --git a/settings.gradle.kts b/settings.gradle.kts index 2b8c6e45c6..e82fd82eeb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,6 +26,7 @@ pluginManagement { } mavenCentral() gradlePluginPortal() + maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } } @@ -40,6 +41,7 @@ dependencyResolutionManagement { } } mavenCentral() + maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } } rootProject.name = "nowinandroid" From df589f6538deb87ffb50e9603db9867fc70d77bc Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 31 Oct 2025 19:30:10 +0100 Subject: [PATCH 11/22] Firebase Perf fix (included in firebase-bom 34.5.0) --- .../main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt | 3 +-- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt index c6346f5690..be3ec03655 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt @@ -28,8 +28,7 @@ class AndroidApplicationFirebaseConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.google.gms.google-services") - // https://github.com/firebase/firebase-android-sdk/issues/7293 - // apply(plugin = "com.google.firebase.firebase-perf") + apply(plugin = "com.google.firebase.firebase-perf") apply(plugin = "com.google.firebase.crashlytics") dependencies { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bfa0de7797..f73565462a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ coil = "2.7.0" dependencyGuard = "0.5.0" firebaseBom = "33.7.0" firebaseCrashlyticsPlugin = "3.0.6" -firebasePerfPlugin = "2.0.1" +firebasePerfPlugin = "2.0.2" gmsPlugin = "4.4.2" googleOss = "17.1.0" googleOssPlugin = "0.10.8" From ece169e8aa7abca5d46f988ec40ca2dee64a6338 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 6 Nov 2025 19:05:51 +0100 Subject: [PATCH 12/22] build-tools 32.0.0-alpha13 --- 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 9ee0c6a358..71a10eb1de 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together androidGradlePlugin = "9.0.0-alpha13" -androidTools = "32.0.0-alpha12" +androidTools = "32.0.0-alpha13" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From 4312937890e47d7414716ac27becb238fb89b781 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 6 Nov 2025 19:08:18 +0100 Subject: [PATCH 13/22] Remove maven repository for snapshots --- build-logic/settings.gradle.kts | 1 - settings.gradle.kts | 2 -- 2 files changed, 3 deletions(-) diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index 14a4912b06..ff96cc84a4 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -31,7 +31,6 @@ dependencyResolutionManagement { } } mavenCentral() - maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } versionCatalogs { create("libs") { diff --git a/settings.gradle.kts b/settings.gradle.kts index e82fd82eeb..2b8c6e45c6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,7 +26,6 @@ pluginManagement { } mavenCentral() gradlePluginPortal() - maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } } @@ -41,7 +40,6 @@ dependencyResolutionManagement { } } mavenCentral() - maven("https://central.sonatype.com/repository/maven-snapshots/") { mavenContent { snapshotsOnly() }} } } rootProject.name = "nowinandroid" From 3bc6ed6dbbdc64d8233a0594b1ec7f4498a9b3aa Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 7 Nov 2025 21:06:23 +0100 Subject: [PATCH 14/22] 9.0.0-alpha14 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71a10eb1de..9a5875bfa4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-alpha13" -androidTools = "32.0.0-alpha13" +androidGradlePlugin = "9.0.0-alpha14" +androidTools = "32.0.0-alpha14" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From b060fd0b71cf7cca93c761b4ecb0ee0935998dc2 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 7 Nov 2025 21:23:20 +0100 Subject: [PATCH 15/22] Replace API breaking changes not sure if they were dropped on purpose... --- .../apps/nowinandroid/GradleManagedDevices.kt | 27 +++++++++---------- .../apps/nowinandroid/KotlinAndroid.kt | 12 ++++----- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt index eaab1175fd..25e506b7fe 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt @@ -34,22 +34,21 @@ internal fun configureGradleManagedDevices( val allDevices = listOf(pixel4, pixel6, pixelC) val ciDevices = listOf(pixel4, pixelC) - commonExtension.testOptions { - managedDevices { - allDevices { - allDevices.forEach { deviceConfig -> - maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply { - device = deviceConfig.device - apiLevel = deviceConfig.apiLevel - systemImageSource = deviceConfig.systemImageSource - } + + commonExtension.testOptions.managedDevices { + allDevices { + allDevices.forEach { deviceConfig -> + maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply { + device = deviceConfig.device + apiLevel = deviceConfig.apiLevel + systemImageSource = deviceConfig.systemImageSource } } - groups { - maybeCreate("ci").apply { - ciDevices.forEach { deviceConfig -> - targetDevices.add(localDevices[deviceConfig.taskName]) - } + } + groups { + maybeCreate("ci").apply { + ciDevices.forEach { deviceConfig -> + targetDevices.add(localDevices[deviceConfig.taskName]) } } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 5c0b2a4b1b..281cca5fa5 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -39,13 +39,11 @@ internal fun Project.configureKotlinAndroid( defaultConfig.minSdk = 23 - compileOptions { - // Up to Java 11 APIs are available through desugaring - // https://developer.android.com/studio/write/java11-minimal-support-table - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - isCoreLibraryDesugaringEnabled = true - } + // Up to Java 11 APIs are available through desugaring + // https://developer.android.com/studio/write/java11-minimal-support-table + compileOptions.sourceCompatibility = JavaVersion.VERSION_11 + compileOptions.targetCompatibility = JavaVersion.VERSION_11 + compileOptions.isCoreLibraryDesugaringEnabled = true } configureKotlin() From 52b118a1e073c07c4b7843e3ca93ea70333e41a0 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 7 Nov 2025 21:47:52 +0100 Subject: [PATCH 16/22] Prevent Jacoco convention plugins to enable test coverage on release buildTypes leading to "debuggable" release builds. --- .../AndroidApplicationJacocoConventionPlugin.kt | 16 ++++++---------- .../AndroidLibraryJacocoConventionPlugin.kt | 16 ++++++---------- .../google/samples/apps/nowinandroid/Jacoco.kt | 9 +++++++++ 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt index b0eece41da..326d03f4f1 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt @@ -21,20 +21,16 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.getByType +import org.gradle.testing.jacoco.plugins.JacocoPlugin class AndroidApplicationJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "jacoco") - - val androidExtension = extensions.getByType() - - androidExtension.buildTypes.configureEach { - enableAndroidTestCoverage = true - enableUnitTestCoverage = true - } - - configureJacoco(extensions.getByType()) + apply() + configureJacoco( + commonExtension = extensions.getByType(), + androidComponentsExtension = extensions.getByType(), + ) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt index d249e4cbf1..2fd97d4566 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt @@ -21,20 +21,16 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.getByType +import org.gradle.testing.jacoco.plugins.JacocoPlugin class AndroidLibraryJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "jacoco") - - val androidExtension = extensions.getByType() - - androidExtension.buildTypes.configureEach { - enableAndroidTestCoverage = true - enableUnitTestCoverage = true - } - - configureJacoco(extensions.getByType()) + apply() + configureJacoco( + commonExtension = extensions.getByType(), + androidComponentsExtension = extensions.getByType(), + ) } } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt index ed1ea42541..205fa5acb5 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt @@ -17,9 +17,12 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.artifact.ScopedArtifact +import com.android.build.api.dsl.BuildType +import com.android.build.api.dsl.CommonExtension import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.api.variant.ScopedArtifacts import com.android.build.api.variant.SourceDirectories +import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.Directory import org.gradle.api.file.RegularFile @@ -59,8 +62,14 @@ private fun String.capitalize() = replaceFirstChar { * tests on CI using a different Github Action or an external device farm. */ internal fun Project.configureJacoco( + commonExtension: CommonExtension, androidComponentsExtension: AndroidComponentsExtension<*, *, *>, ) { + commonExtension.buildTypes.named("debug") { + enableAndroidTestCoverage = true + enableUnitTestCoverage = true + } + configure { toolVersion = libs.findVersion("jacoco").get().toString() } From 1ebc99d32c78318b9210e341687f5dfe7425a799 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Mon, 10 Nov 2025 18:23:34 +0100 Subject: [PATCH 17/22] Clarify Jacoco configuration for debug build Add comment to clarify Jacoco configuration for debug builds. --- .../main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt index 205fa5acb5..8d16c428ed 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt @@ -65,6 +65,7 @@ internal fun Project.configureJacoco( commonExtension: CommonExtension, androidComponentsExtension: AndroidComponentsExtension<*, *, *>, ) { + // Configure only the debug build, otherwise it will force the debuggable flag on release buildTypes as well commonExtension.buildTypes.named("debug") { enableAndroidTestCoverage = true enableUnitTestCoverage = true From 06fe6698f387b436eadd0fd89eb200a48b868ec5 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Mon, 10 Nov 2025 18:39:41 +0100 Subject: [PATCH 18/22] Remove VisibleForTesting --- .../apps/nowinandroid/core/datastore/di/DataStoreModule.kt | 2 -- .../com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt | 2 -- .../com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt | 2 -- 3 files changed, 6 deletions(-) diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt index 6c4486880d..ac9eaf7672 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt @@ -33,10 +33,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope -import org.jetbrains.annotations.VisibleForTesting import javax.inject.Singleton -@VisibleForTesting @Module @InstallIn(SingletonComponent::class) object DataStoreModule { diff --git a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 054cd913d4..91ef476f6a 100644 --- a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -24,9 +24,7 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import org.jetbrains.annotations.VisibleForTesting -@VisibleForTesting @Module @InstallIn(SingletonComponent::class) abstract class SyncModule { diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index e591478135..97de27867a 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -28,10 +28,8 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import org.jetbrains.annotations.VisibleForTesting import javax.inject.Singleton -@VisibleForTesting @Module @InstallIn(SingletonComponent::class) abstract class SyncModule { From 1e7095d76a00999b5252dfba5af3e87268870168 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Tue, 11 Nov 2025 09:47:47 +0100 Subject: [PATCH 19/22] Revert AGP's APIs change workarounds with `.apply{}` to reduce visual changes as requested --- .../apps/nowinandroid/AndroidCompose.kt | 4 ++- .../apps/nowinandroid/GradleManagedDevices.kt | 26 ++++++++++--------- .../apps/nowinandroid/KotlinAndroid.kt | 16 +++++++----- .../samples/apps/nowinandroid/NiaFlavor.kt | 16 +++++++----- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 1daa63d2e6..f018cbfc52 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -31,7 +31,9 @@ internal fun Project.configureAndroidCompose( commonExtension: CommonExtension, ) { commonExtension.apply { - buildFeatures.compose = true + buildFeatures.apply { + compose = true + } dependencies { val bom = libs.findLibrary("androidx-compose-bom").get() diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt index 25e506b7fe..310d90d81b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt @@ -35,20 +35,22 @@ internal fun configureGradleManagedDevices( val ciDevices = listOf(pixel4, pixelC) - commonExtension.testOptions.managedDevices { - allDevices { - allDevices.forEach { deviceConfig -> - maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply { - device = deviceConfig.device - apiLevel = deviceConfig.apiLevel - systemImageSource = deviceConfig.systemImageSource + commonExtension.testOptions.apply { + managedDevices { + allDevices { + allDevices.forEach { deviceConfig -> + maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply { + device = deviceConfig.device + apiLevel = deviceConfig.apiLevel + systemImageSource = deviceConfig.systemImageSource + } } } - } - groups { - maybeCreate("ci").apply { - ciDevices.forEach { deviceConfig -> - targetDevices.add(localDevices[deviceConfig.taskName]) + groups { + maybeCreate("ci").apply { + ciDevices.forEach { deviceConfig -> + targetDevices.add(localDevices[deviceConfig.taskName]) + } } } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 281cca5fa5..a923ce24eb 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -37,13 +37,17 @@ internal fun Project.configureKotlinAndroid( commonExtension.apply { compileSdk = 35 - defaultConfig.minSdk = 23 + defaultConfig.apply { + minSdk = 23 + } - // Up to Java 11 APIs are available through desugaring - // https://developer.android.com/studio/write/java11-minimal-support-table - compileOptions.sourceCompatibility = JavaVersion.VERSION_11 - compileOptions.targetCompatibility = JavaVersion.VERSION_11 - compileOptions.isCoreLibraryDesugaringEnabled = true + compileOptions.apply { + // Up to Java 11 APIs are available through desugaring + // https://developer.android.com/studio/write/java11-minimal-support-table + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + isCoreLibraryDesugaringEnabled = true + } } configureKotlin() diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt index 9778eb6416..9fbf0625ce 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt @@ -28,13 +28,15 @@ fun configureFlavors( flavorDimensions += flavorDimension.name } - NiaFlavor.values().forEach { niaFlavor -> - productFlavors.register(niaFlavor.name) { - dimension = niaFlavor.dimension.name - flavorConfigurationBlock(this, niaFlavor) - if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) { - if (niaFlavor.applicationIdSuffix != null) { - applicationIdSuffix = niaFlavor.applicationIdSuffix + productFlavors.apply { + NiaFlavor.values().forEach { niaFlavor -> + register(niaFlavor.name) { + dimension = niaFlavor.dimension.name + flavorConfigurationBlock(this, niaFlavor) + if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) { + if (niaFlavor.applicationIdSuffix != null) { + applicationIdSuffix = niaFlavor.applicationIdSuffix + } } } } From e420d2b03b0d314285b3237b6e1072f2c8d9b8cf Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 14 Nov 2025 12:10:30 +0100 Subject: [PATCH 20/22] 9.0.0-beta01 Updated Android Gradle Plugin and tools to beta versions. --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9aecf89f5d..1b6654c444 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-alpha14" -androidTools = "32.0.0-alpha14" +androidGradlePlugin = "9.0.0-beta01" +androidTools = "32.0.0-beta01" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From 919831cb23bfe61cb27735ff85334631d5b54cd5 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 22 Nov 2025 15:56:44 +0100 Subject: [PATCH 21/22] 9.0.0-beta02 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1b6654c444..4a11407a3e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-beta01" -androidTools = "32.0.0-beta01" +androidGradlePlugin = "9.0.0-beta02" +androidTools = "32.0.0-beta02" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" From 113cc2aa267600aab7d6f49f3dfa62765d8964b8 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 29 Nov 2025 10:55:46 +0100 Subject: [PATCH 22/22] 9.0.0-beta03 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4a11407a3e..cde9691c69 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0-beta02" -androidTools = "32.0.0-beta02" +androidGradlePlugin = "9.0.0-beta03" +androidTools = "32.0.0-beta03" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0"