问题描述:
打开混淆,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 ;}
网友评论