我在项目中添加了一个新的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插件的新版本不完全兼容?
答案 0 :(得分:1)
幸运的是,这个问题使我想出了我的问题。在将类从应用程序模块移到库中时,我正在引用仅在调试文件夹中存在的注释类。因此,调试版本很好,但是生成发行文件时对gradlew install
的调用失败。
对我来说,错误非常明显,尽管花了我很长时间才意识到-生成的文件从字面上用@error.NonExistentClass()
替换了缺少的注释
将文件移至主要的src集中意味着调试和发行版本都可以看到该类。我花了一段时间才弄清楚,我认为这是一个被kapt掩盖的Dagger问题,但实际上这只是一个普通的Dagger老问题。我的建议是仔细查看您的Dagger设置。
答案 1 :(得分:0)
对我来说,最近我从项目中删除了匕首,却忘记从相关类中删除@Singleton和@Inject批注。
答案 2 :(得分:0)
对我来说,它很痛苦地删除了我的Module类上的所有@Singleton和@OpenForTesting。并删除两个不再使用@Entity注释其支持模型类的DAO类和存储库。