我正在相互检查包签名以确定它们是否不兼容(针对不同的密钥库进行编译)。我注意到PackageInfo.signatures
几乎总是包含单个条目的集合,这对我来说很有意义。我使用调试或生产密钥库构建应用程序,这决定了包的签名(这是我此时对 apk 签名过程的简单理解)。我知道如果我不专门询问此信息(通过传递PackageManager.GET_SIGNATURES
标志),但我不太明白其中会有多个的情况。
我编写了一些调试代码并在我的个人 Android 手机上运行。在我手机上安装的 300 多个软件包中,除了少数似乎来自我的服务提供商(com.verizon.* 命名空间)的软件包之外,所有软件包都只有一个签名。
我觉得对于我的用例(包管理)来说,考虑应用程序包将具有单个签名是可以接受的,但我想确保我不会错过可能引入边缘情况错误的东西。
出于您的目的,假设 Android 应用程序具有单一签名似乎是完全可以接受的。一个 Android APKcan可以使用多个签名进行编译,但既不推荐也不进行广泛测试。 (Verizon 为何这么做?谁知道呢。)
I found 这个档案 http://www.mail-archive.com/android-security-discuss@googlegroups.com/msg00131.html from 黛安·哈克伯恩 https://plus.google.com/105051985738280261832/posts,Android 开发的首选女士:
Q:我知道 jar 签名者支持一个 jar 文件中的多个签名。如果一个APK文件有两个有效签名,是否意味着这个APK可以访问两个签名者提供的签名级别权限?
A:理论上,某件事是通过多个签名完成的,但没有人曾经这样做过
用过这个,所以它可能不起作用。这也有副作用(如果
确实有效)将两个签名别名为同一事物,因为它们
大概来自同一个所有者,这可能不是您想要的。
再来一点 https://groups.google.com/forum/?fromgroups=#!topic/android-platform/2CBVZONdktw来自 Dianne(请注意使用“it”,而不是“they”,以及“certificate”而不是“certificates”):
Q:PackageInfo.signatures:它返回什么?
A:这是用于签署 .apk 的证书。
然而。值得注意的是,我在Android源码Git中找到了多重签名的测试参考:检查包签名的测试(错误 4596332) https://android.googlesource.com/platform/cts/+/9803e0f8e364fa919dc942643de13652add52e9f%5E!。此外,Android BackupManagerService code http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/com/android/server/BackupManagerService.java#2683 (and 其他Android源代码 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/com/android/server/BackupManagerService.java#3984)确保它检查多个签名。
因此,我的结论是:您不必担心多个签名,除非您在特定包的安全性和编译很重要的情况下进行编码。 (但是,如果有必要的话,容纳多个签名似乎也不会有太大问题。)
希望这至少是令人满意的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)