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

升级Gradle7.5与Kotlin1.7.20后,Room数据库Release构建失效

解决方案:补充Room相关的ProGuard规则

在你的proguard-rules.pro文件中添加以下规则,即可解决Release构建中Room无法正常运行的问题:

# Room核心组件保护
-keep class androidx.room.** { *; }
-keep interface androidx.room.** { *; }

# 保留自定义Room实体类(替换为你的实体类包路径)
-keep class com.yourproject.database.entity.** { *; }

# 保留自定义DAO接口(替换为你的DAO接口包路径)
-keep interface com.yourproject.database.dao.** { *; }

# 保留自定义Room数据库类(替换为你的Database类路径)
-keep class com.yourproject.database.AppDatabase { *; }

# 保留Room注解处理器生成的实现类
-keep class * extends androidx.room.RoomDatabase
-keep class * implements androidx.room.Dao

# 保留Room相关注解及标记的成员
-keepattributes *Annotation*
-keepclassmembers class * {
    @androidx.room.* <fields>;
    @androidx.room.* <methods>;
}

# 协程支持(若使用Room的suspend方法则添加)
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler

规则说明:

  • Room的核心API类/接口不能被混淆,否则运行时会出现类找不到、方法无法调用的错误。
  • 你的实体类、DAO接口、Database类是Room的核心依赖,混淆会破坏它们的类结构与注解标记,导致Room无法生成正确的数据库操作代码。
  • 保留注解及注解标记的字段、方法,是因为Room完全依赖这些注解来解析数据库结构与操作逻辑。
  • 若项目使用了Room的协程扩展(如suspend方法),必须保留协程相关类,避免协程调度逻辑被混淆破坏。

如果项目中使用了@DatabaseView等Room扩展功能,需额外添加对应类的保留规则,例如:

-keep class com.yourproject.database.view.** { *; }

添加完成后重新构建Release版本,Room即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:42:58