使用flavor签名配置覆盖调试构建类型签名配置

问题描述 投票:11回答:1

我有一个有2种口味的Android应用程序:internalproduction,还有2种构建类型:debugrelease

我正在尝试根据风格分配签名配置,根据文档是可行的。我看了之后发现了其他答案,但似乎都没有。所有内容都会编译,但应用程序正在使用本机的本地调试密钥库进行签名。

这是我的gradle文件:

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"
    }

    signingConfigs {
        internal {
            storeFile file("../internal.keystore")
            storePassword "password"
            keyAlias "user"
            keyPassword "password"
        }
        production {
            storeFile file("../production.keystore")
            storePassword "password"
            keyAlias "user"
            keyPassword "password"
        }
    }

    productFlavors {
        internal {
            signingConfig signingConfigs.internal
            applicationId 'com.test.test.internal'
        }
        production {
            signingConfig signingConfigs.production
            applicationId 'com.test.test'
        }
    }

    buildTypes {
        debug {
            applicationIdSuffix ".d"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    variantFilter { variant ->
        if (variant.buildType.name.equals('debug')
                && variant.getFlavors().get(0).name.equals('production')) {
            variant.setIgnore(true);
        }
    }
}

注意:我也在使用classpath 'com.android.tools.build:gradle:1.1.3'进行编译

android android-gradle
1个回答
19
投票

似乎默认情况下,Android在调试构建类型(android调试密钥库)上设置了signingConfig,并且当为构建类型设置signingConfig时,将忽略signingConfig的风格。

解决方案是在调试构建类型上将signingConfig设置为null。然后将使用为味道给出的signingConfig

buildTypes {
        debug {
            // Set to null to override default debug keystore and defer to the product flavor.
            signingConfig null
            applicationIdSuffix ".d"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.