94

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

4

7 回答 7

108

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

无需生成新的密钥库。

于 2011-10-07T09:42:57.867 回答
48

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

我同意,对于大多数应用程序作者来说,在大多数情况下,在您的应用程序之间共享相同的密钥库/证书/密码可以正常工作。关键是在应用程序的预期生命周期中使用“相同的证书”,以便应用程序可以自行升级。

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

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

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

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

于 2014-10-03T20:05:16.443 回答
45

官方文档告诉我们:

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

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

所以是的,尝试使用相同的证书签署所有应用程序。

于 2011-10-07T10:06:09.427 回答
27

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

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

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

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

参考:

了解密钥库、证书和别名

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

于 2016-05-11T21:33:53.757 回答
6

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

于 2011-10-07T09:45:39.713 回答
3

最近更新

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

您上传的 APK 或 Android App Bundle 使用密钥签名,该密钥也用于签署交付给用户的 APK。由于您已注册 Google Play 应用签名,因此您应该在上传 APK 或 Android App Bundle 之前使用新密钥对其进行签名

于 2020-10-15T13:38:58.507 回答
3

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

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

来自 android 文档android:sharedUserId

安卓:sharedUserId

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

于 2016-12-22T09:14:26.743 回答