【问题标题】:How to define a function at android.defaultConfig level?如何在 android.defaultConfig 级别定义函数?
【发布时间】:2015-02-04 16:10:40
【问题描述】:

在我的 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 闭包中也会很好。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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) 来避免输入两次相同的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多