微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 错误:error.NonExistentClass Kotlin在多模块Dagger项目中

我正在使用Dagger 2和Kotlin进行Android开发.
我的项目也是一个多模块项目.
我的settings.gradle文件是这样的:

include :app
include :lib

我也在维护lib模块.

在Dagger文件中(例如在组件中),我尝试从其他模块中获取项目.例如:

@Component
interface AppComponent{
    fun getPresenter() : Presenter
}

Presenter对象在lib模块中定义.我在linux环境中工作,我正在使用Android Studio 3预览金丝雀5.代码运行良好,我能够生成APK.

但是我的公司希望使用稳定版的Android Studio生成APK.我正在使用Android Studio 2.3.3.

在编译Android项目时,我遇到了这个错误

error: error.NonExistentClass

出现错误

:app:kaptDebugKotlin 

执行并由dagger类找不到,该类在其他项目中定义.可能的解决方法是什么?对不起,我的英语不好.

解决方法:

根本原因

基本上,使用kapt时没有太多可以解决的问题.引用this link解决一个使用预处理器(OrmaDatabase)的库中的相同问题:

Because Kotlin makes its stubs before Java Annotation Processing runs,
Kotlin kNows just nothing about OrmaDatabase, and the name of the
declaration in stubs will be error.NonExistentClass. This breaks the
Annotation Processing tool. It’s a kind of kapt limitation

如何解决(解决方法)

只需使用plain apt或annotationProcessor来运行Dagger编译器.我一改变了:

kapt libs.daggerCompiler

annotationProcessor libs.daggerCompiler

在我的模块级build.gradle文件中,我能够得到错误.在修复错误之后,你必须将该行恢复为kapt,否则将无法生成匕首类,因为它们是在Kotlin中定义的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐