什么是&#39; <或>&#39;在firebase崩溃堆栈?

时间:2017-02-27 09:00:38

标签: android firebase firebase-crash-reporting

firebase崩溃堆栈中的<OR>是什么?

android.app.Activity.onMenuItemSelected (Activity.java:2566)
android.support.v4.app.FragmentActivity.onMenuItemSelected (FragmentActivity.java)
android.support.v7.app.AppCompatActivity.onMenuItemSelected (AppCompatActivity.java)
android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected (WindowCallbackWrapper.java)
android.support.v7.app.AppCompatDelegateImplV9.onCreate (AppCompatDelegateImplV9.java)
<OR>.setSupportActionBar (AppCompatDelegateImplV9.java)
<OR>.findViewById (AppCompatDelegateImplV9.java)
<OR>.onConfigurationChanged (AppCompatDelegateImplV9.java)
<OR>.setContentView (AppCompatDelegateImplV9.java)
<OR>.setContentView (AppCompatDelegateImplV9.java)
<OR>.onSubDecorInstalled (AppCompatDelegateImplV9.java)
<OR>.onPanelClosed (AppCompatDelegateImplV9.java)
<OR>.onMenuItemSelected (AppCompatDelegateImplV9.java)
<OR>.onMenuModeChange (AppCompatDelegateImplV9.java)
<OR>.startSupportActionModeFromWindow (AppCompatDelegateImplV9.java)
<OR>.onKeyShortcut (AppCompatDelegateImplV9.java)
<OR>.dispatchKeyEvent (AppCompatDelegateImplV9.java)
<OR>.shouldInheritContext (AppCompatDelegateImplV9.java)
<OR>.onCreateView (AppCompatDelegateImplV9.java)
<OR>.openPanel (AppCompatDelegateImplV9.java)
<OR>.initializePanelDecor (AppCompatDelegateImplV9.java)
<OR>.reopenMenu (AppCompatDelegateImplV9.java)
<OR>.closePanel (AppCompatDelegateImplV9.java)
<OR>.callOnPanelClosed (AppCompatDelegateImplV9.java)
<OR>.findMenuPanel (AppCompatDelegateImplV9.java)
<OR>.getPanelState (AppCompatDelegateImplV9.java)
<OR>.performPanelShortcut (AppCompatDelegateImplV9.java)
android.support.v7.view.menu.MenuBuilder.setDefaultShowAsAction (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.dispatchSubMenuSelected (MenuBuilder.java)
<OR>.saveActionViewStates (MenuBuilder.java)
<OR>.getActionViewStatesKey (MenuBuilder.java)
<OR>.setCallback (MenuBuilder.java)
<OR>.addInternal (MenuBuilder.java)
<OR>.createNewMenuItem (MenuBuilder.java)
<OR>.removeItemAtInt (MenuBuilder.java)
<OR>.setExclusiveItemChecked (MenuBuilder.java)
<OR>.findGroupIndex (MenuBuilder.java)
<OR>.dispatchMenuItemSelected (MenuBuilder.java)
<OR>.findInsertIndex (MenuBuilder.java)
<OR>.findItemsWithShortcutForKey (MenuBuilder.java)
<OR>.findItemWithShortcutForKey (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.close (MenuBuilder.java)
<OR>.onItemVisibleChanged (MenuBuilder.java)
<OR>.setHeaderInternal (MenuBuilder.java)
<OR>.setHeaderTitleInt (MenuBuilder.java)
<OR>.setHeaderIconInt (MenuBuilder.java)
<OR>.setHeaderViewInt (MenuBuilder.java)
android.support.v7.view.menu.MenuItemImpl.invoke (MenuItemImpl.java)
<OR>.setCheckedInt (MenuItemImpl.java)
<OR>.setShowAsActionFlags (MenuItemImpl.java)
android.support.v7.view.menu.MenuBuilder.setDefaultShowAsAction (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.dispatchSubMenuSelected (MenuBuilder.java)
<OR>.saveActionViewStates (MenuBuilder.java)
<OR>.getActionViewStatesKey (MenuBuilder.java)
<OR>.setCallback (MenuBuilder.java)
<OR>.addInternal (MenuBuilder.java)
<OR>.createNewMenuItem (MenuBuilder.java)
<OR>.removeItemAtInt (MenuBuilder.java)
<OR>.setExclusiveItemChecked (MenuBuilder.java)
<OR>.findGroupIndex (MenuBuilder.java)
<OR>.dispatchMenuItemSelected (MenuBuilder.java)
<OR>.findInsertIndex (MenuBuilder.java)
<OR>.findItemsWithShortcutForKey (MenuBuilder.java)
<OR>.findItemWithShortcutForKey (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.close (MenuBuilder.java)
<OR>.onItemVisibleChanged (MenuBuilder.java)
<OR>.setHeaderInternal (MenuBuilder.java)
<OR>.setHeaderTitleInt (MenuBuilder.java)
<OR>.setHeaderIconInt (MenuBuilder.java)
<OR>.setHeaderViewInt (MenuBuilder.java)
android.support.v7.view.menu.MenuBuilder.setDefaultShowAsAction (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.dispatchSubMenuSelected (MenuBuilder.java)
<OR>.saveActionViewStates (MenuBuilder.java)
<OR>.getActionViewStatesKey (MenuBuilder.java)
<OR>.setCallback (MenuBuilder.java)
<OR>.addInternal (MenuBuilder.java)
<OR>.createNewMenuItem (MenuBuilder.java)
<OR>.removeItemAtInt (MenuBuilder.java)
<OR>.setExclusiveItemChecked (MenuBuilder.java)
<OR>.findGroupIndex (MenuBuilder.java)
<OR>.dispatchMenuItemSelected (MenuBuilder.java)
<OR>.findInsertIndex (MenuBuilder.java)
<OR>.findItemsWithShortcutForKey (MenuBuilder.java)
<OR>.findItemWithShortcutForKey (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.performItemAction (MenuBuilder.java)
<OR>.close (MenuBuilder.java)
<OR>.onItemVisibleChanged (MenuBuilder.java)
<OR>.setHeaderInternal (MenuBuilder.java)
<OR>.setHeaderTitleInt (MenuBuilder.java)
<OR>.setHeaderIconInt (MenuBuilder.java)
<OR>.setHeaderViewInt (MenuBuilder.java)
android.support.v7.widget.ActionMenuView.measureChildForCells (ActionMenuView.java)
<OR>.isOverflowReserved (ActionMenuView.java)
<OR>.generateLayoutParams (ActionMenuView.java)
<OR>.generateLayoutParams (ActionMenuView.java)
<OR>.invokeItem (ActionMenuView.java)
<OR>.initialize (ActionMenuView.java)
<OR>.setMenuCallbacks (ActionMenuView.java)
<OR>.hasSupportDividerBeforeChildAt (ActionMenuView.java)
android.support.v7.view.menu.ActionMenuItemView.onClick (ActionMenuItemView.java)
android.view.View.performClick (View.java:4211)
android.view.View$PerformClick.run (View.java:17446)
android.os.Handler.handleCallback (Handler.java:725)
android.os.Handler.dispatchMessage (Handler.java:92)
android.os.Looper.loop (Looper.java:153)
android.app.ActivityThread.main (ActivityThread.java:5299)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:833)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:600)
dalvik.system.NativeStart.main (NativeStart.java)

1 个答案:

答案 0 :(得分:3)

<OR>表示反混淆器无法确定哪种方法是原始方法,因为有几种可能的方法。 Firebase收到了混淆的堆栈跟踪,无法使用提供的Proguard文件明确地确定原始堆栈跟踪。例如,反混淆的堆栈跟踪,例如:

android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected (WindowCallbackWrapper.java)
android.support.v7.view.menu.MenuBuilder.setDefaultShowAsAction (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.addMenuPresenter (MenuBuilder.java)
<OR>.dispatchSubMenuSelected (MenuBuilder.java)

表示第一个堆栈帧被明确地反混淆,但堆栈跟踪中的第二个堆栈帧可能是这四种可能性中的任何一种。

在这种情况下,模棱两可来自两个事实:

  1. 没有用于区分方法的行号,
  2. 将具有不同签名的多个方法混淆为相同的字符串。
  3. 在缩小阶段,Proguard可能配置为剥离行号。要避免此问题,请禁用该功能。

    不保证在没有行号的堆栈跟踪上可以反转混淆,因为这不是有效Proguard映射的要求之一。 Proguard只能保证可逆地混淆代码,而不是堆栈跟踪。 Proguard文件包括方法签名,因此任何具有非冲突签名的方法都可能被混淆为相同的字符串。

    例如:int method(int)String method2(String)可能都被混淆为obf。从上下文中,代码反混淆器可以查看obf是通过int还是String传递,并且可以明确地选择正确的原始方法。对于堆栈跟踪反混淆器,行MyClass.obf(MyClass.java)可能来自MyClass.method(MyClass.java)MyClass.method2(MyClass.java)