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

KMP项目中Room 2.7.0-alpha06的RoomDatabaseConstructor声明冲突问题

KMP集成Room 2.7.0-alpha06构造器冲突问题解决

问题根源

Room 2.7.0-alpha06开始会自动生成实现RoomDatabaseConstructor的类,如果你手动定义了同名的expect/actual构造器对象,就会和自动生成的类产生命名冲突,触发“无对应expected声明”“重复声明”这类编译错误。

解决步骤

1. 删除手动定义的expect/actual构造器

直接删掉commonMain中的expect object MyDatabaseCtor,以及androidMain、iosMain目录下对应的actual object实现,消除命名冲突的源头。

2. 配置Room自动生成构造器(可选,自定义类名)

如果需要指定生成的构造器类名,在common模块的build.gradle.kts中添加Room配置:

room {
    schemaDirectory.set(file("schemas"))
    // 显式开启自动生成构造器(默认已开启,可按需声明)
    generateRoomDatabaseConstructor.set(true)
    // 指定生成的构造器全类名,避免默认名称与其他代码冲突
    roomDatabaseConstructorClassName.set("com.your.package.YourGeneratedDatabaseCtor")
}

3. 在Database类中关联自动生成的构造器

修改你的RoomDatabase子类,在@Database注解中指定构造器类:

@Database(
    entities = [YourEntity::class],
    version = 1,
    constructor = YourGeneratedDatabaseCtor::class // 填入自动生成的构造器类名
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun yourDao(): YourDao
}

4. 彻底清理构建缓存

  • 执行Android Studio的File > Invalidate Caches... > Invalidate and Restart
  • 删除项目根目录下的.gradle文件夹和各模块的build文件夹
  • 终端执行./gradlew clean build重新构建项目

内容的提问来源于stack exchange,提问作者Aris Guimerá

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:42:15