发布应用到PlayStore前为什么要签名APK?

26

发布apk之前签名的重要性是什么?


1
您不能使用调试签名发布应用程序(无法安装)。 - Marco Acierno
3个回答

54
根据Android应用签名文档,Android系统要求所有安装的应用程序都使用开发者持有的私钥证书进行数字签名。Android系统使用证书来识别应用程序的作者并建立应用程序之间的信任关系。证书不用于控制用户可以安装哪些应用程序。证书不需要由证书颁发机构签名:Android应用程序通常使用自签名证书。
关于签署Android应用程序的重要点如下:
  • 所有应用程序都必须签名。如果未签名,则系统将无法在模拟器或设备上安装应用程序。
  • 为了测试和调试应用程序,构建工具会使用由Android SDK构建工具创建的特殊调试密钥对应用程序进行签名。
  • 当您准备发布面向最终用户的应用程序时,必须使用合适的私钥对其进行签名。您不能发布使用SDK工具生成的调试密钥签名的应用程序。
  • 您可以使用自签名证书对应用程序进行签名。不需要证书颁发机构。
  • 系统仅在安装时测试签名证书的到期日期。如果应用程序的签名证书在安装后过期,则应用程序将继续正常工作。
  • 您可以使用标准工具Keytool和Jarsigner生成密钥并对应用程序.apk文件进行签名。
  • 签署发布应用程序后,建议使用zipalign工具优化最终的APK包。
Android系统不会在未正确签名的情况下安装或运行应用程序。这适用于Android系统运行的任何地方,无论是在实际设备上还是在模拟器上。因此,在运行或发布应用程序之前,必须为其设置签名。

为什么:

应用程序签名的某些方面可能会影响您开发应用程序的方式,特别是如果您计划发布多个应用程序

总的来说,对于所有开发人员,推荐的策略是在应用程序的预期寿命内,使用相同的证书对所有应用程序进行签名。有几个原因说明您应该这样做:

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

  • 应用程序模块化 - Android系统允许由相同证书签名的应用程序在同一进程中运行,如果应用程序这样请求,则系统将其视为单个应用程序。 通过这种方式,您可以将应用程序部署为模块,并且如果需要,用户可以独立更新每个模块。

  • 通过权限共享代码/数据 - Android系统提供基于签名的权限执行,使得一个应用程序可以向使用指定证书签名的另一个应用程序公开功能。 通过使用相同的证书签名多个应用程序并进行基于签名的权限检查,您的应用程序可以以安全的方式共享代码和数据。

确定签名策略的另一个重要考虑因素是如何设置用于对应用程序进行签名的密钥的有效期。

如何调试应用程序:

您可以在模拟器或设备上调试应用程序。

  • 如果您计划支持单个应用程序的升级,应确保您的密钥有效期超过该应用程序的预期寿命。建议使用25年或更长的有效期。当您的密钥有效期过期时,用户将无法无缝升级到新版本的应用程序。

  • 如果您将使用同一密钥对多个不同的应用程序进行签名,应确保您的密钥有效期超过所有应用程序的所有版本(包括将来可能添加到套件中的依赖应用程序)的预期寿命。

  • 如果您计划在Google Play上发布您的应用程序,则用于签署应用程序的密钥必须具有在2033年10月22日之后到期的有效期。Google Play强制执行此要求以确保用户可以在新版本可用时无缝升级应用程序。


2
@Hissain 要用您自己的证书升级应用程序并在 Play 商店发布多个应用程序,我们需要对其进行签名,以便它们接受您的应用程序。请查看我的编辑答案。 - Shailendra Madda
2
当你从其他来源复制文本时,必须通过将复制的文本放置在块引用中来指示你已经复制了它。请参阅如何引用其他人编写的材料 - user456814
2
什么是“建立应用程序之间的信任关系”? 签名如何确定“作者”? - Diffy
1
引用来自 Android 页面并不是问题所寻求的内容,我想。问题所询问的是应用签名究竟如何帮助,从而使得在发布之前对应用进行签名变得重要。 - qre0ct
3
@ShylendraMadda 2. 为什么要对已接受的答案进行负评 - 提问者可能会对您的答案感到满意。但是,在我看来,SO被整个社区使用,我是其中不可或缺的一部分,因此我希望在这里发布的问题有最清晰和明确的答案,以便答案有助于澄清概念,而不仅仅是帮助解决当前问题。 - qre0ct
显示剩余6条评论

10

为什么要签名?

开发人员可以通过签名防止他人篡改他们的应用程序。

使用签名来保护您的应用程序!

这是基于公钥密码学的。您是唯一拥有私钥的人,因此只有您才能签署您的应用程序。用户可以信任这个应用程序是直接来自您的。如果私钥不可用,则数学证明无法篡改应用程序。

公钥密码学中有两个像硬币的面孔,即私钥和公钥。您将私钥保密,并锁在安全的地方。另一方面,您发布您的公钥。

这些密钥就像硬币的两面,因为您使用一个密钥进行加密,使用另一个密钥进行解密。

那么这如何应用于应用程序签名呢?

签名是使用私钥进行加密。

因为您发布了公钥,所以应用商店和用户都有您的公钥。他们可以解密您的应用程序,因此可以确定该应用程序确实是您自己创建的。Android 和应用商店会为他们执行此操作。

应用商店通过使用公钥对签名进行解密进行验证。

就是这些,朋友们。


-3

签名 Apk: 生成已签名的 apk 意味着使用密码或仅您知道的密钥对您的 apk 进行加密,并且您必须永久记住此 apk,因为如果您的应用程序进行任何进一步升级,则必须使用它来访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接