原文: Android 混淆打包后gson报错Missing type parameter - Stars-One的杂货小窝

记录一个简单的bug

在代码中使用了gson将json转为list:

val json = ""
val planList = gson.fromJson<List<PrayerPlan>>(json, object : TypeToken<List<PrayerPlan>>() {}.type)

然后线上的时候出现了以下错误

Fatal Exception: java.lang.RuntimeException: Missing type parameter.
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:3)
at com.google.gson.reflect.TypeToken.<init>(TypeToken.java:3)
at com.professional.bibble.ui.activity.PlanActivity$initPlanView$2$planList$1.<init>(PlanActivity.java)
at com.professional.bibble.ui.view.BottomPlayerLayout$init$2.invoke(BottomPlayerLayout.java:25)
at com.professional.bibble.ui.view.BottomPlayerLayout$init$2.invoke(BottomPlayerLayout.java:25)
at com.professional.bibble.ui.view.BottomPlayerLayout$sam$androidx_lifecycle_Observer$0.onChanged(BottomPlayerLayout.java:2)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
at com.dylanc.mmkv.MMKVOwnerKt$asLiveData$1$getValue$1.onActive(MMKVOwner.kt:4)
at androidx.lifecycle.LiveData.changeActiveCounter(LiveData.java:49)
at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:49)
at androidx.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged(LiveData.java:28)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:23)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:344)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:344)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:34)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:14)
at androidx.fragment.app.Fragment.performStart(Fragment.java:57)
at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:57)
at androidx.fragment.app.FragmentStateManager.k(FragmentStateManager.java:63)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:62)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:62)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:36)
at androidx.fragment.app.FragmentManager.dispatchStart(FragmentManager.java:58)
at androidx.fragment.app.FragmentController.dispatchStart(FragmentController.java:58)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:58)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8079)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3676)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2221)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7952)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1022)

实际上项目因为急着上线,没让测试进行release包的测试,不然这个问题一测就出来了

解决方法其实很简单,对应的bean已经是不会混淆,主要问题就是那个gson的类给混淆了,在proguard-rules.pro文件添加下面的混淆规则即可解决

-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

Android 混淆打包后gson报错Missing type parameter的更多相关文章

  1. vue 使用webpack打包后路径报错以及 alias 的使用

    一.vue 使用webpack打包后路径报错(两步解决) 1. config文件夹 ==> index.js ==> 把assetsPublicPath的 '/ '改为 './' 2. b ...

  2. vue打包后接口报错

    最近自己和朋友做了一个小的项目,用的是vue3.x版本,本地dev运行的时候接口什么的都是正常的,但是build打包后本地使用anywhere启动一个本地服务的时候发现接口报错405状态,发布到线上接 ...

  3. vue项目打包后运行报错400如何解决

    昨天一个Vue项目打包后,今天测试,发现无论localhost还是服务器上都运行不了,报错如下: Failed to load resource: the server responded with ...

  4. moviepy应用pyinstaller打包后执行报错AttributeError: module audio/video.fx.all has no attribute fadein、crop

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在开发moviepy的Python程序使用pyinstaller打包后 ...

  5. 解决Pyqt打包后运行报错:应用程序无法启动 因为程序的并行配置不正确

    做了一个生成二维码的小程序:http://www.cnblogs.com/dcb3688/p/4241048.html 直接运行脚本没问题,用pyinstaller打包后再运行就直接报错了: 应用程序 ...

  6. 【解决】MacOS下 Python3.7 使用 pyinstaller 打包后执行报错 Failed to execute script pyi_rth__tkinter

    Fix tcl/tk libs inclusion in tkinter with Python3.7 under MacOS 使用 Pyinstaller 打包时候报错 3027 ERROR: Tc ...

  7. spring boot 2.0 thymeleaf调试时正常,打包后运行报错. 找不到模板文件.

    使用th:fragment  定义模板 使用 th:replace  来添加模板到需要的地方. 使用时发现一个非常奇怪的问题. 本机idea 调试环境一切正常, 但是打成jar包以后报错,提示找不到对 ...

  8. Vue(二十五)打包后路径报错问题

    1.修改 config - index.js 2.修改 build - utils.js

  9. android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)

    最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...

  10. 安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label

    安卓工作室 android studio 汉化后,报错. 设置界面打不开. Android studio has been sinified and reported wrong.The setup ...

随机推荐

  1. Java - CodeForces - 266A

    题目: 桌子上有n块石头排成一行,每一块都可以是红色.绿色或蓝色.计算从表中取出的石头的最小数量,以便相邻的任何两块石头具有不同的颜色.如果一排石头之间没有其他石头,则认为它们相邻. 输入: 第一行包 ...

  2. 零基础入门学习JAVA课堂笔记 ——DAY07

    面向对象(下) 1. Instanceof 我们可以通过Instanceof关键词可以判断当前对象是否为某某类得父类 Object instanceof Student //true 注意:只有是两个 ...

  3. 关于SUPPLEMENTAL_LOG_DATA_MIN的设置问题

    Oracle数据库开启附加日志,用于Logminer或基于Logminer的一些操作. 客户咨询关于开启附加日志,SUPPLEMENTAL_LOG_DATA_MIN显示为啥是implicit,如何改成 ...

  4. SecureCRT使用sftp上传较大文件意外暂停

    今天在一台跳转机使用SecureCRT的sftp上传较大文件时,发现中途会时常停止传输,给出提示如下: 如果此时选择Accept Once,会继续传输,但是过一段时间后,还是会停止并给出相同提示,如果 ...

  5. 深入浅出 testing-library

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:佳岚 The more your tests resemb ...

  6. Java 运算符 - 除法

    1. 除法运算符 Java中的除法运算符是"/"符号,表示将左侧操作数除以右侧操作数. 2. 整数除法 在Java中,整数除法的结果是一个整数,即只保留除法的整数部分,舍去小数部分 ...

  7. Nand flash基本原理

    Nand flash基本原理       Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Vol ...

  8. 服务器网卡,10GE设备相关笔记

    连接线 铜线 六类线基本可以满足万兆, 万兆网络一般只在短程使用铜线, 或者完全不用铜线 光纤 根据带宽和距离, 分为OM2, OM3, OM4等, OM2一般用于千兆或者短距离万兆, 长距离万兆使用 ...

  9. Windows下,SpringBoot JDBC无法连接的问题

    问题症状 在Win7和Win10下启动时均会出现下面的错误,但是在OSX和Linux下没问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsExcepti ...

  10. 【Unity3D】AudioSource组件

    1 简介 ​ 1)AudioSource 与 AudioListener 简介 ​ AudioSource(音频源)组件用于控制播放 AudioClip(音频片段),能够控制 2D 和 3D(距离越远 ...