AS对APK签名失败

问题背景

在jdk11的环境下,使用AS生成签名文件对App进行签名,但是再进行签名时报出 Algorithm HmacSHA256 not available 的异常。

报错日志

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 key0 from store "E:\...\analysis.jks": Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available

解决过程

单纯从日志观察是无法从AS生成的签名密钥存储文件(analysis.jks)中获取签名密钥(key0),而出现这个问题的原因是 HmacSHA256 这个算法不可用。

所以根本的原因就是 HmacSHA256 这个算法的问题,那么为什么这个算法不可用呢?

在网上看到相关的资料时怀疑可能是JDK版本的问题(网上的解释是JDK11中 HmacSHA256 这个算法不存在),推荐将JDK版本进行回退到1.8版本或者升级到16版本。但是我这边项目由于依赖问题无法将JDK版本进行升级或者回退。当然我也将回退方法贴出来...

但是有一点很奇怪的事儿,我在JDK11的环境上对其他项目(存在签名密钥存储文件)进行编译出包是正常的。所以我怀疑出现这个问题可能是AS生成的签名密钥存储文件导致的。

所以我就本地生成了一个密钥存储文件,没想到问题就解决了...

说明:

  • 生成密钥文件的命令

keytool -genkeypair -alias key0 -keyalg RSA -keysize 2048 -validity 100000 -keystore analysis.jks

-genkeypair --- 产生密钥

-alias key0 --- 密钥的别名 key0

-keyalg RSA --- 使用RSA算法对签名文件进行加密

-keysize 2048 --- 密钥文件的大小为 2048

-validity 100000 --- 生成的签名文件的有效期为100000天

-keystore analysis.jks --- 生成签名文件的存放路径(自定义)

  • 对Apk进行签名

jarsigner -verbose -keystore analysis.jks -signjar app-debug-sign.apk app-debug.apk analysis.jks

-verbose --- 输出详细信息

-keystore analysis.jks ---签名过程中使用的签名文件(注意使用key的绝对路径)

-signjar app-debug-sign.apk app-debug.apk analysis.jks --- 正式签名,三个参数依次为签名后的apk,待签名的apk以及签名文件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值