Android Asset Packaging Tool ( aapt
) se ha vuelto muy estricta en su última versión y ahora se usa para todas las versiones de Android. El error aapt que está recibiendo se genera porque ya no permite especificadores de formato no posicionales .
Aquí hay algunas ideas sobre cómo puede incluir el símbolo% en sus cadenas de recursos.
Si no necesita ningún especificador de formato o sustituciones en su cadena, simplemente puede hacer uso del formatted
atributo y establecerlo en false
:
<string formatted="false">%a + %a == 2%a</string>
En este caso, la cadena no se usa como una cadena de formato para Formatter
que no tenga que escapar de sus% -symbols. La cadena resultante es "% a +% a == 2% a".
Si omite el formatted="false"
atributo, la cadena se usa como una cadena de formato y debe escapar de los símbolos%. Esto se hace correctamente con double-%:
<string>%%a + %%a == 2%%a</string>
Ahora aapt
no le da errores, pero dependiendo de cómo lo use, la cadena resultante puede ser "%% a + %% a == 2 %% a" si Formatter
se invoca sin ningún argumento de formato :
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"
Sin ningún código y xml es difícil decir cuál es exactamente su problema, pero espero que esto lo ayude a comprender un poco mejor los mecanismos.