持有.keystore及密码缺失JKS 能否生成合法签名APK
报错根因澄清
你遇到的报错核心原因是打包配置中填写的密钥库文件路径不存在,和缺少JKS文件无关:
Execution failed for task ':app:validateSigningRelease'.
Keystore file '<location_here>' not found for signing config 'externalOverride'.
.keystore与.jks都属于Java密钥库的标准存储格式,二者完全可以通用,不需要额外生成新的JKS文件,只需修正配置即可解决问题。
验证现有密钥库可用性
首先确认你手上的.keystore文件未损坏,终端执行如下命令:keytool -list -v -keystore 你的.keystore文件本地路径
输入keystore密码后如果能正常输出别名、证书有效期等信息,说明文件本身有效,你手上的.dms文件在此场景下无需使用。
修正打包签名配置
按你使用的打包方式选择对应修正方案:
- Android Studio图形界面打包:
依次点击Build > Generate Signed Bundle / APK,在签名配置步骤点击Key store path右侧的「Choose existing」按钮,手动选中本地的.keystore文件,再依次输入keystore密码、alias、alias密码,正常走打包流程即可,无需修改文件后缀为.jks。 - Gradle命令行打包:
两种配置方式二选一即可:- 在项目根目录的
local.properties文件中添加正确配置:
再执行打包命令store.file=你的.keystore文件本地绝对路径 store.password=keystore密码 key.alias=签名alias key.password=alias对应密码./gradlew assembleRelease即可。
2. 执行打包命令时直接传入签名参数:./gradlew assembleRelease -Pandroid.injected.signing.store.file=你的.keystore文件绝对路径 -Pandroid.injected.signing.store.password=keystore密码 -Pandroid.injected.signing.key.alias=签名alias -Pandroid.injected.signing.key.password=alias对应密码 - 在项目根目录的
如果配置路径正确仍报错,检查路径是否包含中文、空格、特殊字符,Windows系统需注意路径分隔符是否转义正确,建议将.keystore文件放到项目根目录使用相对路径配置,降低出错概率。
可选:.keystore转.jks格式(非必须)
如果你确实需要JKS格式的密钥库,可直接用现有文件转换,无需重新生成,转换后原有签名信息完全一致:keytool -importkeystore -srckeystore 原文件.keystore -srcstoretype JKS -destkeystore 输出文件.jks -deststoretype JKS
按提示输入对应密码即可完成转换。
内容的提问来源于stack exchange,提问作者NullHypothesis

