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

Users receive “Package file was not signed correctly” on older Android devices upon Google Play Store update

在尝试安装 Android 更新时,用户收到错误消息 "Package file was not signed correctly." 具体来说,只有使用较旧 Android OS 设备的用户才会遇到此错误版本。

已从当前生产应用程序版本更新为更新的生产应用程序。没有涉及开发设备、侧加载等。

新版本应用程序编译 API > 21,因此需要 Java 1.7.

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

确保涉及 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)

关键是这两个参数:

  • 信号:'SHA1withRSA'
  • 摘要:'SHA1'

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

Android developer documentation specifies these arguments,但并未将这些参数视为避免此类 installation/update 错误的关键。

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

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