我在Google Play上有一个应用程序多年来已经看到了无数的更新。最新的更新(有一段时间的第一个)无法为某些人安装,他们只是得到“包未正确签名”错误消息。
它适用于我家里的Android设备。我正在使用自定义构建系统构建和签名,该系统基本上归结为调用ant release
,然后是
jarsigner -verbose -keystore $(keystore) -storepass $(storepass) $(appname).apk $(alias)
zipalign -v 4 $(appname).apk $(finalname).apk
这已经工作了多年,构建系统或密钥库没有变化,我不知道为什么它停止为某些用户工作。
我注意到documentation添加了以下注意事项:
从JDK 7开始,默认签名算法[原文如此]已经发生变化,需要您 指定签名和摘要算法[原文如此](-sigalg和 -digestalg)当你签署APK时。
所以我添加了-sigalg SHA1withDSA -digestalg SHA1
,它生成了一个不同大小的APK。我可以尝试推出这个,但我不想继续推出更新并惹恼用户而不知道我实际上正在修改某些内容。
为什么这对某些人来说只会失败?我如何解决它?明确指定-sigalg / -digestalg吗?
答案 0 :(得分:4)
问题与你说的关于jdk7的问题相同。为了解决这个问题,有很多关于同一主题的讨论
通过添加
尝试此操作<presetdef name="signjar">
<signjar sigalg="MD5withRSA" digestalg="SHA1" />
</presetdef>
在build.xml
文件
注意强>
问题出在构建发布版本之后 蚂蚁释放 apk无法安装在物理设备上
这只发生在带JDK 1.6.25的JDK 7上,一切都很好!
它仅影响一小部分因为for jarsign jdk7 need SHA1 digest algm, but not with the default algorithms, whatever they are.
因此默认情况下使用其他算法的设备会拒绝此问题并导致问题。
以下是使用的算法
默认情况下,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 signing
答案 1 :(得分:1)
检查这个答案:
Published Android apk gives error “Package file was not signed correctly
问题似乎与jdk7有关,所以你的修复可以解决问题(但我自己没有经历过!)
答案 2 :(得分:1)
我们可以使用eclipse签名申请。 喜欢:- 在Eclipse&gt;中右键单击您的项目。选择Android工具&gt;导出已签名的应用程序包...
Android Application APK signing?
我希望这可能会有所帮助。谢谢!!