【问题标题】:NonExistentClass cannot be converted to AnnotationNonExistentClass 不能转换为 Annotation
【发布时间】:2019-07-01 00:47:48
【问题描述】:

我在我的项目中添加了一个新的 Retrofit 接口,其中包含几个用@GET@HEADERS 注释注释的端点,在使用上述类的构造函数中的@Inject 注释将所述接口注入到存储库类之后, Android Studio 抛出此错误:

NonExistentClass cannot be converted to Annotation

查看生成的 Java 代码后,它将 @GET@HEADERS 注释替换为:

@error.NonExistentClass()

我已经尝试过以下方法:

  • 使用annotatioProcessor 代替kapt

  • gradle.properties 中将jetifier.enabled 设置为false

  • 在我的build.gradle 文件中将generateStubs 设置为true

  • 在我的build.gradle 文件中将correctErrorTypes 设置为true

我正在使用:

  • Android Studio 3.3

  • Kotlin 1.3.11

  • 匕首 2.21

  • 改造 2.3.0

  • 科特林

  • Kapt

这可能是一些匕首范围问题吗?还是Retrofit / dagger 不完全兼容新版本的Kapt插件?

【问题讨论】:

  • 你能显示一些代码吗?
  • 我找到了解决方案,我的项目是多模块的,remote 模块包含retrofit 依赖项,出于某种原因,IDE 允许从 @ 访问 remote 模块依赖项987654342@模块,在模块上添加retrofit依赖解决了问题
  • 谢谢@AlfredoBejarano 我发现了我的问题,花费的时间比我想象的要长,但对我来说这个错误实际上非常明确。我将添加一个可能对其他人有帮助的答案。

标签: android retrofit2 dagger-2 kapt


【解决方案1】:

幸运的是,这个问题让我弄清楚了我的问题。在将类从应用程序模块移动到库中时,我引用了一个仅存在于调试文件夹中的注释类。所以调试版本很好,但是在生成发布文件时调用gradlew install 失败。

虽然我花了很长时间才意识到错误对我来说非常明显 - 生成的文件实际上已经用 @error.NonExistentClass() 替换了缺少的注释

将文件移动到主 src 集中意味着调试和发布版本都可以看到该类。我花了一段时间才弄清楚,我认为这是一个被 kapt 掩盖的 Dagger 问题,但实际上这只是一个普通的旧 Dagger 问题。我的建议是仔细查看你的 Dagger 设置。

【讨论】:

  • 我认为这里的诀窍是,如果您依赖的模块依赖于另一个模块/库(例如 Retrofit),但您将 Retrofit 设置为 implementation 依赖而不是 @987654324 @ 依赖,那么你的模块就不会传递看到它,kapt 会失败。
【解决方案2】:

对我来说,我最近从一个项目中删除了 dagger,却忘记从相关类中删除@Singleton 和@Inject 注释。

【讨论】:

    【解决方案3】:

    对我来说,它痛苦地删除了我的 Module 类上的所有 @Singleton 和 @OpenForTesting。并删除两个 DAO 类和 Repository,其支持模型类不再使用 @Entity 注释。

    【讨论】:

      【解决方案4】:

      因为我在这里:

      应用插件:'kotlin-android-extensions'

      【讨论】:

        【解决方案5】:

        就我而言,我使用的是“com.fasterxml.jackson.core:jackson-databind:2.7.3”库,但后来我从 gradle 中删除了这个依赖项,但没有删除我正在使用的代码这个库,所以删除了与这个库相关的代码和注释解决了我的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 1970-01-01
          • 2018-02-10
          • 2023-03-22
          • 2013-12-27
          • 1970-01-01
          相关资源
          最近更新 更多