【发布时间】:2015-09-23 14:21:40
【问题描述】:
如何为不同的变体设置不同的签名配置?
例如,我们目前有 Debug/Beta/Release 两种构建类型,免费和付费,产生 6 个变体。为了让它更容易一点,让我们忘记 Debug 变体,只关注 freeBeta/paidBeta/freeRelease/paidRelease。
我想要的是,每个变体使用单独的不同签名配置。
到目前为止,我能找到的唯一解决方案是将signingConfigs 放在buildTypes 中,这样所有Beta 变体都将具有相同的signingConfigs:
buildTypes {
beta {
signingConfigs.beta
}
release {
signingConfigs.release
}
}
或者,使用风味,在这种情况下,所有免费变体都将具有相同的签名配置:
productFlavors {
free {
signingConfig signingConfigs.free
applicationId 'com.example.free'
}
paid {
signingConfig signingConfigs.paid
applicationId 'com.example.paid'
}
}
在当前的 productFlavor 闭包中有没有办法做到这一点?是否只能通过覆盖android.applicationVariants.all { variant -> 并根据某些命名方案或其他丑陋的hack 为每个应用程序变体手动应用signingConfig 来解决此问题?
我还找到了this answer,但它似乎不适用于最新的构建工具;编译时出现以下错误:
FAILURE:构建失败并出现异常。
其中:构建文件 '/home/dev/projects/app/build.gradle' 行:61
出了什么问题:评估项目 ':app' 时出现问题。
在 ProductFlavor 容器上找不到“免费”属性。
【问题讨论】:
-
您是否有特殊原因要为每种发布类型使用不同的签名配置?您可以使用同一个密钥签署多个 APK。
-
@Tanis.7x 因为测试版是通过另一个系统分发的,然后是 Google Play。而且还需要签名。
-
看起来你已经设置好了 - 你有代码 sn-p 将为发布和 beta 构建类型分配不同的签名配置。我的问题是为什么每个变体都需要不同的签名密钥。例如,
freeRelease和paidRelease应该可以使用相同的密钥。 -
@Tanis.7x 这并没有解决问题。该应用程序在转换为 gradle 项目之前已经分发过,因此更改密钥库不是解决方案。
-
BTW 付费和免费只是为了让这个概念更容易实现更复杂的应用程序结构白标。
标签: android gradle android-gradle-plugin android-keystore