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

Room升级至2.5.0-alpha03后迁移脚本因SHADOW_TABLE_NAME_SUFFIXES抛异常

Room 2.5.0-alpha03 迁移生成Schema JSON解析异常问题

问题描述

升级Room版本从2.4.3到2.5.0-alpha03后,执行迁移生成新的schema JSON文件(如74.json)时,偶尔会触发以下解析异常:

Caused by: java.lang.IllegalStateException: Cannot parse existing schema file: C:\mypath\com.example.MyDatabase\74.json. If you've modified the file, you might've broken the JSON format, try deleting the file and re-running the compiler. 
If you've not modified the file, please file a bug with a sample app to reproduce the issue.   
    at androidx.room.vo.Database.exportSchema(Database.kt:111)  
    at androidx.room.DatabaseProcessingStep.process(DatabaseProcessingStep.kt:123)  
    at androidx.room.compiler.processing.CommonProcessorDelegate.processRound(XBasicAnnotationProcessor.kt:123)     
    at androidx.room.compiler.processing.javac.JavacBasicAnnotationProcessor.process(JavacBasicAnnotationProcessor.kt:71)   
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90)    
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:197)    
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:985)    ... 44 more

对比新旧schema文件,发现新生成的文件中ftsVersion块多了以下不属于Schema规范的内容:

"SHADOW_TABLE_NAME_SUFFIXES": [
      "_content",
      "_segdir",
      "_segments",
      "_stat",
      "_docsize"
    ],
    "shadowTableNames$delegate": {
      "initializer": {},
      "_value": {}
    },

这些字段是androidx.room.migration.bundle.FtsEntityBundle类的静态变量,删除该代码块后异常消失,且问题与迁移脚本内容无关。

原因分析

这是Room 2.5.0-alpha03版本的一个bug:Room的Schema序列化逻辑错误地将FtsEntityBundle类中的静态字段(包括SHADOW_TABLE_NAME_SUFFIXES和委托属性shadowTableNames$delegate)写入了生成的JSON文件,而Room自身的Schema解析器无法识别这些非预期字段,导致抛出解析异常。

临时解决方法

  • 手动修复Schema文件:每次生成异常的JSON文件后,删除其中新增的SHADOW_TABLE_NAME_SUFFIXES和shadowTableNames$delegate代码块,再重新编译项目
  • 回退到稳定版:暂时降级Room版本至2.4.3,等待官方发布修复后的版本
  • 禁用Schema导出:如果项目不需要Schema文件,可以在@Database注解中设置exportSchema = false(注意:此方法会关闭Schema生成,不推荐需要迁移记录的项目使用)

后续处理

该问题属于Alpha版本的已知缺陷,建议关注Room后续的稳定版本更新,官方会在正式版或后续Alpha/Beta版本中修复此序列化逻辑错误。

内容的提问来源于stack exchange,提问作者Monica Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:39