android - 更新到 Kotlin 1.3.30 会破坏 Dagger 2.21 的构建

标签 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 和 Architecture 组件具有相似依赖关系的两个不同项目中重现。

我怀疑它与 kotlin 1.3.30 中最近的 kapt 更新有某种关系: https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/

尝试禁用/启用文章中的 kapt 选项,尝试 gradle clean,使缓存无效,没有任何帮助。 只有降级到 1.3.21 的项目才能成功构建。

最佳答案

此错误已由某人 on GitHub 报告和 on YouTrack .这应该会在 Kotlin 版本 1.3.31 发布后修复。

更新: Kotlin 1.3.31 已发布,因此请务必更新您的 Kotlin 版本!


GitHub 上列出的 Kotlin 1.3.30 的解决方法是对 ViewModelKey 使用 Java 注释而不是 Kotlin,或者您可以降级回 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();
}

关于android - 更新到 Kotlin 1.3.30 会破坏 Dagger 2.21 的构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647120/

相关文章:

java - RxJava2 中的 flatMapPublisher 是什么?

java - 基本 dagger java 示例 NPE

android - 无法访问 Nullable Dagger2 Android

android - 为 Android Navigation Drawer 设置拖动边距

android - 在 RecyclerView 中单击时刷新 Activity

android - 如何编写代码为 android 中的数组创建共享首选项?

java - 如何破解DataSource以使用静态数据? (将 List<T> 转换为 DataSource<Int, T>)

android - Dagger2 生成的类突然从 Android Studio 中消失了

android - 使用许可之间的区别

Android 应用无法在 2.2 上加载 native 库代码