本文主要是介绍EventBus its super classes have no public methods with the @Subscribe annotation怎么解决?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引用文章:
文章1: link
文章2: link
可能原因1:
使用下面这个获取eventBus单例并在activity里注册后,忘记将方法注解Subscribe (添加@Subscribe,看下列示例)
EventBus.getDefault().register(this);
@Subscribe(threadMode = ThreadMode.MAIN)public void onMessageEvent(ITutorEventBus bus) {}
可能原因2:
在build.gradle里添加了一些配置导致的,启了R8压缩 minifyEnabled true
buildTypes {debug {minifyEnabled true }}
那为什么开启了R8压缩就会导致上面的异常呢,是因为EventBus的注解使用了反射。
反射 (Reflection) 会导致 R8 在跟踪代码时无法识别到代码的入口点。第三方库也可能用到反射,并且由于第三方库实际上是您的应用的一部分,您 (作为应用开发者) 将负责这些库以及您自己的代码中使用的反射。第三方库可能附带了它们自己的规则,但是切记,有些库不一定是为 Android 编写的,抑或是未考虑缩减问题,因此它们可能需要其他配置。
原因2的解决方案:
1.关闭压缩,设为false即可, minifyEnabled false.
2.将eventBus添加至混淆
-keepattributes *Annotation*
-keepclassmembers class * {@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }# And if you use AsyncExecutor:
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {<init>(java.lang.Throwable);
}
这篇关于EventBus its super classes have no public methods with the @Subscribe annotation怎么解决?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!