From 888fbf922856c4a1c1945856d25d458dffe7587d Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 5 Apr 2025 11:20:13 +0100 Subject: [PATCH 1/5] Replace deprecated `ManagedDevices.devices` and suspicious receiver type --- benchmarks/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index e36f021b0..258993913 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -45,8 +45,8 @@ android { ) } - testOptions.managedDevices.devices { - create("pixel6Api33") { + testOptions.managedDevices.localDevices { + create("pixel6Api33") { device = "Pixel 6" apiLevel = 33 systemImageSource = "aosp" From 17100a4119ae8b2024e14ecd9be9695b31198452 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Thu, 21 Aug 2025 22:44:36 +0900 Subject: [PATCH 2/5] Replace gradle to gradle-api. Should use `gradle-api`. https://developer.android.com/build/releases/gradle-plugin-roadmap#agp-10 Change-Id: If1c4869eb57ef3d3e1834c57768b90e5d6967f10 --- build-logic/convention/build.gradle.kts | 2 +- .../src/main/kotlin/AndroidApplicationConventionPlugin.kt | 3 +-- .../src/main/kotlin/AndroidFeatureConventionPlugin.kt | 2 +- .../src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt | 2 +- .../src/main/kotlin/AndroidLibraryConventionPlugin.kt | 5 +++-- .../src/main/kotlin/AndroidTestConventionPlugin.kt | 2 +- .../kotlin/com/google/samples/apps/nowinandroid/Badging.kt | 4 ++-- gradle/libs.versions.toml | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 6d0237010..958ae82f5 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -37,7 +37,7 @@ kotlin { } dependencies { - compileOnly(libs.android.gradlePlugin) + compileOnly(libs.android.gradleApiPlugin) 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 1ab3a2ca0..f45d664b7 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -16,7 +16,6 @@ import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension -import com.android.build.gradle.BaseExtension import com.google.samples.apps.nowinandroid.configureBadgingTasks import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid @@ -44,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/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 1af5523c5..343bd4859 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.LibraryExtension +import com.android.build.api.dsl.LibraryExtension import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 19fabf549..63a992b05 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.LibraryExtension +import com.android.build.api.dsl.LibraryExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose import org.gradle.api.Plugin import org.gradle.api.Project diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 3fe727410..0f6fde884 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -14,8 +14,8 @@ * limitations under the License. */ +import com.android.build.api.dsl.LibraryExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.android.build.gradle.LibraryExtension import com.google.samples.apps.nowinandroid.configureFlavors import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid @@ -37,7 +37,8 @@ class AndroidLibraryConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) - defaultConfig.targetSdk = 35 + testOptions.targetSdk = 35 + lint.targetSdk = 35 defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testOptions.animationsDisabled = true configureFlavors(this) diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt index 67933f77d..49c2eecec 100644 --- a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -import com.android.build.gradle.TestExtension +import com.android.build.api.dsl.TestExtension import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import org.gradle.api.Plugin 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 886c70625..229388001 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,8 +18,8 @@ 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.variant.ApplicationAndroidComponentsExtension -import com.android.build.gradle.BaseExtension import com.google.common.truth.Truth.assertWithMessage import org.gradle.api.DefaultTask import org.gradle.api.Project @@ -110,7 +110,7 @@ private fun String.capitalized() = replaceFirstChar { } fun Project.configureBadgingTasks( - baseExtension: BaseExtension, + baseExtension: ApplicationExtension, componentsExtension: ApplicationAndroidComponentsExtension, ) { // Registers a callback to be called, when a new variant is configured diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 81f12c480..dc459d651 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -153,7 +153,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-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } +android-gradleApiPlugin = { 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 4d45004820e601dbed8a01497b83785e31550a79 Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Thu, 28 Aug 2025 15:48:47 -0700 Subject: [PATCH 3/5] Upgrade to latest stable AGP 8.12.2 - Upgrades to a newer version of compose bom that pulls in newer versions of lint checks that work with AGP 8.12.2 - Bump the minSdk to 23 because compose now requires minSdk 23 - Update Navigation_fontScale2.png due to compose upgrade - Clean up BuildConfig set up since we already use Gradle 9.0.0 Test: ./gradlew build --- .../dependencies/releaseRuntimeClasspath.txt | 143 +++++++++------- .../prodReleaseRuntimeClasspath.txt | 162 +++++++++--------- app/prodRelease-badging.txt | 4 +- .../apps/nowinandroid/KotlinAndroid.kt | 2 +- .../Navigation/Navigation_fontScale2.png | Bin 8415 -> 8406 bytes core/network/build.gradle.kts | 7 +- gradle/libs.versions.toml | 6 +- 7 files changed, 172 insertions(+), 152 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index 587e4feba..bc48da7a7 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -1,7 +1,7 @@ androidx.activity:activity-compose:1.9.3 androidx.activity:activity-ktx:1.9.3 androidx.activity:activity:1.9.3 -androidx.annotation:annotation-experimental:1.4.1 +androidx.annotation:annotation-experimental:1.5.1 androidx.annotation:annotation-jvm:1.9.1 androidx.annotation:annotation:1.9.1 androidx.appcompat:appcompat-resources:1.6.1 @@ -9,53 +9,58 @@ androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.browser:browser:1.8.0 -androidx.collection:collection-jvm:1.5.0-beta03 -androidx.collection:collection-ktx:1.5.0-beta03 -androidx.collection:collection:1.5.0-beta03 -androidx.compose.animation:animation-android:1.8.0-beta02 -androidx.compose.animation:animation-core-android:1.8.0-beta02 -androidx.compose.animation:animation-core:1.8.0-beta02 -androidx.compose.animation:animation:1.8.0-beta02 -androidx.compose.foundation:foundation-android:1.8.0-beta02 -androidx.compose.foundation:foundation-layout-android:1.8.0-beta02 -androidx.compose.foundation:foundation-layout:1.8.0-beta02 -androidx.compose.foundation:foundation:1.8.0-beta02 -androidx.compose.material3.adaptive:adaptive-android:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive:1.1.0-rc01 -androidx.compose.material3:material3-adaptive-navigation-suite-android:1.4.0-alpha08 -androidx.compose.material3:material3-adaptive-navigation-suite:1.4.0-alpha08 -androidx.compose.material3:material3-android:1.4.0-alpha08 -androidx.compose.material3:material3:1.4.0-alpha08 +androidx.collection:collection-jvm:1.5.0 +androidx.collection:collection-ktx:1.5.0 +androidx.collection:collection:1.5.0 +androidx.compose.animation:animation-android:1.10.0-alpha02 +androidx.compose.animation:animation-core-android:1.10.0-alpha02 +androidx.compose.animation:animation-core:1.10.0-alpha02 +androidx.compose.animation:animation:1.10.0-alpha02 +androidx.compose.foundation:foundation-android:1.10.0-alpha02 +androidx.compose.foundation:foundation-layout-android:1.10.0-alpha02 +androidx.compose.foundation:foundation-layout:1.10.0-alpha02 +androidx.compose.foundation:foundation:1.10.0-alpha02 +androidx.compose.material3.adaptive:adaptive-android:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive:1.2.0-beta01 +androidx.compose.material3:material3-adaptive-navigation-suite-android:1.5.0-alpha03 +androidx.compose.material3:material3-adaptive-navigation-suite:1.5.0-alpha03 +androidx.compose.material3:material3-android:1.5.0-alpha03 +androidx.compose.material3:material3:1.5.0-alpha03 androidx.compose.material:material-icons-core-android:1.7.8 androidx.compose.material:material-icons-core:1.7.8 androidx.compose.material:material-icons-extended-android:1.7.8 androidx.compose.material:material-icons-extended:1.7.8 -androidx.compose.material:material-ripple-android:1.8.0-beta02 -androidx.compose.material:material-ripple:1.8.0-beta02 -androidx.compose.runtime:runtime-android:1.8.0-beta02 -androidx.compose.runtime:runtime-saveable-android:1.8.0-beta02 -androidx.compose.runtime:runtime-saveable:1.8.0-beta02 -androidx.compose.runtime:runtime:1.8.0-beta02 -androidx.compose.ui:ui-android:1.8.0-beta02 -androidx.compose.ui:ui-geometry-android:1.8.0-beta02 -androidx.compose.ui:ui-geometry:1.8.0-beta02 -androidx.compose.ui:ui-graphics-android:1.8.0-beta02 -androidx.compose.ui:ui-graphics:1.8.0-beta02 -androidx.compose.ui:ui-text-android:1.8.0-beta02 -androidx.compose.ui:ui-text:1.8.0-beta02 -androidx.compose.ui:ui-tooling-preview-android:1.8.0-beta02 -androidx.compose.ui:ui-tooling-preview:1.8.0-beta02 -androidx.compose.ui:ui-unit-android:1.8.0-beta02 -androidx.compose.ui:ui-unit:1.8.0-beta02 -androidx.compose.ui:ui-util-android:1.8.0-beta02 -androidx.compose.ui:ui-util:1.8.0-beta02 -androidx.compose.ui:ui:1.8.0-beta02 -androidx.compose:compose-bom-alpha:2025.02.00 +androidx.compose.material:material-ripple-android:1.10.0-alpha02 +androidx.compose.material:material-ripple:1.10.0-alpha02 +androidx.compose.runtime:runtime-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-annotation-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-annotation:1.10.0-alpha02 +androidx.compose.runtime:runtime-saveable-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-saveable:1.10.0-alpha02 +androidx.compose.runtime:runtime:1.10.0-alpha02 +androidx.compose.ui:ui-android:1.10.0-alpha02 +androidx.compose.ui:ui-geometry-android:1.10.0-alpha02 +androidx.compose.ui:ui-geometry:1.10.0-alpha02 +androidx.compose.ui:ui-graphics-android:1.10.0-alpha02 +androidx.compose.ui:ui-graphics:1.10.0-alpha02 +androidx.compose.ui:ui-text-android:1.10.0-alpha02 +androidx.compose.ui:ui-text:1.10.0-alpha02 +androidx.compose.ui:ui-tooling-preview-android:1.10.0-alpha02 +androidx.compose.ui:ui-tooling-preview:1.10.0-alpha02 +androidx.compose.ui:ui-unit-android:1.10.0-alpha02 +androidx.compose.ui:ui-unit:1.10.0-alpha02 +androidx.compose.ui:ui-util-android:1.10.0-alpha02 +androidx.compose.ui:ui-util:1.10.0-alpha02 +androidx.compose.ui:ui:1.10.0-alpha02 +androidx.compose:compose-bom-alpha:2025.08.01 androidx.concurrent:concurrent-futures:1.1.0 -androidx.core:core-ktx:1.13.1 -androidx.core:core:1.13.1 +androidx.core:core-ktx:1.16.0 +androidx.core:core-viewtree:1.0.0 +androidx.core:core:1.16.0 androidx.customview:customview-poolingcontainer:1.0.0 androidx.customview:customview:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2:1.4.0 androidx.exifinterface:exifinterface:1.3.7 androidx.fragment:fragment:1.5.1 @@ -63,39 +68,46 @@ androidx.graphics:graphics-path:1.0.1 androidx.graphics:graphics-shapes-android:1.0.1 androidx.graphics:graphics-shapes:1.0.1 androidx.interpolator:interpolator:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.7 -androidx.lifecycle:lifecycle-common-jvm:2.8.7 -androidx.lifecycle:lifecycle-common:2.8.7 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 -androidx.lifecycle:lifecycle-livedata-core:2.8.7 -androidx.lifecycle:lifecycle-livedata:2.8.7 -androidx.lifecycle:lifecycle-process:2.8.7 -androidx.lifecycle:lifecycle-runtime-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-compose:2.8.7 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.7 -androidx.lifecycle:lifecycle-runtime:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7 -androidx.lifecycle:lifecycle-viewmodel:2.8.7 +androidx.legacy:legacy-support-core-utils:1.0.0 +androidx.lifecycle:lifecycle-common-java8:2.10.0-alpha03 +androidx.lifecycle:lifecycle-common-jvm:2.10.0-alpha03 +androidx.lifecycle:lifecycle-common:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata-core:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata:2.10.0-alpha03 +androidx.lifecycle:lifecycle-process:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-compose-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-compose:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel:2.10.0-alpha03 androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 androidx.metrics:metrics-performance:1.0.0-beta01 +androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.4.0 -androidx.savedstate:savedstate-ktx:1.2.1 -androidx.savedstate:savedstate:1.2.1 +androidx.savedstate:savedstate-android:1.4.0-alpha03 +androidx.savedstate:savedstate-compose-android:1.4.0-alpha03 +androidx.savedstate:savedstate-compose:1.4.0-alpha03 +androidx.savedstate:savedstate-ktx:1.4.0-alpha03 +androidx.savedstate:savedstate:1.4.0-alpha03 androidx.startup:startup-runtime:1.1.1 androidx.tracing:tracing-ktx:1.3.0-alpha02 androidx.tracing:tracing:1.3.0-alpha02 +androidx.transition:transition:1.6.0 androidx.vectordrawable:vectordrawable-animated:1.1.0 androidx.vectordrawable:vectordrawable:1.1.0 androidx.versionedparcelable:versionedparcelable:1.1.1 androidx.viewpager:viewpager:1.0.0 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window-core-android:1.3.0 -androidx.window:window-core:1.3.0 -androidx.window:window:1.3.0 +androidx.window:window-core-android:1.4.0 +androidx.window:window-core:1.4.0 +androidx.window:window:1.4.0 com.google.accompanist:accompanist-drawablepainter:0.32.0 com.google.code.findbugs:jsr305:3.0.2 com.google.dagger:dagger-lint-aar:2.56 @@ -122,5 +134,8 @@ org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains:annotations:23.0.0 org.jspecify:jspecify:1.0.0 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 8457feb9f..7c112c7fe 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -1,7 +1,7 @@ -androidx.activity:activity-compose:1.9.3 -androidx.activity:activity-ktx:1.9.3 -androidx.activity:activity:1.9.3 -androidx.annotation:annotation-experimental:1.4.1 +androidx.activity:activity-compose:1.10.1 +androidx.activity:activity-ktx:1.10.1 +androidx.activity:activity:1.10.1 +androidx.annotation:annotation-experimental:1.5.1 androidx.annotation:annotation-jvm:1.9.1 androidx.annotation:annotation:1.9.1 androidx.appcompat:appcompat-resources:1.7.0 @@ -10,60 +10,63 @@ androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.browser:browser:1.8.0 -androidx.collection:collection-jvm:1.5.0-beta03 -androidx.collection:collection-ktx:1.5.0-beta03 -androidx.collection:collection:1.5.0-beta03 -androidx.compose.animation:animation-android:1.8.0-beta02 -androidx.compose.animation:animation-core-android:1.8.0-beta02 -androidx.compose.animation:animation-core:1.8.0-beta02 -androidx.compose.animation:animation:1.8.0-beta02 -androidx.compose.foundation:foundation-android:1.8.0-beta02 -androidx.compose.foundation:foundation-layout-android:1.8.0-beta02 -androidx.compose.foundation:foundation-layout:1.8.0-beta02 -androidx.compose.foundation:foundation:1.8.0-beta02 -androidx.compose.material3.adaptive:adaptive-android:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive-layout-android:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive-layout:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive-navigation-android:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive-navigation:1.1.0-rc01 -androidx.compose.material3.adaptive:adaptive:1.1.0-rc01 -androidx.compose.material3:material3-adaptive-navigation-suite-android:1.4.0-alpha08 -androidx.compose.material3:material3-adaptive-navigation-suite:1.4.0-alpha08 -androidx.compose.material3:material3-android:1.4.0-alpha08 -androidx.compose.material3:material3-window-size-class-android:1.4.0-alpha08 -androidx.compose.material3:material3-window-size-class:1.4.0-alpha08 -androidx.compose.material3:material3:1.4.0-alpha08 +androidx.collection:collection-jvm:1.5.0 +androidx.collection:collection-ktx:1.5.0 +androidx.collection:collection:1.5.0 +androidx.compose.animation:animation-android:1.10.0-alpha02 +androidx.compose.animation:animation-core-android:1.10.0-alpha02 +androidx.compose.animation:animation-core:1.10.0-alpha02 +androidx.compose.animation:animation:1.10.0-alpha02 +androidx.compose.foundation:foundation-android:1.10.0-alpha02 +androidx.compose.foundation:foundation-layout-android:1.10.0-alpha02 +androidx.compose.foundation:foundation-layout:1.10.0-alpha02 +androidx.compose.foundation:foundation:1.10.0-alpha02 +androidx.compose.material3.adaptive:adaptive-android:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive-layout-android:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive-layout:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive-navigation-android:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive-navigation:1.2.0-beta01 +androidx.compose.material3.adaptive:adaptive:1.2.0-beta01 +androidx.compose.material3:material3-adaptive-navigation-suite-android:1.5.0-alpha03 +androidx.compose.material3:material3-adaptive-navigation-suite:1.5.0-alpha03 +androidx.compose.material3:material3-android:1.5.0-alpha03 +androidx.compose.material3:material3-window-size-class-android:1.5.0-alpha03 +androidx.compose.material3:material3-window-size-class:1.5.0-alpha03 +androidx.compose.material3:material3:1.5.0-alpha03 androidx.compose.material:material-icons-core-android:1.7.8 androidx.compose.material:material-icons-core:1.7.8 androidx.compose.material:material-icons-extended-android:1.7.8 androidx.compose.material:material-icons-extended:1.7.8 -androidx.compose.material:material-ripple-android:1.8.0-beta02 -androidx.compose.material:material-ripple:1.8.0-beta02 -androidx.compose.runtime:runtime-android:1.8.0-beta02 -androidx.compose.runtime:runtime-saveable-android:1.8.0-beta02 -androidx.compose.runtime:runtime-saveable:1.8.0-beta02 -androidx.compose.runtime:runtime-tracing:1.8.0-beta02 -androidx.compose.runtime:runtime:1.8.0-beta02 -androidx.compose.ui:ui-android:1.8.0-beta02 -androidx.compose.ui:ui-geometry-android:1.8.0-beta02 -androidx.compose.ui:ui-geometry:1.8.0-beta02 -androidx.compose.ui:ui-graphics-android:1.8.0-beta02 -androidx.compose.ui:ui-graphics:1.8.0-beta02 -androidx.compose.ui:ui-text-android:1.8.0-beta02 -androidx.compose.ui:ui-text:1.8.0-beta02 -androidx.compose.ui:ui-tooling-preview-android:1.8.0-beta02 -androidx.compose.ui:ui-tooling-preview:1.8.0-beta02 -androidx.compose.ui:ui-unit-android:1.8.0-beta02 -androidx.compose.ui:ui-unit:1.8.0-beta02 -androidx.compose.ui:ui-util-android:1.8.0-beta02 -androidx.compose.ui:ui-util:1.8.0-beta02 -androidx.compose.ui:ui:1.8.0-beta02 -androidx.compose:compose-bom-alpha:2025.02.00 +androidx.compose.material:material-ripple-android:1.10.0-alpha02 +androidx.compose.material:material-ripple:1.10.0-alpha02 +androidx.compose.runtime:runtime-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-annotation-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-annotation:1.10.0-alpha02 +androidx.compose.runtime:runtime-saveable-android:1.10.0-alpha02 +androidx.compose.runtime:runtime-saveable:1.10.0-alpha02 +androidx.compose.runtime:runtime-tracing:1.10.0-alpha02 +androidx.compose.runtime:runtime:1.10.0-alpha02 +androidx.compose.ui:ui-android:1.10.0-alpha02 +androidx.compose.ui:ui-geometry-android:1.10.0-alpha02 +androidx.compose.ui:ui-geometry:1.10.0-alpha02 +androidx.compose.ui:ui-graphics-android:1.10.0-alpha02 +androidx.compose.ui:ui-graphics:1.10.0-alpha02 +androidx.compose.ui:ui-text-android:1.10.0-alpha02 +androidx.compose.ui:ui-text:1.10.0-alpha02 +androidx.compose.ui:ui-tooling-preview-android:1.10.0-alpha02 +androidx.compose.ui:ui-tooling-preview:1.10.0-alpha02 +androidx.compose.ui:ui-unit-android:1.10.0-alpha02 +androidx.compose.ui:ui-unit:1.10.0-alpha02 +androidx.compose.ui:ui-util-android:1.10.0-alpha02 +androidx.compose.ui:ui-util:1.10.0-alpha02 +androidx.compose.ui:ui:1.10.0-alpha02 +androidx.compose:compose-bom-alpha:2025.08.01 androidx.concurrent:concurrent-futures-ktx:1.1.0 androidx.concurrent:concurrent-futures:1.1.0 -androidx.core:core-ktx:1.15.0 +androidx.core:core-ktx:1.16.0 androidx.core:core-splashscreen:1.0.1 -androidx.core:core:1.15.0 +androidx.core:core-viewtree:1.0.0 +androidx.core:core:1.16.0 androidx.cursoradapter:cursoradapter:1.0.0 androidx.customview:customview-poolingcontainer:1.0.0 androidx.customview:customview:1.0.0 @@ -79,6 +82,7 @@ androidx.datastore:datastore-preferences:1.1.1 androidx.datastore:datastore:1.1.1 androidx.documentfile:documentfile:1.0.0 androidx.drawerlayout:drawerlayout:1.0.0 +androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.4.0 androidx.emoji2:emoji2:1.4.0 androidx.exifinterface:exifinterface:1.3.7 @@ -92,26 +96,27 @@ androidx.hilt:hilt-navigation:1.2.0 androidx.hilt:hilt-work:1.2.0 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.7 -androidx.lifecycle:lifecycle-common-jvm:2.8.7 -androidx.lifecycle:lifecycle-common:2.8.7 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.7 -androidx.lifecycle:lifecycle-livedata-core:2.8.7 -androidx.lifecycle:lifecycle-livedata:2.8.7 -androidx.lifecycle:lifecycle-process:2.8.7 -androidx.lifecycle:lifecycle-runtime-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-compose:2.8.7 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.7 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.7 -androidx.lifecycle:lifecycle-runtime:2.8.7 -androidx.lifecycle:lifecycle-service:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7 -androidx.lifecycle:lifecycle-viewmodel:2.8.7 +androidx.lifecycle:lifecycle-common-java8:2.10.0-alpha03 +androidx.lifecycle:lifecycle-common-jvm:2.10.0-alpha03 +androidx.lifecycle:lifecycle-common:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata-core:2.10.0-alpha03 +androidx.lifecycle:lifecycle-livedata:2.10.0-alpha03 +androidx.lifecycle:lifecycle-process:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-compose-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-compose:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-runtime:2.10.0-alpha03 +androidx.lifecycle:lifecycle-service:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0-alpha03 +androidx.lifecycle:lifecycle-viewmodel:2.10.0-alpha03 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 androidx.metrics:metrics-performance:1.0.0-beta01 @@ -130,8 +135,11 @@ androidx.room:room-common:2.7.2 androidx.room:room-ktx:2.7.2 androidx.room:room-runtime-android:2.7.2 androidx.room:room-runtime:2.7.2 -androidx.savedstate:savedstate-ktx:1.2.1 -androidx.savedstate:savedstate:1.2.1 +androidx.savedstate:savedstate-android:1.4.0-alpha03 +androidx.savedstate:savedstate-compose-android:1.4.0-alpha03 +androidx.savedstate:savedstate-compose:1.4.0-alpha03 +androidx.savedstate:savedstate-ktx:1.4.0-alpha03 +androidx.savedstate:savedstate:1.4.0-alpha03 androidx.sqlite:sqlite-android:2.5.1 androidx.sqlite:sqlite-framework-android:2.5.1 androidx.sqlite:sqlite-framework:2.5.1 @@ -140,14 +148,14 @@ androidx.startup:startup-runtime:1.1.1 androidx.tracing:tracing-ktx:1.3.0-alpha02 androidx.tracing:tracing-perfetto:1.0.0 androidx.tracing:tracing:1.3.0-alpha02 +androidx.transition:transition:1.6.0 androidx.vectordrawable:vectordrawable-animated:1.1.0 androidx.vectordrawable:vectordrawable:1.1.0 androidx.versionedparcelable:versionedparcelable:1.1.1 androidx.viewpager:viewpager:1.0.0 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window-core-android:1.3.0 -androidx.window:window-core:1.3.0 -androidx.window:window:1.3.0 +androidx.window:window-core-android:1.4.0 +androidx.window:window-core:1.4.0 +androidx.window:window:1.4.0 androidx.work:work-runtime-ktx:2.10.0 androidx.work:work-runtime:2.10.0 com.caverock:androidsvg-aar:1.4 diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index ca03c1088..640949857 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -1,5 +1,5 @@ package: name='com.google.samples.apps.nowinandroid' versionCode='8' versionName='0.1.2' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' -minSdkVersion:'21' +minSdkVersion:'23' targetSdkVersion:'35' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' @@ -105,9 +105,9 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' -uses-library-not-required:'android.ext.adservices' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' +uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' 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 5d396d2a4..2ac96e556 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 @@ -38,7 +38,7 @@ internal fun Project.configureKotlinAndroid( compileSdk = 35 defaultConfig { - minSdk = 21 + minSdk = 23 } compileOptions { diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_fontScale2.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_fontScale2.png index b2dff990ad67cb6fce39b41b875cfb7962d713fa..16df296d505fd33be81454adb0468bc54fcf5e58 100644 GIT binary patch literal 8406 zcmcI}XFyZSx^~zR+)||X5&@-G=`DzWh)R>9bOh-o0@6c3R60aOq=WPhB2`*~Kmr>C zsX;3xQf|r7v{l5-uwr7=vn!;>0 zHp_!y0j=5IUolUw&}%XEY9-~9ajp~X96t99T>?{p1=zGGczLh9c=L+yFQwdDQXLf8 z8@rpXxa8)rWt-Q18|^dAcy*}h`{TW8%MF6>=n4+s60j@kCdo6ZUQk^I876$z+4Cbh z9LwWx97-D{_W5P>9(mydAwjl5IYD@ctSS?V6$GkN#~X*u$sStMtUX!eKQ2ORCix1T zTl1JfM-dA9hvcB}gN_=S)Ql0rjt)L+KG?;6gY3fVR3(od49rb*M;}^~;!`HQ3Cuo6 z@uas0E#+7+2$b1tM3cHjL|FgI)gZreK6AuYf+YuDW2I?QA%<>)DH)b=NHPf3J_!U0 zuT{(=+Xd@3z~3nu`m~4Ky|1PZ0?lzXz|a=Erkr#xJZ2xSfI*7Mm7Lp;OkLW=I~H9) zAm`7XV1!{@-$3Pp@*Q}^DB&^)bl@~aajMrI<-~Z)))`t*@*4Y#6lFAt8e4qPg}tYS z_}+e_yYPFWo{HQl%ugvi`31)OiB7KX!!c3LJxs*z{t|u__UwVmeR(0 zQJg3fzH|-p&9R)qV_yZ8(rA^(tjS+G_bl;ok()cX3Tmk@8maa0uf*#${SQ(SGFG+Q_|x8!;U7 z`OqY}{MHoBe`r2tPe2rH6Swr5IaHH%aH+nE^@ zr+!9L8QG}qLg#>8_`FW_cZWwZrVbW6Qu{UpwM7ZkpScST+Kg5uZa z+bk7?MpxZWkI^7cYaWNks9ckGk9h4t7T_Zno+;Tm7+7`xX?N*E3+VNCRU7x{`z+#c zi_#(nAt)UWa_EOuBDu3JDqR~Kd=Qp**+f4SaYxj@1Cd6X&9yVcb>NB)`usK=MtWR^ zWz8(E-?Ec0&OJ^fv4=~(L7qEjPb)a=wM9*mzQ5-| zy{i+m|8h|Eskv(Pd`zV-5Y2#7p6ODYRCC11^F>t_T%-^SALC?Q(1|`R2RxOwH7|~z zug#F�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 HUBv$bDOQ&; literal 8415 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 z val properties = Properties() properties.load(StringReader(text)) - if (properties.containsKey("BACKEND_URL")) - (properties["BACKEND_URL"] as String) - else "http://example.com" - // Move to returning `properties["BACKEND_URL"] as String?` after upgrading to Gradle 9.0.0 + properties["BACKEND_URL"] }.orElse("http://example.com") androidComponents { onVariants { - it.buildConfigFields.put("BACKEND_URL", backendUrl.map { value -> + it.buildConfigFields!!.put("BACKEND_URL", backendUrl.map { value -> BuildConfigField(type = "String", value = """"$value"""", comment = null) }) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 81f12c480..f8b3a682a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,12 +2,12 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "8.9.0" -androidTools = "31.9.0" +androidGradlePlugin = "8.12.2" +androidTools = "31.12.2" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" -androidxComposeBom = "2025.02.00" +androidxComposeBom = "2025.08.01" androidxComposeFoundation = "1.8.0-alpha07" androidxComposeMaterial3Adaptive = "1.1.0-rc01" androidxComposeRuntimeTracing = "1.7.6" From 2bf684d5ccec969dab66d590229d57f1886a95b5 Mon Sep 17 00:00:00 2001 From: Keel_im Date: Sun, 31 Aug 2025 20:44:59 +0900 Subject: [PATCH 4/5] migrate existing docs to AGENTS.md create symbolic links for backward compatibility --- AGENT.md | 59 +------------------------------------------------------ AGENTS.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 58 deletions(-) mode change 100644 => 120000 AGENT.md create mode 100644 AGENTS.md diff --git a/AGENT.md b/AGENT.md deleted file mode 100644 index efb39ef19..000000000 --- a/AGENT.md +++ /dev/null @@ -1,58 +0,0 @@ -# Now in Android Project - -Now in Android is a native Android mobile application written in Kotlin. It provides regular news -about Android development. Users can choose to follow topics, be notified when new content is -available, and bookmark items. - -## Architecture - -This project is a modern Android application that follows the official architecture guidance from Google. It is a reactive, single-activity app that uses the following: - -- **UI:** Built entirely with Jetpack Compose, including Material 3 components and adaptive layouts for different screen sizes. -- **State Management:** Unidirectional Data Flow (UDF) is implemented using Kotlin Coroutines and `Flow`s. `ViewModel`s act as state holders, exposing UI state as streams of data. -- **Dependency Injection:** Hilt is used for dependency injection throughout the app, simplifying the management of dependencies and improving testability. -- **Navigation:** Navigation is handled by Jetpack Navigation 2 for Compose, allowing for a declarative and type-safe way to navigate between screens. -- **Data:** The data layer is implemented using the repository pattern. - - **Local Data:** Room and DataStore are used for local data persistence. - - **Remote Data:** Retrofit and OkHttp are used for fetching data from the network. -- **Background Processing:** WorkManager is used for deferrable background tasks. - -## Modules - -The main Android app lives in the `app/` folder. Feature modules live in `feature/` and core and shared modules in `core/`. - -## Commands to Build & Test - -The app and Android libraries have two product flavors: `demo` and `prod`, and two build types: `debug` and `release`. - -- Build: `./gradlew assemble{Variant}`. Typically `assembleDemoDebug`. -- Fix linting/formatting: `./gradlew --init-script gradle/init.gradle.kts spotlessApply` -- Run local tests: `./gradlew {variant}Test` -- Run single test: `./gradlew {variant}Test --tests "com.example.myapp.MyTestClass"` -- Run local screenshot tests: `./gradlew verifyRoborazziDemoDebug` - -### Instrumented tests - -- Gradle-managed devices to run on device tests: `./gradlew pixel6api31aospDebugAndroidTest`. Also `pixel4api30aospatdDebugAndroidTest` and `pixelcapi30aospatdDebugAndroidTest`. - -### Creating tests - -#### Instrumented tests - -- Tests for UI features should only use `ComposeTestRule` with a `ComponentActivity`. -- Bigger tests live in the `:app` module and they can start activities like `MainActivity`. - -#### Local tests - -- [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) for most assertions -- [cashapp/turbine](https://github.com/cashapp/turbine) for complex coroutine tests -- [google/truth](https://github.com/google/truth) for assertions - -## Continuous integration - -- The workflows are defined in `.github/workflows/*.yaml` and they contain various checks. -- Screenshot tests are generated by CI, so they shouldn't be checked into the repo from a workstation. - -## Version control and code location - -- The project uses git and is hosted in https://github.com/android/nowinandroid. diff --git a/AGENT.md b/AGENT.md new file mode 120000 index 000000000..47dc3e3d8 --- /dev/null +++ b/AGENT.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..efb39ef19 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,58 @@ +# Now in Android Project + +Now in Android is a native Android mobile application written in Kotlin. It provides regular news +about Android development. Users can choose to follow topics, be notified when new content is +available, and bookmark items. + +## Architecture + +This project is a modern Android application that follows the official architecture guidance from Google. It is a reactive, single-activity app that uses the following: + +- **UI:** Built entirely with Jetpack Compose, including Material 3 components and adaptive layouts for different screen sizes. +- **State Management:** Unidirectional Data Flow (UDF) is implemented using Kotlin Coroutines and `Flow`s. `ViewModel`s act as state holders, exposing UI state as streams of data. +- **Dependency Injection:** Hilt is used for dependency injection throughout the app, simplifying the management of dependencies and improving testability. +- **Navigation:** Navigation is handled by Jetpack Navigation 2 for Compose, allowing for a declarative and type-safe way to navigate between screens. +- **Data:** The data layer is implemented using the repository pattern. + - **Local Data:** Room and DataStore are used for local data persistence. + - **Remote Data:** Retrofit and OkHttp are used for fetching data from the network. +- **Background Processing:** WorkManager is used for deferrable background tasks. + +## Modules + +The main Android app lives in the `app/` folder. Feature modules live in `feature/` and core and shared modules in `core/`. + +## Commands to Build & Test + +The app and Android libraries have two product flavors: `demo` and `prod`, and two build types: `debug` and `release`. + +- Build: `./gradlew assemble{Variant}`. Typically `assembleDemoDebug`. +- Fix linting/formatting: `./gradlew --init-script gradle/init.gradle.kts spotlessApply` +- Run local tests: `./gradlew {variant}Test` +- Run single test: `./gradlew {variant}Test --tests "com.example.myapp.MyTestClass"` +- Run local screenshot tests: `./gradlew verifyRoborazziDemoDebug` + +### Instrumented tests + +- Gradle-managed devices to run on device tests: `./gradlew pixel6api31aospDebugAndroidTest`. Also `pixel4api30aospatdDebugAndroidTest` and `pixelcapi30aospatdDebugAndroidTest`. + +### Creating tests + +#### Instrumented tests + +- Tests for UI features should only use `ComposeTestRule` with a `ComponentActivity`. +- Bigger tests live in the `:app` module and they can start activities like `MainActivity`. + +#### Local tests + +- [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) for most assertions +- [cashapp/turbine](https://github.com/cashapp/turbine) for complex coroutine tests +- [google/truth](https://github.com/google/truth) for assertions + +## Continuous integration + +- The workflows are defined in `.github/workflows/*.yaml` and they contain various checks. +- Screenshot tests are generated by CI, so they shouldn't be checked into the repo from a workstation. + +## Version control and code location + +- The project uses git and is hosted in https://github.com/android/nowinandroid. From c53ceff6f4e7a07714728e8ca30b65cd0bb261cf Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Tue, 2 Sep 2025 14:15:52 -0700 Subject: [PATCH 5/5] Clean up loading of oss-licenses-plugin - Move to using plugins {} block for applying com.google.android.gms.oss-licenses-plugin as this plugin now publishes plugin markers - Upgrade oss-licenses-plugin to 0.10.8 - Remove unused secrets plugin Test: ./gradlew build -m --- app/build.gradle.kts | 2 +- build.gradle.kts | 24 +----------------------- gradle/libs.versions.toml | 6 ++---- 3 files changed, 4 insertions(+), 28 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fe3e2ec49..5b32add3e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -22,7 +22,7 @@ plugins { alias(libs.plugins.nowinandroid.android.application.jacoco) alias(libs.plugins.nowinandroid.android.application.firebase) alias(libs.plugins.nowinandroid.hilt) - id("com.google.android.gms.oss-licenses-plugin") + alias(libs.plugins.google.osslicenses) alias(libs.plugins.baselineprofile) alias(libs.plugins.roborazzi) alias(libs.plugins.kotlin.serialization) diff --git a/build.gradle.kts b/build.gradle.kts index b7989bab4..425b2c640 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,28 +14,6 @@ * limitations under the License. */ -buildscript { - repositories { - google { - content { - includeGroupByRegex("com\\.android.*") - includeGroupByRegex("com\\.google.*") - includeGroupByRegex("androidx.*") - } - } - mavenCentral() - - // This is used only for internal Google builds. - maven { url = uri("../nowinandroid-prebuilts/m2repository") } - } - dependencies { - classpath(libs.google.oss.licenses.plugin) { - exclude(group = "com.google.protobuf") - } - } - -} - /* * By listing all the plugins used throughout all subprojects in the root project build script, it * ensures that the build script classpath remains the same for all projects. This avoids potential @@ -58,7 +36,7 @@ plugins { alias(libs.plugins.hilt) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.roborazzi) apply false - alias(libs.plugins.secrets) apply false + alias(libs.plugins.google.osslicenses) apply false alias(libs.plugins.room) apply false alias(libs.plugins.module.graph) apply true // Plugin applied to allow module graph generation } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5052dea76..46c845404 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ firebaseCrashlyticsPlugin = "3.0.6" firebasePerfPlugin = "2.0.1" gmsPlugin = "4.4.2" googleOss = "17.1.0" -googleOssPlugin = "0.10.7" +googleOssPlugin = "0.10.8" hilt = "2.56" hiltExt = "1.2.0" jacoco = "0.8.12" @@ -56,7 +56,6 @@ retrofitKotlinxSerializationJson = "1.0.0" robolectric = "4.14.1" roborazzi = "1.39.0" room = "2.7.2" -secrets = "2.0.1" truth = "1.4.4" turbine = "1.2.0" @@ -119,7 +118,6 @@ firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-mes firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } firebase-performance = { group = "com.google.firebase", name = "firebase-perf" } google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" } -google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } @@ -178,10 +176,10 @@ kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } module-graph = { id = "com.jraska.module.graph.assertion", version.ref = "moduleGraph" } +google-osslicenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "googleOssPlugin" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } room = { id = "androidx.room", version.ref = "room" } -secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secrets" } # Plugins defined by this project nowinandroid-android-application = { id = "nowinandroid.android.application" }