在我们的 Android 应用程序中,我们使用DBFlow https://github.com/Raizlabs/DBFlow访问 SQLite 数据库。我们通过 Kotlin 引用 DBFlow 生成的类。我们已经意识到这样一个事实:我们有 Java 中的模型类和数据库类作为代码生成行不通 https://github.com/Raizlabs/DBFlow/issues/596当用 Kotlin 编写这些类时。
然而,在每个项目清理之后,我们仍然需要构建代码两次。在设备上执行第一个构建会导致ClassNotFoundExceptions
对于看似随机的 Kotlin 类(即使它们不访问由 DBFlow 或我们定义的任何模型类生成的代码)。当启用 Proguard 时,在编译时已经报告了相同的情况,这当然会导致构建失败。第二次构建总是成功的。
有趣的是,代码生成在第一次运行时就已经可以工作了 - 类就在那里并且也被 IDE 拾取。但编译器不知怎的找不到它们,让我认为代码生成在构建过程中发生得太晚了。另一方面,如上所述,还有一些未找到的类,它们不必与代码生成和/或注释处理进行任何操作。
那么有没有比第二次构建更好的解决方案呢?
作为参考,您的应用程序的相关部分build.gradle
看起来像这样 - 就像DBFlow 文档 https://github.com/Raizlabs/DBFlow#including-in-your-project正在建议:
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
}
Edit:我发现我对代码所做的每一次更改都必须重建两次。如果我之前没有清理过,它会在第一个构建中正确编译,但所做的更改根本没有被采纳。
如果您使用 kotlin 和 Retrolambda 这可能会修复它:
me.tatarka:gradle-retrolambda:3.4.0
github要点 https://gist.github.com/kibotu/fafd3047a46a7e838ab61a02804fb3ff
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)