未解决的参考:在使用kapt时,Kotlin在清理后需要2个构建来获取代码

在我们的Android应用程序中,我们使用DBFlow来访问SQLite数据库。 我们通过Kotlin引用DBFlow生成的类。 我们已经意识到我们拥有模型类以及Java中的数据库类,因为在Kotlin中编写这些类时,代码生成将不起作用 。

但是,我们仍然需要在每个项目清理后两次构建代码。 在设备上执行第一次构建会导致看似随机的Kotlin类的ClassNotFoundExceptions (即使它们不访问由DBFlow或我们定义的任何模型类生成的代码)。 在启用Proguard的编译时已经报告了相同的内容,当然这个版本无法构建。 第二次构建总是成功的。

有趣的是,代码生成已经在第一次运行时工作 – 类在那里并且也被IDE选中。 但编译器以某种方式找不到它们让我认为代码生成在构建过程中发生得太晚了。 另一方面,如上所述,还存在未find的类,其不必对代码生成和/或注释处理做任何事情。

那么这个问题比第二次构建有更好的解决方案吗?

作为参考,我们的app的build.gradle的相关部分看起来像这样 – 就像DBFlow文档建议的那样:

 def dbflow_version = "3.0.0-beta4" dependencies { kapt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}" } kapt { generateStubs = true } 

编辑:我发现每次对代码所做的更改都需要重建两次。 如果我之前没有清理过它,它会在第一个构建中正确编译,但是这些更改根本就没有被拾取。

如果你使用kotlin和retrolambda这可能会解决它:

 me.tatarka:gradle-retrolambda:3.4.0 

github要点