Дублікат класу com.google.common.util.concurrent.ListenableFuture знайдено в модулях guava-20.0.jar (com.google.guava: guava: 20.0)


79

Коли я використовую 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'

Можливо, одна з бібліотек, яку я використовую, вже включає підтримку залежності обміну повідомленнями в програмі, і тоді вона стає зайвою? Дякую.

Відповіді:


230

Рішення 2020 року

Google знає про цю помилку, тому вони створили спеціальний пакет для виправлення конфлікту.

Додайте це до свого build.gradle

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

18
LOL, це повинно назавжди залишитися в проекті чи? Звідки ми знаємо, коли його можна видалити?
Йорген Свенневік Нотленд,

1
Це врятувало день.
Денис Олука

9
Вау вражаюча бібліотека від Google
winsontan520,

7
Це буде добре працювати, однак, якщо ви не ввімкнули mutliDex у своєму класі defaultConfig, ви зіткнетеся з черговою помилкою "Не вдається помістити запитувані класи в один файл dex (# методів: 89411> 65536)" Для вирішення цього переконайтеся, що ви додали реалізацію 'androidx.multidex: multidex: 2.0.1' від ваших залежностей і встановіть multiDexEnabled true на android defaultConfig
Джексон,

3
Коли ви швидко налагодите виробництво
Фарва,

62

Я знайшов рішення за адресою Як вирішити тип програми, який вже присутній: 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'

1
Але що це означає? Ми додаємо якусь нову залежність, замість того, щоб видалити щось повторюване, і повідомлення про помилку знищено .. !!!
Jaimin Modi

@JaiminModi За даними github.com/google/guava , "Гуава - це набір основних бібліотек Java від Google, що включає нові типи колекцій (наприклад, багатоустановлення та мультимножество), незмінні колекції, бібліотеку графіків та утиліти для паралельності, I / О, хешування, кешування, примітиви, рядки та багато іншого! Він широко використовується у більшості проектів Java у Google, а також широко використовується багатьма іншими компаніями ".
Хайме Монтойя,

2
Наразі остання версія - implementation 'com.google.guava:guava:28.2-android' github.com/google/guava/releases
Joonsoo

2
Є ще новіший випуск:implementation 'com.google.guava:guava:29.0-jre'
Roar Grønmo


8

Я щойно зіткнувся з цим, будуючи свій проект 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'
}

2
Це зі мною раптом сталося сьогодні з моїм проектом Flutter теж, сталося після того, як я оновив свої пакети та версію Flutter.
UnicornsOnLSD

5

Я зіткнувся з тією ж проблемою. Я додав рядок нижче

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'

4

Зменште кількість повторень залежностей від вашого проекту

Наприклад, багато залежностей використовує 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 в одному примірнику, оскільки всі бібліотеки їх використовують.


Перший приклад видалення всіх включених модулів з бібліотек. Якщо ви хочете видалити кілька модулів з пертикулярної бібліотеки, яка відповідає за помилку, спробуйте другий приклад для пертикулярної бібліотеки.
vishwajit76


1

додайте це у свій файл gradle

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.