17

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

   
4

12 回答 12

29

什么对我有用:

  1. 从活动中删除了@AndroidEntryPoint注释。
  2. 运行代码,当然,它失败了。
  3. 在活动中有一个片段。所以,我也删除了片段代码。
  4. 运行代码,它失败了。
  5. @AndroidEntryPoint再次向活动添加注释。
  6. 运行代码。它运行并且错误消失了。
于 2021-05-29T10:48:38.243 回答
20

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

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
    }
于 2021-03-25T19:56:18.050 回答
12
  1. 从活动中删除了“@AndtoidEntryPoint”注释。
  2. 运行代码。当然,它会失败。
  3. 再次添加“@AndtoidEntryPoint”
  4. 清洁项目
于 2021-10-09T05:56:58.767 回答
12

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

文档

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

于 2020-09-22T14:13:10.657 回答
7

通过为 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 注入视图模型的 Plus 片段及其活动都被注释为 @AndroidEntryPoint

于 2020-08-10T07:33:43.390 回答
6

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

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

于 2021-02-11T08:26:32.330 回答
4

即使代码正确,Dagger 有时也无法正常工作。

一种可能的解决方案是将类重命名为其他名称(“Class2”),重新运行应用程序并检查它是否有效。如果有效,请将类重命名回其原始名称。

于 2021-09-18T03:50:39.187 回答
4

这是通过使缓存无效并重新启动来解决的

于 2021-01-02T21:12:37.483 回答
0

当我导入带有“实现”的 .aar 时,我也遇到了这种情况。(包含刀柄的 .aar)

就像Sher Sanginov所说的,不要使用增加编译时间的“api”,您可以在 build.gradle(app) 中添加以下行

hilt {
    enableAggregatingTask = true
}

enableExperimentalClasspathAggregation现在已弃用,

https://dagger.dev/hilt/gradle-setup#aggregating-task

于 2022-02-09T16:31:56.397 回答
0

For me it was that I forgot to add @AndroidEntryPoint to a parent activity that was calling a second activity and this one calling the fragment. Obviously everyone of them need to have an @AndroidEntryPoint

于 2021-07-28T06:28:27.443 回答
0

这是一个非常愚蠢的解决方案,但只需注释掉注入注释和注入字段,运行应用程序然后取消注释并再次运行

于 2021-12-13T15:41:31.260 回答
0

我遇到了同样的问题,这是我遵循的步骤:

  1. appModule 以内部 输入图像描述开头

  2. 在您的应用程序级别 build.gradle 里面的 android 部分添加以下行:

       enableExperimentalClasspathAggregation = true
    }
    
    
  3. 我的依赖项按以下顺序:

    
    classpath "com.google.dagger:hilt-android-gradle-plugin:2.40.5"
    
        app-level build.gradle: 
         top plugin section
    
     plugin{
      ...........
      id 'kotlin-kapt'
      id 'dagger.hilt.android.plugin'
     }
    
         dependencies section
         //dagger-hilt
     implementation 'com.google.dagger:hilt-android:2.40.5'
     kapt 'com.google.dagger:hilt-android-compiler:2.40.5'```
    
于 2022-02-06T13:10:34.527 回答