在我们的Android应用中,我们使用DBFlow访问SQLite数据库。我们通过Kotlin引用了DBFlow生成的类。我们已经意识到,在Kotlin中编写模型类以及Java类中的数据库类时,它们具有代码生成won't work的形式。
但是,每次清理完项目后,我们仍然必须两次构建代码。在设备上执行第一个构建会为看似随机的Kotlin类生成ClassNotFoundExceptions
(即使它们不访问DBFlow生成的代码或我们定义的任何模型类)。启用Proguard时,编译时已经报告了同样的情况,这当然会使构建失败。第二个构建始终成功。
有趣的是,代码生成在第一次运行时就已经可以工作了-这些类在那里,IDE也可以选择它们。但是编译器以某种方式找不到它们,使我认为代码生成在构建过程中发生得太迟了。另一方面,如上所述,也没有找到不需要对代码生成和/或注释处理进行任何处理的类。
那么,与第二个版本相比,有没有比这个版本更好的解决方案了?
作为引用,我们应用程序build.gradle
的相关部分如下所示-就像DBFlow documentation所建议的那样:
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 gist