メニュー項目のタイトルに使用する文字列にタグを含める<xliff:g>
と、メニュー項目を選択すると、リリース ビルドで次のようなクラッシュが発生します。
java.lang.IllegalArgumentException: Invalid payload item type
at android.util.EventLog.writeEvent(EventLog.java)
at android.app.Activity.onMenuItemSelected(Activity.java:2610)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(SourceFile:372)
at android.support.v7.app.ActionBarActivity.superOnMenuItemSelected(SourceFile:244)
at android.support.v7.app.ActionBarActivityDelegateICS.onMenuItemSelected(SourceFile:164)
at android.support.v7.app.ActionBarActivity.onMenuItemSelected(SourceFile:130)
at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onMenuItemSelected(SourceFile:308)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1059)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
at android.widget.AdapterView.performItemClick(AdapterView.java:301)
at android.widget.AbsListView.performItemClick(AbsListView.java:1287)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3078)
at android.widget.AbsListView$1.run(AbsListView.java:4161)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(NativeStart.java)
この問題について同様の質問を見てきましたが、これはコミットによって修正された Android ( https://stackoverflow.com/a/23125023332944f8a0a001c1754ce3298edbb4246e53c8fb
) のバグであることがわかりました。
<xliff:g>
Android 4.0.4 デバイスの問題を調査しているときに、開発ビルド中に、メニュー項目のタイトル文字列にタグを含めるとクラッシュが発生しないことを発見しましたが、リリース ビルド中には発生します。などの HTML マークアップを<b>
メニュー項目のタイトルに追加すると、開発ビルドとリリース ビルドの両方でクラッシュが発生します。
翻訳目的でメニュー項目のタイトル文字列にタグを含めているので<xliff:g>
、そこに残しておきたいと思います。クラッシュが開発ビルドで発生しないという事実は、リリース ビルドの問題の回避策があることを願っています。
<xliff:g>
リリースビルド中に実行されない開発ビルド中に文字列からタグを削除するために行われる何らかの処理はありますか? それとも何か他のことが起こっていますか?
アップデート
リリース ビルドを 2 回実行してもクラッシュしないことを発見しました。再現する手順:
./gradlew clean
./gradlew assembleRelease
<xliff:g>
この時点で、タグ付きのタイトルを持つメニュー項目をタップするとクラッシュが発生します。
./gradlew assembleRelease
この時点で、クラッシュは発生しません。2 番目のリリース ビルド後に生成される APK は、最初のリリース ビルドよりも約 20k 小さくなります。明らかにサイズの違いは異なりますが、ポイントは大きなサイズの違いがあるということです。以降のリリース ビルドを実行すると、サイズが数バイト異なるだけの新しい APK が生成されます。