我在我的项目中添加了一个新的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
我正在使用:
可能是一些匕首范围问题?或Retrofit / dagger与Kapt插件的新版本不完全兼容?
幸运的是,这个问题让我想出了我的问题。在将应用程序模块中的类移动到库中时,我引用的是仅存在于调试文件夹中的注释类。所以调试版本很好,但是在生成版本文件时调用gradlew install
失败了。
我的错误是非常明确的,虽然我花了很长时间才意识到 - 生成的文件实际上用@error.NonExistentClass()
替换了缺失的注释
将文件移动到主src集意味着调试版和发布版都可以看到该类。我花了一段时间才弄明白的是,我认为这是一个被kapt掩盖的Dagger问题,但实际上这只是一个普通的老Dagger问题。我的建议是仔细查看你的Dagger设置。