未签名的APK文件发布问题?

8

有很多关于签名和未签名的 .apk 文件的问题。为了测试和调试,我们可以使用在 bin 文件夹内生成的未签名 .apk 文件。这个 apk 文件是使用虚拟密钥库文件生成的。我的问题是,为什么我们需要使用签名的 apk 文件。难道我们不能发布一个未签名的 apk 文件吗?那样会有什么问题吗?

6个回答

9
有很多原因为什么你想要一个签名的应用程序。甚至有一篇关于它的好文章。以下是几个原因:
  1. 对于终端用户而言,这是一种验证应用程序是否由同一作者发布的方法。
  2. 发布过程允许Android使用额外的功能,例如应用内购买。如果没有它,Google无法验证该应用程序实际上是你的。
  3. 这是说某个受信任的人发布了该应用程序的一种方式。
  4. 这是一个两步认证过程,以验证您的应用程序是您自己的。这提供了一层其他方式无法完成的额外安全性。
  5. 使用相同密钥签名的应用程序可以共享资源。调试证书由所有人共享,并且您可能不希望所有应用程序都拥有那种级别的访问权限。

基本上,它使黑客的生活更加困难,这总是一件好事。

例如,您可能会将Google Play账户授权让别人修改描述,但您不希望他们上传新应用程序。没有密钥,他们无法上传应用程序。此外,即使您的谷歌密码被破解,您仍然无法上传应用程序。这需要拥有您的私钥文件和密钥来破解。


1
假设情景是,我正在为公司开发一款针对员工的Android应用程序(不在PlayStore上发布)。我能够提供未签名的APK版本进行发布吗? - Bruce
2
事实上,虽然我仍然会签署它,作为一种惯例。签署它证明该应用程序已准备好在非开发/测试环境中使用。 - PearsonArtPhoto
你解释得很好...谢谢。 - Bruce
@PearsonArtPhoto 你不能将未签名的应用程序交给任何人,它无法安装在设备/模拟器上。 - Ajay S
@TGMCians:我经常安装未签名的应用,但总是通过Eclipse进行。我认为你可以以类似的方式安装它们。我猜签名会更容易一些。嗯...会适当编辑的。 - PearsonArtPhoto
@PearsonArtPhoto 不是这样的,即使通过Eclipse,您也无法安装未签名的应用程序。 - Ajay S

3

虽然@Pearson已经介绍了几乎所有的事情,但我想补充一点。

在Android上,您无法以任何方式在开发人员手机/模拟器上安装未签名的应用程序。您必须使用调试或自己的证书签署应用程序。

安装时,Android SDK会在名为debug.keystore的密钥库中为您生成一个“调试”签名证书。调试证书仅有效期为365天。

因此,当您通过任何IDE Eclipse / Android Studio安装应用程序时,IDE也会使用调试证书对应用程序进行签名。

更新

我的问题是为什么我们需要使用已签名的apk。我们不能发布未签名的apk吗?这有什么问题吗?

您需要使用自己的发布密钥库证书签名应用程序,因为您无法发布使用调试证书签名的应用程序,原因有:

首先,调试证书在一年内到期,因此过期后您将无法发布应用程序的更新,这也是Google不允许的另一个重要安全问题。

第二个原因是Android系统使用证书作为识别应用程序作者和建立应用程序之间信任关系的手段。


2

只有在开发者选项中启用了调试功能的人才能运行它。而且人们需要知道如何启用开发者选项(通过在手机设置中点击“版本号”七次)。Google不允许发布调试APK,因此人们必须侧载它。


1

使用调试密钥库的Apk是已签名的Apk。未签名的Apk无法上传到设备。对于生产,您必须创建一个不同的密钥库进行签名。此外,一旦发布,未来的更新必须使用相同的密钥库完成。如果密钥库丢失,则无法更新应用程序。


1
一个未签名的APK更难追溯到原始作者。虽然原则上没有任何问题,但在发布到Google Play之前,Google会强制您对APK进行签名。因此,当开发者滥用Google Play发布恶意软件时,Google有权撤销证书。此外,由于您必须向Google支付证书费用,因此Google希望恶意开发者不会一遍又一遍地支付费用来发布他们的应用程序。

1
你实际上不需要为证书付费。 - PearsonArtPhoto
我一直以为你知道的。抱歉,是我的错。 - Alex van den Hoogen
不,你支付的是帐户,而不是证书。 - PearsonArtPhoto

1

来自Android开发者:

"Android系统要求所有安装的应用程序都使用应用程序开发人员持有的证书进行数字签名。 Android系统使用该证书作为识别应用程序作者和建立应用程序之间信任关系的手段"...

这里阅读更多信息。


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