现象描述
第一次进入页面调用 Intent.getParcelableExtra 接口正常解析数据,退出页面重新进来后再次调用接口,提示空指针异常: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Class.isInterface()' on a null object reference
错误堆栈信息如下
E FATAL EXCEPTION: main
Process: com.realtek.apps.dev, PID: 27164
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Class.isInterface()' on a null object reference
at java.lang.Class.isAssignableFrom(Class.java:589)
at android.os.Parcel.readParcelableCreatorInternal(Parcel.java:4850)
at android.os.Parcel.readParcelableInternal(Parcel.java:4763)
at android.os.Parcel.readValue(Parcel.java:4529)
at android.os.Parcel.readValue(Parcel.java:4312)
at android.os.Parcel.-$$Nest$mreadValue(Unknown Source:0)
at android.os.Parcel$LazyValue.apply(Parcel.java:4407)
at android.os.Parcel$LazyValue.apply(Parcel.java:4366)
at android.os.BaseBundle.getValueAt(BaseBundle.java:394)
at android.os.BaseBundle.getValue(BaseBundle.java:374)
at android.os.BaseBundle.getValue(BaseBundle.java:357)
at android.os.BaseBundle.get(BaseBundle.java:693)
at android.os.Bundle.getParcelable(Bundle.java:947)
at android.content.Intent.getParcelableExtra(Intent.java:8902)
at com.xxx.sdk.support.compat.content.IntentCompat.getParcelableExtra(SourceFile:2)
at com.xxx.apps.dev.intent.IntentSecondaryActivity.onCreate$lambda$2(IntentSecondaryActivity.kt:102)
at com.xxx.apps.dev.intent.IntentSecondaryActivity.$r8$lambda$WPPZCL-Q2_nm7nv-N6U2nkNeXoE(Unknown Source:0)
at com.xxx.apps.dev.intent.IntentSecondaryActivity$$ExternalSyntheticLambda2.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7506)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1211)
at android.view.View.performClickInternal(View.java:7483)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29335)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
原因分析
Parcelable 对象和 CREATOR 都不能被混淆,如果需要被混淆,请按照下面的格式处理
-keep class com.xxx.MyParcelable {
public *;
}
-keep class com.xxx.MyParcelable$* {
public *;
}