混淆后导致GSON出现missing type parameter的错误

以前没有写blog的习惯,导致有些解决过的问题又出现的话依然要像面对新问题一样重新找原因修bug,所以决定从今天开始养成记录的好习惯。

最近公司外访的app经常出现莫名其妙的问题,经常一言不合就崩溃了。还好有腾讯优测(http://utest.qq.com/)。经过分析后(在AS中直接运行到手机中不会出现问题,打包后再安装就崩溃,查看日志又找到了一堆at com a.a.c.a.a(Unknown Source)之类的,判断应该是混淆导致的)。

百度关键字:

发现这事跟GSON脱不了干系。

打开一个攻略,发现和我的问题差不多,而且刚好我这个页面也引用了GSON,于是按照他所说的方法在混淆文件(proguard-android.txt)中添加了相应代码,果然解决了,非常感谢这位网友。以下是攻略原文:

Android混淆后运行程序出现异常:Missing type parameter

对程序进行混淆,打包发布版apk,再用真机对该发布版apk进行测试,发现所有有网络请求的页面都无法显示出数据,查看log,发现如下异常:

<�喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+zfjJz7Lpwcuy6Q=="Missing type parameter"这个问题到底是什么原因引起的,可以看到这样的回答因为程序中用到了gson的new typeToken。那应该是在混淆的文件里对typetoken相关的类做了混淆,导致运行时程序不能识别。看上图的

at com a.a.c.a.a(Unknown Source)这个应该就是被混淆的不能识别的类。为了进一步证实,还是查看下混淆后生成的文件mapping.txt来找出混淆后的类com a.a.c.a.a对应的是程序中的哪个类,如下图:

可以确定是指向了com.google.gson.reflect.TypeToken

然后就在混淆文件里proguard-android.txt(我在Android Studio0.3.7上用的该txt对程序进行混淆,很多以往的项目都是在proguard.cfg里)加上这句话:

-keep class com.google.gson.** {*;} 表示对该类不执行proguard操作

网上也可查到很多解决办法,例如下面两个

android混淆编译——问题汇总 和stackoverflow上的 proguard Missing type parameter

在 proguard.cfg中添加

-dontobfuscate

-dontoptimize

# Gson uses generic type information stored in a class file when working with fields. Proguard

# 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.** { *; }

但是这样配置后,打包发布版的apk后运行还是出现同样的错误,问题并没有解决。

纠结过后,想想问题既然出在混淆了不该混淆的类上,而且是在进行获取网络数据时报错的,又已经排除了TypeToken类被混淆导致的问题(已经写了-keep class com.google.gson.** {*;}还出现Missing Type patamerer的问题),那应该是程序在执行到TypeToken之前就遇到了被混淆的类,查看程序中获取网络数据并进行json格式转换操作的相关代码,发现:

在获取接口数据的模块中引用了org.json下的类,但proguard-android.txt中没有对这部分类做保留操作。

在proguard-android.txt中加入:

-keep classorg.json.** {*;}

再打包发布版的apk,运行正常,问题解决啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,047评论 25 707
  • 在离职之际,也没有啥事可以做,就自己捣腾下代码混淆,言归正传。 为了防止自己的劳动成果被别人窃取,混淆代码能有效防...
    Orz013阅读 993评论 0 0
  • 1.首先需要在app下的build.gradle下配置,true表示编译时会混淆代码\ 2.在proguard-r...
    Thomas_yy阅读 6,613评论 0 6
  • 姓名:谢新葵 公司:宁波大发化纤有限公司” 宁波盛和塾《六项精进》第235期学员感谢二组 【日精进打卡第103天】...
    sandy201704阅读 158评论 0 0
  • 别让你的父母在你面前变得小心翼翼。写下这个标题,我是心疼的。 我们似乎还记得小的时候,当我们把碗里不爱吃的青菜挑出...
    90后小后生阅读 240评论 0 0