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 ...
随机推荐
- Advanced Installer设置安装最后一步启动软件
左侧用户界面中选择对话框-ExitDialog 在完成操作项中勾选"安装结束时启动应用程序",在弹出的对话框中选择需要启动的exe文件
- 华硕ROG Zenith Extreme Alpha主板评测:主板界的航空母舰
在AMD推第一代锐龙线程撕裂者的时期,华硕ROG Zenith Extreme主板凭借给力的用料,各种便利的超频设计,出色的SupermeFX音效还有万兆网卡赢得了不少用户的好评.现在AMD推出了第二 ...
- Nexus系列:简介和安装(Windows、Linux)以及反向代理Nexus
目录 简介 安装 Windows Linux Nexus相关命令 Nginx反向代理Nexus 简介 Sonatype Nexus是一个Maven仓库管理器,可以节省网络带宽并加速项目搭建的进程.它可 ...
- C语言输出百分号%
遭遇的问题 在学习时有一个课后题要求计算两个变量的加减乘除以及取余,其中去余需要输出如下的效果: 10 % 5 = 0; 我就写了这样的代码: printf("a % b = %d" ...
- 关于DbgridEh滚动从表一起跟着滚动的分析
我的实现:
- Java-将文本(字符串)转化成二进制字符
今天在测试MySQL的Blob相关类型时,这种一般存放的是二进制文本,所以就想插入二进制文本. package com.aaa.dao; public class aaa { public stati ...
- 使用python进行视频图片提取
操作系统 : Windows 10 [版本 10.0.19043.1165] Python 版本 : 3.9.2_x64 可以借助python代码使用opencv实现,命令行示例代码如下: # pyt ...
- SP16113 SUBTLEBA - Trucks Transportation 题解
题目传送门 前言 本题样例有问题,如果想要样例可以去 vjudge 上. 本题提交后可能会出现 UKE ,建议前往 link 提交,而且本篇题解中所提供的代码也为 link 代码. 前置知识 Krus ...
- NC25084 [USACO 2006 Nov S]Bad Hair Day
题目 题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is s ...
- 走出人生的舒适区,告别 CRUD
舒适区(Comfort zone),指的是一个人所处的一种环境的状态,和习惯的行动,人会在这种安乐窝的状态中感到舒适并且缺乏危机感. 工作中的舒适区 很多人工作也每天很累很辛苦,程序员每天都在加班加 ...