2017-02-27 47 views
4

Firebase崩潰堆棧中的<OR>是什麼?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) 
+0

這個問題很模糊。你能分享一些關於你在哪裏看到的細節,或者是關於你的項目的一些細節? –

+1

@DougStevenson,我已經從我的應用程序的firebase控制檯收到這個堆棧跟蹤。如果您在Firebase支持工作,我會向您發送有關firbase項目的任何信息。 –

回答

3

<OR>表明deobfuscator無法確定哪一種方法是原來因爲有幾個潛在的可能性。 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. 具有不同特徵的多個方法進行了模糊處理,以相同的字符串。

在收縮階段,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)

+1

要添加到此 - 如果您將ProGuard配置爲將行號作爲其縮小階段的一部分進行剝離,您所看到的可能是此結果。 –

+1

謝謝!很奇怪,默認的proguard-android.txt不包含-keepattributes SourceFile,LineNumberTable選項。 –

+0

@DougStevenson,有這個問題關係到http://stackoverflow.com/questions/41544446/strange-stack-at-android-crash-report? –

相關問題