Flutter构建APK失败,报错HmacPBESHA256算法不存在如何解决?
问题根因
本次打包失败的核心原因是签名密钥文件(jks)使用的加密算法与当前Android打包环境的JDK版本不兼容:高版本JDK生成jks文件时默认采用的HmacPBESHA256算法,在低于JDK 11的运行环境中不存在,导致签名校验失败。开头的path_provider相关提示属于编译警告,和本次打包失败无关。
解决方案
可根据自身情况选择以下任意一种方案解决:
- 方案1:生成新的兼容格式签名密钥
如果可以更换签名密钥,执行keytool命令时指定兼容算法参数即可,完整命令参考:
keytool -genkey -v -keystore upload_signing.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload -sigalg SHA1withRSA
按照提示完成密钥生成后,替换项目中原有的jks文件即可。
- 方案2:转换现有密钥为兼容格式
如果不想更换已有签名密钥,可直接执行命令转换现有jks文件:
keytool -importkeystore -srckeystore upload_signing.jks -destkeystore upload_signing_compat.jks -deststoretype jks
按照提示输入原有密钥密码完成转换后,将项目中引用的签名文件替换为新生成的upload_signing_compat.jks即可。
- 方案3:统一打包JDK版本
将项目的Gradle运行JDK版本升级到11及以上,和生成jks时使用的JDK版本保持一致:打开Android Studio的设置页面,进入Build, Execution, Deployment > Build Tools > Gradle,在Gradle JDK选项中选择11及以上版本,同步项目后重新打包即可。
验证操作
修改完成后可依次执行以下命令重新打包:
flutter clean flutter build apk --release
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

