从Google Play下载我的应用时,部分(但不是全部)用户会收到"包文件未正确签名"

lza*_*zam 8 android jar-signing google-play

我已在Google Play商店中提交并发布了一个应用.我上传二进制文件时没有收到任何错误.现在,我收到一些(并非所有)客户的报告,说明他们在安装我们的应用程序时遇到以下错误:

"包文件未正确签名"

当我尝试自己复制此错误(使用Nexus 7重置为出厂设置)时,一切顺利.

这似乎是类似于中描述的问题这个问题,但接受的答案似乎并不在此情况下适用.

已经看到了使用JDK 6而不是JDK 7的建议,但是像这样的答案让我相信这个解决方案适用于在旧版本的Java中创建密钥库的情况.此外,我担心如何使用旧版Java重新签名新版本会影响我们的初始安装没有问题的客户.

  1. 用于签署应用程序的JDK版本是否仅对某些客户产生负面影响?如果是这样,哪些因素可能决定问题发生在哪些设备上?
  2. 将改变如何我签署二进制文件(而不是证书)对我们的更新谁目前尚未有此问题的用户应用能力的任何负面影响
  3. 如果我用来签署APK的Java版本不是问题,还有什么可能导致这样的错误?

编辑: 所有有此问题(或没有它)的用户都在运行Android 4.0或更高版本.该应用不支持早期版本的Android.

C B*_*B J 6

经过一番阅读后,我将采取一个刺,你需要明确为JDK7 jarsigner指定算法..

将其添加到项目的build.xml文件中:

<presetdef name="signjar">
    <signjar sigalg="MD5withRSA" digestalg="SHA1" />
</presetdef>
Run Code Online (Sandbox Code Playgroud)

经过一点阅读之后,它似乎与设备上用于摘要的默认算法有关,它似乎因设备而异,所有设备上的公共算法都是上面xml中指定的算法.这就是为什么它在某些设备上失败的原因,其他用户也经历了同样的事情,例如:"一些用户没有正确签名包"

此博客文章还包含有关apk签名的一些有趣信息:Android代码签名

我现在非常有信心明确设置用于签名的android指定算法不会影响已安装的客户,我希望它能为其他客户解决您的问题.