============================
原创,转载请指明出处(http://blog.xinspace.space)。
参考:EventBus exception when proj is built - Subscriber class has no public methods called onEvent
Eclipse导出签名包,用Proguard。项目中用到了org.greenrobot.eventbus.EventBus
库,在导出过程中,遇到了如下问题:1
java.lang.RuntimeException: Unable to create application xxx.xxx.xxx.MyApplication: org.greenrobot.eventbus.i: Subscriber class xxx.xxx.xxx.MyApplication and its super classes have no public methods with the @Subscribe annotation
错误提示说订阅类没有用@Subscribe
注解的public方法,导致EventBus出错,从而导致应用出错。
但是在EventBus的订阅类中,有如下方法:1
2
3
4@Subscribe
public void onEventMainThread(MyEvent event) {
dispatchEvent(event);
}
该公用方法用于接收EventBus的事件,并且用EventBus的@Subscribe
明确注解了。这与错误提示有冲突啊。经过多番查找,终于找到了原因。
在Proguard文件proguard-project.txt
(自定义的Proguard文件)中,需要保留部分变量和方法,不能全部混淆。这个错误出现的原因就是混淆导致了EventBus找不到订阅类中的@Subscribe
注解,只需要在Proguard文件中保留这些代码就行了。在Proguard文件中,添加如下的配置:1
2
3
4-keepclassmembers class ** {
public <fields>;
public void onEvent*(**);
}
这样就保留了订阅类的onEvent***
方法了,比如onEventMainThread
方法。
现在再导出签名包就不会报错了。