15

我正在尝试在我的 productFlavor 块中设置一个 buildConfigField,然后在我的 gradle 构建文件中的其他地方引用该字段,以便在为我的 apk 构造名称时可以使用该值。

例如

productFlavors{
    flavor1{            
        buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"'

    }
    flavor2{            
        buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"'

    }

如何在 build.gradle 脚本的其他地方访问 APP_FLAVOR_NAME?

我也在努力弄清楚如何在构建脚本中引用风味名称本身作为构建 apk 名称的另一种选择。我该怎么做呢?

4

2 回答 2

16

添加 a会buildConfigField在文件中写入一个条目BuildConfig.java,并不意味着在buildscript级别公开。这是一种向感兴趣的应用程序代码提供有关特定构建的元信息的方式,而不是其他构建脚本代码。如果您想在构建脚本级别抛出名称,则需要使用 Gradle 属性。

明确地说,如果您想访问脚本中其他地方的 BuildConfigField 对象集合,您可以使用android.productFlavors.flavor1.buildConfigFields.

编辑

要在迭代时获得特定的风味名称android.applicationVariants.all,您可以像这样迭代风味集合(请注意,您不需要捕获对您正在迭代的项目的引用,但查看您实际访问的对象是有益的):

task printFlavors << {
    println "BuildTypes ⨯ Flavors:"
    android.applicationVariants.all { variant ->
        println name
        variant.productFlavors.each { flavor ->
            println flavor.name
        }
    }
}

或者,正如kcoppock所建议的,这可以简化为:

task printFlavorName << {
    android.applicationVariants.all {
        println flavorName
    }
}
于 2014-04-12T01:52:15.113 回答
0

想添加到dcow答案。

获取风味后,获取 BuildConfig 字段:

variant.productFlavors.each { flavor ->
    flavor.buildConfigFields.each { key, value ->
        if(key == "APP_FLAVOR_NAME") {
            println value.type
            println value.name
            println value.value
        }    
    }
}

BuildConfigs 被定义为最终类。字段是私有的。所以只有只读。

于 2017-09-02T10:44:57.340 回答