Android 资产打包工具 ( )在其最新版本aapt
中变得非常严格,现在用于所有Android 版本。您收到的 aapt-error 是因为它不再允许使用非位置格式说明符而生成的。
以下是一些如何在资源字符串中包含 %-symbol 的想法。
如果您的字符串中不需要任何格式说明符或替换,您可以简单地使用该formatted
属性并将其设置为false
:
<string formatted="false">%a + %a == 2%a</string>
在这种情况下,字符串不用作格式字符串,Formatter
因此您不必转义 %-symbols。结果字符串是“%a + %a == 2%a”。
如果省略该formatted="false"
属性,则该字符串将用作格式字符串,并且您必须转义 %-symbols。这是用双%正确完成的:
<string>%%a + %%a == 2%%a</string>
现在aapt
不会给您任何错误,但取决于您如何使用它,如果在Formatter
没有任何格式参数的情况下调用 a ,则生成的字符串可以是 "%%a + %%a == 2%%a" :
Resources res = context.getResources();
String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"
String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"
如果没有任何 xml 和代码,很难说出您的问题到底是什么,但希望这可以帮助您更好地理解这些机制。