问题
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