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

使用kotlin-parcelize编译报错:找不到readFromParcel符号求助

解决kotlin-parcelize配合AIDL时找不到readFromParcel符号的问题

原因及解决步骤

1. 对齐AIDL与Kotlin类的包名

AIDL对类的路径匹配要求严格:

  • 若BtDevice Kotlin类位于包com.your.package.bt下,AIDL文件必须放在src/main/aidl/com/your/package/bt/目录中
  • AIDL文件开头需声明对应包名,示例:
package com.your.package.bt;

parcelable BtDevice;

2. 手动添加AIDL所需的readFromParcel方法

kotlin-parcelize默认生成的Parcelable实现不包含readFromParcel方法,但AIDL的inout参数要求类提供该方法读取数据。修改BtDevice类:

import android.os.Parcel
import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class BtDevice(var address: String = "") : Parcelable {
    // 适配AIDL inout参数的readFromParcel方法
    fun readFromParcel(parcel: Parcel) {
        address = parcel.readString() ?: ""
    }
}

注意:方法名必须为readFromParcel,参数类型为android.os.Parcel,且保持public可见性(Kotlin默认即为public)。

3. 清理缓存后重新编译

缓存异常可能引发编译错误,执行以下命令清理并重建项目:

./gradlew clean build

4. 确保插件与Kotlin版本兼容

检查项目根目录的build.gradle,保证kotlin-parcelize插件使用的Kotlin版本与项目一致,示例:

// 项目根目录build.gradle
plugins {
    id 'org.jetbrains.kotlin.android' version '1.8.20' apply false
    // 其他插件配置...
}

内容的提问来源于stack exchange,提问作者NaughtyChild

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:21:25