From 0816c89cbef08b9c8cf4fa364726e867e8c95f2e Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Thu, 3 Jul 2025 16:45:32 -0400 Subject: [PATCH 01/24] [Infra] Bump kotlin and related deps to 2.0.21 Jump to the kotlin 2.x badgawon. Beyond updating the stdlib, related dependencies are bumped to the latest version they released that also depends on 2.0.x Includse: - coroutines - serialization - mockk --- gradle/libs.versions.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 64682610bd7..3b634412d01 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ cardview = "1.0.0" checkerQual = "2.5.2" constraintlayout = "2.1.4" coreKtx = "1.12.0" -coroutines = "1.7.3" +coroutines = "1.9.0" dagger = "2.43.2" datastore = "1.1.3" dexmaker = "2.28.1" @@ -45,8 +45,8 @@ javalite = "3.25.5" jsonassert = "1.5.0" kotest = "5.9.0" # Do not use 5.9.1 because it reverts the fix for https://github.com/kotest/kotest/issues/3981 kotestAssertionsCore = "5.8.1" -kotlin = "1.8.22" -ktorVersion = "2.3.2" +kotlin = "2.0.21" +ktorVersion = "3.0.3" legacySupportV4 = "1.0.0" lifecycleProcess = "2.3.1" material = "1.12.0" @@ -54,7 +54,7 @@ mavenResolverApi = "1.9.23" mavenResolverProvider = "3.9.9" mockito = "5.2.0" mockitoAndroid = "3.4.0" -mockk = "1.13.11" +mockk = "1.14.2" # Do not use 1.14.3 or above since it bumps kotlin to 2.1.x playServicesCloudMessaging = "17.2.0" playServicesStats = "17.0.2" playServicesVision = "20.1.3" @@ -68,7 +68,7 @@ robolectric = "4.12" runner = "1.0.2" rxandroid = "2.0.2" rxjava = "2.1.14" -serialization = "1.5.1" +serialization = "1.7.3" slf4jNop = "2.0.9" spotless = "7.0.4" testServices = "1.2.0" From fecdf64e02b75e205eff97ba90af8c9dae9a83bc Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Thu, 3 Jul 2025 17:25:34 -0400 Subject: [PATCH 02/24] Update kapt to a version supporting kotlin2 --- build.gradle.kts | 1 + firebase-sessions/firebase-sessions.gradle.kts | 2 +- gradle/libs.versions.toml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a10ac0119ea..ef66a75f530 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,6 +22,7 @@ plugins { alias(libs.plugins.protobuf) apply false alias(libs.plugins.errorprone) alias(libs.plugins.crashlytics) apply false + alias(libs.plugins.kapt) apply false id("PublishingPlugin") id("firebase-ci") id("smoke-tests") diff --git a/firebase-sessions/firebase-sessions.gradle.kts b/firebase-sessions/firebase-sessions.gradle.kts index b136a281660..7557a2c17da 100644 --- a/firebase-sessions/firebase-sessions.gradle.kts +++ b/firebase-sessions/firebase-sessions.gradle.kts @@ -20,7 +20,7 @@ plugins { id("firebase-library") id("firebase-vendor") id("kotlin-android") - id("kotlin-kapt") + alias(libs.plugins.kapt) } firebaseLibrary { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3b634412d01..9950854801d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -240,3 +240,4 @@ protobuf = { id = "com.google.protobuf", version.ref = "protobufGradlePlugin" } errorprone = { id = "net.ltgt.errorprone", version.ref = "gradleErrorpronePlugin" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" } crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsGradle" } +kapt = { id = "org.jetbrains.kotlin.kapt", version = "2.1.20"} From 062d564ff12d1be6ac12975f663e9da41ede13b4 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Thu, 3 Jul 2025 17:51:49 -0400 Subject: [PATCH 03/24] Bump dagger to the last version supporting kotlin 2.0 --- gradle/libs.versions.toml | 2 +- subprojects.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9950854801d..868e00f9d97 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ checkerQual = "2.5.2" constraintlayout = "2.1.4" coreKtx = "1.12.0" coroutines = "1.9.0" -dagger = "2.43.2" +dagger = "2.55" datastore = "1.1.3" dexmaker = "2.28.1" dexmakerVersion = "1.2" diff --git a/subprojects.cfg b/subprojects.cfg index 72e06c9248f..329cd7f117a 100644 --- a/subprojects.cfg +++ b/subprojects.cfg @@ -24,7 +24,7 @@ firebase-config:test-app firebase-config-interop firebase-crashlytics firebase-crashlytics:ktx -firebase-crashlytics-ndk +# firebase-crashlytics-ndk firebase-database firebase-database:ktx firebase-database-collection From a0c44ca0d610dc51927d28b21535062a08ed6c3b Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Fri, 4 Jul 2025 13:10:37 -0400 Subject: [PATCH 04/24] Fix issue preveting crashlytics-ndk from compile --- .../firebase/gradle/plugins/GradleExtensions.kt | 15 ++++++++++++++- subprojects.cfg | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt index 88cd9927045..dc77497030a 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt @@ -39,7 +39,8 @@ import org.gradle.kotlin.dsl.apply import org.gradle.workers.WorkAction import org.gradle.workers.WorkParameters import org.gradle.workers.WorkQueue -import org.jetbrains.kotlin.gradle.utils.provider +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty /** * Creates a file at the buildDir for the given [Project]. @@ -307,3 +308,15 @@ val Provider.nestedFile: Provider */ val Directory.nestedFile: File get() = asFileTree.single { it.isFile } + + +/** + * Creates a delegated provider. + * + * Useful to expose a provide via delegated properties. See [tempFile] for a reference usage. + */ +internal fun provider(provider: () -> T) = object: ReadOnlyProperty { + override operator fun getValue(thisRef: Any?, property: KProperty<*>): T { + return provider() + } +} diff --git a/subprojects.cfg b/subprojects.cfg index 329cd7f117a..72e06c9248f 100644 --- a/subprojects.cfg +++ b/subprojects.cfg @@ -24,7 +24,7 @@ firebase-config:test-app firebase-config-interop firebase-crashlytics firebase-crashlytics:ktx -# firebase-crashlytics-ndk +firebase-crashlytics-ndk firebase-database firebase-database:ktx firebase-database-collection From d4f9752bdcc37d2b29ffa8650f64ef7207c6159d Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Fri, 4 Jul 2025 13:17:59 -0400 Subject: [PATCH 05/24] Fix format --- .../firebase/gradle/plugins/GradleExtensions.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt index dc77497030a..90d4e3fc50b 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/GradleExtensions.kt @@ -22,6 +22,8 @@ import java.io.BufferedOutputStream import java.io.File import java.util.zip.ZipEntry import java.util.zip.ZipOutputStream +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty import org.gradle.api.DefaultTask import org.gradle.api.Project import org.gradle.api.Task @@ -39,8 +41,6 @@ import org.gradle.kotlin.dsl.apply import org.gradle.workers.WorkAction import org.gradle.workers.WorkParameters import org.gradle.workers.WorkQueue -import kotlin.properties.ReadOnlyProperty -import kotlin.reflect.KProperty /** * Creates a file at the buildDir for the given [Project]. @@ -309,14 +309,14 @@ val Provider.nestedFile: Provider val Directory.nestedFile: File get() = asFileTree.single { it.isFile } - /** * Creates a delegated provider. * * Useful to expose a provide via delegated properties. See [tempFile] for a reference usage. */ -internal fun provider(provider: () -> T) = object: ReadOnlyProperty { - override operator fun getValue(thisRef: Any?, property: KProperty<*>): T { - return provider() +internal fun provider(provider: () -> T) = + object : ReadOnlyProperty { + override operator fun getValue(thisRef: Any?, property: KProperty<*>): T { + return provider() + } } -} From b44962d5236faf0be4cbde06c6357211b85cd70f Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Fri, 4 Jul 2025 14:26:39 -0400 Subject: [PATCH 06/24] Fix smoke-tests --- smoke-tests/build.gradle | 26 +++++++++++++------------- smoke-tests/configure.gradle | 2 +- smoke-tests/gradle.properties | 1 - 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/smoke-tests/build.gradle b/smoke-tests/build.gradle index 0df93b49a47..572c52cdff8 100644 --- a/smoke-tests/build.gradle +++ b/smoke-tests/build.gradle @@ -23,10 +23,10 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:8.3.2" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0" - classpath "com.google.gms:google-services:4.3.14" - classpath "com.google.firebase:firebase-crashlytics-gradle:2.8.1" + classpath "com.android.tools.build:gradle:8.6.1" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21" + classpath "com.google.gms:google-services:4.4.3" + classpath "com.google.firebase:firebase-crashlytics-gradle:3.0.4" } } @@ -69,33 +69,33 @@ apply from: "configure.gradle" dependencies { implementation libs.androidx.test.core // Common utilities (application side) - implementation "androidx.test:rules:1.4.0" - implementation "androidx.test:runner:1.4.0" + implementation "androidx.test:rules:1.5.0" + implementation "androidx.test:runner:1.6.2" // Firebase implementation "com.google.firebase:firebase-analytics" implementation "com.google.firebase:firebase-annotations" - implementation "com.google.firebase:firebase-appdistribution:16.0.0-beta03" - implementation "com.google.firebase:firebase-appdistribution-api:16.0.0-beta03" + implementation "com.google.firebase:firebase-appdistribution:16.0.0-beta15" + implementation "com.google.firebase:firebase-appdistribution-api:16.0.0-beta15" implementation "com.google.firebase:firebase-auth" implementation "com.google.firebase:firebase-common" implementation "com.google.firebase:firebase-config" - implementation "com.google.firebase:firebase-crashlytics:18.6.4" + implementation "com.google.firebase:firebase-crashlytics:19.4.4" implementation "com.google.firebase:firebase-database" implementation "com.google.firebase:firebase-firestore" implementation "com.google.firebase:firebase-functions" // TODO(yifany): remove after the issue is fixed // https://github.com/firebase/firebase-android-sdk/issues/4206 - implementation "com.google.firebase:firebase-iid:21.1.0" + implementation "com.google.firebase:firebase-iid" implementation "com.google.firebase:firebase-inappmessaging" implementation "com.google.firebase:firebase-messaging" - implementation "com.google.firebase:firebase-ml-modeldownloader:24.2.3" + implementation "com.google.firebase:firebase-ml-modeldownloader:25.0.1" implementation "com.google.firebase:firebase-perf" implementation "com.google.firebase:firebase-storage" - implementation "com.google.truth:truth:1.0.1" + implementation "com.google.truth:truth:1.4.4" implementation libs.junit // Common utilities (instrumentation side) - androidTestImplementation "androidx.test:runner:1.4.0" + androidTestImplementation "androidx.test:runner:1.6.2" androidTestImplementation libs.junit // Desugaring library diff --git a/smoke-tests/configure.gradle b/smoke-tests/configure.gradle index 65e5aac2690..44fee11f4f8 100644 --- a/smoke-tests/configure.gradle +++ b/smoke-tests/configure.gradle @@ -14,7 +14,7 @@ def configurePlatform() { - def bom = "com.google.firebase:firebase-bom:20.0.0" + def bom = "com.google.firebase:firebase-bom:33.16.0" if (project.hasProperty("firebase-bom")) { bom = project.getProperty("firebase-bom") } diff --git a/smoke-tests/gradle.properties b/smoke-tests/gradle.properties index 372e31337a0..21666b332ee 100644 --- a/smoke-tests/gradle.properties +++ b/smoke-tests/gradle.properties @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -android.enableR8=true android.useAndroidX=true org.gradle.jvmargs=-Xmx8g From f144e57c98be77d7a7e5e71587d61e5e9468acb6 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Sat, 5 Jul 2025 07:20:11 -0400 Subject: [PATCH 07/24] Fix errors in lint tests --- tools/lint/src/test/kotlin/FirebaseAppGetDetectorTests.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/lint/src/test/kotlin/FirebaseAppGetDetectorTests.kt b/tools/lint/src/test/kotlin/FirebaseAppGetDetectorTests.kt index 535c9c2befa..48c1f958d81 100644 --- a/tools/lint/src/test/kotlin/FirebaseAppGetDetectorTests.kt +++ b/tools/lint/src/test/kotlin/FirebaseAppGetDetectorTests.kt @@ -120,7 +120,7 @@ class FirebaseAppGetDetectorTests : LintDetectorTest() { val instance = FirebaseApp.getInstance().get(Foo::class.java) @JvmStatic - fun getInstance(app: FirebaseApp) = app.get(Foo::class.java) + fun getInstance(app: FirebaseApp): Foo = app.get(Foo::class.java) } } """ @@ -145,7 +145,7 @@ class FirebaseAppGetDetectorTests : LintDetectorTest() { val instance = FirebaseApp.getInstance().get(FooImpl::class.java) @JvmStatic - fun getInstance(app: FirebaseApp) = app.get(FooImpl::class.java) + fun getInstance(app: FirebaseApp): Foo = app.get(FooImpl::class.java) } } class FooImpl : Foo() From aa3df90d241d2a59c6a57ce2160fc8cf5179aa87 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Sat, 5 Jul 2025 07:44:35 -0400 Subject: [PATCH 08/24] Address usage of API 24 within perf Error was Error: The type of the for loop iterated value is java.util.concurrent.ConcurrentHashMap.KeySetView, which requires API level 24, or core library desugaring (current min is 21); to work around this, add an explicit cast to (Map) before the keySet call. [NewApi] for (String existingKey : allRcConfigMap.keySet()) { ~~~~~~~~~~~~~~~~~~~~~~~ Explanation for issues of type "NewApi": This check scans through all the Android API calls in the application and warns about any calls that are not available on all versions targeted by this application (according to its minimum SDK attribute in the manifest). If you really want to use this API and don't need to support older devices just set the minSdkVersion in your build.gradle or AndroidManifest.xml files. If your code is deliberately accessing newer APIs, and you have ensured (e.g. with conditional execution) that this code will only ever be called on a supported platform, then you can annotate your class or method with the @TargetApi annotation specifying the local minimum SDK to apply, such as @TargetApi(11), such that this check considers 11 rather than your manifest file's minimum SDK as the required API level. If you are deliberately setting android: attributes in style definitions, make sure you place this in a values-vNN folder in order to avoid running into runtime conflicts on certain devices where manufacturers have added custom attributes whose ids conflict with the new ones on later platforms. Similarly, you can use tools:targetApi="11" in an XML file to indicate that the element will only be inflated in an adequate context. --- .../com/google/firebase/perf/config/RemoteConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java index 36d8c272aef..8065997974d 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java @@ -363,7 +363,7 @@ private void triggerFirebaseRemoteConfigFetchAndActivateOnSuccessfulFetch() { @VisibleForTesting protected void syncConfigValues(Map newlyFetchedMap) { allRcConfigMap.putAll(newlyFetchedMap); - for (String existingKey : allRcConfigMap.keySet()) { + for (String existingKey : ((Map) allRcConfigMap).keySet()) { if (!newlyFetchedMap.containsKey(existingKey)) { allRcConfigMap.remove(existingKey); } From 0cab42a39b0bb42f0849d26dc20913d891c2f7d5 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Sat, 5 Jul 2025 08:10:45 -0400 Subject: [PATCH 09/24] Reduce mockk bump to prevent bug in spyk --- 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 868e00f9d97..4bb7117378c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -54,7 +54,7 @@ mavenResolverApi = "1.9.23" mavenResolverProvider = "3.9.9" mockito = "5.2.0" mockitoAndroid = "3.4.0" -mockk = "1.14.2" # Do not use 1.14.3 or above since it bumps kotlin to 2.1.x +mockk = "1.14.0" # Do not use 1.14.2 or above due to a bug in spyK and bumps kotlin to 2.1.x playServicesCloudMessaging = "17.2.0" playServicesStats = "17.0.2" playServicesVision = "20.1.3" From b1707cc42d6539c3b1eb42ec2dc771a5cda3d239 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Sun, 6 Jul 2025 23:53:07 -0400 Subject: [PATCH 10/24] Bump mockito dependencies --- 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 4bb7117378c..6fd39bf9129 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,8 +52,8 @@ lifecycleProcess = "2.3.1" material = "1.12.0" mavenResolverApi = "1.9.23" mavenResolverProvider = "3.9.9" -mockito = "5.2.0" -mockitoAndroid = "3.4.0" +mockito = "5.16.0" +mockitoAndroid = "5.16.0" mockk = "1.14.0" # Do not use 1.14.2 or above due to a bug in spyK and bumps kotlin to 2.1.x playServicesCloudMessaging = "17.2.0" playServicesStats = "17.0.2" From fa58d507476e666dd89234a1144846606628aa21 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 00:33:02 -0400 Subject: [PATCH 11/24] Bump jacoco dependency --- .../java/com/google/firebase/gradle/plugins/ci/Coverage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/ci/Coverage.java b/plugins/src/main/java/com/google/firebase/gradle/plugins/ci/Coverage.java index a785420ab0f..e1ce2758093 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/ci/Coverage.java +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/ci/Coverage.java @@ -36,7 +36,7 @@ public static void apply(FirebaseLibraryExtension firebaseLibrary) { File reportsDir = new File(project.getBuildDir(), "/reports/jacoco"); JacocoPluginExtension jacoco = project.getExtensions().getByType(JacocoPluginExtension.class); - jacoco.setToolVersion("0.8.8"); + jacoco.setToolVersion("0.8.13"); jacoco.getReportsDirectory().set(reportsDir); project .getTasks() From f362d7703f65bde890a689e092b2f93c3d2adf14 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 00:34:31 -0400 Subject: [PATCH 12/24] Remove unnecessary mockito-inline dep --- appcheck/firebase-appcheck/firebase-appcheck.gradle | 2 -- .../firebase-appdistribution-api.gradle | 1 - firebase-appdistribution/firebase-appdistribution.gradle | 2 -- firebase-installations/firebase-installations.gradle | 2 -- firebase-messaging/firebase-messaging.gradle | 1 - firebase-perf/firebase-perf.gradle | 1 - gradle/libs.versions.toml | 3 +-- 7 files changed, 1 insertion(+), 11 deletions(-) diff --git a/appcheck/firebase-appcheck/firebase-appcheck.gradle b/appcheck/firebase-appcheck/firebase-appcheck.gradle index 8bb131495f3..0133ce3ae0a 100644 --- a/appcheck/firebase-appcheck/firebase-appcheck.gradle +++ b/appcheck/firebase-appcheck/firebase-appcheck.gradle @@ -70,7 +70,6 @@ dependencies { testImplementation libs.junit testImplementation libs.junit testImplementation libs.mockito.core - testImplementation libs.mockito.mockito.inline testImplementation libs.robolectric androidTestImplementation project(':appcheck:firebase-appcheck') @@ -85,5 +84,4 @@ dependencies { androidTestImplementation libs.truth androidTestImplementation libs.junit androidTestImplementation libs.mockito.core - androidTestImplementation libs.mockito.mockito.inline } diff --git a/firebase-appdistribution-api/firebase-appdistribution-api.gradle b/firebase-appdistribution-api/firebase-appdistribution-api.gradle index ed9f7d9f63c..71416c85e58 100644 --- a/firebase-appdistribution-api/firebase-appdistribution-api.gradle +++ b/firebase-appdistribution-api/firebase-appdistribution-api.gradle @@ -69,7 +69,6 @@ dependencies { testImplementation libs.truth testImplementation libs.junit testImplementation libs.mockito.core - testImplementation libs.mockito.mockito.inline testImplementation libs.robolectric androidTestImplementation libs.androidx.test.core diff --git a/firebase-appdistribution/firebase-appdistribution.gradle b/firebase-appdistribution/firebase-appdistribution.gradle index 55a5a09884e..b9084432b85 100644 --- a/firebase-appdistribution/firebase-appdistribution.gradle +++ b/firebase-appdistribution/firebase-appdistribution.gradle @@ -98,7 +98,6 @@ dependencies { testImplementation libs.androidx.test.core testImplementation libs.truth testImplementation libs.junit - testImplementation libs.mockito.mockito.inline testImplementation libs.robolectric androidTestImplementation(project(":integ-testing")){ @@ -111,5 +110,4 @@ dependencies { androidTestImplementation libs.truth androidTestImplementation libs.junit androidTestImplementation libs.mockito.core - androidTestImplementation libs.mockito.mockito.inline } diff --git a/firebase-installations/firebase-installations.gradle b/firebase-installations/firebase-installations.gradle index 4765c720fc9..47d5ee852ea 100644 --- a/firebase-installations/firebase-installations.gradle +++ b/firebase-installations/firebase-installations.gradle @@ -73,7 +73,6 @@ dependencies { testImplementation libs.truth testImplementation libs.junit testImplementation libs.mockito.core - testImplementation libs.mockito.mockito.inline testImplementation libs.robolectric androidTestImplementation(project(":integ-testing")){ @@ -86,5 +85,4 @@ dependencies { androidTestImplementation libs.truth androidTestImplementation libs.junit androidTestImplementation libs.mockito.core - androidTestImplementation libs.mockito.mockito.inline } diff --git a/firebase-messaging/firebase-messaging.gradle b/firebase-messaging/firebase-messaging.gradle index f014b9eaa7c..4321ffc653d 100644 --- a/firebase-messaging/firebase-messaging.gradle +++ b/firebase-messaging/firebase-messaging.gradle @@ -155,5 +155,4 @@ dependencies { androidTestImplementation libs.truth androidTestImplementation libs.junit androidTestImplementation libs.mockito.core - androidTestImplementation libs.mockito.mockito.inline } diff --git a/firebase-perf/firebase-perf.gradle b/firebase-perf/firebase-perf.gradle index c0fd6df6056..4c49ed6aad6 100644 --- a/firebase-perf/firebase-perf.gradle +++ b/firebase-perf/firebase-perf.gradle @@ -136,6 +136,5 @@ dependencies { testImplementation libs.androidx.test.rules testImplementation libs.junit testImplementation libs.mockito.core - testImplementation libs.mockito.mockito.inline testImplementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6' } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6fd39bf9129..b807af4b9e7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,7 +53,7 @@ material = "1.12.0" mavenResolverApi = "1.9.23" mavenResolverProvider = "3.9.9" mockito = "5.16.0" -mockitoAndroid = "5.16.0" +mockitoAndroid = "3.4.0" mockk = "1.14.0" # Do not use 1.14.2 or above due to a bug in spyK and bumps kotlin to 2.1.x playServicesCloudMessaging = "17.2.0" playServicesStats = "17.0.2" @@ -195,7 +195,6 @@ kotlin-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-te mockito-android = { module = "org.mockito:mockito-android", version.ref = "mockitoAndroid" } mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } mockito-dexmaker = { module = "com.linkedin.dexmaker:dexmaker-mockito", version = "2.28.3" } -mockito-mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito" } mockk = { module = "io.mockk:mockk", version.ref = "mockk" } mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockk" } protobuf-java-util = { module = "com.google.protobuf:protobuf-java-util", version.ref = "protobufjavautil" } From 46bacc7f30bdfb676a3a4178239354f35130db04 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 01:46:31 -0400 Subject: [PATCH 13/24] Add missing mock dependency in appdistro --- firebase-appdistribution/firebase-appdistribution.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/firebase-appdistribution/firebase-appdistribution.gradle b/firebase-appdistribution/firebase-appdistribution.gradle index b9084432b85..a6333aff391 100644 --- a/firebase-appdistribution/firebase-appdistribution.gradle +++ b/firebase-appdistribution/firebase-appdistribution.gradle @@ -98,6 +98,7 @@ dependencies { testImplementation libs.androidx.test.core testImplementation libs.truth testImplementation libs.junit + testImplementation libs.mockito.core testImplementation libs.robolectric androidTestImplementation(project(":integ-testing")){ From b6d44df639ac147b9a3cdc6eb732310685c50074 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 14:53:10 -0400 Subject: [PATCH 14/24] Address appdistro test bug --- .../firebase/appdistribution/impl/FeedbackSender.java | 6 +++--- gradle/libs.versions.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java b/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java index 859b603c876..8f665cd5d62 100644 --- a/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java +++ b/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java @@ -33,9 +33,9 @@ class FeedbackSender { static final String CONTENT_TYPE_PNG = "image/png"; private static final String TAG = "FeedbackSender"; - private static final String FILE_EXTENSION_JPG = ".jpg"; - private static final String FILE_EXTENSION_JPEG = ".jpeg"; - private static final String FILE_EXTENSION_PNG = ".png"; + private static final String FILE_EXTENSION_JPG = "jpg"; + private static final String FILE_EXTENSION_JPEG = "jpeg"; + private static final String FILE_EXTENSION_PNG = "png"; private static final String DEFAULT_FILENAME = "screenshot.png"; private final ContentResolver contentResolver; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b807af4b9e7..048dfad9c19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,7 +64,7 @@ protobufjavautil = "3.25.5" protoc = "3.25.5" quickcheck = "0.6" reactiveStreams = "1.0.4" -robolectric = "4.12" +robolectric = "4.15" runner = "1.0.2" rxandroid = "2.0.2" rxjava = "2.1.14" From 18465b675782952822469d9f3f8750af8329b0c3 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 17:29:56 -0400 Subject: [PATCH 15/24] Reduce dagger version bump Dagger versions above 2.51 cause a very weird error in which a constant in the FeedbackSender code in appdistribution will end up mangled and cause the tests to fail "ONLY IN RELEASE TESTS". The FILE_EXTENSION_JPG = .jpg gets tur into change FILE_EXTENSION_JPG = com.google.firebase.appdistribution.impl.jpg causing the extension check to fail --- .../firebase/appdistribution/impl/FeedbackSender.java | 6 +++--- gradle/libs.versions.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java b/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java index 8f665cd5d62..859b603c876 100644 --- a/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java +++ b/firebase-appdistribution/src/main/java/com/google/firebase/appdistribution/impl/FeedbackSender.java @@ -33,9 +33,9 @@ class FeedbackSender { static final String CONTENT_TYPE_PNG = "image/png"; private static final String TAG = "FeedbackSender"; - private static final String FILE_EXTENSION_JPG = "jpg"; - private static final String FILE_EXTENSION_JPEG = "jpeg"; - private static final String FILE_EXTENSION_PNG = "png"; + private static final String FILE_EXTENSION_JPG = ".jpg"; + private static final String FILE_EXTENSION_JPEG = ".jpeg"; + private static final String FILE_EXTENSION_PNG = ".png"; private static final String DEFAULT_FILENAME = "screenshot.png"; private final ContentResolver contentResolver; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 048dfad9c19..b1bedda2802 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ checkerQual = "2.5.2" constraintlayout = "2.1.4" coreKtx = "1.12.0" coroutines = "1.9.0" -dagger = "2.55" +dagger = "2.51" # Don't bump above 2.51 as it causes a bug in AppDistro FeedbackSender JPEG code datastore = "1.1.3" dexmaker = "2.28.1" dexmakerVersion = "1.2" From d567cc6012c15dbbe9da6901d1e1ea58cbaf34bc Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 17:51:18 -0400 Subject: [PATCH 16/24] Address sessions breakage --- firebase-sessions/firebase-sessions.gradle.kts | 5 ++++- firebase-sessions/lint-baseline.xml | 4 ++++ gradle/libs.versions.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 firebase-sessions/lint-baseline.xml diff --git a/firebase-sessions/firebase-sessions.gradle.kts b/firebase-sessions/firebase-sessions.gradle.kts index 7557a2c17da..aeab418cf6e 100644 --- a/firebase-sessions/firebase-sessions.gradle.kts +++ b/firebase-sessions/firebase-sessions.gradle.kts @@ -52,7 +52,10 @@ android { targetSdk = targetSdkVersion unitTests { isIncludeAndroidResources = true } } - lint { targetSdk = targetSdkVersion } + lint { + baseline = file("lint-baseline.xml") + targetSdk = targetSdkVersion + } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs::class.java).configureEach { diff --git a/firebase-sessions/lint-baseline.xml b/firebase-sessions/lint-baseline.xml new file mode 100644 index 00000000000..ea2cac1e638 --- /dev/null +++ b/firebase-sessions/lint-baseline.xml @@ -0,0 +1,4 @@ + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b1bedda2802..1467cf61352 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -239,4 +239,4 @@ protobuf = { id = "com.google.protobuf", version.ref = "protobufGradlePlugin" } errorprone = { id = "net.ltgt.errorprone", version.ref = "gradleErrorpronePlugin" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" } crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsGradle" } -kapt = { id = "org.jetbrains.kotlin.kapt", version = "2.1.20"} +kapt = { id = "org.jetbrains.kotlin.kapt", version = "2.0.21"} From 0dd1816383ae545b91dadc89adc9e655ddb30a4c Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 21:31:28 -0400 Subject: [PATCH 17/24] Undo kapt update There's no need to go higher --- build.gradle.kts | 1 - firebase-sessions/firebase-sessions.gradle.kts | 2 +- gradle/libs.versions.toml | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ef66a75f530..a10ac0119ea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,6 @@ plugins { alias(libs.plugins.protobuf) apply false alias(libs.plugins.errorprone) alias(libs.plugins.crashlytics) apply false - alias(libs.plugins.kapt) apply false id("PublishingPlugin") id("firebase-ci") id("smoke-tests") diff --git a/firebase-sessions/firebase-sessions.gradle.kts b/firebase-sessions/firebase-sessions.gradle.kts index aeab418cf6e..f912236f2f2 100644 --- a/firebase-sessions/firebase-sessions.gradle.kts +++ b/firebase-sessions/firebase-sessions.gradle.kts @@ -20,7 +20,7 @@ plugins { id("firebase-library") id("firebase-vendor") id("kotlin-android") - alias(libs.plugins.kapt) + id("kotlin-kapt") } firebaseLibrary { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1467cf61352..0b8c6b25957 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -239,4 +239,3 @@ protobuf = { id = "com.google.protobuf", version.ref = "protobufGradlePlugin" } errorprone = { id = "net.ltgt.errorprone", version.ref = "gradleErrorpronePlugin" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" } crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsGradle" } -kapt = { id = "org.jetbrains.kotlin.kapt", version = "2.0.21"} From a5c5bea50de805e4bfafe512373644d554e9ee3c Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 21:32:25 -0400 Subject: [PATCH 18/24] Use non-deprecated reflector in FCM --- .../firebase/messaging/shadows/ShadowMessenger.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java b/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java index ef946522750..18ba44bb767 100644 --- a/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java +++ b/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.firebase.messaging.shadows; +import static org.robolectric.util.reflector.Reflector.reflector; + import android.os.Message; import android.os.Messenger; import android.os.RemoteException; @@ -20,6 +22,8 @@ import org.robolectric.annotation.Implements; import org.robolectric.annotation.RealObject; import org.robolectric.shadow.api.Shadow; +import org.robolectric.util.reflector.Direct; +import org.robolectric.util.reflector.ForType; @Implements(Messenger.class) public class ShadowMessenger { @@ -28,12 +32,18 @@ public class ShadowMessenger { private static RemoteException sendException = null; + @ForType(Messenger.class) + interface MessengerReflector { + @Direct + void send(Messenger messenger, Message message) throws RemoteException; + } + @Implementation protected void send(Message message) throws RemoteException { if (sendException != null) { throw sendException; } else { - Shadow.directlyOn(realMessenger, Messenger.class).send(message); + reflector(Messenger.class, realMessenger).send(message); } } From eff1c7dd3a5fd6031dabdd19869ea8009111db6c Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 21:33:15 -0400 Subject: [PATCH 19/24] Replace hardcoded android.annotation declarations with catalog --- .../firebase-encoders-processor.gradle | 2 +- .../firebase-encoders-proto.gradle | 4 ++-- .../firebase-ml-modeldownloader.gradle | 2 +- firebase-perf/dev-app/dev-app.gradle | 2 +- firebase-perf/e2e-app/e2e-app.gradle | 2 +- .../transport-backend-cct/transport-backend-cct.gradle | 6 +++--- .../transport-runtime-testing.gradle | 4 ++-- transport/transport-runtime/transport-runtime.gradle | 8 ++++---- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/encoders/firebase-encoders-processor/firebase-encoders-processor.gradle b/encoders/firebase-encoders-processor/firebase-encoders-processor.gradle index 140928763fd..3aa0b029c8a 100644 --- a/encoders/firebase-encoders-processor/firebase-encoders-processor.gradle +++ b/encoders/firebase-encoders-processor/firebase-encoders-processor.gradle @@ -44,7 +44,7 @@ configurations.testImplementation.resolutionStrategy { } dependencies { - implementation 'androidx.annotation:annotation:1.1.0' + implementation libs.androidx.annotation } test { diff --git a/encoders/firebase-encoders-proto/firebase-encoders-proto.gradle b/encoders/firebase-encoders-proto/firebase-encoders-proto.gradle index 7fecc47b267..58bec1c6a2a 100644 --- a/encoders/firebase-encoders-proto/firebase-encoders-proto.gradle +++ b/encoders/firebase-encoders-proto/firebase-encoders-proto.gradle @@ -19,7 +19,7 @@ plugins { firebaseLibrary { publishJavadoc = false - releaseNotes { + releaseNotes { enabled.set(false) } } @@ -39,7 +39,7 @@ protobuf { dependencies { api 'com.google.firebase:firebase-encoders:17.0.0' - implementation 'androidx.annotation:annotation:1.1.0' + implementation libs.androidx.annotation annotationProcessor project(':encoders:firebase-encoders-processor') diff --git a/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle b/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle index 2e709015da1..eb5776ab83e 100644 --- a/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle +++ b/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle @@ -100,7 +100,7 @@ dependencies { api("com.google.firebase:firebase-installations:17.2.0") api 'com.google.firebase:firebase-installations-interop:17.1.0' - implementation 'androidx.annotation:annotation:1.1.0' + implementation libs.androidx.annotation implementation 'com.google.android.datatransport:transport-api:3.0.0' implementation 'com.google.android.datatransport:transport-runtime:3.1.8' implementation 'com.google.auto.service:auto-service-annotations:1.0.1' diff --git a/firebase-perf/dev-app/dev-app.gradle b/firebase-perf/dev-app/dev-app.gradle index 41b7a98e48e..f09917b2607 100644 --- a/firebase-perf/dev-app/dev-app.gradle +++ b/firebase-perf/dev-app/dev-app.gradle @@ -97,7 +97,7 @@ dependencies { } // Google Deps - implementation 'androidx.annotation:annotation:1.4.0' + implementation libs.androidx.annotation implementation 'androidx.multidex:multidex:2.0.1' implementation 'com.google.android.gms:play-services-tasks:18.0.2' implementation 'androidx.appcompat:appcompat:1.4.2' diff --git a/firebase-perf/e2e-app/e2e-app.gradle b/firebase-perf/e2e-app/e2e-app.gradle index 6bdd3840de8..97f12fb502b 100644 --- a/firebase-perf/e2e-app/e2e-app.gradle +++ b/firebase-perf/e2e-app/e2e-app.gradle @@ -87,7 +87,7 @@ dependencies { // Google Deps implementation "com.google.android.gms:play-services-tasks:18.0.1" implementation "com.google.guava:guava:30.1.1-android" - implementation 'androidx.annotation:annotation:1.1.0' + implementation libs.androidx.annotation implementation 'androidx.multidex:multidex:2.0.1' implementation "androidx.recyclerview:recyclerview:1.1.0" implementation 'androidx.appcompat:appcompat:1.4.0' diff --git a/transport/transport-backend-cct/transport-backend-cct.gradle b/transport/transport-backend-cct/transport-backend-cct.gradle index 2baae70620d..c5be2559f90 100644 --- a/transport/transport-backend-cct/transport-backend-cct.gradle +++ b/transport/transport-backend-cct/transport-backend-cct.gradle @@ -20,7 +20,7 @@ plugins { firebaseLibrary{ libraryGroup = "transport" publishJavadoc = false - releaseNotes { + releaseNotes { enabled.set(false) } } @@ -41,7 +41,7 @@ protobuf { } android { - namespace "com.google.android.datatransport.backend.cct" + namespace "com.google.android.datatransport.backend.cct" compileSdkVersion project.compileSdkVersion defaultConfig { minSdkVersion project.minSdkVersion @@ -62,7 +62,7 @@ dependencies { api 'com.google.firebase:firebase-encoders:17.0.0' api 'com.google.firebase:firebase-encoders-json:18.0.0' - implementation 'androidx.annotation:annotation:1.1.0' + implementation libs.androidx.annotation compileOnly "com.google.auto.value:auto-value-annotations:1.6.6" diff --git a/transport/transport-runtime-testing/transport-runtime-testing.gradle b/transport/transport-runtime-testing/transport-runtime-testing.gradle index 2268e8eea2a..384271822d5 100644 --- a/transport/transport-runtime-testing/transport-runtime-testing.gradle +++ b/transport/transport-runtime-testing/transport-runtime-testing.gradle @@ -18,7 +18,7 @@ plugins { } android { - namespace "com.google.android.datatransport.runtime.testing" + namespace "com.google.android.datatransport.runtime.testing" compileSdkVersion project.compileSdkVersion defaultConfig { minSdkVersion project.minSdkVersion @@ -35,7 +35,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.3.0' + implementation libs.androidx.annotation implementation 'com.google.android.datatransport:transport-api:3.0.0' implementation 'com.google.android.datatransport:transport-backend-cct:3.1.8' implementation 'com.google.android.datatransport:transport-runtime:3.1.8' diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index eeb18a0513d..aaf5e518f44 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -52,7 +52,7 @@ protobuf { firebaseLibrary { libraryGroup = "transport" publishJavadoc = false - releaseNotes { + releaseNotes { enabled.set(false) } testLab { @@ -106,10 +106,10 @@ dependencies { } api "com.google.android.datatransport:transport-api:4.0.0" - api 'com.google.firebase:firebase-encoders:17.0.0' - api "com.google.firebase:firebase-encoders-proto:16.0.0" + api project(":encoders:firebase-encoders") + api project(":encoders:firebase-encoders-proto") - implementation 'androidx.annotation:annotation:1.3.0' + implementation libs.androidx.annotation implementation libs.javax.inject compileOnly "com.google.auto.value:auto-value-annotations:1.6.6" From 8a2b11f454bde92ba44ef08af4f5efd4f9a05acd Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 21:34:49 -0400 Subject: [PATCH 20/24] Fix format --- .../com/google/firebase/messaging/shadows/ShadowMessenger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java b/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java index 18ba44bb767..c3de6854ba9 100644 --- a/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java +++ b/firebase-messaging/src/test/java/com/google/firebase/messaging/shadows/ShadowMessenger.java @@ -21,7 +21,6 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.annotation.RealObject; -import org.robolectric.shadow.api.Shadow; import org.robolectric.util.reflector.Direct; import org.robolectric.util.reflector.ForType; From 28886119aa33a5b069911c20085caea40f7cd4e8 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 22:11:26 -0400 Subject: [PATCH 21/24] Fix fiam-display test blocking robolectric blocking Robolectric versions higher than 4.12 set window flag different from 1, and the test doesn't aim at testing those, so we are ignoring them. --- .../inappmessaging/display/internal/FiamWindowManagerTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/internal/FiamWindowManagerTest.java b/firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/internal/FiamWindowManagerTest.java index 714fa513f11..61a69b8c656 100644 --- a/firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/internal/FiamWindowManagerTest.java +++ b/firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/internal/FiamWindowManagerTest.java @@ -95,6 +95,7 @@ public void show_addsViewOnlyOnce() { expectedLayoutParams.dimAmount = 0.3f; expectedLayoutParams.gravity = WINDOW_GRAVITY; expectedLayoutParams.windowAnimations = 0; + expectedLayoutParams.flags = 16777217; // Ignore flags (unblocks robolectric >4.12 update) fiamWindowManager.show(bindingWrapper, activity); fiamWindowManager.show(bindingWrapper, activity); From f9bc4f6f1341b654c5cc19fc740f0832ac568c4f Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Mon, 7 Jul 2025 22:22:54 -0400 Subject: [PATCH 22/24] Update sessions to handle null fid correctly --- .../main/kotlin/com/google/firebase/sessions/InstallationId.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/InstallationId.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/InstallationId.kt index 0df42fda953..b8c164c0355 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/InstallationId.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/InstallationId.kt @@ -37,7 +37,7 @@ internal class InstallationId private constructor(val fid: String, val authToken } val fid: String = try { - firebaseInstallations.id.await() + firebaseInstallations.id.await() ?: "" } catch (ex: Exception) { Log.w(TAG, "Error getting Firebase installation id .", ex) "" From 0d8bc74409e125cb75557b80fe8a47b872d7a629 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 8 Jul 2025 01:22:48 -0400 Subject: [PATCH 23/24] Bump transport deps --- .../transport-backend-cct.gradle | 1 + .../transport-runtime.gradle | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/transport/transport-backend-cct/transport-backend-cct.gradle b/transport/transport-backend-cct/transport-backend-cct.gradle index c5be2559f90..149df8b4c58 100644 --- a/transport/transport-backend-cct/transport-backend-cct.gradle +++ b/transport/transport-backend-cct/transport-backend-cct.gradle @@ -15,6 +15,7 @@ plugins { id 'firebase-library' id 'com.google.protobuf' + id("kotlin-android") } firebaseLibrary{ diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index aaf5e518f44..cfd34c23ff9 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -16,6 +16,7 @@ plugins { id "com.google.protobuf" id 'firebase-library' id 'firebase-vendor' + id("kotlin-android") } // add a dependency on the protoc plugin's fat jar to make it available to protobuf below. @@ -105,7 +106,7 @@ dependencies { exclude group: "javax.inject", module: "javax.inject" } - api "com.google.android.datatransport:transport-api:4.0.0" + api project(":transport:transport-api") api project(":encoders:firebase-encoders") api project(":encoders:firebase-encoders-proto") @@ -116,23 +117,23 @@ dependencies { compileOnly "com.google.errorprone:error_prone_annotations:2.9.0" annotationProcessor project(":encoders:firebase-encoders-processor") - annotationProcessor "com.google.auto.value:auto-value:1.6.5" + annotationProcessor libs.autovalue annotationProcessor libs.dagger.compiler - androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.27' + androidTestAnnotationProcessor libs.dagger.compiler testImplementation libs.androidx.test.core testImplementation libs.androidx.test.junit testImplementation libs.truth - testImplementation 'junit:junit:4.13-beta-2' - testImplementation 'org.mockito:mockito-core:2.25.0' + testImplementation libs.junit + testImplementation libs.mockito.core testImplementation libs.robolectric - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation libs.androidx.test.rules + androidTestImplementation libs.androidx.test.runner androidTestImplementation libs.androidx.test.junit androidTestImplementation libs.truth - androidTestImplementation 'junit:junit:4.13-beta-3' - androidTestImplementation 'org.mockito:mockito-android:2.25.0' - androidTestImplementation 'org.mockito:mockito-core:2.25.0' + androidTestImplementation libs.junit + androidTestImplementation libs.mockito.android + androidTestImplementation libs.mockito.core } From c214f1c7133ce75ce7b77b1f5886398c34f7cd9b Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 8 Jul 2025 01:23:04 -0400 Subject: [PATCH 24/24] Remove ktx and unbump robolectric --- gradle/libs.versions.toml | 2 +- subprojects.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0b8c6b25957..d70cbe40b29 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,7 +64,7 @@ protobufjavautil = "3.25.5" protoc = "3.25.5" quickcheck = "0.6" reactiveStreams = "1.0.4" -robolectric = "4.15" +robolectric = "4.12.2" runner = "1.0.2" rxandroid = "2.0.2" rxjava = "2.1.14" diff --git a/subprojects.cfg b/subprojects.cfg index 72e06c9248f..dc90f71a394 100644 --- a/subprojects.cfg +++ b/subprojects.cfg @@ -59,7 +59,7 @@ firebase-sessions:benchmark firebase-sessions:test-app firebase-storage firebase-storage:ktx -firebase-vertexai +# firebase-vertexai protolite-well-known-types encoders