我有一个包含两个包
com.example.package
和com.other.package
的应用程序。我在build.gradle中的配置如下:
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.package"
minSdkVersion 18
targetSdkVersion 30
我构建了一个未签名的发布版本。然后我用
签名jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystore> <OUTPUT> <ALIAS>
我从中获得的构建在除 Android 11 之外的所有版本上都运行良好。 在 android 11 上,当我安装应用程序时,出现以下错误:
adb: failed to install ginger-uk.apk: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
所以我尝试压缩对齐 APK 并安装,但随后我在 Android 11 上收到以下错误:
App not installed error
然后,我在基于某些 stackoverflow 解决方案进行签名之前尝试先进行 zipalign,但在 Android 11 上出现以下错误:
adb: failed to install ginger-uk.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package com.other.package]
我的问题是有人成功签署了 Android 11 及以下版本的 APK 吗?你如何做到这一点?
这可能与:Android 11 不再支持 APK 签名方案 v1 相关。现在必须使用 APK 签名方案 v2 或更高版本对 apk 进行签名。 请参阅此链接了解更多信息:https://developer.android.com/about/versions/11/behavior-changes-11#minimum-signature-scheme
我解决了这个问题,问题是使用
resources.arsc
后,BAD
是jarsigner
,所以我对齐拉链,然后使用apksigner
签名。这解决了这个问题(至少对我来说)。
对于使用 MS AppCenter 进行构建的用户,您需要删除并重做构建配置,包括重新上传密钥库文件。 您可以通过查看日志来检查使用的签名是否正确
Task : Android signing
Description : Sign and align Android APK files
Version : 3.193.0 <-- must be larger than 1.x
来源:https://github.com/microsoft/appcenter/issues/1990#issuecomment-861053082
Google 对此进行了记录。如果您使用 apksigner,那么您需要 zipalign,然后对 APK 进行签名。
https://developer.android.com/studio/command-line/apksigner
警告:如果您使用 apksigner 签署 APK 并进行进一步更改 对于APK,APK的签名无效。因此,您必须 在签署 APK 之前使用 zipalign 等工具。