当我在用于菜单项标题的字符串中包含<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,其大小只有几个字节差异。