【问题标题】:Android Build Variant Signing ConfigAndroid 构建变体签名配置
【发布时间】:2018-08-14 21:19:00
【问题描述】:

我的 android 应用程序模块 build.gradle 文件中有以下内容。

android {

    defaultConfig {
        ...
    }

    signingConfigs {
        if (System.getEnv()['CIRCLE-CI']) { /* CI System */
            localMachine { /* CI System KeyStore file and properties. */
                ...
                keyAlias = "ABC"
            }
            playStore { /* CI System KeyStore file and properties. */
                ...
                keyAlias = "ABC"
            }
        } else { /* Local machine, not CI System. */
            localMachine { /* debug.keystore local file and properties. */
                ...
                keyAlias = "androiddebugkey"
            }
            playStore { /* debug.keystore local file and properties. */
                ...
                keyAlias = "androiddebugkey"
            }
        }
    }

    productFlavors {
        productOne {
            ...
        }
        productTwo {
            ...
        }
    }

    buildTypes {
        debug {
            ...
        }
        release {
            ...
        }
    }
}

/** This is where the problem is **/
android.applicationVariants.all { variant -> 
        if (variant.mergedFlavor.name == "productOne") {
            if (variant.buildType.name == "debug") {
                variant.signingConfig android.signingConfigs.localMachine
            } else if (variant.buildType.name == "release") {
                variant.signingConfig android.signingConfigs.playStore
            }
        } else if (variant.mergedFlavor.name == "productTwo") {
            if (variant.buildType.name == "debug") {
                variant.signingConfig android.signingConfigs.localMachine
            } else if (variant.buildType.name == "release") {
                variant.signingConfig null
            }
        }
    }
}

预期输出如下。

productOneDebug -> Sign with signingConfigs.localMachine
productTwoDebug -> Sign with signingConfigs.localMachine
productOneRelease -> Sign with signingConfigs.playStore
productTwoRelease -> Unsigned.

实际输出如下。

productOneDebug -> Signed with signingConfigs.localMachine
productTwoDebug -> Signed with signingConfigs.localMachine
productOneRelease -> Unsigned.
productTwoRelease -> Unsigned.

为什么发布 apk 总是未签名的? 目的是只让 ProductTwo Release apk 未签名,但 ProductOne Release apk 应根据给定的配置进行签名。

【问题讨论】:

    标签: android gradle signing build-variant


    【解决方案1】:

    显然,这就是 Gradle Sync 期间发生的事情。

    Variant.signingConfig 是 Fl​​avor 和 Build-type 的 Overwritten 机制,顺序相同,取决​​于值是否存在。

    productOne.signingConfig = playStore
    
    productTwo.signingConfig = null
    
    debug.signingConfig = localMachine
    
    release.signingConfig = null
    

    由此产生的变体将是 -

    productOneDebug.signingConfig = productOne.signingConfig 
    

    debug.signingConfig覆盖

    productTwoDebug.signingConfig = productTwo.signingConfig
    

    debug.signingConfig覆盖

    productOneRelease.signingConfig = productOne.signingConfig 
    

    如果存在,则由release.signingConfig 覆盖。

    productTwoRelease.signingConfig = productTwo.signingConfig 
    

    如果存在,则由release.signingConfig 覆盖。

    【讨论】:

    • 感谢您的解释,您有没有找到解决方案@AndroidRocks?
    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 2016-07-10
    • 2019-12-06
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多