<OR> 在 Proguard 去混淆跟踪中是啥意思?

Posted

技术标签:

【中文标题】<OR> 在 Proguard 去混淆跟踪中是啥意思?【英文标题】:What does <OR> means in Proguard deobfuscated trace?<OR> 在 Proguard 去混淆跟踪中是什么意思? 【发布时间】:2017-08-17 04:24:56 【问题描述】:

在我的 Playstore 中,我注意到去混淆的代码在堆栈跟踪中包含相当多的 &lt;OR&gt;

(例如at &lt;OR&gt;.onAttach(ProfileLandingFragment.java))。

&lt;OR&gt; 的真正含义是什么?

  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at com.example.fragment.LandingFragment.newInstance(ProfileLandingFragment.java)
    at <OR>.onAttach(ProfileLandingFragment.java)
    at <OR>.onActivityResult(ProfileLandingFragment.java)
    at <OR>.onCreateView(ProfileLandingFragment.java)
    at <OR>.onViewCreated(ProfileLandingFragment.java)
    at <OR>.access$000(ProfileLandingFragment.java)
    at android.support.v4.app.Fragment.isSupportFragmentClass(Fragment.java)
    at <OR>.getLayoutInflater(Fragment.java)
    at <OR>.onDetach(Fragment.java)
    at <OR>.onOptionsMenuClosed(Fragment.java)
    at <OR>.onContextItemSelected(Fragment.java)
    at <OR>.performCreateView(Fragment.java)
    at <OR>.performCreateOptionsMenu(Fragment.java)
    at android.support.v4.app.FragmentManagerImpl.modifiesAlpha(FragmentManagerImpl.java)
    at <OR>.shouldRunOnHWLayer(FragmentManagerImpl.java)
    at <OR>.throwException(FragmentManagerImpl.java)
    at <OR>.beginTransaction(FragmentManagerImpl.java)
    at <OR>.popBackStack(FragmentManagerImpl.java)
    at <OR>.putFragment(FragmentManagerImpl.java)
    at <OR>.getFragment(FragmentManagerImpl.java)
    at <OR>.saveFragmentInstanceState(FragmentManagerImpl.java)
    at <OR>.dump(FragmentManagerImpl.java)
    at <OR>.makeOpenCloseAnimation(FragmentManagerImpl.java)
    at <OR>.makeFadeAnimation(FragmentManagerImpl.java)
    at <OR>.loadAnimation(FragmentManagerImpl.java)
    at <OR>.isStateAtLeast(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.addFragment(FragmentManagerImpl.java)
    at <OR>.removeFragment(FragmentManagerImpl.java)
    at <OR>.findFragmentByTag(FragmentManagerImpl.java)
    at <OR>.enqueueAction(FragmentManagerImpl.java)
    at <OR>.allocBackStackIndex(FragmentManagerImpl.java)
    at <OR>.setBackStackIndex(FragmentManagerImpl.java)
    at <OR>.popBackStackState(FragmentManagerImpl.java)
    at <OR>.restoreAllState(FragmentManagerImpl.java)
    at <OR>.attachController(FragmentManagerImpl.java)
    at <OR>.dispatchConfigurationChanged(FragmentManagerImpl.java)
    at <OR>.dispatchCreateOptionsMenu(FragmentManagerImpl.java)
    at <OR>.dispatchPrepareOptionsMenu(FragmentManagerImpl.java)
    at <OR>.dispatchOptionsItemSelected(FragmentManagerImpl.java)
    at <OR>.onCreateView(FragmentManagerImpl.java)
    at android.support.v4.app.FragmentManagerImpl.modifiesAlpha(FragmentManagerImpl.java)
    at <OR>.shouldRunOnHWLayer(FragmentManagerImpl.java)
    at <OR>.throwException(FragmentManagerImpl.java)
    at <OR>.beginTransaction(FragmentManagerImpl.java)
    at <OR>.popBackStack(FragmentManagerImpl.java)
    at <OR>.putFragment(FragmentManagerImpl.java)
    at <OR>.getFragment(FragmentManagerImpl.java)
    at <OR>.saveFragmentInstanceState(FragmentManagerImpl.java)
    at <OR>.dump(FragmentManagerImpl.java)
    at <OR>.makeOpenCloseAnimation(FragmentManagerImpl.java)
    at <OR>.makeFadeAnimation(FragmentManagerImpl.java)
    at <OR>.loadAnimation(FragmentManagerImpl.java)
    at <OR>.isStateAtLeast(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.moveToState(FragmentManagerImpl.java)
    at <OR>.addFragment(FragmentManagerImpl.java)
    at <OR>.removeFragment(FragmentManagerImpl.java)
    at <OR>.findFragmentByTag(FragmentManagerImpl.java)
    at <OR>.enqueueAction(FragmentManagerImpl.java)
    at <OR>.allocBackStackIndex(FragmentManagerImpl.java)
    at <OR>.setBackStackIndex(FragmentManagerImpl.java)
    at <OR>.popBackStackState(FragmentManagerImpl.java)
    at <OR>.restoreAllState(FragmentManagerImpl.java)
    at <OR>.attachController(FragmentManagerImpl.java)
    at <OR>.dispatchConfigurationChanged(FragmentManagerImpl.java)
    at <OR>.dispatchCreateOptionsMenu(FragmentManagerImpl.java)
    at <OR>.dispatchPrepareOptionsMenu(FragmentManagerImpl.java)
    at <OR>.dispatchOptionsItemSelected(FragmentManagerImpl.java)
    at <OR>.onCreateView(FragmentManagerImpl.java)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManagerImpl.java)
    at <OR>.performPendingDeferredStart(FragmentManagerImpl.java)
    at <OR>.setHWLayerAnimListenerIfAlpha(FragmentManagerImpl.java)
    at <OR>.hideFragment(FragmentManagerImpl.java)
    at <OR>.findFragmentById(FragmentManagerImpl.java)
    at <OR>.findFragmentByWho(FragmentManagerImpl.java)
    at <OR>.execSingleAction(FragmentManagerImpl.java)
    at <OR>.addBackStackState(FragmentManagerImpl.java)
    at <OR>.dispatchContextItemSelected(FragmentManagerImpl.java)
    at <OR>.dispatchOptionsMenuClosed(FragmentManagerImpl.java)
    at <OR>.transitToStyleIndex(FragmentManagerImpl.java)
    at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java)
    at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(FragmentStatePagerAdapter.java)
    at <OR>.finishUpdate(FragmentStatePagerAdapter.java)
    at android.support.v4.view.ViewPager.initViewPager(ViewPager.java)
    at <OR>.setCurrentItem(ViewPager.java)
    at <OR>.setCurrentItemInternal(ViewPager.java)
    at <OR>.setCurrentItemInternal(ViewPager.java)
    at <OR>.scrollToItem(ViewPager.java)
    at <OR>.addOnPageChangeListener(ViewPager.java)
    at <OR>.distanceInfluenceForSnapDuration(ViewPager.java)
    at <OR>.smoothScrollTo(ViewPager.java)
    at <OR>.addNewItem(ViewPager.java)
    at <OR>.populate(ViewPager.java)
    at <OR>.calculatePageOffsets(ViewPager.java)
    at <OR>.infoForChild(ViewPager.java)
    at <OR>.recomputeScrollPosition(ViewPager.java)
    at <OR>.onPageScrolled(ViewPager.java)
    at <OR>.completeScroll(ViewPager.java)
    at <OR>.isGutterDrag(ViewPager.java)
    at <OR>.determineTargetPage(ViewPager.java)
    at <OR>.onSecondaryPointerUp(ViewPager.java)
    at <OR>.canScroll(ViewPager.java)
    at <OR>.executeKeyEvent(ViewPager.java)
    at <OR>.getChildRectInPagerCoordinates(ViewPager.java)
    at <OR>.access$000(ViewPager.java)
    at <OR>.access$200(ViewPager.java)
    at android.support.v4.view.ViewPager.populate(ViewPager.java)
    at <OR>.isDecorView(ViewPager.java)
    at <OR>.requestParentDisallowInterceptTouchEvent(ViewPager.java)
    at <OR>.arrowScroll(ViewPager.java)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java)
    at android.view.View.measure(View.java:15371)
    ...

【问题讨论】:

【参考方案1】:

Proguard 经常会重复使用方法名称,这意味着当涉及到去混淆时,地图无法区分,因此它必须向您展示所有可能性。 This question 和 This question 可能会有所帮助。

【讨论】:

以上是关于<OR> 在 Proguard 去混淆跟踪中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止proguard混淆整个包?

maven中添加proguard来混淆代码

Android逆向笔记-Proguard混淆Android代码以及去打印日志信息

Android 混淆后的代码调试

使用 ProGuard 混淆时暴露内部类

Proguard 混淆正在破坏 simplexml