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

Override debug build type signing config with flavor signing config

我有一个 Android 应用程序,它有 2 种风格:internalproduction,还有 2 种构建类型:debugrelease.

我正在尝试根据风格分配签名配置,根据文档,这是可行的。我查看并找到了其他答案,但其中 none 似乎有效。一切都编译,但应用程序正在使用我机器本地的调试密钥库进行签名。

这是我的 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 调试密钥库)上设置了 signingConfig,当设置 signingConfig 时对于构建类型,风味忽略 signingConfig

解决方案是在调试构建类型上将 signingConfig 设置为 null。然后将使用为 flavor 提供的 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'
        }
    }