用gradle签署产品口味

我打算将我的项目迁移到Gradle。 我的一个项目有多种产品风格,每个项目都必须在其发布版本中使用不同的签名configuration签名。 所以这是我迄今为止所尝试的:

buildscript { ... } apply plugin: 'android' android { compileSdkVersion 17 buildToolsVersion '17' signingConfigs { flavor1 { storeFile file("keystore") storePassword "secret" keyAlias "aliasForFlavor1" keyPassword "secretFlavor1" } flavor2 { storeFile file("keystore") storePassword "secret" keyAlias "aliasForFlavor2" keyPassword "secretFlavor2" } } productFlavors { flavor1 { signingConfig signingConfigs.flavor1 } flavor1 { signingConfig signingConfigs.flavor2 } } } dependencies { ... } 

当我运行gradle build我得到一个groovy.lang.MissingFieldException和下面的错误消息:

 No such field: signingConfigs for class: com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory 

所以我假定grails脚本的productFlavors。*部分不是放置代码签名configuration的正确位置。

根据用户指南 ,支持flavor的signingConfigs。

这里的问题与signedConfigs对象的范围有关。 我只是将其分配给productFlavors块中的一个variables,但在flavor1 flavor块之外来解决这个问题:

 productFlavors { def flavor1SigningVariable = signingConfigs.flavor1 flavor1 { ... signingConfig flavor1SigningVariable ... } 

您可以在buildType声明每个flavor signing config 。 这是我的gradle文件,用于释放签名风格与不同的密钥库。

 android { signingConfigs { configFirst { keyAlias 'alias' keyPassword 'password' storeFile file('first.keystore') storePassword 'password' } configSecond { keyAlias 'alias' keyPassword 'password' storeFile file('second.keystore') storePassword 'password' } } compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 14 targetSdkVersion 23 } productFlavors{ flavor1 { applicationId "com.test.firstapp" } flavor2 { applicationId "com.test.secondapp" } } buildTypes { release { productFlavors.flavor1.signingConfig signingConfigs.configFirst productFlavors.flavor2.signingConfig signingConfigs.configSecond minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } 

buildTypes块应该放在productFlavors后面,我的意思是顺序很重要。

android的gradle插件只支持每种构buildtypes的签名,而不是每种types。 原因是任何给定的变体 (构buildtypes+风味)只能由一个键签名,但可以是几个风味组的组合。 例如,你的味道组可以是CPU(x86 / arm)和版本(免费/付费),这是四个不同的变种就在那里。

您正在寻找的解决scheme是为您的不同版本创build单独的构buildtypes。 例如,您的构buildtypes可能是debugreleaserelease-beta ,如下所示:

 ... android { ... buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } release-beta { initWith release signingConfig signingConfigs.release-beta } } } 

上面的initWith只是告诉gradle release-beta应该是release构buildtypes的副本,只能用不同的键签名。