升级到SDK 31后Room找不到@Entity导致构建失败该如何解决?
问题排查结果
存在的问题
- 实体类Subscriber配置错误:你为Subscriber的id字段设置了
autoGenerate = true自增属性,但当前data class的构造要求必须传入非空的id参数,同时你注释了备用的无参构造,导致Room无法自动实例化实体类生成数据库表。 - Gradle依赖配置冲突:Kotlin项目仅需用kapt处理Room注解,你同时配置了kapt和Java用的annotationProcessor处理room-compiler,二者冲突引发注解处理异常。
- 构建脚本配置错误:你把协程实验性开关放在了dependencies依赖块内,位置错误导致构建脚本解析异常。
解决方案
- 修正Subscriber实体类
给id字段添加默认值0,无需手动传入id即可创建实例,也符合Room的实例化要求:
package com.homeofficeprojects.samplearchitecturedatabasecoroutinesproject import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "subscriber_data_table") data class Subscriber( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "subscriber_id") var id: Int = 0, @ColumnInfo(name = "subscriber_name") var name: String, @ColumnInfo(name = "subscriber_email") var email: String )
- 修正Gradle配置
删除dependencies块内的两处错误配置:
// 删除这行Java注解处理器配置 annotationProcessor("androidx.room:room-compiler:$room_version") // 删除这部分错误放置的协程配置 kotlin { experimental { coroutines "enable" } }
其余原有依赖保留不变即可。
- 清理缓存重新构建
修改完成后执行Android StudioFile -> Invalidate Caches / Restart清理缓存,再重新构建项目即可解决报错。
内容的提问来源于stack exchange,提问作者DJ. Aduvanchik
相关产品推荐
相关产品推荐

