groovy 从自定义Gradle脚本访问Android特定函数

2vuwiymt  于 7个月前  发布在  Android
关注(0)|答案(1)|浏览(61)

我有一个自定义的Gradle文件custom.gradle,可以像这样将变量加载到BuildConfigmanifestPlaceholders中:

ext.loadProperty = {propertyName, propertyValue ->
    buildConfigField("String", propertyName, "\"" + propertyValue + "\"")
    manifestPlaceholders[propertyName] = propertyValue
}

我在模块的build.gradle上加载函数,如下所示:

apply from: '../gradlescripts/custom.gradle'

我在模块的build.gradle中访问defaultConfig中的函数,如下所示:

loadProperty("SOME_NAME", "SOME_VALUE")

这会抛出一个错误:

Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method buildConfigField() for arguments [String, SOME_NAME, "SOME_VALUE"] on project ':app' of type org.gradle.api.Project.

我不知道如何从另一个模块的build.gradle文件加载的自定义.gradle文件访问buildConfigFieldmanifestPlaceholders
我已经尝试在build.gradle文件的顶层和同一文件的defaultConfig上使用apply from:函数,但没有成功。
我是不是漏了什么?任何指导都将不胜感激。

jfewjypa

jfewjypa1#

好吧,经过一番折腾,我找到了解决办法。我只需要将androidExtension传递给函数:

ext.loadProperty = androidExtension, propertyName, propertyValue ->
    androidExtension.buildTypes.all { buildType ->
        buildType.buildConfigField("String", propertyName, "\"" + propertyValue + "\"")
    }
    androidExtension.defaultConfig.manifestPlaceholders.put(propertyName, propertyValue)
}

然后像这样从defaultConfig调用函数:

loadProperty(android, "SOME_NAME", "SOME_VALUE")

相关问题