I've run into this as well. There are two ways to escape a literal percent symbol in XML string resources.

For your case (a string with parameters, e.g. %1$s) you should use %% to escape the percent symbol literal.

If your string does not have parameters, then you should use \u0025 to escape the literal percent symbol.

If you use %%in a string without parameters, then getString() will resolve it as a literal %% instead of escaping it. If you use \u0025 in a string with parameters, then getString() will crash trying to treat that % as a format parameter.

Email codedump link for Use Placeholder with % sign in string.xml for String.format()