web-dev-qa-db-ja.com

モジュールguava-20.0.jar(com.google.guava:guava:20.0)に重複クラスcom.google.common.util.concurrent.ListenableFutureが見つかりました

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'app/build.gradleを使用すると、次のエラーが発生します。

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.

私のapp/build.gradleにもあるものは次のとおりです。

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'

多分、私が使用しているライブラリの1つに、アプリ内メッセージングの依存関係のサポートが既に含まれていて、それが冗長になるのでしょうか。ありがとうございました。

29
Jaime Montoya

私は すでに存在するプログラムタイプを解決する方法:com.google.common.util.concurrent.ListenableFuture? で解決策を見つけました。 user2297550さんのコメント:

implementation 'com.google.guava:guava:27.0.1-Android'私のアプリのgradleファイルの最後で、エラーはなくなりました。

それが私の解決策でした。今私はこれを持っており、私のアプリは正しくコンパイルされます:

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-Android'
33
Jaime Montoya

2020ソリューション

Googleはこのエラーについて知っているため、競合を修正するための特別なパッケージを作成しました。

これをbuild.gradleに追加してください

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

この行をbuild.gradleに追加します

    implementation 'com.google.guava:guava:27.0.1-Android'
1
Prabhu

プロジェクトから重複する依存関係を減らす

たとえば、多くの依存関係はsupport-v4とappcompat-v7をインクルードパッケージとして使用し、異なるバージョンになる可能性があるため、依存関係の内部からこのパッケージを削除し、1つのコンパイル依存関係を作成する必要があります。

これにより、ライブラリに含まれるすべてのモジュールが削除されます

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

または、次のように各依存関係をスローして、パッケージをより明確に削除するように管理できます。

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"
  }
}

削除されたすべての依存関係は、すべてのライブラリで使用されるため、1つのコピーでマップボックスの外部で宣言する必要があります。

0
vishwajit76