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

Flutter集成RFID安卓手持终端Release版本Parcelable转换崩溃求助

解决Flutter Pigeon通信Release版本Parcelable类型转换崩溃问题

问题原因

Release版本默认开启代码混淆(R8/ProGuard),导致实现Parcelable接口的TagInfo类的类型信息被混淆或篡改,当执行val results = msg.obj as Array<Parcelable>时,因类型匹配失败抛出ClassCastException;而Debug版本关闭了混淆,类的完整类型信息被保留,因此无此问题。

解决方案

1. 给TagInfo类添加@Keep注解

使用AndroidX的@Keep注解标记TagInfo类,阻止混淆工具修改该类的类型信息:

import androidx.annotation.Keep
import android.os.Parcelable
import android.os.Parcel

@Keep
data class TagInfo(/* 你的字段定义 */) : Parcelable {
    constructor(parcel: Parcel) : this(
        // 从parcel读取字段的逻辑
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        // 写入字段到parcel的逻辑
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<TagInfo> {
        override fun createFromParcel(parcel: Parcel): TagInfo {
            return TagInfo(parcel)
        }

        override fun newArray(size: Int): Array<TagInfo?> {
            return arrayOfNulls(size)
        }
    }
}

2. 添加ProGuard混淆规则(备用)

如果@Keep注解未生效,直接在app模块的proguard-rules.pro文件中添加规则,保留TagInfo类及其Parcelable相关组件:

# 保留TagInfo类的所有成员
-keep class com.your.package.path.TagInfo {
    *;
}

# 保留Parcelable的CREATOR实例
-keepclassmembers class com.your.package.path.TagInfo implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator CREATOR;
}

注意替换com.your.package.path为TagInfo实际所在的包路径。

3. 保留Pigeon生成的通信类

确保Pigeon生成的跨语言通信类不被混淆,同样在proguard-rules.pro中添加:

-keep class com.your.package.path.pigeon.** { *; }

替换为你项目中Pigeon代码生成的包路径。

4. 增加类型安全检查

在强转前先判断对象类型,避免直接强转导致崩溃,同时添加日志便于排查:

val obj = msg.obj
if (obj is Array<*>) {
    try {
        val results = obj as Array<Parcelable>
        // 处理RFID标签逻辑
    } catch (e: ClassCastException) {
        Log.e("RFID", "Failed to cast object to Array<Parcelable>: ${e.message}")
    }
} else {
    Log.e("RFID", "Received unexpected object type: ${obj?.javaClass?.name}")
}

内容的提问来源于stack exchange,提问作者S. Aziz Kazdal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:52:34