为什么我在为APK执行"jarsigner -verify -verbose -certs"时会"no manifest."和"jar is unsigned."



我的一个Android项目正在生成未签名的APK。我正在使用下面提供的配置,然后验证生成的APK。我确信Gradle正在使用我提供的密钥库文件,因为我尝试更改路径和密码,但构建失败了。

APK根本没有签名

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.

从build.gradle签名

对于上下文,我这样签名:

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+上的所有安卓设备都支持该方案;v1方案";(即jar签名(。V2方案完全独立于jar签名,这就是为什么jarsigner认为APK是未签名的。如果你使用apksigner(在Android工具中提供(,那么你可以检查你的APK是否正确签名。

问题正如@Pierre昨天发布的那样-minSdk版本是30,因为它是>23-默认情况下,它使用v2/v3签名方案。

为了最大限度地兼容,我们决定根据android.com的建议使用多种签名方案。

app/build.gradle的修复就这么简单——我们已经将v1SigningEnabledv2SigningEnabled设置为true。像这样:

signingConfigs {
release {
storeFile file('...')
storePassword '...'
keyAlias '...'
keyPassword '...'
v1SigningEnabled true
v2SigningEnabled true
}
}

相关内容

最新更新