INSTALL_PARSE_FAILED_NO_CERTIFICATES,以及Android API级别、Gradle的 JVM、项目SDK与 Gradle版本之间的关系?

移动开发 2026-07-11

我发现一个规律:Gradle JVM的版本越高(Settings -> Build Tool -> Gradle -> Gradle JVM),项目SDK的版本越高(File -> Project Structure -> Projects -> SDK),以及Gradle版本(gradle/wrapper/gradle-wrapper.properties -> distributionUrl),在较低的Android API级别上我遇到的错误就越多,尤在以调试模式安装时尤为明显。错误如下:

INSTALL_PARSE_FAILED_NO_CERTIFICATES

我正在尝试在Android 10(API 29)上安装。
在API 35、模拟器上安装时并没有报错。

gradle jvm = Eclipse Temurin 23.0.2

project sdk = jbr-21 (JetBrains Runtime 21.0.10)

gradle version = gradle-8.13-bin.zip

该应用具有 minSdk = 28,以及 compileSdk = 36

那么,为什么在较低版本的Android上会出现这个错误?针对较低API级别设备开发应用的解决方案是什么?

编辑:
下面是新建项目或APK的示例,以前该APK尚未在设备上安装。
下面是apksigner的命令及输出:

# /home/USER/Android/Sdk/build-tools/36.1.0/apksigner verify --print-certs -v app-debug.apk 
WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::loadLibrary has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/home/USER/Android/Sdk/build-tools/36.1.0/lib/apksigner.jar)
WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled

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
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
Signer #1 certificate DN: C=US, O=Android, CN=Android Debug
Signer #1 certificate SHA-256 digest: 33745668762351c50725698551ee8bb9690428060c4ecc45b4ec49bfe871b7ce
Signer #1 certificate SHA-1 digest: 7d9548b267d7ab7cb8cdcc6f1ed30f456203d266
Signer #1 certificate MD5 digest: b6ad7139b6e2e9efa7605b9e75758656
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 3167ebe08fb93f9f2b223c41b79abf5c700bc6a104718b6f9335f48bd33ef90b
Signer #1 public key SHA-1 digest: 73029037835e757e16c27c3fb71613e6014a8408
Signer #1 public key MD5 digest: 40117949b7e2ab977b54dd55ef9aca9c

在使用adb安装时:

# adb install app-debug.apk 
Performing Streamed Install
adb: failed to install app-debug.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl1581536238.tmp/base.apk using APK Signature Scheme v2: SHA-256 digest of contents did not verify]

解决方案

错误信息 SHA-256 digest of contents did not verify 表示APK在签名后已被修改。

常见的嫌疑源通常是某个杀毒软件,它会试图从APK/ZIP中“清理”掉某些东西。不过,由于在模拟器上安装没有问题,这个问题源头不太可能是它。

仅有一台物理设备受影响,我猜是使用了有缺陷的USB数据线。这类线缆在安装过程中可能会翻动一些位,从而修改APK。最终Android设备在校验签名时会发现签名与内容不匹配,从而抛出错误。有趣的是,高层次的错误类型却是 INSTALL_PARSE_FAILED_NO_CERTIFICATES。我本来预计会看到像“无效签名”之类的专门错误,或类似的,但不是“no certificates”错误。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章