Android使用Eventbus遇到的混淆问题

问题描述:

打开混淆,release一个包。

在使用Eventbus和注解的Android项目中,通过反射机制调用绑定的方法时,出现一下错误:

java.lang.reflect.InvocationTargetException

InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收

问题分析:

通过Store获取的数据有问题,总是出现NullPointerException,但是实际网络返回是OK的,具体Action执行也可以可以的,那估计就是数据混淆有问题,项目中所有的数据Model都使用Serializable序列化了。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

解决方法:

在混淆文件proguard.conf中,添加一下代码:

-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

!static !transient ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

如果数据是使用Parcelable:

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

其他有关注解混淆的配置:

-keepattributes *Annotation*

-keepclassmembers class * {@com.xxx.Subscribe ;}

-keepclassmembers class * {@com.xxx.Action ;}

你可能感兴趣的:(Android使用Eventbus遇到的混淆问题)