簡體   English   中英

Kotlin 1.3.30 的更新打破了 Dagger 2.21 的構建

[英]Update to Kotlin 1.3.30 breaks build with Dagger 2.21

從 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,使緩存無效,但沒有任何幫助。 只有降級到 1.3.21 項目才能成功構建。

GitHubYouTrack已經有人報告了這個錯誤。 一旦 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();
}

Upgrade dagger 版本kotlin 版本Upgradelatest

annotation class應該可以工作。

目前最新版本是:-

匕首版本:- 2.23.2

Kotlin 版本:- 1.3.41

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM