From 859f5c651742bfb3a39b0b6ec29f5b92941cc8d6 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 31 Aug 2025 11:29:09 +0200 Subject: [PATCH 1/5] =?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 958ae82f5..6d0237010 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 f45d664b7..e952a8f5c 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 be3ec0365..c6346f569 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 0f6fde884..37de193df 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 49c2eecec..ddfd03e24 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 3d050d86b..1daa63d2e 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 229388001..ea6f83a83 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 f67e9093d..9f5cb6637 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 2ac96e556..5c0b2a4b1 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 f57e634cc..9778eb641 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 e11baeda7..20cb373de 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.12.2" -androidTools = "31.12.2" +androidGradlePlugin = "9.0.0-alpha05" +androidTools = "32.0.0-alpha05" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" @@ -151,7 +151,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 a7e041a14b292f24636b1b39c9efafeebc2341a8 Mon Sep 17 00:00:00 2001 From: SimonMarquis <1921278+SimonMarquis@users.noreply.github.com> Date: Sun, 31 Aug 2025 09:41:54 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for=20?= =?UTF-8?q?Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app-nia-catalog/dependencies/releaseRuntimeClasspath.txt | 4 ++-- app/dependencies/prodReleaseRuntimeClasspath.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index bc48da7a7..beb053e68 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -124,10 +124,10 @@ io.coil-kt:coil-compose:2.7.0 io.coil-kt:coil:2.7.0 jakarta.inject:jakarta.inject-api:2.0.1 javax.inject:javax.inject:1 -org.jetbrains.kotlin:kotlin-stdlib-common:2.1.10 +org.jetbrains.kotlin:kotlin-stdlib-common:2.2.10 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -org.jetbrains.kotlin:kotlin-stdlib:2.1.10 +org.jetbrains.kotlin:kotlin-stdlib:2.2.10 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 7c112c7fe..cc04e7070 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -226,10 +226,10 @@ javax.inject:javax.inject:1 org.checkerframework:checker-qual:3.12.0 org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.22 org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22 -org.jetbrains.kotlin:kotlin-stdlib-common:2.1.10 +org.jetbrains.kotlin:kotlin-stdlib-common:2.2.10 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 -org.jetbrains.kotlin:kotlin-stdlib:2.1.10 +org.jetbrains.kotlin:kotlin-stdlib:2.2.10 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.1 org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.1 org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.1 From a3a1945c4205c9af03a80375c1ff552d3eda6c7a Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:06:46 +0200 Subject: [PATCH 3/5] android.newDsl=false --- gradle.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gradle.properties b/gradle.properties index 2e9d9fc30..b94170508 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 7bb210d1a8de8de753e206cf4bf20bf1436de8ee Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:14:35 +0200 Subject: [PATCH 4/5] `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 9f5cb6637..eaab1175f 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 7d21c179ec8b7617e04cd02dd670cc042e08eb2b Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Sep 2025 14:27:12 +0200 Subject: [PATCH 5/5] Move internal modifier to the object to work around this build error ``` E:\AndroidStudioProjects\nowinandroid\core\datastore\build\generated\ksp\demoDebug\java\com\google\samples\apps\nowinandroid\core\datastore\di\DataStoreModule_ProvidesUserPreferencesDataStore$datastore_demoDebugFactory.java:71: error: cannot find symbol return Preconditions.checkNotNullFromProvides(DataStoreModule.INSTANCE.providesUserPreferencesDataStore$datastore_demoDebug(context, ioDispatcher, scope, userPreferencesSerializer)); ^ symbol: method providesUserPreferencesDataStore$datastore_demoDebug(Context,CoroutineDispatcher,CoroutineScope,UserPreferencesSerializer) location: variable INSTANCE of type DataStoreModule ``` --- .../apps/nowinandroid/core/datastore/di/DataStoreModule.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 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 8e0d7d4d8..055bfb685 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 @@ -37,11 +37,11 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object DataStoreModule { +internal object DataStoreModule { @Provides @Singleton - internal fun providesUserPreferencesDataStore( + fun providesUserPreferencesDataStore( @ApplicationContext context: Context, @Dispatcher(IO) ioDispatcher: CoroutineDispatcher, @ApplicationScope scope: CoroutineScope,