在Google Play商店更新时,用户会在较旧的Android设备上收到“包文件未正确签名”

时间:2015-08-10 21:15:01

标签: android google-play android-gradle jarsigner

尝试安装Android更新时,用户收到错误“包文件未正确签名”。具体而言,只有具有较旧Android OS版本设备的用户才会遇到此错误。

从当前的制作应用版本更新到更新的制作应用。没有涉及开发设备,侧面装载等。

应用程序的新版本使用API​​>进行编译21,因此需要Java 1.7。

使用Gradle通过Groovy配置文件构建,签名和对齐apk作为CI构建的一部分。

1 个答案:

答案 0 :(得分:1)

确保涉及jarsigner的Gradle构建脚本步骤指定要使用的算法。

使用jarsigner对.apk文件进行签名的Gradle任务的一部分可能如下所示:

ant.signjar(jar: packageRelease.outputs.files.singleFile,
                alias: 'keyStoreAlias',
                keystore: file('../keystore/keystore.jks').canonicalPath,
                storepass: 'cCureP@55',
                sigalg: 'SHA1withRSA',
                digestalg: 'SHA1',
                signedjar: outputFile.canonicalPath)

关键是这两个论点:

  • sigalg:'SHA1withRSA'
  • digestalg:'SHA1'

基于Java 1.6的设备似乎无法理解Java 1.7中jarsigner使用的新默认算法。

Android developer documentation specifies these arguments,但不认为这些参数对于避免此类安装/更新错误至关重要。

以下是文档部分的片段,向您展示了手动签署应用的步骤:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
-keystore my-release-key.keystore my_application.apk alias_name