Android Room 2.3.0 重建项目后报错无法处理查询方法返回类型
错误原因
你遇到的错误本质是kapt注解处理器生成Dao存根代码时,无法正确识别suspend修饰的Room方法返回类型,统一识别为java.lang.Object,触发Room的返回类型校验规则。删除deleteUser方法后错误迁移到其他方法,也印证了问题是所有suspend方法的识别异常,而非单个方法的写法问题。
常见触发原因如下:
- 项目构建缓存损坏:本地缓存的kapt生成代码异常,导致没有修改代码也会突然报错
- Kotlin版本与Room 2.3.0不兼容:Room 2.3.0最低适配Kotlin 1.4.30版本,如果Kotlin版本过高/过低,都会导致suspend方法解析异常
- 缺少kotlin-kapt插件配置:kapt插件未正确启用,Room注解无法正常处理
解决方案
按优先级依次操作即可解决:
- 清理缓存重建项目
点击Android Studio菜单栏Build -> Clean Project,完成后执行Build -> Rebuild Project。如果依旧报错,手动删除项目根目录的.gradle文件夹、app模块下的build文件夹,重启Android Studio后重新构建。 - 适配版本
如果清理缓存无效,检查项目根目录build.gradle中的Kotlin版本,确保不低于1.4.30。如果你的Kotlin版本已经升级到1.6及以上,建议升级Room版本到2.4.3来适配,修改依赖如下:
// Room implementation "androidx.room:room-runtime:2.4.3" kapt "androidx.room:room-compiler:2.4.3" implementation 'androidx.room:room-ktx:2.4.3'
- 检查kapt配置
确认app模块build.gradle顶部已经添加kapt插件:
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' // 必须引入该插件 }
内容的提问来源于stack exchange,提问作者Predrag Maksimovic
相关产品推荐
相关产品推荐

