Android 密钥库和密钥别名

Android 密钥库和密钥别名,android,keystore,Android,Keystore,我正在导出一个应用程序,我对keystore和keyalias非常好奇。我真的不确定它们是做什么用的,或者我应该创建多少个(可能每个应用一个?)。如能提供有关这些钥匙的任何信息,我将不胜感激。谢谢这基本上是一种用你的应用来识别你自己的方法。有调试密钥和签名密钥,后者是您需要将APK上传到Play store并发布应用程序的密钥。密钥别名只是指向特定证书的普通名称。您可以为每个版本创建一个,也可以对所有应用程序使用相同的版本。我建议为每个应用程序创建一个,并确保备份多个副本。我喜欢保留3个,一个在

我正在导出一个应用程序,我对keystore和keyalias非常好奇。我真的不确定它们是做什么用的,或者我应该创建多少个(可能每个应用一个?)。如能提供有关这些钥匙的任何信息,我将不胜感激。谢谢

这基本上是一种用你的应用来识别你自己的方法。有调试密钥和签名密钥,后者是您需要将APK上传到Play store并发布应用程序的密钥。密钥别名只是指向特定证书的普通名称。您可以为每个版本创建一个,也可以对所有应用程序使用相同的版本。我建议为每个应用程序创建一个,并确保备份多个副本。我喜欢保留3个,一个在我的系统中,一个在我的Dropbox中,另一个在外部某处。如果丢失了密钥库文件,则绝对无法检索该文件或发布应用程序的未来版本。它非常有用

编辑:开发者网站的“应用程序签名”部分实际上建议在所有应用程序中使用相同的证书

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

应用程序升级–在发布应用程序更新时,如果希望用户能够无缝升级到新版本,则必须继续使用相同的证书或证书集对更新进行签名。系统在安装应用程序更新时,会将新版本中的证书与现有版本中的证书进行比较。如果证书完全匹配,包括证书数据和顺序,则系统允许更新。如果您在未使用匹配证书的情况下对新版本进行签名,则还必须为应用程序分配不同的程序包名称-在这种情况下,用户将新版本作为全新的应用程序安装

应用程序模块化–Android系统允许由同一证书签名的应用程序在同一进程中运行(如果应用程序请求),因此系统将其视为单个应用程序。通过这种方式,您可以在模块中部署应用程序,如果需要,用户可以独立更新每个模块。 通过权限共享代码/数据–Android系统提供基于签名的权限强制,因此应用程序可以向使用指定证书签名的其他应用程序公开功能。通过使用同一证书对多个应用程序进行签名并使用基于签名的权限检查,您的应用程序可以安全地共享代码和数据


关于别名有什么建议或最佳实践吗?有一个谷歌的例子,例如key0,。。。我使用
alias\u app\u name\u 0
所以密钥别名是公钥,密钥是私钥?AFAIK签名需要aymetric密钥。如果我有密钥库密码,有没有办法从密钥库获取密钥别名?我已经这样做了-使新密钥别名保持密钥库与旧版本相同。但在上传到谷歌游戏商店后,它说新的和旧的SHA1证书不匹配。“密钥别名只是指向特定证书的普通名称。您可以为每个版本创建一个密钥别名,也可以为所有应用程序使用相同的密钥别名。”我认为这行不通