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' formatted
attribut 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 Formatter
afin 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>
aapt
Ne 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 Formatter
est 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.