You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12设备Parcel解包异常,低版本设备无此问题

Android 12设备Parcel反序列化异常解决

问题现象

仅Android 12设备出现如下异常,Android 12以下版本运行正常:

java.lang.RuntimeException: Parcel android.os.Parcel@d674dcb: Unmarshalling unknown type code 6881394 at offset 508
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3771)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2318)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:210)
       at android.os.Looper.loop(Looper.java:299)
       at android.app.ActivityThread.main(ActivityThread.java:8306)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)

相关跳转代码:

val intent= Intent(this,MyInfosActivity::class.java)
var bundle = Bundle()
bundle.putParcelable(STORE_DATA, storeData)
intent.putExtras(bundle)
startActivityForResult(intent, REQUEST_CODE_WISHLIST)

原因分析

Android 12对Parcelable的序列化/反序列化机制增加了更严格的校验,以下情况都可能触发该异常:

  • Parcelable实现类中,writeToParcel的字段写入顺序与createFromParcel的读取顺序不一致
  • 自定义Parcelable类存在字段遗漏读写,或嵌套的子对象未正确实现Parcelable
  • 使用@Parcelize注解时遗漏字段,或插件版本未适配Android 12
  • 反序列化时未指定正确的类加载器,导致系统无法识别自定义Parcelable类型

解决步骤

  1. 校验Parcelable实现
    检查StoreData类的writeToParcel和createFromParcel方法,确保字段的读写顺序、类型完全匹配,无遗漏或多余操作。若使用@Parcelize,确认所有需要序列化的字段都被注解覆盖,且kotlin-parcelize插件版本已更新至适配Android 12的版本。

  2. 检查嵌套对象
    若StoreData中包含自定义子对象,确保这些子对象同样正确实现了Parcelable接口,读写逻辑无问题。

  3. 指定类加载器
    在接收数据的MyInfosActivity中,获取Parcelable对象前先为Bundle设置正确的类加载器:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val bundle = intent.extras
        bundle?.setClassLoader(StoreData::class.java.classLoader)
        val storeData = bundle?.getParcelable<StoreData>(STORE_DATA)
        // 后续逻辑
    }
    
  4. 排查第三方依赖
    若StoreData来自第三方库,尝试升级库版本至适配Android 12的最新版,避免库中Parcelable实现存在兼容性问题。

内容的提问来源于stack exchange,提问作者Alex - Exaland Concept

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:06:13