[英]Unresolved reference for Java file in a different flavor when referencing from kotlin
这个问题很可能已经从所有其他类似的问题中得到了回答,但我似乎无法让它发挥作用。
如果我从主源集中的java文件引用另一种风格(不同的源集)中的特定java文件,它就可以工作。
如果我尝试从主源集中的Kotlin文件引用同一个文件,则会抱怨它无法看到它(“未解析的引用”)。
如果我将相同的文件移动到主源设置它是有效的(所以它不是文件本身)。
如果我将Java文件转换为Kotlin它可以工作(这是我目前的解决方案),但我想知道为什么它不起作用,因为转换并不总是那么容易,它应该可以在没有转换的情况下工作。
根据我的谷歌搜索它似乎与Gradle中的源集相关,但我不想在Java文件夹旁边有一个单独的Kotlin文件夹,所以我不确定我是否需要这个。 另外,我同时拥有Java和Kotlin的另一个项目没有配置并且工作正常。
我正在使用带有flavorDimensions的productFlavors,并且有一个名为“dimension1Dimension2”的源集(这是我试图引用的Java文件所在的位置)。
看下面的设置,我可能做错了什么或丢失了什么? 这个项目主要是Java,所以我刚刚开始添加Kotlin。 我看不出与我的其他项目有什么不同,主要是Kotlin和一些Java。
另一件奇怪的事情是它适用于三种口味中的一种。 维度1有两种类型,维度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的所有内容,我们也没有时间立即改用Kotlin - 遗留代码现在应该保留Java最小。
我向Google报告了一个错误: https : //issuetracker.google.com/issues/110100405
而且,一位Google工程师实际上非常快地回答了我的错误报告:-)
如果你不想阅读我们的对话,我会简短地说:
TL; DR版本:
这与Kotlin无法合作的原因是因为您的软件包设置错误。 我敢打赌,在你的某些风格中,你和我一样犯了同样的错误并创建了com.example.mypackage
这样的directories
而不是创建名为com
的父目录,然后创建一个名为example
的子目录,然后是子目录名为mypackage
。
因此,如果您的文件夹看起来像com.example.mypackage
将它们更改为com
与子目录,所有应该没问题。
另一个可能最简单的解决方案是在不同的版本中创建名为com.example.mypackage
包,但只有当您选择了要为其创建包的样式时才能这样做。
至于为什么,这不会产生Java的问题,我不知道,谷歌人也没有,但它可能是一个IntelliJ问题,我将向JetBrains报告,除非他们已经意识到它。
这也是一个很大的问题,Kotlin编译器只是吐出一个模糊的错误,说明Unresolved reference
,但这是另一天的谈话和另一个错误报告或增强。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.