[英]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.