ITmob-Ly
发布于 2022-08-18 / 689 阅读
0

Android APK签名问题 - Missing META-INF/MANIFEST.MF

APK Signature Scheme

# 使用 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