You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android build.gradle读取gradle.properties中$符号属性如何转义

问题原因

Gradle 解析 gradle.properties 时默认会将 $ 识别为变量插值的占位符,你配置的 Pa$$word! 会被自动处理为 Pa$word!,和实际密码不匹配,就会出现Cannot recover key报错。而硬编码时用单引号包裹字符串,Groovy 不会执行插值处理,密码可以正常匹配。

解决方案

方案1:转义 gradle.properties 中的 $ 符号

每个 $ 前添加反斜杠 \ 做转义即可,修改后的配置如下:

com_example_storePassword=Pa\$\$word!
com_example_keyPassword=Pa\$\$word!
com_example_keyAlias=alias
com_example_storeFile=/Users/example/Documents/keystores/example/keystore

修改后直接在 build.gradle 中正常引用属性即可拿到正确的密码。

方案2:手动加载 properties 文件跳过自动插值

如果不想修改原 properties 文件的内容,可以在 build.gradle 中用 Java 原生的 Properties 类加载文件,原生加载逻辑不会处理 $ 插值,会直接读取原始字符串:

// 手动加载gradle.properties
def rawProps = new Properties()
file("${rootProject.rootDir}/gradle.properties").withInputStream { inputStream ->
    rawProps.load(inputStream)
}

android {
    signingConfigs {
        release {
            storePassword rawProps.getProperty("com_example_storePassword")
            keyPassword rawProps.getProperty("com_example_keyPassword")
            keyAlias rawProps.getProperty("com_example_keyAlias")
            storeFile file(rawProps.getProperty("com_example_storeFile"))
        }
    }
}
验证方法

可以添加一个测试任务打印实际读取到的属性值,确认密码是否匹配:

task printSigningPassword {
    doLast {
        println "实际读取的storePassword:${com_example_storePassword}"
        println "实际读取的keyPassword:${com_example_keyPassword}"
    }
}

执行 ./gradlew printSigningPassword 即可查看输出,确认输出内容为 Pa$$word! 就说明配置正确。

内容的提问来源于stack exchange,提问作者Sam Liddle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:48:05