在我们的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

09-11 18:43
查看更多