java - 为什么 PackageInfo.signatures 字段是一个数组,什么时候这里只有一个值?

标签 java android

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

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

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

最佳答案

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

我找到了 this archive来自 Dianne Hackborn , Android 开发的首选女士:

Q: I know jar signer support multiple signatures in one jar file. If an APK file has two valid signatures, does that mean this APK can access signature level permission provided by both signers?

A: In theory, something is done with multiple signatures, but nobody has ever used this so it probably doesn't work. This also has the side-effect (if it does work) of aliasing the two signatures to the same thing since they presumably come from the same owner, which is likely not what you want.

Another bit来自 Dianne(注意使用“它”而不是“他们”,以及“证书”而不是“证书”):

Q: PackageInfo.signatures: What does it return?

A: It is the certificate that was used to sign the .apk.

但是。值得注意的是,我在Android源码Git中发现了一个对多个签名的测试引用:Test for Checking Package Signatures (Bug 4596332) .此外,Android BackupManagerService code (和 other Android source code )确保它检查多个签名。

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

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

关于java - 为什么 PackageInfo.signatures 字段是一个数组,什么时候这里只有一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618281/

相关文章:

java - 如何在olingo中读取具有复杂属性的实体集合?

java - 使用 Spring 从抽象类调用具体方法

java - JiraRestClient 搜索未返回 JQL 查询的结果

android - Activity 重新创建后重置导航图

javascript - 使用 PhoneGap 点击按钮时的原生滴答声

android - 适用于 Android 5.0 的 Google API

java - Apache POI 将 DOCX 转换为具有 EMF 图片格式的 PDF。

java - 单选按钮和字体更改

java - 使用库中的 fragment (android)

android - 使用 Android Studio 构建未签名的 APK 文件