【问题标题】:Migrating the build.gradle to build.gradle.Kts : Not able to resolve Properties class将 build.gradle 迁移到 build.gradle.Kts :无法解析 Properties 类
【发布时间】:2020-01-01 06:58:56
【问题描述】:

虽然将build.gradle 转换为build.gradle.kts 是一个手动过程,但我在下面的代码中很难进行转换。

我多次尝试使缓存无效并重新启动工作室。但是,android.variatFilter 无法识别。

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 类也无法识别。

这将通过缓存无效和重新启动来解决。(依次开始重构项目级别的 gradle,然后是 settings.gradle,然后是 app.gradle 文件)

【问题讨论】:

    标签: android gradle build.gradle gradle-kotlin-dsl


    【解决方案1】:

    对于kapt {'androidx.lifecycle:lifecycle-common-java8:2.1.0'} - 请使用双引号,例如kapt {"androidx.lifecycle:lifecycle-common-java8:2.1.0"},请check details here

    方法也请使用以下语法:

    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 不需要关键字
    • Variable declaration 可以以 val 开头,例如如果编译器能够理解类型,则无需手动输入。
    • Return type is mandatory 如果您的结果不是Unit

    对于过滤器 - 我没有使用这个。但是请考虑:

    • 将引号 ' 替换为 "
    • variant.getFlavors().get(0).name 替换为variant.flavors[0].name
    • variant.setIgnore(true) 替换为variant.ignore=true

    【讨论】:

    • 这两个import java.io.FileInputStreamimport java.util.Properties 都没有得到解决。
    • @Dipalis.,是IntelliJ Idea错误还是在命令行执行gradlew后出现同一行?
    【解决方案2】:

    那就是

    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")
    

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 2019-03-23
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2019-01-18
      • 2019-08-24
      • 1970-01-01
      • 2023-01-09
      相关资源
      最近更新 更多