Android 混淆打包后gson报错Missing type parameter
原文: 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的更多相关文章
- vue 使用webpack打包后路径报错以及 alias 的使用
一.vue 使用webpack打包后路径报错(两步解决) 1. config文件夹 ==> index.js ==> 把assetsPublicPath的 '/ '改为 './' 2. b ...
- vue打包后接口报错
最近自己和朋友做了一个小的项目,用的是vue3.x版本,本地dev运行的时候接口什么的都是正常的,但是build打包后本地使用anywhere启动一个本地服务的时候发现接口报错405状态,发布到线上接 ...
- vue项目打包后运行报错400如何解决
昨天一个Vue项目打包后,今天测试,发现无论localhost还是服务器上都运行不了,报错如下: Failed to load resource: the server responded with ...
- moviepy应用pyinstaller打包后执行报错AttributeError: module audio/video.fx.all has no attribute fadein、crop
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在开发moviepy的Python程序使用pyinstaller打包后 ...
- 解决Pyqt打包后运行报错:应用程序无法启动 因为程序的并行配置不正确
做了一个生成二维码的小程序:http://www.cnblogs.com/dcb3688/p/4241048.html 直接运行脚本没问题,用pyinstaller打包后再运行就直接报错了: 应用程序 ...
- 【解决】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 ...
- spring boot 2.0 thymeleaf调试时正常,打包后运行报错. 找不到模板文件.
使用th:fragment 定义模板 使用 th:replace 来添加模板到需要的地方. 使用时发现一个非常奇怪的问题. 本机idea 调试环境一切正常, 但是打成jar包以后报错,提示找不到对 ...
- Vue(二十五)打包后路径报错问题
1.修改 config - index.js 2.修改 build - utils.js
- android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)
最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...
- 安卓工作室 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 ...
随机推荐
- 天玑9300大战骁龙8 Gen3:十余项数据实测 到底谁才是安卓之王?
一.前言:全大核天玑9300正面硬钢骁龙8 Gen3 究竟谁才是安卓芯片之王? 今年,两家移动芯片厂商都开始放大招了,骁龙首发Cortex-X4超大核,联发科也不甘示弱,初次将"全大核&qu ...
- Go语言实现八大排序|排序算法|超详细保姆级别注释
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...
- JVM(Java虚拟机)整理(二)
前言 上一篇内容:JVM(Java虚拟机)整理(一)https://www.cnblogs.com/xiegongzi/p/17994659 Java 内存模型(JMM) Java 内存模型引入 声明 ...
- korean doll likeness模型|Japanese-doll-likeness模型获取及使用
1.模型 之前给大家写了Mac安装stable-diffusion-webui绘制AI妹子保姆级教程,教程在下面 [奶奶看了也不会]AI绘画 Mac安装stable-diffusion-webui绘制 ...
- OGG常用运维命令
1. 管理(MGR)进程命令 INFO MANAGER 返回有关管理器端口和进程id的信息. START MANAGER 开启管理进程 STATUS MANAGER ...
- 探索C语言中的联合体与枚举:数据多面手的完美组合!
欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 1. 联合体的定义 联合体又叫共用体,它是一种特殊的数据类型,允许您在相同的内存位置存 ...
- An Introduction to ANYDATA
以下内容来自Oracle FAQ writen By Kevin,关于ANYDATA类型在项目中的应用. My newest project needed to create a record kee ...
- 《系列二》-- 2、bean 的作用域: Scope 有哪些
目录 作用域 Scope 特性概述 常规作用域 web 场景作用域 经典问题 模拟场景 解决办法 方法一 方法二 实现接口 BeanFactoryAware 阅读之前要注意的东西:本文就是主打流水账式 ...
- 实操开源版全栈测试工具RunnerGo安装(一)
Docker版安装文档 一.环境要求 1.1 部署服务器要求 操作系统:任何支持 Docker 的 Linux x86 CPU内存:最低要求 4C8G,推荐 8C16G 网络要求:可访问互联网 ...
- go经典知识及总结
1.无论sync.Mutex还是其衍生品都会提示不能复制,但是能够编译运行 加锁后复制变量,会将锁的状态也复制,所以 mu1 其实是已经加锁状态,再加锁会死锁. 所以此题的答案是 fatal erro ...