今天用到一个第三方库,其中有用到EventBus,bug模式下都是可以的,本想打个release包就可以交差,结果一启动就崩了。崩溃点在EventBus注册的时候:
EventBus.getDefault().register(this);
异常消息如下:
java.lang.NoSuchFieldError: No static field MAIN of type Lorg/greenrobot/eventbus/ThreadMode; in class Lorg/greenrobot/eventbus/ThreadMode; or its superclasses (declaration of 'org.greenrobot.eventbus.ThreadMode' appears in /data/app/cn.com.ngds.gamestore.oem-1/base.apk)
at java.lang.reflect.Method.getAnnotationNative(Native Method)
at java.lang.reflect.Method.getAnnotation(Method.java:557)
变量找不到,很明显,又是被ProGuard给去掉了。于是再progrard-rules.pro加一句:
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
类似的,当EventBus注解的函数找不到时,可以加以下等等:
# EventBus 3.0
-keepclassmembers class ** {
public void onEvent*(**);
}
# EventBus 3.0 annotation
-keepclassmembers class * {
@de.greenrobot.event.Subscribe <methods>;
}
网友评论