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

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

include :app include :lib 

我也维护lib模块。

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

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

Presenter对象在lib模块中定义。 我在linux环境下工作,我正在使用android studio 3预览Canary 5.代码运行良好,我可以生成APK。

但之后我的公司希望我使用稳定版本的Android Studio生成APK。

然后我使用Android Studio 2.3.3

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

 error: error.NonExistentClass 

出现错误时

 :app:kaptDebugKotlin 

是由匕首类执行并造成的,找不到在其他项目中定义的类。 我能做些什么来解决这个问题? 对不起,我的英语不好。

根本原因

基本上, 在使用kapt没有太多可以解决这个kapt 。 引用这个链接 ,解决使用预处理器(OrmaDatabase)的另一个库中的相同问题:

因为Kotlin在运行Java Annotation Processing之前创建了它的存根,所以Kotlin对OrmaDatabase一无所知,并且存根中声明的名称将是error.NonExistentClass。 这打破了注解处理工具。 这是一种kapt限制

如何解决它(解决方法)

只需使用apt或者annotationProcessor来运行Dagger编译器即可。 只要我改变了:

 kapt libs.daggerCompiler 

 annotationProcessor libs.daggerCompiler 

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

看来,kapt有一个bug,项目清理应该有所帮助。

 ./gradlew clean 

我发现如果你使用

  kapt { generateStubs = true } 

如果改为false,则会显示实际的错误,一旦编辑问题得到纠正,您可能会遇到构建Dagger Graph的问题,但只需要改回原状,