Android Asset Packaging Tool(aapt
)は、最新リリースで非常に厳格になり、すべてのAndroidバージョンで使用されるようになりました。取得しているaapt-errorは、非位置形式指定子を許可しなくなったために生成されます。
リソース文字列に%記号を含める方法のいくつかのアイデアを次に示します。
文字列にフォーマット指定子や置換が必要ない場合は、formatted
属性を使用して次のように設定するだけfalse
です。
<string formatted="false">%a + %a == 2%a</string>
この場合、文字列はのフォーマット文字列として使用されないFormatter
ため、%記号をエスケープする必要はありません。結果の文字列は「%a +%a == 2%a」です。
属性を省略するformatted="false"
と、文字列はフォーマット文字列として使用され、%記号をエスケープする必要があります。これはdouble-%で正しく行われます。
<string>%%a + %%a == 2%%a</string>
これでエラーは発生しませんが、使用方法によっては、フォーマット引数なしでaapt
aが呼び出された場合、結果の文字列は "%% a + %% a == 2%%a"になる可能性があります。Formatter
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とコードがないと、問題が正確に何であるかを言うのは困難ですが、うまくいけば、これがメカニズムをもう少しよく理解するのに役立ちます。