为什么我收到“无清单”。和“jar 未签名。”为我的 APK 执行“jarsigner -verify -verbose -certs”时

问题描述 投票:0回答:3

我的 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"
        }
    }
apk signing jarsigner
3个回答
5
投票

您的 minSdkVersion 可能为 24 或更高。如果是这种情况,那么 AGP 将使用一种更高效的签名方案,称为“V2 签名”,并且由于 24+ 上的所有 Android 设备都支持此方案,因此不再需要使用“v1 方案”进行签名(即 jar 签名)。 V2 方案完全独立于 jar 签名,这就是 jarsigner 认为 APK 未签名的原因。如果您使用

apksigner
(Android 工具中提供),那么您可以检查您的 APK 是否确实已正确签名。


1
投票

问题正如 @Pierre 昨天发布的那样 - minSdk 版本是 30,并且由于它 >23 - 它默认使用 v2/v3 签名方案。

为了获得最大兼容性,我们决定根据 android.com 的建议使用 多重签名方案

解决

app/build.gradle
的问题就这么简单 - 我们将 v1SigningEnabledv2SigningEnabled 设置为 true。像这样:

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

0
投票

在本机反应中

当我尝试在 mseva 那个时间段部署或上传应用程序时,我收到错误或问题

解决办法是添加

 v1SigningEnabled true
 v2SigningEnabled true

验证运行您的 apk 所在的位置

jarsigner -verify -verbose -certs app-YOURAppName-release.apk
© www.soinside.com 2019 - 2024. All rights reserved.