混淆报错,super classes have no public methods with the @Subscribe annotation

首先看一下错误Log

01-10 09:57:17.061 8649-8649/com.aaa.bbb E/AndroidRuntime: FATAL EXCEPTION: main
                                                               Process: com.aaa.bbb, PID: 8649
                                                               org.greenrobot.eventbus.EventBusException: Subscriber class com.aaa.bbb.ccc.b.a and its super classes have no public methods with the @Subscribe annotation
                                                                   at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(Unknown Source:52)
                                                                   at org.greenrobot.eventbus.EventBus.register(Unknown Source:6)
                                                                   at com.icbc.bjmain.view.b.a.onCreate(Unknown Source:37)
                                                                   at android.support.v4.app.Fragment.performCreate(Unknown Source:15)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source:440)
                                                                   at android.support.v4.app.FragmentTransition.addToFirstInLastOut(Unknown Source:76)
                                                                   at android.support.v4.app.FragmentTransition.calculateFragments(Unknown Source:18)
                                                                   at android.support.v4.app.FragmentTransition.startTransitions(Unknown Source:39)
                                                                   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(Unknown Source:100)
                                                                   at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(Unknown Source:97)
                                                                   at android.support.v4.app.FragmentManagerImpl.execSingleAction(Unknown Source:31)
                                                                   at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(Unknown Source:6)
                                                                   at android.support.v4.app.FragmentPagerAdapter.finishUpdate(Unknown Source:6)
                                                                   at android.support.v4.view.ViewPager.populate(Unknown Source:388)
                                                                   at android.support.v4.view.ViewPager.populate(Unknown Source:2)
                                                                   at android.support.v4.view.ViewPager.onMeasure(Unknown Source:207)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
                                                                   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.support.design.widget.CoordinatorLayout.onMeasureChild(Unknown Source:0)
                                                                   at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(Unknown Source:82)
                                                                   at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(Unknown Source:0)
                                                                   at android.support.design.widget.CoordinatorLayout.onMeasure(Unknown Source:246)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.support.v4.widget.DrawerLayout.onMeasure(Unknown Source:204)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
                                                                   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at android.support.v7.widget.ContentFrameLayout.onMeasure(Unknown Source:125)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1539)
                                                                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:823)
                                                                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:702)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1539)
                                                                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:823)
                                                                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:702)
                                                                   at android.view.View.measure(View.java:22281)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6668)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at com.android.internal.policy.DecorView.onMeasure(DecorView.java:834)

项目中为了安全考虑,添加了混淆。没想到开启混淆后,在proguard-rules.pro文件写了一些混淆规则。但是没想到,还是出现了问题。原来是我项目中的EventBus出现的问题,然而,我已经将EventBus防混淆规则写了,为啥还是出现问题。百思不得其解。看了一下log。发现原来是没有@Subscribe这个注解。我明明已经添加上去了啊。我想,很有可能是混淆将我的注解给混淆掉了。怎么办呢。这时,我看到了一篇帖子:https://stackoverflow.com/questions/35874055/eventbus-subscriber-class-and-its-super-classes-have-no-public-methods-with-th  

大神上面有一个防止这个@Subscribe注解被混淆的一个规则

-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe ;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

感谢大佬,添加完这个规则后,我的项目正常运行了。

你可能感兴趣的:(混淆报错,super classes have no public methods with the @Subscribe annotation)