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つに、アプリ内メッセージングの依存関係のサポートが既に含まれていて、それが冗長になるのでしょうか。ありがとうございました。
私は すでに存在するプログラムタイプを解決する方法: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'
2020ソリューション
Googleはこのエラーについて知っているため、競合を修正するための特別なパッケージを作成しました。
これをbuild.gradle
に追加してください
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
この行をbuild.gradleに追加します
implementation 'com.google.guava:guava:27.0.1-Android'
プロジェクトから重複する依存関係を減らす
たとえば、多くの依存関係は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つのコピーでマップボックスの外部で宣言する必要があります。