当我在用于菜单项标题的字符串中包含<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/23125023( 中的一个错误,该错误已通过提交332944f8a0a001c1754ce3298edbb4246e53c8fb
修复。
在 Android 4.0.4 设备上调查问题时,在开发版本期间,我发现在菜单项标题字符串中包含 <xliff:g>
标记时不会发生崩溃,但在发布版本期间确实会发生崩溃。如果我将 HTML 标记(如 <b>
(添加到菜单项标题,则在开发和发布版本上都会发生崩溃。
由于我在菜单项标题字符串中包含 <xliff:g>
标签以进行翻译,因此我想将其保留在那里。在开发版本中不会发生崩溃的事实让我希望发布版本有解决此问题的方法。
在开发构建期间,是否进行了某种处理以从字符串中删除<xliff:g>
标记,而这些标记在发布构建期间未运行?还是有别的事情发生?
更新
我刚刚发现,如果我运行发布版本两次,就不会发生崩溃。重现步骤:
-
./gradlew clean
-
./gradlew assembleRelease
此时,点击标题中包含 <xliff:g>
标记的菜单项时会发生崩溃。
-
./gradlew assembleRelease
此时,不会发生崩溃。第二个版本后生成的 APK 比第一个版本小约 20k。显然,尺寸差异会有所不同,但关键是存在显着的尺寸差异。运行后续版本会生成一个新的 APK,其大小仅相差几个字节。
你能在 http://b.android.com 中为此提交一个工具错误吗?