我已在Google Play商店中提交并发布了一个应用。我上传二进制文件时没有收到任何错误。现在,我收到某些(并非所有)客户的报告,说明他们在安装我们的应用时遇到以下错误:
"包文件未正确签名"
当我尝试自己复制此错误(使用Nexus 7重置为出厂设置)时,一切顺利。
这似乎与this问题中描述的问题类似,但accepted answer在这种情况下似乎并不适用。
我看到看到了使用JDK 6而不是JDK 7的建议,但像this one这样的答案让我相信这个解决方案适用于在旧版本中创建密钥库的情况Java此外,我担心如何使用旧版Java重新签署新版本会影响我们的客户,他们没有在初始安装时遇到问题。
修改 所有遇到此问题(或没有此问题)的用户都在运行Android 4.0或更高版本。该应用不支持早期版本的Android。
答案 0 :(得分:6)
在我读了一下后,我需要明确地为JDK7 jarsigner指定算法..
将其添加到项目的build.xml文件中:
<presetdef name="signjar">
<signjar sigalg="MD5withRSA" digestalg="SHA1" />
</presetdef>
经过一点阅读之后,它似乎与设备上用于摘要的默认算法有关,它似乎因设备而异,所有设备上的通用算法都是上面xml中指定的算法。这就是为什么它在某些设备上失败,其他用户经历过同样的事情,例如:“Package not signed correctly” appearing for some users
此博客文章还包含有关apk签名的一些有趣信息:Android code signing
我现在非常有信心明确设置Android指定的签名算法不会影响已安装的客户,我希望它能为其他客户解决问题。