可能原因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);
}
本文探讨了开启R8压缩后EventBus订阅方法异常的原因,即反射导致代码识别困难。解决方法包括关闭压缩、混淆eventBus并提供相关配置。

2184

被折叠的 条评论
为什么被折叠?



