我向我的项目添加了一个新的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
- Kotlin1.3.11
- 匕首2.21
- Retrofit 2 .3.0
- Kotlin
- 卡普
可能是匕首作用域的问题?或者是改装/匕首与新版本的Kapt插件不完全兼容?
6条答案
按热度按时间ezykj2lf1#
幸运的是,这个问题让我找到了自己的问题所在。在将类从应用模块移动到库中时,我引用了一个只存在于debug文件夹中的注解类。因此,调试构建是正常的,但在生成发布文件时调用
gradlew install
失败。对我来说,这个错误非常明显,尽管我花了很长时间才意识到-生成的文件实际上用
@error.NonExistentClass()
替换了丢失的注解将文件移到主src集中意味着调试和发布版本都可以看到该类。我花了一段时间才弄明白,我以为这是一个被kapt掩盖的Dagger问题,但实际上这只是一个普通的老Dagger问题。我的建议是仔细查看你的Dagger设置。
2hh7jdfx2#
对我来说,我最近从一个项目中 * 删除了 * dagger,但忘记了从相关类中删除@Singleton和@Inject注解。
qyzbxkaa3#
对我来说,删除Module类上所有的@Singleton和@OpenForTesting是一件痛苦的事情,而且还删除了两个DAO类和Repository,它们的支持模型类不再使用@Entity注解。
a8jjtwal4#
对我来说就在这里:
应用插件:'kotlin-安卓系统扩展'
ffscu2ro5#
在我的案例中,我使用的是“com.fasterxml.Jackson.core:jackson-databind:2.7.3”库,但后来我从gradle中删除了此依赖项,但没有删除我正在使用的此库的代码,因此删除与此库相关的代码和注解解决了我的问题。
jtjikinw6#
只是遇到了类似的问题:我尝试使用picocli的@Command注解,也得到了同样的错误。这是我导入的问题。我通过通配符导入这个注解和其他注解:
import picocli.CommandLine.*
。当我用每个注解的单独导入替换它时(其中有import picocli.CommandLine.Command
),kapt开始正常工作。我假设kapt根本不理解通配符导入。