android - 如何使用上传证书发布应用更新?

标签 android android-studio google-play-console

上周我创建了一个应用程序并通过在 Android Studio 中创建 keystore 将它的第一个版本上传到 Play 商店。我想注册 App Signing,但 Play Console 说我需要先上传应用才能注册,所以我上传了应用程序包 (app.aab) 然后注册了该计划,现在我可以看到 2 个证书 - 上传证书和应用程序签名证书。可以选择以 .der 格式下载它们。

我该怎么处理这些 .der 文件?为了发布更新,我再次转到 Generate Signed Build,它要求我提供我选择的 keystore 并输入密码,然后它生成了更新的签名应用程序包。

在整个过程中,我从未遇到过使用 .der 证书的选项,如果不需要它们,为什么它们会显示在 Play Console 中的发布管理下的应用签名中。由于 Android Studio 仍在根据我硬盘上可用的 keystore 生成签名版本,我注册的应用签名有什么意义?

官方文档 App SigningManaging Keys甚至没有提到这些上传证书。它提到的是使用上传 key 对您的应用程序进行签名,什么是上传 key - Play Console 没有提及它,Android Studio 也没有提及,Android Studio 需要 keystore 来生成 .jks 格式的签名版本

最佳答案

更新: Google 已更新其 documentation around App Signing by Play ,使它更容易理解,所以这个答案可能是多余的。留给后人。

tldr;大多数开发人员不需要这些 .der 文件,它们用于高级用例。

这么多的问题!好的,扣紧...

只是为了澄清基础知识以确保我们使用相同的语言:当您在 中创建 key 时 keystore ,您实际上是在创建一个 key 对 (一个 私钥 和一个 公钥 )以及一个 证书 .该证书包含我们所说的专有名称(包括您的姓名、公司名称等)和公钥。因此,该证书是所有公开信息,并且在您对其进行签名以供任何人查看时实际上已添加到您的 APK 中。私钥保留在您的 keystore 中,是使其他人无法以可通过您的证书验证的方式签署您的 APK 的 secret 。因为术语太多,而且人们通常不太熟悉底层的密码学概念,所以您经常会看到人们只是交替使用术语“ keystore ”、“ key ”和“证书”。

报名时应用签名 ,您将您的私钥发送给 Google,以便 Google 可以代表您签署 APK。目的有三:

  • 优势 #1 - 应用优化 : 当您上传 Android App Bundle ,Google 将能够代表您签署它生成的 APK。主要好处是为您的应用程序节省了大小,但超出了本文的范围。
  • 好处 #2 - key 丢失事件 :无论您上传的是 APK 还是 Android App Bundle,如果您丢失了 key ,Google 仍有副本,因此您仍然可以通过上传带有 签名的 APK 来更新您的应用程序。新 key (此操作称为上传 key 重置),Google 仍然可以使用您的原始应用签名 key 对您的 APK 进行签名。没有这个,如果您丢失了 key ,您将无法再对您的应用程序进行任何更新。
  • 好处 #3 - key 泄露事件 :如果您使用与应用签名 key 不同的 key (即上传 key )对上传到 Play 管理中心的 APK 进行签名,那么您的应用签名 key 被泄露的风险就会降低(您可以将其放在驱动器上ACL 受限,因为您将不再使用它,而不是与您公司的许多开发人员共享它)。如果您的上传 key 被泄露,Google 可以更改它。如果您的应用签名 key 被泄露(例如泄露),那么您或 Google 将无能为力,其他人可以签署冒充您的应用的 APK 并将其分发到某些应用商店或网站。

  • 您可以看到现在有两种 key (和关联的证书):
  • 应用签名 key :这是用于对交付给用户的 APK 进行签名的 key 。
  • 上传 key :这是 Google Play 用于识别您上传到 Play 管理中心的 APK 的来源和完整性的 key 。

  • 哦,是的,我还应该提到:有两种方法可以注册 App Signing。
  • 你是 新应用 在您第一次上传应用程序时,系统会提示您是否要加入 App Signing。如果您在此阶段报名, Google 为您生成应用签名 key 并考虑 您为上传的工件签名的 key 是上传 key .
  • 你是 现有应用 (即,您已经在未注册的情况下上传了 APK),在这种情况下,您必须使用名为 PEPK 的工具传输您的应用签名 key ,并在此时创建一​​个新的上传 key 。

  • 对于现有应用程序,创建上传 key 是可选的 注册 App Signing 时。这适用于只对利用福利 #1 感兴趣的人。 Google 强烈建议您创建一个上传 key 并开始上传用它签名的 APK/Bundles,以避免在好处 #2 和 #3( key 丢失/泄露)中描述的灾难性场景。

    正如您所注意到的,即使您创建了上传 key ,您仍然可以上传使用您的应用签名 key 签名的 APK .尽管这似乎适得其反,但 Google 这样做的主要原因是让开发人员可以切换到 Android App Bundle(需要注册 App Signing)并在测试轨道中对其进行测试,同时仍然能够将 APK 推送到他们的生产轨道使用他们的应用程序签名 key 进行签名。这让开发人员有时间测试和研究如何在他们的构建过程中完成这项工作,而不会阻碍他们当前的生产发布过程。

    请注意 因为您仍然可以上传使用应用签名 key 签名的 APK 并不意味着您应该 .如果您想利用好处 #3,您需要开始上传使用上传 key 签名的 APK。

    ——

    现在,回到这些 .der 文件......好吧,很快!

    当您的 Android 应用与第三方 API(例如 Google API、Facebook API 等)通信时,您通常需要注册您的应用。这种注册通常需要两条信息:包名证书指纹 (例如 SHA1)。此注册可确保只有具有您的包名称并使用您的应用签名 key 签名的应用才能使用您对该 API 的配额。

    所有开发人员都知道他们的包名,但很多人经常问如何获得证书的指纹。 Stackoverflow 是一个很好的地方,可以找到要运行的正确命令以从您的 keystore 中提取它,但是 Play Console 也将其显示为方便 (对于要求 Google 为他们生成应用签名 key 的开发人员来说,这也很重要,因为他们没有带有应用签名 key 的 keystore )。这就是您看到应用签名证书的 MD5、SHA1 和 SHA256 的原因。

    我看到您现在问“好吧,显示应用签名证书的指纹是有意义的,但为什么还要显示上传证书的指纹?”这是一个很好的问题,谢谢你的提问。如果您在将 APK 上传到 Play 管理中心之前使用上传 key 对其进行签名,则您可能需要先测试这些工件,因此,如果您与任何第三方 API 有任何集成,则还需要注册此证书!

    好的,现在,我们终于到了 .der 文件。

    .der 文件是证书。 Play Console 不仅可以让您看到证书的指纹,还可以让您完整下载它们。开发人员可能需要它们的唯一原因是第三方 API 需要使用不同类型的指纹注册您的应用程序。例如,Facebook API 需要使用证书的 SHA1 二进制表示的 Base64 进行注册。您无法根据 Play 管理中心显示的指纹计算出该值,因此您必须在原始证书上手动运行一些命令。

    [来源:我在 Google 工作并实现了大部分内容]

    关于android - 如何使用上传证书发布应用更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320907/

    相关文章:

    android - 在不更改版本号的情况下更新 Android 应用程序

    android - OpenGL 安卓 : X axis is mysteriously flipped

    java - 使用 gradle 创建 jar,导入类时无法看到同一包中的其他类

    android-studio - 如何在 mac 终端上运行 adb?

    java - Android Studio 文件菜单中没有 "Import Sample"选项

    android - 如何使用工作电子邮件在 Play 控制台中创建测试人员组

    google-play-console - Play 控制台 : stuck on "Ready to Publish"

    android - Gradle 错误 : unable to open zip file

    Java/Android,新的文件语法

    android-studio - 错误:无法使用Gradle安装运行构建操作