Doppelte Klasse com.google.common.util.concurrent.ListenableFuture in den Modulen guava-20.0.jar (com.google.guava: guava: 20.0)

75

Wenn ich implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'in meinem verwende app/build.gradle, erhalte ich folgende Fehlermeldung:

Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)

Go to the documentation to learn how to Fix dependency resolution errors.

Was ich auch in meinem habe, app/build.gradleist Folgendes:

implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.google.android.gms:play-services-analytics:16.0.8'
implementation 'com.google.android.gms:play-services-awareness:16.0.0'
implementation 'com.google.android.gms:play-services-cast:16.2.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-iid:17.1.2'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'android.arch.work:work-runtime:1.0.1'
implementation 'com.android.support:multidex:1.0.3'
apply plugin: 'com.google.gms.google-services'

Vielleicht unterstützt eine der Bibliotheken, die ich verwende, bereits die In-App-Messaging-Abhängigkeit, und dann wird sie redundant? Vielen Dank.

Jaime Montoya
quelle

Antworten:

219

2020 Lösung

Google kennt diesen Fehler und hat daher ein spezielles Paket erstellt, um den Konflikt zu beheben.

Fügen Sie dies Ihrem hinzu build.gradle

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
Ray Li
quelle
18
LOL, das soll für immer im Projekt bleiben oder? Woher wissen wir, wann es entfernt werden kann?
Jørgen Svennevik Notland
1
Das hat den Tag gerettet.
Denis Oluka
9
Wow beeindruckende Bibliothek von Google
Winsontan520
6
Dies funktioniert jedoch gut. Wenn Sie mutliDex in Ihrer Klasse defaultConfig nicht aktiviert haben, wird ein weiterer Fehler angezeigt: "Angeforderte Klassen können nicht in eine einzelne Dex-Datei eingefügt werden (# Methoden: 89411> 65536)." Um dies zu beheben, stellen Sie sicher, dass Sie die Implementierung hinzufügen 'androidx.multidex: multidex: 2.0.1' auf Ihre Abhängigkeiten und setzen Sie multiDexEnabled auf android defaultConfig
Jackson
3
Wenn Sie eine schnelle Lösung für die Produktion finden
Farwa
60

Ich fand die Lösung unter So lösen Sie den bereits vorhandenen Programmtyp: com.google.common.util.concurrent.ListenableFuture? . user2297550 sagte:

Ich habe nur implementation 'com.google.guava:guava:27.0.1-android'am Ende meiner App-Gradle-Datei hinzugefügt und der Fehler ist verschwunden.

Das war die Lösung für mich. Jetzt habe ich das und meine App wird korrekt kompiliert:

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
Jaime Montoya
quelle
1
Aber was bedeutet das? Wir fügen eine neue Abhängigkeit hinzu, anstatt etwas zu entfernen, das doppelt passiert ist, und der Fehler ist verschwunden. !!!
Jaimin Modi
@JaiminModi Laut github.com/google/guava ist "Guava eine Reihe von Java-Kernbibliotheken von Google, die neue Sammlungstypen (wie Multimap und Multiset), unveränderliche Sammlungen, eine Diagrammbibliothek und Dienstprogramme für Parallelität, I / O, Hashing, Caching, Grundelemente, Zeichenfolgen und mehr! Es wird häufig in den meisten Java-Projekten innerhalb von Google und auch von vielen anderen Unternehmen verwendet. "
Jaime Montoya
2
Derzeit ist die neueste Version implementation 'com.google.guava:guava:28.2-android' github.com/google/guava/releases
Joonsoo
2
Es gibt eine noch neuere Version:implementation 'com.google.guava:guava:29.0-jre'
Roar Grønmo
9

Fügen Sie diese Zeile in build.gradle hinzu

    implementation 'com.google.guava:guava:27.0.1-android'
Prabhu
quelle
5

Ich bin auf das gleiche Problem gestoßen. Ich habe die folgende Zeile hinzugefügt

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

Dies funktioniert, aber ich habe ein anderes Problem festgestellt. Cannot fit requested classes in a single dex file (# methods: 89411 > 65536)Um diesen Fehler zu beheben, aktivieren Sie multiDex wie folgt

defaultConfig {
    applicationId "com.techweezy.smartsync"
    minSdkVersion 19
    targetSdkVersion 29
    versionCode 5
    versionName "1.4"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true //added this line
}

Fügen Sie schließlich die folgenden Zeilen hinzu.

   implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
    implementation 'androidx.multidex:multidex:2.0.1'
Jackson
quelle
5

Ich bin gerade darauf gestoßen, als ich mein Flutter-Projekt erstellt habe. Ich bin mir nicht ganz sicher, warum es seinen hässlichen Kopf aufgerichtet hat, aber hier bin ich.

Wenn also irgendwelche Flutter-Entwickler darauf stoßen, hat die Antwort von @Ray Li für mich funktioniert. Die build.gradleDatei, die Sie bearbeiten möchten, befindet sich im android/appOrdner (dh NICHT im androidOrdner).

Fügen Sie das einfach implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'wie folgt zum Abschnitt "Abhängigkeiten" am Ende der Datei hinzu:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
Tarique Naseem
quelle
2
Dies ist mir heute auch bei meinem Flutter-Projekt plötzlich passiert, nachdem ich meine Pakete und die Flutter-Version aktualisiert habe.
UnicornsOnLSD
4

Reduzieren Sie doppelte Abhängigkeiten von Ihrem Projekt

Beispielsweise verwenden viele Abhängigkeiten support-v4 und appcompat-v7 als enthaltene Pakete und können dann unterschiedliche Versionen haben. Sie müssen diese Pakete also aus den Abhängigkeiten entfernen und eine Kompilierungsabhängigkeit erstellen.

Dadurch werden alle enthaltenen Bibliotheksmodule entfernt

android {
  configurations {
     all*.exclude module: 'appcompat-v7'
     all*.exclude module: 'support-v4'
  }
}

Oder Sie können jede Abhängigkeit verwalten, um Pakete wie folgt klarer zu entfernen:

dependencies {
  implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {//depend on your library
     transitive = true
     exclude group: 'com.android.support', module: 'appcompat-v7'
     exclude group: 'com.android.support', module: 'recyclerview-v7'
     exclude group: 'com.android.support', module: 'design'
     exclude group: 'com.android.support', module: 'support-v4'
     exclude group: 'com.squareup.retrofit2' module: 'retrofit'
     exclude group: 'com.squareup.retrofit2', module: 'retrofit'
     exclude group: 'com.google.code.gson', module: 'gson'
     exclude module: 'guava'//add this line if you have build error "found in modules guava-xxx-android.jar"
  }
}

Alle entfernten Abhängigkeiten müssen außerhalb der Mapbox in einer Kopie deklariert werden, damit sie von allen Bibliotheken verwendet werden.

vishwajit76
quelle
Erstes Beispiel Entfernen Sie alle enthaltenen Module aus den Bibliotheken. Wenn Sie einige Module aus der Pertikularbibliothek entfernen möchten, die für Fehler verantwortlich ist, versuchen Sie das zweite Beispiel für die Pertikularbibliothek.
vishwajit76
1
  1. build.gradleDatei öffnen .

  2. Nicht ersetzen! Fügen Sie einfach diese Zeile hinzu in dependencies{}:

    implementation 'com.google.guava:guava:<version>-jre'
    

Hinweis: Um die Version zu erhalten, gehen Sie zu https://mvnrepository.com/artifact/com.google.guava/guava und suchen Sie nach der neuesten Version von jre.

Pasindu Jayanath
quelle
0

Fügen Sie dies Ihrer Gradle-Datei hinzu

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
Dhruv garg
quelle