混淆问题(常见问题汇总)

来源:互联网 发布:直销双轨奖金制度算法 编辑:程序博客网 时间:2024/05/22 01:41

实体类混淆后无法正确解析

项目可能在debug阶段毫无问题,数据正常,接口正常,完全没有问题,
但是打release包后,数据无法正确显示或者是解析成javaBean.

  • 原因

    网络请求解析数据的实体类如果混淆,就会发生字段的错乱,无法正确解析,请求接口和返回的数据都是没问题的,但是解析成javaBean失败了,才会出现这种问题

  • 解决方案

实体类不混淆,添加混淆规则
-keep class com.xxx.xxx.entity.* { ; }
不同项目可能稍微有些不一样,可以不混淆model包,也可以不混淆所有实现Serializable接口和Parcelable接口的类
总之就是不混淆实体类就解决了

记录一下我现在的混淆规则

#webview的js接口-keepclassmembers class fqcn.of.javascript.interface.for.webview {   public *;}#baserecycleviewadapterhelper-keep class com.chad.library.adapter.** {   *;}#oss 阿里云存储-keep class com.alibaba.sdk.android.oss.** { *; }-dontwarn okio.**-dontwarn org.apache.commons.codec.binary.**-keep public class * implements com.bumptech.glide.module.GlideModule#高德地图-keep class com.amap.api.location.**{*;}-keep class com.amap.api.fence.**{*;}-keep class com.autonavi.aps.amapapi.model.**{*;}#retrofit2-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions#okhttputils-dontwarn com.zhy.http.**-keep class com.zhy.http.**{*;}#okhttp-dontwarn okhttp3.**-keep class okhttp3.**{*;}#okio-dontwarn okio.**-keep class okio.**{*;}#eventbus3-keepattributes *Annotation*-keepclassmembers class ** {    @org.greenrobot.eventbus.Subscribe <methods>;}-keep enum org.greenrobot.eventbus.ThreadMode { *; }#gilde-keep public class * implements com.bumptech.glide.module.GlideModule-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {  **[] $VALUES;  public *;}#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule#stetho-keep class com.facebook.stetho.** { *; }-dontwarn org.mozilla.javascript.**-dontwarn org.mozilla.classfile.**-keep class org.mozilla.javascript.** { *; }#gson-keep public class com.google.gson.**-keep public class com.google.gson.** {public private protected *;}-keep class sun.misc.Unsafe { *; }-keepattributes Signature-keepattributes *Annotation*#ormlite-keepattributes *DatabaseField*-keepattributes *DatabaseTable*-keepattributes *SerializedName*-keep class com.j256.**-keepclassmembers class com.j256.** { *; }-keep enum com.j256.**-keepclassmembers enum com.j256.** { *; }-keep interface com.j256.**-keepclassmembers interface com.j256.** { *; }#galleryfinal-keep class cn.finalteam.galleryfinal.widget.*{*;}-keep class cn.finalteam.galleryfinal.widget.crop.*{*;}-keep class cn.finalteam.galleryfinal.widget.zoonview.*{*;}#jpush-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }#==================protobuf======================-dontwarn com.google.**-keep class com.google.protobuf.** {*;}#友盟-keepclassmembers class * {   public <init> (org.json.JSONObject);}-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}#bugly-dontwarn com.tencent.bugly.**-keep public class com.tencent.bugly.**{*;}-keep class com.tencent.tinker.**{*;}-keep class android.support.**{*;}-dontwarn rx.internal.util.unsafe.*#-keep class com.taobao.accs.**{*;}#-keep class com.alibaba.wireless.**{*;}-dontwarn com.squareup.okhttp.**-keep class com.xiyoukeji.baselibrary.**{*;}#rx-dontwarn rx.**-keepclassmembers class rx.** { *; }# retrolambda-dontwarn java.lang.invoke.*#js-keepattributes *Annotation*-keepattributes *JavascriptInterface*-keep class com.xiyoukeji.baitu.home.WebActivity.**{*;}#友盟社会化分享-dontusemixedcaseclassnames-dontshrink-dontoptimize-dontwarn com.google.android.maps.**-dontwarn android.webkit.WebView-dontwarn com.umeng.**-dontwarn com.tencent.weibo.sdk.**-dontwarn com.facebook.**-keep public class javax.**-keep public class android.webkit.**-dontwarn android.support.v4.**-keep enum com.facebook.**-keepattributes Exceptions,InnerClasses,Signature-keepattributes *Annotation*-keepattributes SourceFile,LineNumberTable-keep public interface com.facebook.**-keep public interface com.tencent.**-keep public interface com.umeng.socialize.**-keep public interface com.umeng.socialize.sensor.**-keep public interface com.umeng.scrshot.**-keep class com.android.dingtalk.share.ddsharemodule.** { *; }-keep public class com.umeng.socialize.* {*;}-keep class com.facebook.**-keep class com.facebook.** { *; }-keep class com.umeng.scrshot.**-keep public class com.tencent.** {*;}-keep class com.umeng.socialize.sensor.**-keep class com.umeng.socialize.handler.**-keep class com.umeng.socialize.handler.*-keep class com.umeng.weixin.handler.**-keep class com.umeng.weixin.handler.*-keep class com.umeng.qq.handler.**-keep class com.umeng.qq.handler.*-keep class UMMoreHandler{*;}-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}-keep class com.tencent.mm.sdk.modelmsg.** implements   com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}-keep class im.yixin.sdk.api.YXMessage {*;}-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}-keep class com.tencent.mm.sdk.** {*;}-keep class com.tencent.mm.opensdk.** {*;}-dontwarn twitter4j.**-keep class twitter4j.** { *; }-keep class com.tencent.** {*;}-dontwarn com.tencent.**-keep public class com.umeng.com.umeng.soexample.R$*{public static final int *;}-keep public class com.linkedin.android.mobilesdk.R$*{public static final int *;}-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);    }-keep class com.tencent.open.TDialog$*-keep class com.tencent.open.TDialog$* {*;}-keep class com.tencent.open.PKDialog-keep class com.tencent.open.PKDialog {*;}-keep class com.tencent.open.PKDialog$*-keep class com.tencent.open.PKDialog$* {*;}-keep class com.sina.** {*;}-dontwarn com.sina.**-keep class  com.alipay.share.sdk.** { *;}-keepnames class * implements android.os.Parcelable {public static final ** CREATOR;}-keep class com.linkedin.** { *; }-keepattributes Signature#实体类-keep class com.xiyoukeji.baotu.entity.** { *; }

注意

大多数debug包没问题,release包出现问题的,大多都是混淆规则没配置好,一般通过手机调试,在as看log信息都可以看出事哪个包出现了问题,然后再看是不是没有进行混淆.细心总能找到问题所在.祝大家工作顺利!