#android #kotlin #dagger-2
#Android #kotlin #dagger-2 #dagger
Вопрос:
Ошибка сборки после обновления с Kotling 1.3.21 до 1.3.30:
AppComponent.java:16: error: [Dagger/MissingBinding]
java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,
javax.inject.Provider<androidx.lifecycle.ViewModel>>
cannot be provided without an @Provides-annotated method.
Воспроизводится в двух разных проектах с аналогичными зависимостями от компонентов Kotlin, Dagger и архитектуры.
Я подозреваю, что это как-то связано с недавними обновлениями kapt в kotlin 1.3.30: https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released /
Пытался отключить / включить параметры kapt из статьи, пробовал gradle clean, аннулировать кеши, ничего не помогает. Только при понижении версии до 1.3.21 проекты успешно строятся.
Комментарии:
1. Это скромная просьба к сообществу помочь в решении этой проблемы. Возможно, кто-то уже решил эту проблему.
Ответ №1:
Кто-то уже сообщал об этой ошибке на GitHub и YouTrack. Это должно быть исправлено после выпуска версии Kotlin 1.3.31.
Обновление: Kotlin 1.3.31 отсутствует, поэтому обязательно обновите свою версию Kotlin!
Обходной путь для Kotlin 1.3.30, указанный на GitHub, заключается в использовании аннотации Java вместо Kotlin для ViewModelKey
, или вы можете вернуться к версии Kotlin 1.3.21.
/**
* Workaround in Java due to Dagger/Kotlin not playing well together as of now
* https://github.com/google/dagger/issues/1478
*/
@MapKey
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModelKey {
Class<? extends ViewModel> value();
}
Комментарии:
1. Понизьте версию kotlin до
1.3.21
2. Вместо этого просто используйте класс Java… ты спас меня.
3. К вашему сведению: 1.3.31 не решил проблему с моей стороны. Мне все еще нужно использовать обходной путь Java.
4. @Forke Интересно. Я просто попробовал это раньше, и, похоже, это сработало для меня. Вы выполнили чистую сборку и очистили кэш сборки? Это может быть проблема с кэшированием или совершенно другая проблема
5. Я допустил ошибку, установив новую версию, но оставив старую версию настроенной в файле gradle. Теперь работает. Спасибо за обновление!
Ответ №2:
Upgrade
версия Dagger и версия kotlin для latest
annotation class
должно сработать.
На данный момент последняя версия :-
Версия Dagger :- 2.23.2
Версия Kotlin :- 1.3.41