引用文章:
文章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);
}