使用多个证书对应用程序进行签名

8

https://developer.android.com/studio/publish/index.html的签名文档中可以得知:

当系统安装应用程序更新时,如果新版本中的任何证书与旧版本中的任何证书匹配,则系统允许更新。

这表明一个应用程序可以使用多个证书进行签名。

这是一种有趣的选择,可以让多个实体签署一个应用程序。例如:一个最初由设备制造商签署的系统应用程序。开发人员可以签署进一步的更新。

我是否误读了文档,或者这确实是可能的?如果是这样,如何实现?

除此之外,还有其他方法支持不同证书的应用程序,并且让两个或更多实体对其进行签署吗?


1
一个系统应用程序最初由设备制造商签名。进一步的更新可能由开发人员签名,但这是不可能的。"更新"意味着更改,因此APK需要由制造商重新签名。 - CommonsWare
你是说一个apk不能有多个证书吗? 也许我的例子不够完整,我应该这样写: “一个系统应用程序有两个证书,最初由设备制造商签名。开发者可以使用第二个证书进行进一步的更新签名。”我认为这与文档相反,不是吗? - user139992
根据官方文档:请注意,您可以使用不同的密钥多次签署APK。 - Stan
2个回答

2
我找到了一个解决方案,虽然不太美观但仍是一个解决方案。
签名的apk文件包括:
- 使用给定证书签名的文件 - 一个带有公共证书密钥的META-INF文件夹
要创建具有多个证书的apk:
- 每个参与方都签署apk - 收集每个apk的META-INF内容 - 创建一个新的apk(这只是一个zip文件),其中META-INF文件夹包含所有证书
这将允许任何签名方更新apk。
请注意,无法在更新中添加证书。

你是怎么做到的?能否请您再详细解释一下?我原本以为改变apk文件的内容并重新打包应该会改变生成的文件,从而使之前的签名尝试失效。 - Janusz
嘿 - bump - 我的假设是和 @Janusz 有关,如何在不影响整个捆绑包的签名的情况下添加新的签名。 META-INF 是否被排除在签名计算之外? - Chris Maddern

2

如果在签名过程中使用不同的别名,您可以使用不同的证书对apk进行签名。

这将在META-INF文件夹内创建不同的文件。我不知道这对Android市场内的更新过程有什么影响。


我相信你的答案是正确的。我的只是一个hack。从我所做的测试来看,签名apk时META-INF似乎没有被考虑在内。这最终没有发布,但我确实在真实设备上进行了测试——也就是安装更改后的apk。 - user139992

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