在Gradle产品口味上调试签名配置

时间:2013-11-26 16:12:02

标签: android build gradle code-signing

我有一个项目,我有几种特定于设备的产品口味,每种口味都需要使用不同的配置进行签名:

productFlavors {
    nexus7 {
        signingConfig signingConfigs.nexus7
    }
    nexus4 {
        signingConfig signingConfigs.nexus4
   }
}

在构建“发布”变体时,这非常有用。但是,当使用'debug'变体时(例如,当我构建Nexus4Debug时),Gradle使用默认的android调试密钥。在我的情况下,我高度依赖这些构建以正确的方式签名,如果使用默认调试密钥签名,我的应用程序相对无用。任何人都知道是否有办法为每个变体指定签名配置?

我知道我可以按照构建类型执行它,la:

buildTypes {
    debug {
        signingConfig signingConfigs.nexus4
    }
}

但这限制了我总是使用相同的签名配置来调试这两种风格的版本。

PS - 了解这是一个边缘用例。这是一个企业项目,我们在许多不同的Nexus设备上测试自定义ROM和系统签名的应用程序。

3 个答案:

答案 0 :(得分:8)

尝试将此添加到 build.gradle 。在构建signingConfig构建类型时,它将指定每个flavor使用debug

buildTypes {
    debug {
        productFlavors.nexus4.signingConfig signingConfigs.nexus4
        productFlavors.nexus7.signingConfig signingConfigs.nexus7
    }
}

答案 1 :(得分:6)

我在Android插件构建后得到了另一个解决方案。 1.1.3

productFlavors {
    nexus7 {
        signingConfig signingConfigs.nexus7
    }
    nexus4 {
        signingConfig signingConfigs.nexus4
    }
}
buildTypes {
    release {
        debuggable false
        zipAlignEnabled true
    }
    debug {
        initWith release
        debuggable true
        zipAlignEnabled false
    }
}

由于构建类型“release”将使用flavor签名配置(因为没有规范),在使用release build的debug init之后,它也将具有相同的签名配置。

构建类型“debug”需要使用“release”进行初始化,就像没有提供签名配置一样,它将使用Android默认调试签名密钥。

<强> 更新

问题是android.buildTypes.debug.signingConfig有一个默认值,而release则没有。

解决方案将来可能会破裂。

无论如何,仍然使用android插件build 2.3.2

答案 2 :(得分:3)

适用于2.2.1

buildTypes {
    release {
    }
    debug {
        signingConfig android.buildTypes.release.signingConfig
    }
}