从Kotlin 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和Architecture组件具有相似的依赖性。
我怀疑它与kotlin 1.3.30中最近的kapt更新有关:https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/
试图从文章中禁用/启用kapt选项,尝试gradle clean,使缓存无效,没有任何帮助。只有降级到1.3.21项目才能成功构建。
这个bug已经被某人on GitHub和on YouTrack报道了。一旦Kotlin版本1.3.31发布,这应该是固定的。
更新:Kotlin 1.3.31已经发布,所以请务必更新您的Kotlin版本!
在GitHub上列出的Kotlin 1.3.30的解决方法是使用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();
}