簡體   English   中英

將 build.gradle 遷移到 build.gradle.Kts:無法解析 Properties 類

[英]Migrating the build.gradle to build.gradle.Kts : Not able to resolve Properties class

雖然將build.gradle轉換為build.gradle.kts是一個手動過程,但我在下面的代碼段中努力轉換。

我多次嘗試使緩存無效並重新啟動工作室。 但是,無法識別 android.varinatFilter。

android.variantFilter { variant ->
    if (variant.buildType.name == 'release'
            && variant.getFlavors().get(0).name == 'development') {
        variant.setIgnore(true)
    }
    if (variant.buildType.name == 'debug'
            && variant.getFlavors().get(0).name == 'production') {
        variant.setIgnore(true)
    }
}

Java.util.Properties依賴項的屬性類未在.kts文件中解析,也無法識別Java.io的 FileInputStream 類。

 def getProps(path) {
        Properties props = new Properties()
        props.load(new FileInputStream(file(path)))
        return props
    }

同樣在應用 kotlin 注釋處理器時

kapt 'androidx.lifecycle:lifecycle-common-java8:2.1.0' To

kapt {'androidx.lifecycle:lifecycle-common-java8:2.1.0'} 

不起作用並返回編譯時錯誤。

任何幫助,將不勝感激。

更新

Java.util.Properties依賴項的屬性類未在.kts文件中解析,也無法識別Java.io的 FileInputStream 類。

這將通過 Invalidate cache 和 Restart 解決。(開始重構項目級別的 gradle,然后是 settings.gradle,然后是 app.gradle 文件)

對於kapt {'androidx.lifecycle:lifecycle-common-java8:2.1.0'} - 請使用雙引號,例如kapt {"androidx.lifecycle:lifecycle-common-java8:2.1.0"} ,請在此處查看詳細信息

還請對方法使用以下語法:

import java.io.FileInputStream
import java.util.Properties

/***/

fun getProps(path: String): Properties {
    val props = Properties()
    props.load(FileInputStream(file(path)))
    return props
}

變化:

  • 您需要在文件開頭使用 java 包進行導入。
  • 使用fun代替def
  • 方法需要參數類型,為此使用“:” - path: String
  • 不需要new關鍵字
  • 變量聲明可以以val開頭,例如,如果編譯器能夠理解類型,則無需手動輸入。
  • 如果您的結果不是Unit返回類型是強制性的

對於過濾器 - 我沒有處理過這個。 但是請考慮:

  • 將引號 ' 替換為 "
  • variant.getFlavors().get(0).name替換為variant.flavors[0].name
  • variant.setIgnore(true)替換為variant.ignore=true

那將是

android.variantFilter {
    if (buildType.name == "release" && flavors[0].name == "development") {
        ignore = true
    }
    if (buildType.name == "debug" && flavors[0].name == "production") {
        ignore = true
    }
}

雖然我認為更正確的方法是

flavors[0].name = "xyz"

應該

flavors.map { it.name }.contains("xyz")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM