升级Room至2.4.3版本后AppDatabase_Impl权限覆盖错误求助
解决Room 2.4.3升级后的权限冲突问题
问题根源
Room 2.4.x版本调整了内部Delegate类中onCreate方法的访问权限为public,但自动生成的数据库实现代码(AppDatabase_Impl)里,匿名子类的onCreate方法用了protected修饰符,违反了Java方法覆盖的权限规则——子类方法权限不能比父类更严格,因此触发编译报错。
具体解决步骤
1. 统一Room所有依赖版本
检查Module级build.gradle文件,确保Room的runtime、compiler、ktx等所有相关依赖版本完全一致,都是2.4.3:
// Kotlin项目用kapt的写法 implementation "androidx.room:room-runtime:2.4.3" implementation "androidx.room:room-ktx:2.4.3" kapt "androidx.room:room-compiler:2.4.3" // 用KSP替代kapt的话,替换成下面这行 // ksp "androidx.room:room-compiler:2.4.3"
2. 清理缓存并重新编译
旧的生成代码残留可能导致冲突,执行以下操作:
- 点击Android Studio顶部菜单栏
Build->Clean Project - 再点击
Build->Rebuild Project - 也可以手动删除
app/build/generated目录下的Room相关生成文件
3. 检查自定义Callback的方法权限
如果构建数据库时添加了自定义RoomDatabase.Callback,确保重写的onCreate、onOpen等方法显式声明为public(Kotlin默认是public,但若手动修改过权限需恢复):
Room.databaseBuilder(context, AppDatabase::class.java, "my_car_db") .addCallback(object : RoomDatabase.Callback() { override public fun onCreate(db: SupportSQLiteDatabase) { super.onCreate(db) // 你的数据库初始化逻辑 } }) .build()
4. 匹配Kotlin与Room版本
Room 2.4.3需要搭配Kotlin 1.6.x版本(推荐1.6.21及以上的1.6.x分支),版本不匹配也会引发兼容性问题。检查根目录build.gradle的Kotlin插件版本:
plugins { id 'com.android.application' version '7.2.0' apply false id 'org.jetbrains.kotlin.android' version '1.6.21' apply false }
额外方案
如果以上步骤都无效,可以暂时降级Room到2.4.2版本,或者升级到更高的稳定版本(如2.5.0),后续版本大概率修复了该权限冲突问题。
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

