如何从 Gradle 中的另一个函数调用 buildConfigField()?

How to call buildConfigField() from another function in Gradle?

这是我在 Gradle 中为我的 Android 应用程序尝试做的极其简化的版本:


android {

    buildTypes {

        debug {

            buildConfigFieldMyWay("keyName", "keyValue")
            buildConfigField("String", "keyName", "keyValue")  }
        }
    }

}

def buildConfigFieldMyWay(String keyName, String keyValue) {
    buildConfigField("String", keyName, keyValue)
}

真实版本更复杂,这就是为什么最好将我正在做的事情组织成单独的函数。

问题是,当我进行 Gradle 同步时,出现了这个错误: No signature of method: build_byqgds5lao5ipgp4gk5ftyud4.android() is applicable for argument types: (build_byqgds5lao5ipgp4gk5ftyud4$_run_closure2) values: [build_byqgds5lao5ipgp4gk5ftyud4$_run_closure2@536e468e]

我认为这与 DSL Gradle 与 Android 一起使用有关;当在 android { buildTypes { debug 内部调用 buildConfigField() 时,它是 BuildType 对象上的 运行 buildConfigField()。如果我从一个单独的函数中调用它,则没有 BuildType 可以对其进行操作。

所以我要么需要修改 DSL 以便我的函数 (buildConfigFieldMyWay()) 可以在 android { buildTypes { debug 中调用并对 BuildType 对象进行操作,要么我需要通过BuildType 到函数。可能有一些我需要在这里使用的简单语法,但我没有找到。这是什么?

您可以在函数内部传递构建类型 buildConfigFieldMyWay:

def buildConfigFieldMyWay(buildType, String keyName, String keyValue) {
    buildType.buildConfigField("String", keyName, keyValue)
}

然后,您可以使用 it:

获取构建类型
android {
    buildTypes {
        debug {
            buildConfigFieldMyWay(it, "keyName", "keyValue")
            buildConfigField("String", "keyName", "keyValue")
        }
    }
}