我正在尝试在productFlavor块中设置buildConfigField,然后在我的gradle构建文件中的其他位置引用该字段,以便在构造apk的名称时可以使用此值。
e.g
productFlavors{
flavor1{
buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"'
}
flavor2{
buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"'
}
如何在build.gradle脚本中的其他位置访问APP_FLAVOR_NAME?
我也在努力弄清楚如何在buildscript中引用flavor名称本身作为构建apk名称的另一个选项。我怎么能这样做呢?
答案 0 :(得分:10)
添加buildConfigField
会在BuildConfig.java
文件中写入一个条目,并不打算在 buildscript 级别公开。这是一种向感兴趣的应用程序代码提供有关特定构建的元信息的方法 - 而不是其他构建代码。如果要在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
}
}
答案 1 :(得分: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被定义为最终类。字段是私有的。所以只能是只读的。