Realm迁移报错:提示已移除$stable属性但从未添加该属性
解决Realm迁移错误:Property 'FeedbackModel.$stable' has been removed
问题原因
$stable是Realm Kotlin SDK编译时自动生成的内部属性,用于对象稳定性校验。出现这个错误通常是因为编译缓存残留、SDK版本不匹配,或者之前的构建过程中该属性被意外写入了Realm Schema。
解决方案
1. 清理编译缓存
先尝试清理项目编译缓存,消除可能的残留问题:
- 在Android Studio中,点击
File > Invalidate Caches...,勾选Clear file system cache and local history,然后重启IDE。 - 或者执行命令行清理:
# Mac/Linux ./gradlew clean # Windows gradlew clean
2. 统一Realm SDK版本
检查项目中所有Realm相关依赖的版本是否一致,比如在Module级别的build.gradle中:
dependencies { implementation("io.realm.kotlin:library-base:1.12.0") kapt("io.realm.kotlin:plugin:1.12.0") }
确保所有Realm依赖版本相同,避免版本冲突导致的编译异常。
3. 手动添加迁移规则(缓存清理无效时)
如果清理缓存后错误依然存在,需要在Realm配置中显式处理该属性的移除:
val realmConfig = RealmConfiguration.Builder( schema = setOf(FeedbackModel::class) ) .schemaVersion(2) // 版本号需高于当前已有的schema版本 .migration { oldRealm, newRealm -> // 从旧schema中移除$stable属性 if (oldRealm.schemaVersion < 2) { oldRealm.schema.get("FeedbackModel")?.removeField("\$stable") } } .build()
注意字段名中的$需要用\转义,确保能正确匹配到内部生成的属性。
4. 重置Realm(开发环境可选)
如果处于开发阶段,测试数据可以丢弃,直接重置Realm文件:
// 在初始化Realm前执行 Realm.deleteRealm(realmConfig)
也可以通过设备的应用设置,清除应用数据来重置Realm。
内容的提问来源于stack exchange,提问作者codewithbawo
相关产品推荐
相关产品推荐

