You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行flutter build apk --split-per-abi提示:app:packageRelease任务失败

问题根因

报错Algorithm HmacPBESHA256 not available的核心原因是生成upload-keystore.jks签名文件时使用的JDK版本过高:JDK 18及以上版本生成jks文件默认采用HmacPBESHA256加密算法,但当前Flutter项目依赖的Android Gradle插件、构建用JDK版本较低,不支持该算法,直接导致签名文件读取失败、release包打包中断。

修复方案

按落地成本从低到高排序,可自行选择:

方案1:重新生成兼容格式的签名文件(优先推荐,无兼容隐患)

注意:如果应用已经上架应用商店,重新生成时填写的密钥别名、签名库密码、密钥密码、主体信息必须和原签名完全一致,否则后续升级包会因签名不匹配无法上架、无法覆盖安装。

  • 切换到JDK 11环境(Android Studio默认自带的JBR runtime就是JDK11,可直接使用,路径一般在Android Studio安装目录的jbr文件夹下)
  • 执行签名生成命令,显式指定兼容的加密算法、存储格式:
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload -storetype JKS
  • 按提示输入对应密码、组织信息后,会在用户根目录生成新的签名文件,覆盖原路径下的旧文件即可
  • 回到项目根目录执行flutter clean清理构建缓存,再运行flutter build apk --split-per-abi即可正常打包

方案2:对齐构建链路的JDK版本(无需重新生成签名)

如果不想改动原有签名文件,可以直接把Gradle构建用的JDK版本切换为生成签名时用的高版本JDK:

  • 打开项目下的android目录,进入Android Studio
  • 依次打开 Settings > Build, Execution, Deployment > Build Tools > Gradle 配置页
  • 将Gradle JDK选项切换为本地安装的JDK 18及以上版本
  • 保存配置后执行flutter clean,重新触发打包即可

方案3:转换现有签名文件的加密格式

如果不想重新填写签名信息,也可以直接对现有jks文件做格式转换:

  • 先在高版本JDK环境下执行命令,把原有jks转成中间p12格式:
keytool -importkeystore -srckeystore ~/upload-keystore.jks -destkeystore ~/upload-temp.p12 -deststoretype PKCS12
  • 按提示输入原签名库密码完成转换
  • 切换回JDK11环境,把p12文件转回兼容的JKS格式:
keytool -importkeystore -srckeystore ~/upload-temp.p12 -srcstoretype PKCS12 -destkeystore ~/upload-keystore-fixed.jks -deststoretype JKS
  • 用生成的upload-keystore-fixed.jks替换原签名文件,保持android/app/build.gradle里的签名配置不变即可
避坑提示
  • 正式发布用的签名文件不要用JDK 18+版本默认参数生成,目前绝大多数稳定版AGP对HmacPBESHA256算法的兼容支持不完善
  • 签名文件务必多备份,一旦丢失没有任何办法找回,会直接导致应用无法正常迭代上架

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:30:39