You need to enable JavaScript to run this app. 构建APK报错:生成已签名Android应用包时提示Algorithm HmacPBESHA256不可用
优惠活动
大模型
产品
解决方案
定价
更多

构建APK报错:生成已签名Android应用包时提示Algorithm HmacPBESHA256不可用

Execution failed for task ':app:packageRelease'.
A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
com.android.ide.common.signing.KeytoolException: Failed to read key 1 from store "/Users/KDApps/Documents/KDApps/original-signing-keystore.jks": Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available

错误根源

该报错是不同JDK版本对JKS密钥库的默认完整性校验算法支持不一致导致的:JDK 9及更高版本创建的JKS密钥库默认使用HmacPBESHA256做完整性校验,而JDK 8及更低版本没有内置该算法,直接读取就会触发上述错误。你提到的SHA1withRSA是APK的签名算法,和本次报错无关。


解决方案

方案1:临时适配(无需修改原有密钥库)

直接将Android Studio的构建JDK版本切换为和生成密钥库时一致的版本即可,操作步骤:

  • 打开Android Studio,依次进入File > Settings > Build, Execution, Deployment > Build Tools > Gradle(Mac系统路径为Android Studio > Settings > Build, Execution, Deployment > Build Tools > Gradle)
  • 在Gradle JDK下拉选项中选择匹配的JDK版本,若密钥库是JDK 8生成的就选JDK 8,是高版本JDK生成的就选对应版本的JDK
  • 同步Gradle后重新执行打包签名操作

方案2:转换密钥库格式,永久兼容所有JDK版本

如果需要在不同JDK环境下都能正常读取密钥库,可通过keytool命令转换密钥库格式,操作前务必先备份原有密钥库,步骤如下:

  1. 使用生成原有密钥库的JDK版本,执行命令导出密钥库内容为PKCS12格式:
keytool -importkeystore -srckeystore 你的原密钥库路径.jks -destkeystore 临时导出文件路径.p12 -deststoretype PKCS12

执行时按提示输入原密钥库密码、目标p12文件的密码(可与原密码保持一致)
2. 使用JDK 8执行命令,将PKCS12格式内容导入为新的兼容格式JKS密钥库:

keytool -importkeystore -srckeystore 临时导出文件路径.p12 -srcstoretype PKCS12 -destkeystore 新密钥库路径.jks -deststoretype JKS -storepass 你要设置的新密钥库密码
  1. 替换项目中原有配置的密钥库为新生成的JKS文件,同步Gradle后重新打包即可。转换后的密钥库签名与原密钥库完全一致,不会影响Google Play的应用更新校验。

内容的提问来源于stack exchange,提问作者KDApps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 05:27:03