Android Studio 4.2/4.2.1生成签名bundle勾选记住密码仍验证失败
问题原因
- Android Studio 4.2 ~ 4.2.1 版本存在已知的签名密码存储适配bug,该版本开始默认使用系统凭据管理器存储签名密码,Windows平台下该适配存在读取异常,第二次构建时读取到的记住密码会出现解析错误,导致密码校验失败。
- 配套的Android Gradle Plugin 4.2.0版本存在签名任务密码传参逻辑缺陷,缓存的密码不会被正确传入二次构建的签名任务,也会触发该错误。
解决方案
- 临时解决方案:每次生成签名Bundle时手动输入密码,不勾选「记住密码」选项,可规避密码读取错误的问题。
- 持久化签名配置方案:将签名信息存入
local.properties文件,通过构建脚本自动读取配置完成签名,无需手动输入密码,操作步骤如下:- 把
local.properties加入项目的.gitignore文件,避免敏感信息提交到代码仓库 - 在项目根目录的
local.properties文件中添加如下配置,替换为你自己的签名信息:
keystore.path=D\:\\Android Studio Projects\\acme\\app\\my-release-key.keystore keystore.password=你的密钥库密码 key.alias=acme_alias_name key.password=你的密钥密码- 在app模块的
build.gradle文件中添加读取配置的逻辑,在android代码块中新增签名配置:
配置完成后直接执行android { // 读取本地配置 def localProperties = new Properties() def localPropFile = rootProject.file("local.properties") if (localPropFile.exists()) { localProperties.load(new FileInputStream(localPropFile)) } signingConfigs { release { storeFile file(localProperties["keystore.path"]) storePassword localProperties["keystore.password"] keyAlias localProperties["key.alias"] keyPassword localProperties["key.password"] } } buildTypes { release { // 绑定release构建的签名配置 signingConfig signingConfigs.release // 原有其他配置保持不变 minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } // 原有其他配置保持不变 }bundleRelease任务即可自动完成签名,不会出现密码验证失败的问题。 - 把
- 版本降级方案:将Android Gradle Plugin版本降级到4.1.3,同时将
gradle-wrapper.properties中的Gradle版本修改为6.5,可直接修复该问题。 - 版本升级方案:升级Android Studio到Arctic Fox (2020.3.1) 及以上正式版本,该bug在后续版本已被官方修复,升级后可正常使用记住密码功能。
内容的提问来源于stack exchange,提问作者C.B.
相关产品推荐
相关产品推荐

