Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,11 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
implementation 'com.google.firebase:firebase-analytics:20.1.2'
implementation 'com.google.firebase:firebase-messaging:24.0.0'
implementation 'com.google.firebase:firebase-perf:21.0.1'
implementation 'com.google.firebase:firebase-crashlytics:18.3.7'
implementation platform('com.google.firebase:firebase-bom:34.8.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.firebase:firebase-crashlytics'
Comment on lines +113 to +117
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, check the app/build.gradle file to see the full context around the lines mentioned
cat -n app/build.gradle | head -170

Repository: dimagi/commcare-android

Length of output: 9445


🏁 Script executed:

# Also check for root build.gradle to see plugin versions
find . -name "build.gradle" -type f | head -10

Repository: dimagi/commcare-android

Length of output: 140


🏁 Script executed:

# Look for root-level build.gradle or settings.gradle
cat -n build.gradle 2>/dev/null || echo "No root build.gradle found"

Repository: dimagi/commcare-android

Length of output: 1346


🌐 Web query:

Firebase Android BOM 34.8.0 compatibility requirements google-services crashlytics perf gradle plugin versions

💡 Result:

Short answer — for Firebase Android BoM 34.8.0 (released Jan 15, 2026) use these tool/plugin minimums:

  • Firebase BoM: com.google.firebase:firebase-bom:34.8.0. [1]
  • Android Gradle Plugin (AGP): 8.1.x (AGP 8.1+). [2][3]
  • Gradle CLI: Gradle 8.0+. [3]
  • Google Services Gradle plugin: com.google.gms:google-services version 4.4.4 (recommended; docs reference 4.4.1 minimum in some pages). Use 4.4.4+. [2][3][5]
  • Crashlytics Gradle plugin: com.google.firebase.crashlytics version 3.0.6 (add via plugins block). [3]
  • Performance Monitoring plugin: com.google.firebase:perf-plugin 2.0.2 (use perf-plugin 2.0.2+). [4]

Notes: the BoM removed KTX modules starting v34.0.0 — migrate if you rely on KTX. If you want, I can check specific AGP/Gradle compatibility for your project (build.gradle files). Sources: Firebase docs and release notes. [1][2][3][4][5]

Sources
[1] Firebase BoM 34.8.0 (Maven listing).
[2] Firebase Android setup / Add Firebase to your Android project (google-services 4.4.4).
[3] Crashlytics get-started (AGP 8.1+, Gradle 8.0+, crashlytics plugin 3.0.6).
[4] Firebase Android SDK release notes / perf-plugin 2.0.2.
[5] Firebase Crashlytics NDK / Gradle/Google services minimums.


Update Gradle plugins to support Firebase BOM 34.8.0.

The following plugins are incompatible with Firebase BOM 34.8.0 and must be updated:

  • Google Services: update from 4.3.14 to 4.4.4+
  • Crashlytics Gradle: update from 2.9.2 to 3.0.6+
  • Performance Monitoring: update from 1.4.2 to 2.0.2+

These plugin versions are below the documented minimums for BOM 34.8.0 and will likely cause build or runtime failures.

Also applies to: 166-166

🤖 Prompt for AI Agents
In `@app/build.gradle` around lines 113 - 117, Update the Gradle plugin versions
that are incompatible with Firebase BOM 34.8.0: in your buildscript classpath or
plugins block where you declare com.google.gms:google-services,
com.google.firebase:firebase-crashlytics-gradle, and
com.google.firebase:perf-plugin (look for those exact artifactIds or the plugin
ids com.google.gms.google-services, com.google.firebase.crashlytics,
com.google.firebase.perf), bump them to at least Google Services 4.4.4+,
Crashlytics Gradle 3.0.6+, and Performance Monitoring 2.0.2+ respectively;
ensure you update the version strings in the classpath or plugins declaration
and then sync/build to confirm compatibility with firebase-bom:34.8.0.


implementation 'androidx.legacy:legacy-support-core-ui:1.0.0'
implementation('com.github.bumptech.glide:glide:4.9.0') {
Expand Down Expand Up @@ -162,7 +163,7 @@ dependencies {
implementation "androidx.camera:camera-camera2:$cameraX_version"
implementation "androidx.camera:camera-lifecycle:$cameraX_version"
implementation 'com.google.android.gms:play-services-mlkit-face-detection:17.1.0'
implementation "com.google.firebase:firebase-auth:22.3.0"
implementation "com.google.firebase:firebase-auth"
implementation 'org.gavaghan:geodesy:1.1.3'
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public static void reportHomeButtonClick(String buttonName) {

public static void reportViewArchivedFormsList(boolean forIncomplete) {
String formType = forIncomplete ? AnalyticsParamValue.INCOMPLETE : AnalyticsParamValue.SAVED;
reportEvent(CCAnalyticsEvent.VIEW_ARCHIVED_FORMS_LIST, FirebaseAnalytics.Param.ITEM_LIST, formType);
reportEvent(CCAnalyticsEvent.VIEW_ARCHIVED_FORMS_LIST, FirebaseAnalytics.Param.ITEM_LIST_ID, formType);
}

public static void reportOpenArchivedForm(String formType) {
Expand Down
10 changes: 5 additions & 5 deletions app/unit-tests/src/org/commcare/rules/MainCoroutineRule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@ package org.commcare.rules

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestCoroutineDispatcher
import kotlinx.coroutines.test.TestDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runBlockingTest
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.junit.rules.TestWatcher
import org.junit.runner.Description

@ExperimentalCoroutinesApi
class MainCoroutineRule(val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()
class MainCoroutineRule(val testDispatcher: TestDispatcher = UnconfinedTestDispatcher()
) : TestWatcher() {

override fun starting(description: Description) {
Expand All @@ -21,11 +22,10 @@ class MainCoroutineRule(val testDispatcher: TestCoroutineDispatcher = TestCorout
override fun finished(description: Description) {
super.finished(description)
Dispatchers.resetMain()
testDispatcher.cleanupTestCoroutines()
}

fun runBlockingTest(block: suspend () -> Unit) =
this.testDispatcher.runBlockingTest {
runTest(testDispatcher) {
block()
}
}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.8.20'
ext.kotlin_version = '2.1.0'
ext.nav_version = '2.9.1'
repositories {
google()
Expand Down