Когда я использую 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'
Может быть, одна из библиотек, которые я использую, уже включает поддержку зависимости In-App Messaging, и тогда она становится избыточной? Спасибо.
Я нашел решение на Как решить, что тип программы уже присутствует: com.google.common.util.concurrent.ListenableFuture?. пользователь 2297550 сказал:
I merely added
implementation 'com.google.guava:guava:27.0.1-android'at the end of my app gradle file and the error went away.
Это было решением для меня. Теперь у меня есть это, и мое приложение правильно компилируется:
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
@JaiminModi Согласно github.com/google/гуава, «Guava — это набор основных библиотек Java от Google, который включает в себя новые типы коллекций (такие как мультикарта и мультимножество), неизменяемые коллекции, библиотеку графов и утилиты для параллелизма, ввода-вывода, хеширования, кэширования, примитивы, строки и многое другое! Он широко используется в большинстве проектов Java в Google, а также широко используется многими другими компаниями».
На данный момент последняя версия implementation 'com.google.guava:guava:28.2-android'github.com/google/guava/релизы.
Есть еще более новый релиз: implementation 'com.google.guava:guava:29.0-jre'
Версия 27.0.1 работала у меня после получения сообщения «Не удается получить доступ к классу com.google.common.util.concurrent.ListenableFuture». ошибка с io.ktor:ktor-auth:1.5.2 по какой-либо причине.
Уменьшите дублированные зависимости от вашего проекта
Например, многие зависимости используют support-v4 и appcompat-v7 как включенные пакеты, а затем могут быть разные версии, поэтому вам нужно удалить эти пакеты из зависимостей и создать одну зависимость компиляции.
Это удалит все включенные модули библиотек
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"
}
}
Все удаленные зависимости должны быть объявлены вне mapbox в одной копии для всех библиотек, которые их используют.
Первый пример удаляет все включенные модули из библиотек. Если вы хотите удалить несколько модулей из конкретной библиотеки, которые вызывают ошибку, попробуйте второй пример для конкретной библиотеки.
Добавьте эту строку в build.gradle
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'
LOL, это должно остаться в проекте навсегда или? Как узнать, когда его можно удалить?
Это спасло положение.
Ничего себе впечатляющая библиотека от Google
@DenisOluka больше похоже на то, что это сделало мой день. ?
Однако это будет работать хорошо, если вы не включили mutliDex в своей конфигурации defaultConfig, вы столкнетесь с другой ошибкой «Не удается разместить запрошенные классы в одном файле dex (# методы: 89411 > 65536)». Чтобы решить эту проблему, убедитесь, что вы добавили реализацию 'androidx.multidex:multidex:2.0.1' в ваших зависимостях и установите multiDexEnabled true в android defaultConfig
Когда вы отправляете быстрое исправление в производство
Ссылка на трекер проблем? Это единственный способ узнать, когда зависимость может быть удалена.
отличный! но нужно ли нам удалить это позже в будущем?
9999.0-empty-to-avoid-conflict-with-guava такое многословное имя
Это работает и с другими зависимостями firebase и Admob??. Google только что починил дренажный трубопровод бумажной лентой.??
Я могу подтвердить эту работу даже в 2022 году спасибо
Я столкнулся с той же проблемой. Я добавил строку ниже
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
Это работает, но я столкнулся с другой проблемой: Cannot fit requested classes in a single dex file (# methods: 89411 > 65536) Чтобы устранить эту ошибку, обязательно включите multiDex, как показано ниже.
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
}
Затем, наконец, добавьте следующие строки.
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
implementation 'androidx.multidex:multidex:2.0.1'
Откройте файл build.gradle.
Не заменять! Просто добавьте эту строку в dependencies{}:
implementation 'com.google.guava:guava:<version>-jre'
Note: To get the version go to https://mvnrepository.com/artifact/com.google.guava/guava and find for the latest version of
jre.
Я только что наткнулся на это при создании моего проекта Flutter. Не совсем уверен, почему он поднял свою уродливую голову, но я здесь.
Итак, если какие-либо разработчики Flutter столкнутся с этим, ответ @Ray Li сработал для меня. Файл build.gradle, который вы хотите отредактировать, находится в папке android/app (т.е. НЕ тот, который находится в папке android).
Просто добавьте implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' в раздел зависимостей в конце файла следующим образом:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
Это случилось со мной внезапно сегодня с моим проектом Flutter, произошло после того, как я обновил свои пакеты и версию Flutter.
Серьезно мужик! Совершенно неожиданные ошибки, подобные этой, портят общий опыт разработки Flutter.
добавьте это в свой файл градиента
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
Это сработало для меня. Все еще использую Java для Android. Кажется, не зависит от Котлина.
добавьте эти две реализации на уровень вашего приложения build.gradle/app/build.gradle
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
Я добавил это и отлично работает для меня.
implementation 'com.google.guava:guava:27.0.1-android'
Но что это значит? Мы добавляем некоторые новые зависимости вместо того, чтобы удалять что-то повторяющееся, и ошибка исчезла..!!!