Обновление до Kotlin 1.3.30 прерывает сборку с помощью Dagger 2.21

#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