如何在app/build.gradle的signingConfig中设置含$符号的storePassword
密钥库密码含$符号时的build.gradle签名配置处理方法
当密钥库密码包含$符号(如test$app)时,直接在signingConfig中写入会因为Groovy/Kotlin的字符串插值规则解析错误,需要通过以下方式处理:
Groovy DSL 写法
Groovy中$是变量引用标识,可通过两种方式保留$:
- 用单引号包裹密码:单引号字符串不会解析变量,
$会被当作普通字符 - 用反斜杠转义
$:双引号字符串中,\$会保留$符号
示例代码:
android { signingConfigs { release { storeFile file("your-keystore.jks") storePassword 'test$app' // 单引号写法,无需转义 keyAlias 'your-key-alias' keyPassword "test\$app" // 双引号写法,转义$ } } buildTypes { release { signingConfig signingConfigs.release // 其他构建配置 } } }
Kotlin DSL 写法
Kotlin中同样需要避免$被解析为变量,可选两种方式:
- 用三引号原始字符串:
""" """包裹的字符串不会解析任何转义字符,直接保留$ - 用反斜杠转义
$:普通双引号字符串中,\$表示保留$
示例代码:
android { signingConfigs { create("release") { storeFile = file("your-keystore.jks") storePassword = """test$app""" // 原始字符串写法,无需转义 keyAlias = "your-key-alias" keyPassword = "test\$app" // 转义$写法 } } buildTypes { release { signingConfig = signingConfigs.getByName("release") // 其他构建配置 } } }
核心原理
Groovy和Kotlin的字符串解析逻辑中,$用于标识变量插值(如"Hello $name"会把name变量值插入字符串)。直接写入带$的密码会导致$后的内容被当作变量名,最终解析出错误的密码。上述方法通过改变字符串解析规则,让$作为普通字符保留在密码中。
内容的提问来源于stack exchange,提问作者sejn
相关产品推荐
相关产品推荐

