【问题标题】:Debug Signing Config on Gradle Product Flavors在 Gradle 产品风味上调试签名配置
【发布时间】: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 和系统签名的应用程序。

【问题讨论】:

  • 我很想知道是否有办法获得特定于变体的签名密钥。

标签: android build gradle code-signing


【解决方案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
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2015-06-19
    • 1970-01-01
    • 2013-08-27
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多