我的Android应用程序有很多种,我希望除了一个以外的所有人都使用相同的密钥。有一个需要使用不同的密钥。
如何仅针对应用的1种风格覆盖signingConfig
(但在相同的构建类型中,例如“发布”)?
gradlew assembleRelease
命令运行所有版本构建最后一点非常重要,因为我目前有超过120种不同的口味和成长。为了单独定制每种风味,需要做很多额外的工作。
我试过的相关帖子:
Producing multiple builds signed with different keys from single build type
signingConfig
Signing product flavors with gradle
buildTypes
放在productFlavors
内,但我不明白该怎么做。Debug Signing Config on Gradle Product Flavors
总的来说,每个解决方案似乎仍然使用默认版本配置,而不是我的自定义配置。
build.gradle
的重要部分如下所示:
signingConfigs {
releaseConfig {
storeFile file('key')
storePassword "pass"
keyAlias "alias"
keyPassword "pass"
}
custom {
storeFile file('custom_key')
storePassword "pass"
keyAlias "alias"
keyPassword "pass"
}
}
productFlavors {
apple {
applicationId "demo.apple"
}
banana {
applicationId "demo.banana"
}
// def customConfig = signingConfigs.custom
custom {
applicationId "custom.signed.app"
// signingConfig customConfig
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
release {
signingConfig signingConfigs.releaseConfig
// productFlavors.custom.signingConfig signingConfigs.custom
}
}
答案 0 :(得分:9)
如果未在产品风格中指定了signingConfig,则下面给出的代码将使用release1作为默认的signedConfig。
应用程序/的build.gradle
signingConfigs {
debug {
storeFile file("/home/.../debugkeystore.jks")
storePassword "..."
keyAlias "..."
keyPassword "..."
}
release1 {
storeFile file("/home/.../testkeystore1.jks")
storePassword "..."
keyAlias "..."
keyPassword "..."
}
release2 {
storeFile file("/home/.../testkeystore2.jks")
storePassword "..."
keyAlias "..."
keyPassword "..."
}
release3 {
storeFile file("/home/.../testkeystore3.jks")
storePassword "..."
keyAlias "..."
keyPassword "..."
}
}
defaultConfig {
applicationId "com.example.signingproductflavors"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
signingConfig signingConfigs.release1
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.debug
}
}
productFlavors {
blocks {
applicationId "com.example.blocks"
resValue 'string', 'APP_NAME', "Blocks"
}
cloud {
applicationId "com.example.cloud"
resValue 'string', 'APP_NAME', "Cloud"
signingConfig signingConfigs.release2
}
deck {
applicationId "com.example.deck"
resValue 'string', 'APP_NAME', "Deck"
signingConfig signingConfigs.release3
}
}
答案 1 :(得分:1)
我不是100%确定这会起作用,但我不认为你想创建一个新的构建类型。这将为每种风格创建一个新的构建变体。当你真的只想要一种风格来覆盖"默认配置" :)
此代码未经过测试,但您应该可以按照以下方式执行操作:
signingConfigs {
normal {
storeFile file('key')
storePassword "pass"
keyAlias "alias"
keyPassword "pass"
}
custom {
storeFile file('custom_key')
storePassword "pass"
keyAlias "alias"
keyPassword "pass"
}
}
/**
* defaultConfig is of type 'ProductFlavor'.
*
* If we need to use a different signing key than the default,
* override it in the specific product flavor.
*/
defaultConfig {
versionCode 123
versionName '1.2.3'
minSdkVersion 15
def standardSigningConfig = signingConfigs.normal
buildTypes{
release {
signingConfig standardSigningConfig
zipAlign true
// ...
}
debug {
//not sure you need this node
}
}
}
productFlavors {
def customConfig = signingConfigs.custom
def standardSigningConfig = signingConfigs.normal
apple {
applicationId "demo.apple"
}
banana {
applicationId "demo.banana"
}
custom {
applicationId "custom.signed.app"
signingConfig customConfig
}
}
参考:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration
答案 2 :(得分:0)
您必须在buildTypes中定义signingconfigs。将自定义签名配置添加到调试构建类型或创建自定义构建类型
buildTypes {
debug {
applicationIdSuffix ".debug"
signingConfig signingConfigs.custom
}
custom {
applicationIdSuffix ".custom"
signingConfig signingConfigs.custom
}
release {
signingConfig signingConfigs.releaseConfig
}
}
Gradle将为每种构建类型创建flavor,并且根据buildType,flavor会使用相应的signinconfig。使用上面的构建类型配置,让我们考虑“苹果”的味道。 Gradle将为apple
创建以下构建变体applerelease - >发布签名配置
您可以选择相应的构建变体并运行您的应用程序
将签名配置添加到flavor
productFlavors {
def customSigningConfig = signingConfigs.custom
custom {
...
signingConfig customSigningConfig
...
}
在声明你的口味之前,你需要声明你的签名配置。
答案 3 :(得分:0)
一个想法可能是使用项目属性来确定您是否应该使用自定义signinconfig。
if (project.hasProperty('custom')) {
android.signingConfigs.release = customSigningConfig
} else {
//should use the default
}
然后构建您运行的自定义风格:
gradle assembleCustomRelease -Pcustom=true
答案 4 :(得分:0)
tl; dr浏览" gradle.startParameter.taskNames"寻找味道并修改变量。
我为Vine应用程序的测试变体执行此操作,它非常好用。您还可以使用它来编译不同的依赖项,而无需添加更多的flavor大小。
在你的情况下看起来像这样。
//root of buil.gradle OR probably inside buildTypes.release
def signType = signingConfigs.normal;
//You can put this inside builTypes.release or any task that executes becore
def taskNames = gradle.startParameter.taskNames;
taskNames.each { String name ->
if (name.contains("customFlavor")) {
signType = signingConfigs.custom
}
}
buildTypes{
release {
signingConfig signType
}
}