将build.gradle迁移到build.gradle.Kts:无法解析Properties类

时间:2020-01-01 06:58:56

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

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

我尝试使缓存无效并重新启动Studio多次。但是,无法识别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类也无法识别。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

那是

exports.helloGCS = (file, context) => {
  console.log(`  Event: ${context.eventId}`);
};

尽管我认为这是一种更正确的方法

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"