【发布时间】:2016-03-04 14:52:50
【问题描述】:
在我们的 Android 应用中,我们使用 DBFlow 来访问 SQLite 数据库。我们通过 Kotlin 引用 DBFlow 生成的类。在 Kotlin 中编写这些类时,我们已经意识到我们在 Java 中拥有模型类和数据库类作为代码生成won't work。
但是,我们仍然需要在每次清理项目后构建两次代码。对于看似随机的 Kotlin 类(即使它们不访问由 DBFlow 生成的代码或我们定义的任何模型类),在设备上执行第一次构建会导致 ClassNotFoundExceptions。在编译时启用 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
}
编辑:我发现每次对代码所做的更改都必须重新构建两次。如果我之前没有清理它,它会在第一次构建中正确编译,但根本没有拾取更改。
【问题讨论】:
-
认为youtrack.jetbrains.com/issue/KT-8733 可能会修复此问题,但不幸的是,启用 generateStubs 后该修复似乎不起作用。
-
我与 1.0.5-2 有完全相同的问题
-
我也有类似的问题。如果我想生成签名的 apk,我需要将每个 buildType/flavor 组合编译两次,这使得自动构建更加不可用。
-
您找到问题的原因了吗?我目前的项目遇到了非常相似的问题:(
-
好像已经解决了。在对 Kotlin 和 Android Studio 插件进行了几次更新之后,我很少需要构建两次。我删除了生成存根,但似乎没有必要。
标签: android annotations kotlin