NonExistentClass无法转换为注释

时间:2019-02-06 23:40:41

标签: android retrofit2 dagger-2 kapt

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

NonExistentClass cannot be converted to Annotation

查看生成的Java代码后,它用以下内容替换@GET@HEADERS注释:

@error.NonExistentClass()

我已经尝试了以下方法:

  • 使用annotatioProcessor代替kapt

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

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

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

我正在使用:

  • Android Studio 3.3

  • kotlin 1.3.11

  • 匕首2.21

  • 改良版2.3.0

  • 科特琳

  • 战斗

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

3 个答案:

答案 0 :(得分:1)

幸运的是,这个问题使我想出了我的问题。在将类从应用程序模块移到库中时,我正在引用仅在调试文件夹中存在的注释类。因此,调试版本很好,但是生成发行文件时对gradlew install的调用失败。

对我来说,错误非常明显,尽管花了我很长时间才意识到-生成的文件从字面上用@error.NonExistentClass()替换了缺少的注释

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

答案 1 :(得分:0)

对我来说,最近我从项目中删除了匕首,却忘记从相关类中删除@Singleton和@Inject批注。

答案 2 :(得分:0)

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