【问题标题】:Can I use the same keystore file to sign two different applications?我可以使用同一个密钥库文件来签署两个不同的应用程序吗?
【发布时间】:2011-10-07 09:36:28
【问题描述】:

我要上传一个新的应用程序,只是设计有点不同。昨天我生成了密钥库文件来签署应用程序。我可以用同样的吗?

【问题讨论】:

  • 是的,您可以(另外,您在询问之前尝试过吗?)
  • 这对于您在某个组织中拥有多个应用程序并通过安全地进行自定义权限但别名应该不同时很有用

标签: android android-keystore


【解决方案1】:

您可以将 keystore 用于任意数量的应用程序。

无需生成新的密钥库。

【讨论】:

  • 对于“别名”,我应该写什么?
  • 密钥库 CONTAINS 构成签名证书的公钥/私钥对。一个密钥库可以包含许多密钥对。 “别名”是对密钥库中特定密钥对的引用。一个密钥库可以保存您所有的密钥对,但每个应用程序应该有一个密钥对。使用您正在签名的应用程序的名称作为别名。您可以为密钥库和其中的每个密钥对设置单独的密码。您可以更改这些密码并从密钥库导入/导出密钥对,或将新的密钥对添加到您的密钥库。这一切都是通过命令行“keytool”命令完成的。查一下。
  • @brycewjohnson 可以通过 GUI 将新对添加到密钥库吗?
【解决方案2】:

到目前为止,我将对共识答案提出反驳。

我同意,对于大多数应用程序作者来说,大多数时候,在您的应用程序之间共享相同的密钥库/证书/密码可以正常工作。关键是使用“the same certificate throughout the expected lifespan of your applications”,以便应用程序可以自行升级。

但我可以想到一个很好的理由,即为单独的应用程序或应用程序系列设置单独的密钥库。如果您认为您可能想要将应用程序出售给其他人,以便他们将其作为对原始版本的升级发布,那么您必须与他们共享您的唯一密钥库和密码才能这样做。可能不是一个大问题,但对您来说有点担心,对于一个足够大的买家来说,可能是一个尽职调查问题。

另外,我真的不像@ol_v_er那样阅读文档中的同一行。我认为当前行:

您应该在应用程序的预期生命周期内使用相同的证书对所有应用程序进行签名。

(请注意当前版本中缺少逗号)只是强调“终身”建议适用于所有应用,而不是实际指导您为所有应用使用相同的证书。

【讨论】:

  • 为每个应用程序保留单独的密钥库应该是要走的路!
  • 建议为每个应用使用不同的文件,对吗?但是,如果您对多个应用程序使用相同的密钥库文件会发生什么?这似乎会导致 Firebase/Google 服务出现一些问题。如果已经完成,我想不可能使用新的(每个应用程序不同的),对吧?
【解决方案3】:

官方文档告诉我们:

一般来说,向所有开发人员推荐的策略是在应用程序的整个预期生命周期内使用相同的证书对所有应用程序进行签名。您应该这样做有几个原因...

https://developer.android.com/studio/publish/app-signing.html#considerations

是的,请尝试使用相同的证书对所有应用程序进行签名。

【讨论】:

  • 对于“别名”,我应该写什么?
  • 为简单起见,您的所有应用也使用相同的。
  • 我现在的问题是为不同的应用程序使用不同的密钥库和证书有什么问题
  • @Lucian 这样做绝对没问题。只是管理起来有点复杂。如果您将证书与源代码一起保存,就可以了。
【解决方案4】:

我想在这里添加一些说明,因为这个问题和提供的答案让我感到困惑。了解密钥库实际上是什么至关重要。

密钥库只是一种安全存储用于签署 Android apk 的公钥/私钥对的方法。所以是的,您可以使用相同的 keystore 来签署多个 apk,没有问题。您也可以使用相同的别名(每个别名是一个证书)来签署多个 apk,它会起作用。但是,它具有安全隐患。如果您的单个别名被盗用,那么您的所有应用都将被盗用。

但是,如果您打算在某一天出售您的应用的权利,那么为您的所有应用使用相同的别名可能不是一个好主意。但是,如果您为每个 apk 使用不同的别名,则使用相同的密钥库可能不一定是一个坏选择。我确信有一种方法可以将证书从一个密钥库移动到另一个密钥库,这样您就可以安全地将仅用于该证书的必要密钥提供给您的买家。

明确地说,密钥库就是密钥的存储介质。它在签署 apk 的过程中没有实际作用,而仅用于存储实际用于签署 apk 的密钥。

参考资料:

Understanding keystore, certificates and alias

https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores

【讨论】:

  • 请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答。
  • 道歉。我是个菜鸟。
  • 我没有足够的代表投票给副本。因此,如果您想将以下问题投票为重复问题,我认为这个问题最适合作为非重复问题。它是相关关键字在谷歌中的第一名,并且具有最相关的答案。 stackoverflow.com/questions/13023509/…stackoverflow.com/questions/14973205/…stackoverflow.com/questions/10514597/…
  • 等等!如何为每个应用使用相同的密钥库但别名不同?!
  • 这也适用于 app bundle 吗?
【解决方案5】:

当然!您可以根据需要多次使用相同的密钥库文件。为您开发的所有应用程序使用相同的密钥库文件总是更好。如果您想更新或修改应用程序,这将有所帮助。那时您需要使用相同的密钥对您的应用程序进行签名。

【讨论】:

    【解决方案6】:

    我确实使用相同的证书(密钥库)签署了我的所有应用程序。如果我改变主意并希望我的应用程序共享它们的数据,这将是一个优势。

    您可能知道,Android 使用 UID 识别每个应用。如果您的所有应用程序都由同一个证书签名,您可以请求 android 为多个应用程序分配相同的用户 ID,然后让它们在单个进程中运行并共享数据。

    来自安卓文档android:sharedUserId

    android:sharedUserId

    将与其他应用程序共享的 Linux 用户 ID 的名称。默认情况下,Android 会为每个应用程序分配其自己的唯一用户 ID。但是,如果两个或多个应用程序的此属性设置为相同的值,则它们都将共享相同的 ID——前提是它们也由相同的证书签名。具有相同用户 ID 的应用程序可以访问彼此的数据,如果需要,可以在同一进程中运行

    【讨论】:

    • 很酷的评论,不知道谢谢! :)
    【解决方案7】:

    近期更新

    如果您想注册 Google 应用签名,您必须使用新的不同密钥来签署您的 apk 或捆绑包,否则在上传 google 控制台后会给您错误消息说

    您上传了一个使用密钥签名的 APK 或 Android App Bundle 这也用于签署交付给用户的 APK。因为 您已注册 Google Play 应用签名,您应该签署您的 在上传之前使用新密钥的 APK 或 Android App Bundle

    【讨论】:

    • 我能够在 android studio apk 签名屏幕中生成一个新密钥。生成新的密钥库和别名,它可能会起作用。它对我有用。
    • 我们可以选择退出吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多