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

引入Android-nRF-Mesh-Library后Room生成文件出现onCreate重写访问修饰符冲突错误

引入Android-nRF-Mesh-Library后Room生成文件出现onCreate重写访问修饰符冲突错误

嘿,这个问题我之前帮朋友排查过类似的,大概率是依赖版本冲突搞的鬼!你遇到的Room生成文件里onCreate方法的重写错误,根源基本是nRF Mesh库自带的Room版本和你项目中使用的Room版本不匹配,导致生成的代码里方法的访问修饰符(比如public/protected)出现了冲突。

给你几个一步步解决的方案:

  • 统一Room依赖版本
    首先确认你项目里当前使用的Room版本,然后强制nRF Mesh库使用和你完全一致的Room版本,避免版本差异带来的代码生成逻辑不同。在Module级别的build.gradle(或者build.gradle.kts)里这么改:

    dependencies {
        // 先声明你项目原本的Room依赖,比如这里用2.5.0作为示例
        implementation "androidx.room:room-runtime:2.5.0"
        annotationProcessor "androidx.room:room-compiler:2.5.0"
    
        // 引入nRF Mesh库时,强制其依赖的Room版本和你的项目一致
        implementation('no.nordicsemi.android:mesh:3.3.4') {
            force "androidx.room:room-runtime:2.5.0"
            force "androidx.room:room-compiler:2.5.0"
            // 也可以直接排除Mesh库自带的Room依赖,再用你自己的版本
            // exclude group: 'androidx.room'
        }
    }
    
  • 清理残留并重新构建
    版本统一后,一定要先清理旧的生成文件,避免残留代码干扰:

    1. 点击Android Studio顶部的Build -> Clean Project
    2. 接着执行Build -> Rebuild Project
    3. 也可以手动删除app/build/generated/目录下的生成文件,确保彻底清空旧代码
  • 检查自定义Database类的onCreate方法
    打开你自己定义的AppDatabase抽象类,确认onCreate方法的访问修饰符和Room生成的代码兼容。比如Room生成的实现类里的onCreate是protected,那你的抽象类里的方法也应该用protected(public可以重写protected,但反过来不行):

    @Database(entities = {YourEntity.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        @Override
        protected void onCreate(SupportSQLiteDatabase db) {
            super.onCreate(db);
            // 你的自定义初始化逻辑
        }
    }
    
  • 排查依赖树确认无冲突
    如果你还是不确定版本是否统一,可以执行Gradle命令查看完整依赖树:

    ./gradlew app:dependencies
    

    搜索androidx.room相关的依赖,确保所有条目都是你指定的版本,没有其他版本混入。

备注:内容来源于stack exchange,提问作者michael romano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:04:51