【发布时间】:2018-07-24 11:01:31
【问题描述】:
问题:
这个问题可能已经从所有其他类似问题中得到了隐含的回答,但我似乎无法让它发挥作用。
如果我从主源集中的 java 文件中引用另一种风格(不同源集)的特定 java 文件,它可以工作。
如果我尝试从主源集中的 Kotlin 文件中引用同一个文件,它会抱怨它看不到它(“未解决的引用”)。
如果我将同一个文件移动到主源集,它可以工作(所以它不是文件本身)。
1234563转换。
根据我的谷歌搜索,它似乎与 Gradle 中的源集有关,但我不希望在 Java 文件夹旁边有一个单独的 Kotlin 文件夹,所以我不确定我是否需要这个。此外,我同时拥有 Java 和 Kotlin 的另一个项目没有进行此配置并且工作正常。
我将 productFlavors 与 flavorDimensions 一起使用,并且有一个名为“dimension1Dimension2”的源集(这是我试图引用的 Java 文件所在的位置)。
查看下面的设置,我可能做错了什么或遗漏了什么?这个项目主要是 Java,所以我刚刚开始向它添加 Kotlin。我看不出与我的其他项目(主要是 Kotlin 和一些 Java)有任何区别。
另一件奇怪的事情是它确实适用于三种口味中的一种。有两种类型的维度1和三种类型的维度2。只有一种维度 2 类型有效。
也许代码更清晰:
flavorDimensions "product", "mode"
productFlavors {
mock { // only this one works (e.g. <company_name>Mock is the source set)
applicationIdSuffix = ".mock"
dimension "mode"
}
dev {
applicationIdSuffix = ".dev"
dimension "mode"
}
prod {
dimension "mode"
}
demo {
applicationIdSuffix = ".demo"
dimension "product"
buildConfigField "String", "UPDATE_DIRECTORY", "\"/release/\""
buildConfigField "boolean", "SHOW_STREAM_STATUS", "false"
}
<company_name> {
applicationIdSuffix = ".<company_name>"
dimension "product"
}
}
设置:
- Kotlin 版本:1.2.21
- Gradle 版本:3.0.1
- 插件:
- 应用插件:'kotlin-android'
- 应用插件:'kotlin-kapt'
- 应用插件:'kotlin-android-extensions'
- 项目级依赖项:
- 类路径“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”
- 应用级依赖:
- 实现“org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version”
- 在项目设置中使用 Java 8
【问题讨论】:
-
你解决过这个问题吗?我和你处于同样的位置,如果 Kotlin 类需要引用不同风格的 Java 类,我开始避免编写它们。如果我有时间,我会花时间将旧类转换为 Kotlin,但这并不总是一种选择,因为时间紧迫,你不能总是相信内置转换器将 Java 代码转换为 Kotlin 中有意义的东西根据我的经验。
-
我实际上不记得了,但我不这么认为,因为我会发布答案。我可能刚刚将更多类转换为 Kotlin。
-
好的,谢谢。您写道,根据您的搜索,您发现如果您有一个
Kotlin source set文件夹,它也应该可以工作。我还没有找到任何关于这种方法的信息 - 你有关于改变什么来使用这种方法的链接吗? -
我没有任何保存的链接,我不确定使用单独的 sourceSets 是否会做任何事情,因为它不应该是必需的。我认为这可能是一个错误。幸运的是,这是唯一一次发生。如果可以的话,我会转换为 Kotlin。
-
好的,我现在在 Android Studio 的大跟踪器中创建了一个错误,其中包含一个具有完全相同问题的小示例项目。我总是可以转换为 Kotlin,但现在这不是一个好的解决方案,因为每次我转换一个文件时,我最终都不得不再转换 10 个文件,因为下一个文件使用了一个有味道的文件,所以一个小故事结束了花一天时间做本应该花 10 分钟的事情。由于截止日期快到了,我现在没有多余的时间,所以我必须坚持使用 Java 来获得一些功能。
标签: java android android-gradle-plugin kotlin