混淆后json解析出錯

開啟混淆后打包巾钉,程序出現(xiàn)json解析出錯

原因:沒有配置忽略要解析的model预麸。(已經(jīng)配置了gson忽略文件和泛型)
解決方案

# 自己項目配置:使用Gson時需要配置Gson的解析對象及變量都不混淆滔驶。不然Gson會找不到變量夜郁。
#  注意:替換成自己工程下指定目錄即可什燕。比如com.test.bean
-keep public class xxx.xxx.xxx.** {public private protected *;}
-keep public class tom.test.bean.** {public private protected *;}

問題產(chǎn)生原因

項目開啟混淆后,按照網(wǎng)上的忽略配置了一通后竞端,以為配置gson忽略就好了屎即,結(jié)果還是出了問題。gson忽略如下:

# 保護代碼中的Annotation不被混淆
# 這在JSON實體映射時非常重要事富,比如fastJson
-keepattributes *Annotation*
# 避免混淆泛型
# 這在JSON實體映射時非常重要技俐,比如fastJson
-keepattributes Signature
#gson
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }

本來以為按照網(wǎng)上的忽略模板就能愉快的運行起來,結(jié)果還是會遇到各種坑统台,最后查看了各種博客后才解決雕擂。
參考博客:http://blog.csdn.net/shanshan_blog/article/details/53169315

最后附上一些常用的忽略配置

#==================================【基本配置】==================================

# 代碼混淆壓縮比,在0~7之間贱勃,默認為5,一般不下需要修改
-optimizationpasses 5

## 混淆時不使用大小寫混合井赌,混淆后的類名為小寫
## windows下的同學還是加入這個選項吧(windows大小寫不敏感)
-dontusemixedcaseclassnames
#
## 指定不去忽略非公共的庫的類
## 默認跳過,有些情況下編寫的代碼與類庫中的類在同一個包下贵扰,并且持有包中內(nèi)容的引用仇穗,此時就需要加入此條聲明
-dontskipnonpubliclibraryclasses
#
## 指定不去忽略非公共的庫的類的成員
-dontskipnonpubliclibraryclassmembers

# 不做預檢驗,preverify是proguard的四個步驟之一
# Android不需要preverify戚绕,去掉這一步可以加快混淆速度
-dontpreverify

# 有了verbose這句話纹坐,混淆后就會生成映射文件
-verbose
#apk 包內(nèi)所有 class 的內(nèi)部結(jié)構(gòu)
-dump class_files.txt
#未混淆的類和成員
-printseeds seeds.txt
#列出從 apk 中刪除的代碼
-printusage unused.txt
#混淆前后的映射
-printmapping mapping.txt

# 指定混淆時采用的算法,后面的參數(shù)是一個過濾器
# 這個過濾器是谷歌推薦的算法舞丛,一般不改變
-optimizations !code/simplification/artithmetic,!field/*,!class/merging/*

# 保護代碼中的Annotation不被混淆
# 這在JSON實體映射時非常重要耘子,比如fastJson
-keepattributes *Annotation*

# 避免混淆泛型
# 這在JSON實體映射時非常重要果漾,比如fastJson
-keepattributes Signature

# 拋出異常時保留代碼行號
-keepattributes SourceFile,LineNumberTable

#忽略警告
-ignorewarning
#==================================【項目配置】==================================

# 保留所有的本地native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
# 保留support下的所有類及其內(nèi)部類
-keep class android.support.** {*;}

# 保留R下面的資源
-keep class **.R$* {*;}

# 保留在Activity中的方法參數(shù)是view的方法,
# 這樣以來我們在layout中寫的onClick就不會被影響
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}

# 保留枚舉類不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
# 這句話會忽略所有文件谷誓,慎用跨晴!
-keepclasseswithmembers class *{
    public *;
}

# 保留Parcelable序列化類不被混淆
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

# 保留Serializable序列化的類不被混淆
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    !private <fields>;
    !private <methods>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
#-----------處理第三方依賴庫---------
# For retrolambda
-dontwarn java.lang.invoke.*
#Rxjava and RxAndroid
-dontwarn org.mockito.**
-dontwarn org.junit.**
-dontwarn org.robolectric.**

-keep class rx.** { *; }
-keep interface rx.** { *; }

-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-dontwarn okio.**
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-dontwarn rx.**
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

-keep class sun.misc.Unsafe { *; }

-dontwarn java.lang.invoke.*

-keep class rx.schedulers.Schedulers {
    public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
    public <methods>;
}
-keep class rx.schedulers.TestScheduler {
    public <methods>;
}
-keep class rx.schedulers.Schedulers {
    public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    long producerNode;
    long consumerNode;
}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

-dontwarn rx.internal.util.unsafe.**


# Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
# Okio
-dontwarn com.squareup.**
-dontwarn okio.**
-keep public class org.codehaus.* { *; }
-keep public class java.nio.* { *; }
#okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn com.squareup.okhttp.**
#RxLifeCycle
-keep class com.trello.rxlifecycle.** { *; }
-keep interface com.trello.rxlifecycle.** { *; }
#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);
}

#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
   @butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
 @butterknife.* <methods>;
}
#gson
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class com.bumptech.glide.** { *; }
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
    **[] $VALUES;
    public *;
}

記錄下踩坑,希望有所幫助


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末片林,一起剝皮案震驚了整個濱河市端盆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌费封,老刑警劉巖焕妙,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弓摘,居然都是意外死亡焚鹊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門韧献,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末患,“玉大人,你說我怎么就攤上這事锤窑¤嫡耄” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵渊啰,是天一觀的道長探橱。 經(jīng)常有香客問我,道長绘证,這世上最難降的妖魔是什么隧膏? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮嚷那,結(jié)果婚禮上胞枕,老公的妹妹穿的比我還像新娘。我一直安慰自己魏宽,他們只是感情好腐泻,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湖员,像睡著了一般贫悄。 火紅的嫁衣襯著肌膚如雪瑞驱。 梳的紋絲不亂的頭發(fā)上娘摔,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音唤反,去河邊找鬼凳寺。 笑死鸭津,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肠缨。 我是一名探鬼主播逆趋,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晒奕!你這毒婦竟也來了闻书?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脑慧,失蹤者是張志新(化名)和其女友劉穎魄眉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闷袒,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡坑律,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了囊骤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃择。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖也物,靈堂內(nèi)的尸體忽然破棺而出宫屠,到底是詐尸還是另有隱情,我是刑警寧澤滑蚯,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布激况,位于F島的核電站,受9級特大地震影響膘魄,放射性物質(zhì)發(fā)生泄漏乌逐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一创葡、第九天 我趴在偏房一處隱蔽的房頂上張望浙踢。 院中可真熱鬧,春花似錦灿渴、人聲如沸洛波。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹬挤。三九已至,卻和暖如春棘幸,著一層夾襖步出監(jiān)牢的瞬間焰扳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吨悍,地道東北人扫茅。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像育瓜,于是被迫代替她去往敵國和親葫隙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,277評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫躏仇、插件恋脚、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,118評論 4 61
  • 葉無歌閱讀 418評論 2 3
  • 今天是星期三,中午我們彩排了焰手,彩排什么呢慧起?是大隊委競選活動。 從中午就開始彩排册倒,我抽簽抽到了第10號蚓挤,...
    王昱凱閱讀 417評論 0 0
  • 9.24與大白的第一次正式見面。從來沒想過會有這么多巧合事情發(fā)生在自己身上驻子。smile~ 第一次合影灿意。突然感覺自己...
    嘉嘉歐妮閱讀 345評論 0 0