用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可能是debug
, release
, release-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的副本,只能用不同的键签名。