什么是“< OR>”在firebase崩溃堆栈? [英] What is '<OR>' in firebase crash stack?

查看:183
本文介绍了什么是“< OR>”在firebase崩溃堆栈?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

什么是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)
.setContentView(AppCompatDelegateImplV9.java)
< OR> .onSubDecorInstalled(AppCompatDelegateImplV9.java)
< OR> .onPanelClosed(AppCompatDelegateImplV9.java )
< OR> .onMenuItemSele (AppCompatDelegateImplV9.java)
.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> ;. (AppCompatDelegateImplV9.java)
.callOnPanelClosed(AppCompatDelegateImplV9.java)
.findMenuPanel(AppCompatDelegateImplV9.java)
< OR> .getPanelState(AppCompatDelegateImplV9.java) )
< OR> .performPanelShortcut(AppCompatDelegateImplV9.java)
android.support.v7.view.menu.MenuBuilder.setDefaultShowAsAction(M (MenuBuilder.java)
.addMenuPresenter(MenuBuilder.java)
.addMenuPresenter(MenuBuilder.java)
< OR> .dispatchSubMenuSelected(MenuBuilder.java)
< OR> .saveActionViewStates(MenuBuilder.java)
> .getActionViewStatesKey(MenuBuilder.java)
< OR> .setCallback(MenuBuilder.java)
< OR> .addInternal(MenuBuilder.java)
< OR> .createNewMenuItem(MenuBuilder.java)
< OR> .removeItemAtInt(MenuBuilder.java)
< OR> .setExclusiveItemChecked (MenuBuilder.java)
.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> ;. (MenuBuilder.java)
.setHeaderInternal(MenuBuilder.java)
.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)
> .getActionViewStatesKey(MenuBuilder.java)
< OR> .setCallback(MenuBuilder.java)
< OR> .addInternal(MenuBuilder.java)
< ;或者> .createNewMenuItem(MenuBuilder.java)
< OR> .removeItemAtInt(MenuBuilder.java)
& (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 )
.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.jav a)
.saveActionViewStates(MenuBuilder.java)
< OR> .getActionViewStatesKey(MenuBuilder.java)
< OR> .setCallback(MenuBuilder.java)$ b $ (MenuBuilder.java)
< OR> .createNewMenuItem(MenuBuilder.java)
< OR> .removeItemAtInt(MenuBuilder.java)
< OR> (MenuBuilder.java)
< OR> .findGroupIndex(MenuBuilder.java)
< OR> .dispatchMenuItemSelected(MenuBuilder.java)
< OR> .findInsertIndex(MenuBuilder。 (MenuBuilder.java)
< OR> .findItemsWithShortcutForKey(MenuBuilder.java)
< OR> .findItemWithShortcutForKey(MenuBuilder.java)
< OR> .performItemAction (MenuBuilder.java)
< OR> .close(MenuBuilder.java)
< OR> .onItemVisibleChanged(MenuBuilder.java)
< OR> .setHeaderInternal(MenuBuilder.java)
< OR> .setHeaderTitleInt(MenuBuilder.java)
< OR> .setHeaderIconIn (MenuBuilder.java)
< OR> .setHeaderViewInt(MenuBuilder.java)
android.support.v7.widget.ActionMenuView.measureChildForCells(ActionMenuView.java)
< OR> ;. (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.re方法.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)


解决方案

由于有几种潜在的可能性,反混淆器不能确定哪种方法是原始的。 Firebase收到混淆的堆栈跟踪,无法使用提供的Proguard文件明确确定原始堆栈跟踪。例如,一个反混淆的堆栈跟踪,例如:

$ p $ 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文件包括方法签名,所以任何非冲突签名的方法都可能被混淆成相同的字符串。


$ b 例如: int method(int )字符串方法2(字符串)可能被混淆为 obf 。从上下文中,代码反混淆器可以看到obf是传递了一个int还是一个String,并且可以明确地选择正确的原始方法。对于栈跟踪反混淆器, MyClass.obf(MyClass.java)行可以来自 MyClass.method(MyClass.java) code>或 MyClass.method2(MyClass.java)


What is <OR> in the firebase crash stack?

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)

解决方案

The <OR> indicates that the deobfuscator could not determine which method is the original as there are several potential possibilities. Firebase received an obfuscated stack trace and was unable to unambiguously determine the original stack trace using the provided Proguard file. For example, a deobfuscated stack trace such as:

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)

means that that the first stack frame was unambiguously deobfuscated, but the second stack frame in the stack trace could be any of those four possibilities.

In this case, the ambiguity comes from the fact that both:

  1. There are no line numbers to distinguish methods, and
  2. multiple methods with different signatures were obfuscated to the same string.

During the shrinking phase, Proguard may be configured to strip line numbers. To avoid this problem, disable that feature.

Obfuscation is not guaranteed to be invertible on stack traces without line numbers as that is not one of the requirements for a valid Proguard mapping. Proguard is only guaranteed to invertibly obfuscate code, not stack traces. Proguard files include method signatures, so any methods with non-conflicting signatures may be obfuscated to the same string.

For example: int method(int) and String method2(String) may both be obfuscated to obf. From context, the code deobfuscator can see whether obf was passed an int or a String, and can unambiguously choose the correct original method. For a stack trace deobfuscator, the line MyClass.obf(MyClass.java) could have come from either MyClass.method(MyClass.java) or MyClass.method2(MyClass.java).

这篇关于什么是“&lt; OR&gt;”在firebase崩溃堆栈?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆