如何在android.defaultConfig级别定义一个函数?

时间:2015-02-04 16:10:40

标签: android groovy android-gradle build.gradle buildconfig

build.gradle 的Android项目中,使用以下说明创建构建配置字段

android {
    defaultConfig {
        if (project.hasProperty('serverOnePath')) {
            buildConfigField "String", "SERVER_ONE_PATH",
                    "\"${serverOnePath}\""
        }
        if (project.hasProperty('serverTwoPath')) {
            buildConfigField "String", "SERVER_TWO_PATH",
                    "\"${serverTwoPath}\""
        }
    }
}

因此,必须在 gradle.properties 中定义属性:

serverOnePath=http://example1.com/path
serverTwoPath=http://example2.com/path

我想将说明移到 android.default的功能中。这是非工作草稿:

def addBuildConfigFieldIfPropertyIsPresent(
    String propertyName, String buildConfigFieldName) {
    if (project.hasProperty(propertyName)) {
        android.defaultConfig.buildConfigField "String", buildConfigFieldName,
                "\"${propertyName}\""
    }
}

棘手的部分是${propertyName}。将声明实际放入defaultConfig闭包中也是很好的。

1 个答案:

答案 0 :(得分:4)

试试这个:

android {
  defaultConfig {
    def configFieldFromProp = { propName, constName ->
      if (project.hasProperty(propName)) {
        buildConfigField "String", constName, "\"${project[propName]}\""
      }
    }

    configFieldFromProp "serverOnePath", "SERVER_ONE_PATH"
    configFieldFromProp "serverTwoPath", "SERVER_TWO_PATH"
  }
}

您还可以将guava添加为构建脚本的依赖项,并使用LOWER_CAMEL.to(UPPER_UNDERSCORE, propName)来避免两次输入相同的内容。