尝试使用android Api文档集成刀柄,但应用程序因以下异常而崩溃。 https://developer.android.com/training/dependency-injection/hilt-android
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.package.application/com.package.application.MainActivity}:
java.lang.ClassCastException: com.package.application.DaggerAppApplication_HiltComponents_ApplicationC$ActivityRetainedCImpl$ActivityCImpl
cannot be cast to com.package.application.MainActivity_GeneratedInjector
答案 0 :(得分:8)
对我来说,作为应用程序build.gradle中的依赖声明,我不得不使用api而不是实现< /强>:
api 项目(':features:feedModule')
在此处了解更多信息:https://github.com/google/dagger/issues/2064
更新: Dagger 团队发布了可以解决此问题的类路径聚合功能。您可以在此处了解更多信息: https://dagger.dev/hilt/gradle-setup#classpath-aggregation
基本上,在您的应用模块 build.gradle 中,您需要添加:
hilt {
enableExperimentalClasspathAggregation = true
}
如果您在项目中使用的 Android Gradle 插件版本低于 7.0,请确保也将此添加到您的 build.gradle 文件中:
android {
...
lintOptions {
checkReleaseBuilds false
}
答案 1 :(得分:3)
这是通过使缓存无效并重新启动来解决的
答案 2 :(得分:3)
我花了几个小时来解决这个确切的问题,但通过使缓存/重启无效 + 重建所有模块解决了这个问题。
这与 Hilt 的这个问题有关: Hilt: More meaningful error messages
答案 3 :(得分:2)
就我而言,我得到了类似的ClassCastException
,因为我的@HiltAndroidApp
应用程序类所在的模块无法访问我的@AndroidEntryPoint
活动所在的模块。将我的App类移动到可以访问所有其他Gradle模块的app模块即可解决了这个问题。
来自docs:
因为Hilt的代码生成需要访问所有使用Hilt的Gradle模块,所以编译您的Application类的Gradle模块还需要在其传递依赖项中具有所有Hilt模块和构造函数注入的类。
答案 4 :(得分:0)
通过添加缺少的androidx hilt依赖关系来解决它。
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
我的gradle文件中具有其他依赖项。
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02"
implementation 'com.google.dagger:hilt-android:2.28-alpha'
kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'
implementation "androidx.fragment:fragment-ktx:1.2.5"
都使用hilt注入viewmodel的Plus片段及其活动被标注为 @AndroidEntryPoint
答案 5 :(得分:0)
对我有用的是:
答案 6 :(得分:0)
对我来说,是我忘记将@AndroidEntryPoint 添加到调用第二个活动的父活动中,而这个活动正在调用片段。显然他们每个人都需要一个@AndroidEntryPoint