使用kotlin-parcelize编译报错:找不到readFromParcel符号求助
解决kotlin-parcelize配合AIDL时找不到readFromParcel符号的问题
原因及解决步骤
1. 对齐AIDL与Kotlin类的包名
AIDL对类的路径匹配要求严格:
- 若
BtDeviceKotlin类位于包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
相关产品推荐
相关产品推荐

