10

我正在相互检查包签名以确定它们是否不兼容(针对不同的密钥库编译)。我注意到这PackageInfo.signatures几乎总是一个包含单个条目的集合,这对我来说很有意义。我使用调试或生产密钥库构建我的应用程序,这决定了包的签名(这是我此时对 apk 签名过程的简单理解)。我知道如果我不特别询问此信息(通过传递PackageManager.GET_SIGNATURES标志),这将是空的,但我不太明白会有多个信息的情况。

我编写了一些调试代码并在我的个人 Android 手机上运行它。在我手机上安装的 300 多个软件包中,除了一些似乎来自我的服务提供商(com.verizon.* 命名空间)的软件包外,所有软件包都只有一个签名。

我觉得我的用例(包管理)考虑应用程序包将具有单个签名是可以接受的,但我想确保我没有遗漏可能引入边缘案例错误的东西。

4

1 回答 1

16

出于您的目的,假设 Android 应用程序具有单个签名似乎是完全可以接受的。一个 Android APK可以用多个签名编译,但既不推荐也不广泛测试。(Verizon 为什么要这么做?谁知道呢。)

我从Dianne Hackborn那里找到了这个档案,她是 Android 开发的首选女士:

:我知道 jar 签名者支持在一个 jar 文件中进行多个签名。如果一个 APK 文件有两个有效的签名,这是否意味着这个 APK 可以访问两个签名者提供的签名级别权​​限?

A : 理论上,可以通过多个签名完成某些事情,但没有人使用过它,所以它可能不起作用。这也具有将两个签名别名为同一事物的副作用(如果它确实有效),因为它们可能来自同一所有者,这可能不是您想要的。

Dianne 的另一点(注意使用“it”,而不是“they”,以及“certificate”而不是“certificates”):

:PackageInfo.signatures:它返回什么?

:它是用于签署 .apk 的证书。

然而。值得注意的是,我在 Android 源码 Git 中找到了多个签名的测试参考:Test for Checking Package Signatures (Bug 4596332)。此外,AndroidBackupManagerService代码(和其他 Android 源代码)确保它检查多个签名。

因此,这是我的结论:您不必担心多重签名,除非您在特定包的安全性和编译很重要的情况下进行编码。(但是,如果需要,容纳多个签名似乎也不会有太大问题。)

希望这至少有点令人满意。

于 2012-11-29T04:35:26.240 回答