在 Gradle 产品风味上调试签名配置
Posted
技术标签:
【中文标题】在 Gradle 产品风味上调试签名配置【英文标题】:Debug Signing Config on Gradle Product Flavors 【发布时间】:2013-12-11 21:36:16 【问题描述】:我有一个项目,我有几个特定于设备的产品风格,每个风格都需要使用不同的配置进行签名:
productFlavors
nexus7
signingConfig signingConfigs.nexus7
nexus4
signingConfig signingConfigs.nexus4
这在构建“发布”变体时非常有用。但是,当使用“调试”变体时(例如,当我构建 Nexus4Debug 时),Gradle 使用的是默认的 android 调试密钥。就我而言,我高度依赖以正确方式对这些构建进行签名,如果使用默认调试密钥进行签名,我的应用程序相对无用。任何人都知道是否有办法为每个变体指定签名配置?
我知道我可以根据构建类型做到这一点,例如:
buildTypes
debug
signingConfig signingConfigs.nexus4
但这限制了我总是使用相同的签名配置来调试两种风格的构建。
PS - 了解这只是一个边缘用例。这适用于一个企业项目,我们在多个不同的 Nexus 设备上测试自定义 ROM 和系统签名的应用程序。
【问题讨论】:
我很想知道是否有办法获得特定于变体的签名密钥。 【参考方案1】:尝试将此添加到您的 build.gradle。在构建 debug
构建类型时,它将为每个 flavor
指定使用哪个 signingConfig
:
buildTypes
debug
productFlavors.nexus4.signingConfig signingConfigs.nexus4
productFlavors.nexus7.signingConfig signingConfigs.nexus7
【讨论】:
@MJMWahoo06 如果它对您有用,您能否将其标记为已回答?谢谢:) 这个答案似乎不适用于最新的 android 插件版本。 1.1.3 似乎在 Gradle 2.4 中运行良好。我按照这个解决方案在我的构建文件中使用它:Gradle signing flavors with different keys on Android. 这对于将构建变体与风格结合起来非常有用。请注意,您需要确保在 build.gradle 中的 buildTypes 之前定义您的风格。 这基本上是说所有的nexus4 风格都应该用signingConfigs.nexus4 签名(不仅仅是调试,而是所有包括发布).. 比nexus7 做的一样..【参考方案2】:在构建 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
由于构建类型“发布”将使用风味签名配置(因为没有规范),在使用发布构建调试 init 后,它也将具有相同的签名配置。
构建类型“debug”需要初始化为“release”,如果没有提供签名配置,它将使用Android默认调试签名密钥。
更新
问题是 android.buildTypes.debug.signingConfig 有一个默认值,而 release 没有。
解决方案可能会在未来被破坏。
无论如何,仍然可以使用 android plugin build 2.3.2
【讨论】:
谢谢。这让我明白了这一点:signingConfig null
。问题是 android.buildTypes.debug.signingConfig 有一个默认值,而 release 没有。如果设置,buildType 配置会覆盖您在风味中设置的任何内容。真正的技巧是在 buildTypes.debug 中取消设置属性,这样它就可以像 release 一样工作。
是的,没错!不好的是没有记录。经过一天的尝试和错误后发现了这一点。希望这个答案也能帮助其他人:D
您应该更新您的答案以显示这一点。您的解决方案很聪明,但将来容易损坏。
哈维,你应该发表你的评论作为答案,因为它仍然有效..,
@Harvey 经过这么长时间寻找使用signingConfig null 的解决方案终于奏效了。我最近还发现调试模式是由 androiddebug 密钥库通过使用 jarsigner 查看调试 apk 的签名来签名的。【参考方案3】:
适用于 2.2.1
buildTypes
release
debug
signingConfig android.buildTypes.release.signingConfig
【讨论】:
查看我对@sheungon-tsai 答案的评论。这就是答案:signingConfig null
【参考方案4】:
这可能有效:
buildTypes
release
productFlavors.nexus7.signingConfig signingConfigs.nexus7
productFlavors.nexus4.signingConfig signingConfigs.nexus4
debug
signingConfig android.buildTypes.release.signingConfig
【讨论】:
以上是关于在 Gradle 产品风味上调试签名配置的主要内容,如果未能解决你的问题,请参考以下文章
配置文件或调试 APK:生成签名的 Bundle 需要您将 Android Gradle 插件更新到版本 3.2.0
在 gradle 中设置 applicationId 以获得组合的产品风味
在android studio中build.gradle中使用flavor维度