Hilt 集成使应用程序 MainActivity_GeneratedInjector 崩溃

Vis*_*war 6 android dagger-hilt

尝试使用 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

   
Run Code Online (Sandbox Code Playgroud)

a f*_*yer 39

对我有用的:

  1. @AndroidEntryPoint从活动中删除了注释。
  2. 运行代码,当然失败了。
  3. 活动中有一个片段。所以,我也删除了片段代码。
  4. 运行代码,失败。
  5. 再次将注释添加@AndroidEntryPoint到活动中。
  6. 运行代码。它运行并且错误消失了。


She*_*nov 10

对我来说,作为我的应用 build.gradle 中的依赖声明,我不得不使用api而不是implementation

api 项目(':功能:feedModule')

在此处了解更多信息:https : //github.com/google/dagger/issues/2064

更新:Dagger 团队发布了可以解决此问题的类路径聚合功能。您可以在此处了解更多信息:https : //dagger.dev/hilt/gradle-setup#classpath-aggregation

基本上,在您的应用模块build.gradle 中,您需要添加:

hilt {
    enableExperimentalClasspathAggregation = true
}
Run Code Online (Sandbox Code Playgroud)

如果您在项目中使用的 Android Gradle 插件版本低于 7.0,请确保还将其添加到您的 build.gradle 文件中:

android {
    ...
    lintOptions {
        checkReleaseBuilds false
    }
Run Code Online (Sandbox Code Playgroud)


Dav*_*uel 7

就我而言,我得到了类似的结果,ClassCastException因为我的@HiltAndroidApp应用程序类所在的模块无法访问我的@AndroidEntryPoint活动所在的模块。将我的 App 类移动到 app 模块(可以访问所有其他 Gradle 模块)解决了这个问题。

文档

因为 Hilt 的代码生成需要访问所有使用 Hilt 的 Gradle 模块,所以编译您的 Application 类的 Gradle 模块也需要在其传递依赖项中包含您的所有 Hilt 模块和构造函数注入类。


Jim*_*era 6

我花了几个小时修复这个确切的问题,但通过执行无效缓存/重新启动+重建所有模块来解决它。

这与 Hilt 的此问题相关: Hilt:更有意义的错误消息


Vis*_*war 5

通过为 androidx 刀柄添加缺失的依赖项解决了这个问题。

kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
Run Code Online (Sandbox Code Playgroud)

我的 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"
Run Code Online (Sandbox Code Playgroud)

使用 hilt 注入视图模型的 Plus 片段及其活动都被注释为 @AndroidEntryPoint