我的 Android 项目之一正在生成未签名的 APK。我正在使用下面提供的配置,然后验证生成的 APK。 我确定 Gradle 正在使用我提供的密钥库文件,因为我尝试更改路径和密码,但构建失败了。
jarsigner -verify -verbose -certs /Users/viliuskraujutis/.../path-to-newly-created.apk
输出是这样的:
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
no manifest.
jar is unsigned.
对于上下文,我这样签名:
android {
...
signingConfigs {
release {
storeFile file("my-key-used-in-other-successful-project.keystore")
storePassword "my-password-used-in-other-successful-project"
keyAlias "my-alias-used-in-other-successful-project"
keyPassword "my-password-used-in-other-successful-project"
}
}
您的 minSdkVersion 可能为 24 或更高。如果是这种情况,那么 AGP 将使用一种更高效的签名方案,称为“V2 签名”,并且由于 24+ 上的所有 Android 设备都支持此方案,因此不再需要使用“v1 方案”进行签名(即 jar 签名)。 V2 方案完全独立于 jar 签名,这就是 jarsigner 认为 APK 未签名的原因。如果您使用
apksigner
(Android 工具中提供),那么您可以检查您的 APK 是否确实已正确签名。
问题正如 @Pierre 昨天发布的那样 - minSdk 版本是 30,并且由于它 >23 - 它默认使用 v2/v3 签名方案。
为了获得最大兼容性,我们决定根据 android.com 的建议使用 多重签名方案。
解决
app/build.gradle
的问题就这么简单 - 我们将 v1SigningEnabled 和 v2SigningEnabled 设置为 true。像这样:
signingConfigs {
release {
storeFile file('...')
storePassword '...'
keyAlias '...'
keyPassword '...'
v1SigningEnabled true
v2SigningEnabled true
}
}
在本机反应中
当我尝试在 mseva 那个时间段部署或上传应用程序时,我收到错误或问题
解决办法是添加
v1SigningEnabled true
v2SigningEnabled true
验证运行您的 apk 所在的位置
jarsigner -verify -verbose -certs app-YOURAppName-release.apk