“包没有正确签名”出现给一些用户

我在Google Play上有一个应用程序,已经看了无数次更新。 最新的更新(第一次)没有为某些人安装,他们只是得到“包没有正确签名”错误消息。

它适用于我在家里的Android设备。 我正在build立和签署一个自定义的构build系统,基本归结为调用ant release ,其次

 jarsigner -verbose -keystore $(keystore) -storepass $(storepass) $(appname).apk $(alias) zipalign -v 4 $(appname).apk $(finalname).apk 

这已经工作了多年,没有任何修改的构build系统或密钥库,我不知道为什么它停止为一些用户工作。

我注意到文档添加了以下警告:

从JDK 7开始,缺省签名algorithm[sic]已经发生变化,您需要在签名APK时指定签名和摘要algorithm[sic](-sigalg和-digestalg)。

所以我加了-sigalg SHA1withDSA -digestalg SHA1 ,它产生一个不同大小的APK。 我可以尝试滚动,但我不想推出更新,并惹恼用户,而不知道我实际上正在修复的东西。

为什么这只对一些人失败? 我如何解决它? 明确指定-sigalg / -digestalg是否够用?

Solutions Collecting From Web of "“包没有正确签名”出现给一些用户"

问题和你说的jdk7一样。 为了克服这个问题,就同一主题进行了很多的讨论

尝试通过添加

 <presetdef name="signjar"> <signjar sigalg="MD5withRSA" digestalg="SHA1" /> </presetdef> 

在你的build.xml文件中

注意

问题是build立一个释放版本与ant释放后,apk不能安装在物理设备上

这只发生在与JDK 1.6.25的JDK 7一切正常!

它只影响很小的一部分,因为for jarsign jdk7 need SHA1 digest algm, but not with the default algorithms, whatever they are. 所以设备与其他一些algorithm默认会拒绝这个,并导致问题。

以下是使用的algorithm

默认情况下,jarsigner使用下列之一签名JAR文件:

 DSA (Digital Signature Algorithm) with the SHA1 digest algorithm RSA algorithm with the SHA256 digest algorithm. EC (Elliptic Curve) cryptography algorithm with the SHA256 with ECDSA (Elliptic Curve Digital Signature Algorithm). 

更多的jar签名

检查这个答案:

已发布的Android版本给出错误“包文件未正确签名

这个问题似乎与jdk7有关,所以你的修复可以解决问题(但我自己没有经历过!)

我们可以使用eclipse来签署应用程序。 像: – 在Eclipse中右键单击您的项目>selectAndroid工具>导出签名的应用程序包…

Android应用程序APK签名?

我希望这可以帮助。谢谢!