Java 为什么PackageInfo.signatures字段是一个数组,这里什么时候会有一个值以外的值?

Java 为什么PackageInfo.signatures字段是一个数组,这里什么时候会有一个值以外的值?,java,android,Java,Android,我正在相互检查包签名,以确定它们是否不兼容(根据不同的密钥库编译)。我注意到,PackageInfo.signatures几乎总是包含单个条目的集合,这对我来说很有意义。我使用调试密钥库或生产密钥库构建应用程序,这决定了包的签名(这是我目前对apk签名过程过于简单的理解)。我知道,如果我没有明确要求提供此信息(通过传递PackageManager.GET_SIGNATURES标志),则此值将为空,但我不太理解在何种情况下会有多个签名 我写了一些调试代码并在我的个人安卓手机上运行。在我手机上安装的

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

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


我觉得我的用例(包管理)可以接受应用程序包会有一个单独的签名,但是我想确保我没有丢失一些可以引入边缘情况bug的东西。

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

我从Android开发的go to lady中发现:

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

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

来自Dianne(注意使用“it”,而不是“他们”,以及“certificate”而不是“certificates”):

Q:PackageInfo.signatures:它返回什么

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

不过。值得注意的是,我在Android源Git中找到了对多个签名的测试引用:。此外,(和)确保它检查多个签名

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


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

这是我迄今为止收到的最清楚、最彻底的答案之一。谢谢