我的一个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
的修复就这么简单——我们已经将v1SigningEnabled和v2SigningEnabled设置为true。像这样:
signingConfigs {
release {
storeFile file('...')
storePassword '...'
keyAlias '...'
keyPassword '...'
v1SigningEnabled true
v2SigningEnabled true
}
}