android - 在我的项目上启用混淆后在 BroadcastReceiver 中获取 InvalidClassException
问题描述
我的项目工作正常,但是一旦我开始混淆代码,我就会得到以下异常
致命异常:java.lang.RuntimeException:Parcelable 遇到 IOException 读取 Serializable 对象(名称 = com.mypackage.service.ba)由 java.io.InvalidClassException 引起:com.mypackage.service.ba);类对反序列化无效
这发生在以下 BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if (intent != null) {
UpdateServiceConfig config = null;
final Bundle bundle = intent.getBundleExtra(Keys.DATA);
if (bundle != null) {
crash => config = (UpdateServiceConfig) bundle.getSerializable(Keys.CONFIG);
}
}
}
}
这是我的 Proguard 规则
-keepnames class * implements java.io.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();
}
-keep class com.mypackage.service.config.UpdateServiceConfig { *; }
-keep class com.mypackage.service.config.config.** { *; }
应用程序的其他部分以完全相同的方式从包中检索此类,而没有任何异常。看起来这是在 BroadcastReceiver 中处理的事实是导致问题的原因。知道是什么原因造成的以及如何解决这个问题吗?
解决方案
推荐阅读
- spring - http-outgoing-2:关闭连接 ResourceAccessException:POST 请求上的 I/O 错误。HttpHostConnectException:连接被拒绝
- shell - 无法为 sendmail -t 添加新行到电子邮件正文 Unix |
- flutter - 无法从 Firebase 存储中获取下载网址
- algorithm - 在嘈杂的组中查找最大的匹配子串
- python - Pandas 要么没有找到特定的数据行,要么将其检测为空数据框
- mysql - 在 MySQL 中将整数转换为罗马数字
- javascript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于简单函数中的索引类型
- javascript - 带有后代的 JavaScript 特殊字符选择器不起作用
- reactjs - 客户端路由和客户端渲染是一回事吗?
- audio - Arduino Uno 将 FFT 音频转换为 LED 和振动电机问题