android 无法将NonExistentClass转换为注解

jmp7cifd  于 2023-01-24  发布在  Android
关注(0)|答案(6)|浏览(335)

我向我的项目添加了一个新的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插件不完全兼容?

ezykj2lf

ezykj2lf1#

幸运的是,这个问题让我找到了自己的问题所在。在将类从应用模块移动到库中时,我引用了一个只存在于debug文件夹中的注解类。因此,调试构建是正常的,但在生成发布文件时调用gradlew install失败。
对我来说,这个错误非常明显,尽管我花了很长时间才意识到-生成的文件实际上用@error.NonExistentClass()替换了丢失的注解
将文件移到主src集中意味着调试和发布版本都可以看到该类。我花了一段时间才弄明白,我以为这是一个被kapt掩盖的Dagger问题,但实际上这只是一个普通的老Dagger问题。我的建议是仔细查看你的Dagger设置。

2hh7jdfx

2hh7jdfx2#

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

qyzbxkaa

qyzbxkaa3#

对我来说,删除Module类上所有的@Singleton和@OpenForTesting是一件痛苦的事情,而且还删除了两个DAO类和Repository,它们的支持模型类不再使用@Entity注解。

a8jjtwal

a8jjtwal4#

对我来说就在这里:
应用插件:'kotlin-安卓系统扩展'

ffscu2ro

ffscu2ro5#

在我的案例中,我使用的是“com.fasterxml.Jackson.core:jackson-databind:2.7.3”库,但后来我从gradle中删除了此依赖项,但没有删除我正在使用的此库的代码,因此删除与此库相关的代码和注解解决了我的问题。

jtjikinw

jtjikinw6#

只是遇到了类似的问题:我尝试使用picocli的@Command注解,也得到了同样的错误。这是我导入的问题。我通过通配符导入这个注解和其他注解:import picocli.CommandLine.*。当我用每个注解的单独导入替换它时(其中有import picocli.CommandLine.Command),kapt开始正常工作。
我假设kapt根本不理解通配符导入。

相关问题