L'outil Android Asset Packaging Tool ( aapt) est devenu très strict dans sa dernière version et est maintenant utilisé pour toutes les versions d'Android. L'erreur aapt que vous obtenez est générée car elle n'autorise plus les spécificateurs de format non positionnels .
Voici quelques idées sur la façon dont vous pouvez inclure le symbole% dans vos chaînes de ressources.
Si vous n'avez pas besoin de spécificateurs de format ou de substitutions dans votre chaîne, vous pouvez simplement utiliser l' formattedattribut et le définir sur false:
<string formatted="false">%a + %a == 2%a</string>
Dans ce cas, la chaîne n'est pas utilisée comme chaîne de format pour le Formatterafin que vous n'ayez pas à échapper à vos symboles%. La chaîne résultante est "% a +% a == 2% a".
Si vous omettez l' formatted="false"attribut, la chaîne est utilisée comme chaîne de format et vous devez échapper aux symboles%. Cela se fait correctement avec double-%:
<string>%%a + %%a == 2%%a</string>
aaptNe vous donne maintenant aucune erreur mais selon la façon dont vous l'utilisez, la chaîne résultante peut être "%% a + %% a == 2 %% a" si a Formatterest invoqué sans aucun argument de format :
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"
Sans aucun XML et code, il est difficile de dire quel est exactement votre problème, mais j'espère que cela vous aidera à mieux comprendre les mécanismes.