# 使用 apksigner 验证 APK 时报错:
> apksigner verify --verbose --print-certs app-unsigned.apk
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
> apksigner verify --verbose --print-certs app-min-sdk-21.apk
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
或
# 将 APK 发布到 Playstore 时报错:
Error from apksigner: ERROR: JAR_SIG_NO_MANIFEST: Missing META-INF/MANIFEST.MF
原因是 APK 没有签名,或者项目的最低SDK版本低于24(minSdk < 24)但是签名时只使用了 v2 方案。
如果仅使用 v2 签名方案,原因是 v2 是在 Android 7.0 (SDK 24) 中引入的,
因此,如果你的目标是 minSdkVersion
23 或以下,则需要使用签名方案 v1 和 v2(或仅 v1),因为如果应用安装在 Android 6.0 或更低版本上,只能通过 v1 方案进行验证。
如果你的目标是 minSdkVersion
24 或更高版本,那么可以单独使用 v2,因为该应用程序不会安装在低于Android 7.0的设备上。
只使用 v2 签名而且minSDK小于24的APK使用 apksigner
验证时也报错。
如果仍然希望查看验证信息,可以指定 -min-sdk-version
参数 。
> apksigner verify --verbose --print-certs app-min-sdk-21.apk
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
> apksigner verify --verbose --print-certs -min-sdk-version 24 app-min-sdk-21.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): false
# 如果 minSDK 大于或等于24,只使用v2签名没有问题
> apksigner verify --verbose --print-certs app-min-sdk-24.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): false