首页 > 解决方案 > 在我的项目上启用混淆后在 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 中处理的事实是导致问题的原因。知道是什么原因造成的以及如何解决这个问题吗?

标签: androidproguardandroid-r8

解决方案


推荐阅读