我可以使用相同的密钥库文件对两个不同的应用程序进行签名吗?


Answers:


96

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

无需生成新的密钥库。


6
对于“别名”,我应该写什么?
Dr.jacky'2

12
密钥库CONTAINS公共/私有密钥对,使一个签名证书。一个密钥库可以包含许多密钥对。“别名”是对密钥库中特定密钥对的引用。一个密钥库可以保存所有密钥对,但是每个应用程序应该有一个密钥对。使用您正在签名的应用程序的名称作为别名。您可以为密钥库和其中的每个密钥对使用单独的密码。您可以更改这些密码并从密钥库中导入/导出密钥对,或将新的密钥对添加到密钥库中。这些都是通过命令行“ keytool”命令完成的。查一下
brycewjohnson

@brycewjohnson可以通过GUI将新对添加到密钥库吗?
CinCout

43

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

我同意,对于大多数应用程序作者而言,大多数时候,在您的应用程序之间共享相同的密钥库/证书/密码会很好用。关键是要在应用程序的整个预期使用期限内使用“相同的证书”,以便应用程序可以自我升级。

但是我可以想到一个很好的理由,为单独的应用程序或一系列应用程序提供单独的密钥库。如果您认为自己可能想将应用程序出售给其他人以供他们发布,以作为原始版本的升级,则必须与他们共享您的唯一密钥库和密码。可能不是一个大问题,但让您有些担心,也许是对足够多的买家进行的尽职调查问题。

另外,我的确没有像@ol_v_er一样阅读文档中的同一行。我认为当前行:

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

(请注意,当前版本中没有逗号)只是在强调“生命周期”建议适用于所有应用程序,而不是实际上指示您对所有应用程序使用相同的证书。


6
为每个应用程序保留单独的密钥库应该是方法!
苏菲安

42

官方文档告诉我们:

通常,对于所有开发人员,建议的策略是在应用程序的预期寿命内,使用相同的证书对所有应用程序进行签名。您应该这样做有几个原因...

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

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


8
对于“别名”,我应该写什么?
Dr.jacky'2

6
为简单起见,请对所有应用程序都使用相同的内容。
ol_v_er

18

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

密钥库只是安全地存储用于对您的Android APK签名的公钥/私钥对的一种方式。因此,可以,您可以使用同一密钥库对多个apk进行签名,而不会出现问题。您也可以使用相同的别名(每个别名是一个证书)来签名多个apk,它将起作用。但是,它具有安全隐患。如果您的单个别名遭到破坏,则所有应用程序都将受到破坏。

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

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

参考文献:

了解密钥库,证书和别名

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


1
请不要针对多个问题发布相同的答案。发表一个好答案,然后投票/标记以将其他问题重复作为一个重复。如果问题不是重复的,请定制问题的答案。
保罗·鲁布

道歉。我对SO很不满意。
安东尼·斯蒂弗斯

1
我没有足够的代表来投票重复。因此,如果您想将下列问题重复进行表决,我认为这个问题最适合于不重复。它是相关关键字在Google中排名第一,并且答案最相关。 stackoverflow.com/questions/13023509/... stackoverflow.com/questions/14973205/... stackoverflow.com/questions/10514597/...
安东尼Stivers

等待!如何为每个应用程序使用相同的密钥库,但别名不同?
Ziad H.

5

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


2

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

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

来自android doc android:sharedUserId

android:sharedUserId

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


1

最近更新

如果您想通过Google注册应用签名,则必须使用新的其他密钥来签名apk或捆绑包,否则在上传Google控制台后会出现错误消息,提示您

您上传了使用密钥签名的APK或Android应用程序捆绑包,该密钥也用于签名交付给用户的APK。由于您已注册使用Google Play进行应用签名,因此在上传APK或Android应用捆绑包之前,请先使用新密钥对其进行签名


我能够在android studio apk签名屏幕内生成一个新密钥。生成新的密钥库和别名,它可能会起作用。它为我工作。
Numan Karaaslan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.