使用resValue从build.gradle生成包含%的字符串资源

Gra*_*and 6 xml android escaping android-gradle-plugin

我的build.gradle中有一个自定义任务,它会生成一些字符串资源:

android.defaultConfig.resValue "string", "my_string", "Some Value"
Run Code Online (Sandbox Code Playgroud)

这一切都很好:字符串在generated.xml中正确显示,可以通过getResources().getString(R.id.my_string)应用程序代码访问.

当其中一个字符串包含%符号时,它不起作用.它给出了这个错误:

错误:(1)以非位置格式指定的多个替换; 你的意思是添加formatted ="false"属性?

我从Android XML百分比符号中了解到,对于strings.xml中的字符串资源,通常会解决此问题,方法是提供额外formatted="false"属性,如下所示:

<string formatted="false">My string with a % symbol</string>
Run Code Online (Sandbox Code Playgroud)

在构建脚本中formatted="false"使用生成字符串时如何包含属性resValue

(我也按照建议尝试使用double-%进行转义,但这会导致%%出现在最终字符串中.)

Gra*_*and 2

我通过%在 gradle 任务中的字符串生成时用双转义的 unicode 值替换原始符号来解决这个问题。

android.defaultConfig.resValue "string", "my_string", \
    "String with a % symbol".replaceAll("%","\\\\u0025")
Run Code Online (Sandbox Code Playgroud)