EventBus,Gson打包混淆问题

今天在打包应用的过程中遇到了EventBus混淆的问题:

我在这里主要是想记录一下自己碰到的问题:

我在用android studio打包混淆后,eventbus应用总是报错找不到方法,在网上查了很多都是说没有加上注解@Subscribe,然而我检查了很多次,所有的应用都是对的,并且在没有打包的情况下运行也是正常的,苦苦思索查找了良久,发现罪魁祸首是因为打包混淆找不到eventbus类了。只需在proguard-rules.pro文件中加上这几句混淆代码就行了:

#eventbus打包混淆
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}

今天在打包应用的过程中遇到了Gson混淆的问题:Gson打包混淆出现Null指针异常

其中两种gson解析json字符串的方法都没有问题,问题主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常),因为客户端代码中的 JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编
译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。经过测试,一切正常。
#Gson混淆
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.**.**.model.** {*;}
最后一行很重要要换成自己的包名



猜你喜欢

转载自blog.csdn.net/meng326125/article/details/78077323