我正在尝试设置signingConfig
,manifestPlaceholders
,buildConfigField
为应用程序变量。我可以为每个buildType**或!productFlavor独立,但我需要的是根据productFlavor和!**buildType。
buildTypes{
getByName("debug"){}
getByName("release"){}
create("staging"){}
}
productFlavors {
create("global"){}
create("local"){}
}
在上面的例子中,有3个不同的buildType和2个不同的productFlavors。这意味着总共有6个APK变体。对于每个APK(*globalRelease,globalStaging,globalstage,localRelease,localStaging,localstage *),我想使用不同的signingConfig为例。我该怎么设置?
尝试:
1条答案
按热度按时间8yparm6h1#
Gradle 8.x之后
错误:“生成类型包含自定义BuildConfig字段,但该功能已禁用”
Need to为
variant.buildConfigFields.set()
启用buildConfig
,它的默认值为wastrue
,但现在是false
:错误:“无法创建类型为com.android.build.API.variant.impl.LibraryVariantBuilderImpl的示例.未指定命名空间。在模块的构建文件中指定命名空间”
namespace
现在是模块级构建脚本中的required。您需要为每个模块单独指定,并且必须与该模块的包名相同(而不是appId)。这也与生成的
R
类有关,它将变成my.module.package.R
。另一个突破性的变化是你不能使用this.module.package.R
引用你所依赖的另一个模块的资源 (可绘制的,字符串...),你必须使用my.another.module.R.drawable.login
。因为之前android.nonTransitiveRClass
标志的默认值是false
,而R
包含了你所依赖的每个模块的可绘制对象。现在它的默认值是true
,所以R
只包含该模块的资源 *(improves构建时)。此外,您需要从每个模块的AndroidManifest.xml中删除
package=""
。Gradle 7.x之后
而不是
applicationVariants.all{}
,we now useandroidComponents { onVariants{ .. }}
在android{}
块之外。此代码应适用于Gradle 7.0.2和AGP 7.0.1:在AGP 7.0.x上,有
mergedFlavor
的is no way to setsigningConfig
(buildType+flavor)。您可以单独设置buildType或flavor,但不能组合设置。在AGP 7.1.x上,你可以做到这一点。但它需要AGP 7.1.0-alpha 10,Gradle 7.2-rc-3,AndroidStudio BumbleBee 2021.1.1 alpha 10:
Gradle 7.x之前
要对不同的变体(buildType+productFlavor)进行更改,我必须使用
android.applicationVariants.all{}
。但采用不同的路径实现多个signingConfig
、manifestPlaceholders
、buildConfigField
1)清单占位符
variant
对象上没有manifestPlaceholders
的getter/setter。在this之后,我们可以使variant.mergedFlavor
可变。在variant.mergedFlavor
上设置manifestPlaceholders
可以正常工作。2)buildConfigField
使用相同的方法,在
mutableMergedFlavor
上调用addBuildConfigField(ClassFieldImpl(type, name, value))
也不起作用。但是instead,它可以直接设置在variant
上。3)signingConfig
signingConfig
可以在上面显示的mutableMergedFlavor
上设置,但debug
变体除外。所有debug
变体都使用默认签名选项,即使您在variant.mergedFlavor
上设置了该选项。但是如果你将default设置为null,那么你也可以覆盖它。把所有放在一起: