Update to Kotlin 1.3.30 breaks build with Dagger 2.21

天涯浪子 提交于 2019-11-26 14:41:30

问题


Build error after update from Kotling 1.3.21 to 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.

Reproduced on two different projects with similar dependencies on Kotlin, Dagger and Architecture components.

I suspect it somehow related to the recent kapt updates in kotlin 1.3.30: https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/

Tried to disable/enable the kapt options from the article, tried gradle clean, invalidate caches, nothing helps. Only downgrading to 1.3.21 projects build successfully.


回答1:


This bug was already reported by someone on GitHub and on YouTrack. This should be fixed once Kotlin version 1.3.31 gets released.

Update: Kotlin 1.3.31 is out, so make sure to update your Kotlin version!


The workaround for Kotlin 1.3.30 listed on GitHub is to use a Java annotation instead of Kotlin for ViewModelKey, or you may downgrade back to 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();
}




回答2:


Upgrade dagger version and kotlin version to the latest

annotation class should work.

Currently the latest version is :-

Dagger version :- 2.23.2

Kotlin version :- 1.3.41



来源:https://stackoverflow.com/questions/55647120/update-to-kotlin-1-3-30-breaks-build-with-dagger-2-21

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!