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

Android Kotlin:Release版APK不显示Room与Firestore更新数据

解决Release版Room数据库新增字段不显示的问题
  • 检查ProGuard/R8混淆规则
    Release版默认开启代码混淆,要是Room的实体类、DAO类被混淆,字段映射肯定会出问题。直接在proguard-rules.pro里加这些规则:

    -keep class com.yourpackage.database.entity.** { *; }
    -keep interface com.yourpackage.database.dao.** { *; }
    -keep class androidx.room.** { *; }
    -keepclassmembers class * extends androidx.room.RoomDatabase {
        public static <T extends androidx.room.RoomDatabase> T create(...);
    }
    -keepattributes *Annotation*
    

    尤其是新增字段用了@ColumnInfo或者序列化注解的话,必须保留注解不被混淆。

  • 验证Room数据库迁移逻辑
    就算改了版本号,Release版的迁移说不定没跑起来。先试试在数据库构建时加fallbackToDestructiveMigration()强制重建数据库:

    Room.databaseBuilder(context, AppDatabase::class.java, "db_name")
        .fallbackToDestructiveMigration()
        .build()
    

    如果这么改后数据正常显示,说明你的Migration类有问题,得检查addColumn语句的字段类型、名称是不是和实体类完全一致。

  • 排查Firestore到Room的数据映射
    Release版里Gson这类序列化库可能因为混淆,导致Firestore的字段没法正确赋值给Room实体类。要是实体类用了@SerializedName映射Firestore的键名,得在混淆规则里加上-keepattributes SerializedName。
    另外可以临时在Release版加日志(上线前记得删掉),打印从Firestore拿到的原始数据,还有存入Room前的实体对象,确认新增字段的值有没有被正确赋值。

  • 检查Room查询逻辑
    看看DAO里的查询语句是不是包含了新增字段,别用SELECT *(虽然理论上能包含所有字段,但混淆后字段名变了就会出问题),最好明确写出需要查询的字段。也可以加日志打印Room查询的结果,确认有没有读到新增字段的值。

内容的提问来源于stack exchange,提问作者Hamza Saghir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:05:10