2017-02-27 2 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、私はandroidアプリケーションからfirebaseコンソールでこのスタックトレースを受け取りました。あなたがfirebaseサポートで働いているなら、私はあなたにfirbaseプロジェクトに関する情報をお送りします。 –

答えて

3

<OR>はdeobfuscatorはいくつかの潜在的な可能性があるように、元のある方法を決定できなかったことを示しています。 Firebaseは、難読化されたスタックトレースを受け取り、提供されたProguardファイルを使用して元のスタックトレースを明白に判断することができませんでした。例えば、等deobfuscatedスタックトレース:

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) 

は、第一のスタックフレームが明確deobfuscatedたことを意味するが、スタックトレースにおける第二のスタックフレームは、これらの4つの可能性のいずれであってもよいです。この場合

、曖昧さが両方あるという事実から来ている:

  1. ありメソッドを区別する行番号はありませんし、異なるシグネチャを持つ
  2. 複数のメソッドが同じ文字列に難読化されました。

縮小フェーズでは、ライン番号を削除するようにProguardを設定することができます。この問題を回避するには、その機能を無効にします。

有効なProguardマッピングの要件の1つではないため、難読化は行番号のないスタックトレースでは可逆であるとは限りません。 Proguardは、コードを可逆的に難読化することが保証されていますが、ではではありません。 Proguardファイルにはメソッドシグネチャが含まれているため、シグネチャが衝突しないメソッドはすべて同じ文字列に難読化される可能性があります。

たとえば、int method(int)およびString method2(String)は、どちらも難読化されてobfになる可能性があります。コンテキストから、コードdeobfuscatorは、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ですか? –

関連する問題