NoClassDefFoundError для неизменной карты Guava с Dagger 2 для Android - PullRequest
0 голосов
/ 13 ноября 2018

Я получаю следующий сбой при запуске приложения для Android после добавления первого модуля Dagger.

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/collect/ImmutableMap;
    at com.sofaking.moonworshipper.DaggerAppComponent.getMapOfClassOfAndProviderOfFactoryOf(DaggerAppComponent.java:35)
    at com.sofaking.moonworshipper.DaggerAppComponent.getDispatchingAndroidInjectorOfActivity(DaggerAppComponent.java:41)
    at com.sofaking.moonworshipper.DaggerAppComponent.injectApp(DaggerAppComponent.java:64)
    at com.sofaking.moonworshipper.DaggerAppComponent.inject(DaggerAppComponent.java:59)
    at com.sofaking.moonworshipper.DaggerAppComponent.inject(DaggerAppComponent.java:16)

Кажется, проблема идентична этой в GitHub: https://github.com/google/dagger/issues/897

Я понимаю, что Кинжал пытается использовать Гуаву, хотя не должен - Но я не уверен, что делать, чтобы это исправить.Это не проблема proguard.

Я пытался включить guava в свои зависимости - что приводило к следующей ошибке при компиляции:

Error: Program type already present: com.google.common.util.concurrent.internal.InternalFutures

, что имеет смысл, так как в моем коде есть другие библиотекикоторые зависят от гуавы.

implementation 'com.google.dagger:dagger:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'

compile 'com.google.dagger:dagger-android:2.15'
compile 'com.google.dagger:dagger-android-support:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'

// tried adding this as well, didn't work
api 'com.google.guava:guava:27.0-android'

Редактировать: Вот дерево разрешенных зависимостей: https://pastebin.com/RsPPjD6H

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Увидев, что Dagger зависит от com.google.guava:guava:23.3-jre, я попытался добавить следующую строку в мой файл сборки Gradle:

api 'com.google.guava:guava:23.3-android'

И это работает!

0 голосов
/ 13 ноября 2018

Слово «компилировать» больше не используется. Вместо этого используйте «реализацию» в ваших зависимостях. Я не знаю, является ли это причиной проблемы, но возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...