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 ;}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.首先需要在app下的build.gradle下配置,true表示编译时会混淆代码\ 2.在proguard-r...
    Thomas_yy阅读 6,716评论 0 6
  • https://yq.aliyun.com/articles/62980?utm_campaign=wenzhan...
    x360阅读 1,477评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 什么是代码混淆 代码混淆就是将代码中的各种元素,如变量,方法,类和包的名字改写成无意义的名字,增加项目反编译后被读...
    蜗牛家族史阅读 5,224评论 1 4
  • 概述 混淆是Android Apk打包过程中的一个重要步骤,默认情况下,打包都是需要混淆过程的。 Android ...
    androidjp阅读 2,629评论 1 13