Android Studio 3.0生成v1签名失败报错求助(Gradle构建异常)
我之前也遇到过几乎一模一样的问题——在Windows 10 X64搭配JDK 8 X64、Android Studio 3.0的环境下,项目刚创建时一切正常,运行一段时间后突然炸出Gradle构建失败,报错链和你完全一致:
Information:Gradle tasks [:app:assembleDebug]
Error:org.gradle.tooling.BuildException: Failed to generate v1 signature
Error:java.io.IOException: Failed to generate v1 signature
Error:java.security.InvalidKeyException: Failed to sign using signer "CERT"
Error:java.security.InvalidKeyException: Failed to sign using SHA1withDSA
Error:java.security.InvalidKeyException: The security strength of SHA-1 digest algorithm is not sufficient for this key size
Information:BUILD FAILED in 1s
5 errors 0 warnings
问题根源
这个错误的核心是JDK 8默认的加密策略限制:当你的签名密钥大小超过一定阈值时,SHA-1的安全强度已经不足以满足JDK的签名要求,而JDK 8自带的加密策略文件对密钥强度做了限制,导致签名流程直接失败。
可行解决方案(按优先级排序)
1. 替换JDK的无限制加密策略文件(最直接见效)
JDK 8默认带的是受限加密策略,我们需要替换成无限制版本:
- 找到你的JDK安装目录,进入
jre/lib/security文件夹 - 备份原有的
local_policy.jar和US_export_policy.jar两个文件 - 下载对应JDK 8版本的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files(注意要匹配JDK 8的小版本)
- 将下载的两个jar文件替换到
jre/lib/security目录中 - 重启Android Studio,重新执行Gradle构建
2. 调整签名配置,改用更安全的签名算法
如果不想替换策略文件,可以直接修改项目的签名规则,放弃SHA-1改用SHA-256这类符合安全强度要求的算法:
打开项目模块下的build.gradle(也就是build.gradle(Module: app)),在signingConfigs块中指定签名算法:
signingConfigs { debug { // 如果你是debug签名出问题,修改这里;release签名报错则修改release块 keyAlias 'your_debug_alias' keyPassword 'your_debug_pwd' storeFile file('your_debug_keystore.jks') storePassword 'your_store_pwd' v1SigningEnabled true v2SigningEnabled true // 指定更安全的签名算法 signingAlgorithms = ["SHA256withRSA"] } }
同步Gradle后重新执行构建即可。
3. 升级JDK版本(长期解决方案)
JDK 8的安全策略在后续版本中已经做了调整,升级到JDK 11或更高版本(注意Android Studio 3.0对JDK 11有兼容支持),可以从根源上避免这类加密强度不匹配的问题。
验证方式
修改完成后,在终端执行gradlew.bat assembleDebug --stacktrace(Windows环境),如果Gradle构建成功,就说明问题已经解决了。
内容的提问来源于stack exchange,提问作者HQuser

