• 新版本的AndroidStudio生产签名文件打包失败


    最近在创建新项目的时候,使用AS生产新的签名并打包时,打包失败,一开始报签名格式问题,查了一下,有的说要迁移到行业标准格式PKCS12,但是试了一下还是报错,再次查资料发现是JDK版本问题,不过还有报这个错的:

    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 

    这是因为在jdk11环境导致的。在jdk11的环境下,使用AS生成签名文件对App进行签名,但是再进行签名时报出 Algorithm HmacSHA256 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以及签名文件,在这之后我也对本地签名进行了行业标准格式PKCS12迁移,打包就可以了,以此作为记录,如有遇到的朋友,可以照此方法解决

          
    参考这位博主的文章,原文链接:https://blog.csdn.net/HaveFun_Wine/article/details/129836042

  • 相关阅读:
    Let the Flames Begin(约瑟夫环)
    React学习--- 组件
    牛客NC221 集合的所有子集(二)【中等 深度优先,子集,排列组合 C++/Java/Go/PHP】
    Matlab通信仿真系列——信号处理函数
    RabbitMQ--基础--01--介绍
    java使用 TCP 的 Socket API 实现客户端服务器通信
    SR-LIO--手写紧耦合IESKF
    PMP_第9章章节试题
    Linux进程概念(二)--进程状态&进程优先级
    每天五分钟机器学习:函数间隔与几何间隔以及平行和重合的问题
  • 原文地址:https://blog.csdn.net/qq_22225183/article/details/136364150