NoSuchMethodError: DesugarCollections.synchronizedMap in release instrumentation tests with firebase-sessions 3.0.7 (BOM 34.x)

Aperta
#8,600 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
android, firebase, java

Direzione di ricerca

Inizia con il file allegato firebase-desugar-repro.zip e riproduci il crash usando la configurazione release instrumentation-test e il comando adb indicati. Traccia le versioni in conflitto di DesugarCollections tra gli APK principale e di test; l’attività è completata quando il test di strumentazione release si avvia senza il NoSuchMethodError.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

api: sessions

Running Instrumentation tests with minify enabled release builds after updating to the 34.x from 33.x results into a NoSuchMethodError crash as soon as we launch the app in test environment.

Environment
  • Firebase BOM: 34.18.0
  • firebase-sessions: 3.0.7
  • firebase-crashlytics: 20.1.1
  • AGP: 8.13.2
  • desugar_jdk_libs: 2.1.5 (latest public)
  • testBuildType: release
  • minifyEnabled: true
Steps to reproduce:
  1. Add firebase-crashlytics (or any lib that pulls in firebase-sessions) with BOM 34.x
  2. Set minifyEnabled true in release build type
  3. Set testBuildType "release" in android block
  4. Set coreLibraryDesugaringEnabled true with desugar_jdk_libs:2.1.5
  5. Run adb shell am instrument -w -r .test/androidx.test.runner.AndroidJUnitRunner

Expected: instrumentation test runs
Actual: process crashes immediately during FirebaseInitProvider.onCreate before any test runs -

java.lang.NoSuchMethodError: No static method synchronizedMap(Ljava/util/Map;)Ljava/util/Map;
in class Lj$/util/DesugarCollections; or its super classes
(declaration of 'j$.util.DesugarCollections' appears in <package>.test apk)
    at CrashlyticsRegistrar.<clinit>
    at FirebaseInitProvider.onCreate

firebase-sessions:3.0.7 calls DesugarCollections.synchronizedMap() which was compiled against an internal desugaring library that includes this method. In a normal release build this works because Firebase's bundled DesugarCollections (with synchronizedMap) is the only one present. In release instrumentation tests, the test APK brings its own DesugarCollections from the public desugar_jdk_libs:2.1.5 (which lacks synchronizedMap) and it shadows the main APK's version, causing the crash.

Relevant Code:

Attaching a minimal repro project to reproduce this issue.

firebase-desugar-repro.zip

Lingua principale
Java
Stelle
2.6k
Fork
733
Merge medio
2g 15h
PR unite (30g)
72

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di firebase/firebase-android-sdk

Tutte le issue di firebase/firebase-android-sdk

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.