Room 3.0:这次不是升级,是重来

作者:Android_小雨日期:2026/3/20

用了 Room 这么多年,大家都习惯了那套熟悉的注解和生成代码。但 Google 这次直接玩大的:新包名、只生成 Kotlin 代码、彻底抛弃 KAPT,还把同步的 DAO 方法一刀切了。所有数据库操作必须走协程或者响应式类型。

image.png

这不是 Google 闲着没事干,而是为了彻底拥抱 Kotlin Multiplatform(KMP)。Room 从出生就死死绑定 Android 的 SupportSQLite,现在想跨平台(Android、iOS、JVM、甚至 Web),只能大破大立,甩掉历史包袱。

四个最扎心的变化

image.png

  1. 全新包名和依赖以前是 androidx.room:room-runtime,现在变成了 androidx.room3:room3-runtime。 类也从 androidx.room.* 挪到了 android.room3.*。 好处是 2.x 和 3.0 可以并存,方便慢慢迁;坏处是所有 import 都要改一遍。
  2. 彻底告别 Java 代码生成Room 3.0 只生成 Kotlin 代码。如果你项目里还有纯 Java 的 Entity 或 DAO,该动手迁移了。Google 说维护两套生成逻辑太累,直接砍掉。
  3. 只支持 KSPKAPT 和老的 Java 注解处理器直接下线。还好从 Room 2.4 开始就支持 KSP,大部分项目应该已经转过去了。
  4. DAO 方法必须异步这是影响面最广的一个。同步阻塞的方法彻底不让写了。
1//  Room 3.0 不允许  
2@Query("SELECT * FROM users WHERE id = :id")  
3fun getUserById(id: Int): User  
4//  必须这样  
5@Query("SELECT * FROM users WHERE id = :id")  
6suspend fun getUserById(id: Int): User  
7// 或者返回 Flow  
8@Query("SELECT * FROM users")  
9fun getAllUsers(): Flow<List<User>>  

想同步查数据?自己包一层 runBlocking 或者在协程作用域里调用。Google 的态度很清楚:现代 Android(和 KMP)开发,协程已经是标配了。

怎么平滑迁移?

别慌,Google 其实留了路:

  • 先换 SQLite 驱动:从 Room 2.7 开始就能用新的 androidx.sqlite 驱动 API,建议现在就开始,别再写 SupportSQLite 的代码了。
  • 用兼容层过渡:Room 2.8 提供了 room-sqlite-wrapper,能把新 RoomDatabase 转成老的 SupportSQLiteDatabase,方便逐步替换。
  • 再切到 Room 3.0:等稳定版出来,换依赖和包名。因为可以共存,你甚至可以按模块一个一个迁。
  • 自定义返回类型(RxJava、LiveData 等)需要用新的 @DaoReturnTypeConverter 注解显式注册。

核心思路:先在 2.x 版本里把底层驱动和调用方式准备好,再跳到 3.0。

最大的亮点:真正跨平台了

Room 3.0 不再是“Android 专属”。通过 KMP,它现在原生支持 JavaScript 和 WebAssembly(WasmJs)。Web 端用 androidx.sqlite:sqlite-web 驱动,基于 Web Worker + Origin Private File System(OPFS)实现持久化。

这意味着同一套 Entity、DAO、Database 定义,可以在 Android、iOS(通过 KMP)、桌面、甚至浏览器里复用。数据层逻辑终于不用每个平台重写一遍了,对做跨平台项目的团队来说,价值很大。

Room 2.x 还能继续用吗?

能,但已经进入维护模式。只会出 bug 修复和安全补丁,不会加新功能了。

如果你现在的项目跑得很稳,不急着动也可以。但如果是新项目,或者准备做 KMP,强烈建议直接上 3.0,哪怕它现在还是 alpha。因为拖得越晚,迁移成本只会越高。

写在最后

Room 3.0 是 Jetpack 向 KMP 全面转型的一个重要信号。Google 这次选择不兼容旧世界,直接拥抱 Kotlin-first、协程优先、更干净的架构。短期内肯定有痛点,但长远看,一个能真正跨平台的 Room,对整个生态都是利好。

你项目里还在用 KAPT 吗?打算什么时候开始准备 Room 3.0 迁移?或者你对强制协程这点有什么看法?欢迎评论区一起讨论。


Room 3.0:这次不是升级,是重来》 是转载文章,点击查看原文


相关推荐


OpenClaw龙虾图鉴:16只AI Agent选型指南
默语佬2026/3/11

这里写目录标题 🦞 OpenClaw龙虾图鉴:16只AI Agent选型指南🎯 快速选型指南🥇 第一梯队:官方正统1️⃣ OpenClaw - 原生官网框架2️⃣ 🌙 KimiClaw - 云端大存储+Kimi K2.53️⃣ ⚡ MaxClaw - 成本杀手,10秒部署 🥈 第二梯队:极客专精4️⃣ 🔥 NullClaw - 678KB极致疯子5️⃣ 🦀 OpenFang - Rust生产级Agent OS6️⃣ 🐍 Nanobot - Python死忠粉7️⃣ 🤖


一键部署 Ceph 集群!Ansible 运维实战教程
遇见火星2026/3/3

一、Ceph 基础介绍 1.1 什么是Ceph Ceph是一款开源的分布式存储系统,具备高可用、高扩展、无单点故障的特性,可统一提供块存储(RBD)、对象存储(RGW)、文件存储(CephFS)三种存储服务,广泛应用于云计算、大数据等场景。 1.2 Ceph核心组件 组件 作用 MON(Monitor) 集群监视器,维护集群状态、管理认证、决策集群拓扑 OSD(Object Storage Daemon) 存储数据的核心进程,负责数据的存储、复制、恢复、均衡 MDS(Met


一个简单Demo彻底理解前后端怎么连的丨Figma + Supabase + Vercel
阿星AI工作室2026/2/23

哈喽,大家好! 我是阿星👋 很多小白编程学了三个月,全是AI做主UI,难以融入自己的设计理念。 甚至不了解前后端到底怎么连通的。 一旦代码出错了,可能和AI对话还要重新理解一遍概念。所以今天,我们通过一个简单的case,把一个完整前后端的核心链路全跑一遍👇🏻 让你能自己把控UI、把控数据库、把控前端、后端。 🗺️ 先看一眼全局流程 整件事分五步,每一步做完了才能进下一步: ① Figma 画页面 →  ② 定接口契约 →  ③ Supabase 建数据库→  ④ AI 帮你写连接代码


EasyExcel的使用
脸大是真的好~2026/2/15

需求1:能够导出1个Excel文件,能够导入一个Excel文件; 需求2:导出的文件,能实现第1行,第123列的合并单元格:也就是会写注册处理器;知道sheet和cell是什么; 需求3:能实现合并的单元格设置单元格宽高,背景颜色,内容居中,字体大小; 需求4:能控制从任意行开始写入,并让要输出的字段居中; 需求5:导出能实现从任意行开始读入; 导出Excel文件 <!-- EasyExcel 核心依赖 --> <dependency> <groupId>com.alibaba</gro


提示词工程入门-03
一诺滚雪球2026/2/6

前言 "写个代码" "帮我写个快速排序函数,用 Python 实现,要求时间复杂度 O(n log n),添加详细注释" 同样是让 AI 写代码,为什么第一个指令得到的是模糊的回复,而第二个能得到精确满足需求的代码? 这就是提示词工程(Prompt Engineering)的魔力。 好的 Prompt = 好的输出。今天我们来学习如何写出让 AI "秒懂"的提示词。 1. 什么是提示词工程 提示词(Prompt):你给大模型的输入指令 提示词工程(Prompt Engineering):设计和


耗时 20 天,AI 漫剧 APP 和 Web 全部开源, 已斩获 764 星!
苍何2026/1/28

这是苍何的第 474 篇原创! 大家好,我是消失了一段时间的苍何。 1 月 5 号,我写了篇文章,并开源了 AI 漫剧 APP,获得了很多朋友的喜欢。 然后在 GitHub 上一共获得了 764 星和 181 fork,让我有些吃惊。 说实话,这个项目远超我们的预期,甚至连歪果哥都来给我们提 issue,希望支持双语。 甚至还有老板来咨询问我卖不卖这个 APP,我说,大哥,咱都开源了,自己去整吧,不用付费,哈哈哈。 这或许就是开源的魅力吧。 但我发现,APP 还是不大方便,评论区也不少求


万字长文!搞懂机器学习中的概率图模型
aicoting2026/1/19

推荐直接网站在线阅读:aicoting.cn 概率图模型(Probabilistic Graphical Models, PGM)是一类结合概率论与图论的强大工具,用于描述多个随机变量之间的依赖关系。它通过图结构将复杂的联合概率分布分解为局部条件概率分布,使得对高维数据建模和推断变得可行且高效。 根据图的类型,PGM 可分为有向图模型(如贝叶斯网络)和无向图模型(如马尔可夫随机场)。贝叶斯网络利用有向无环图表示变量之间的因果关系,适合建模因果推断和序列数据;马尔可夫随机场则通过无向图捕捉变量之


WPF样式进阶实战:外置样式+MVVM主题切换+样式优先级全解析
bugcome_com2026/1/11

在WPF开发中,样式(Style)是实现界面美化、统一风格、提高代码复用性的核心利器。但很多开发者在实际项目中,容易陷入「内联样式冗余」「主题切换困难」「样式优先级混乱」的困境,写出难以维护的XAML代码。 今天我们就通过一个完整的模块化实战项目(附全部可运行代码),从「外置样式封装」到「MVVM模式主题切换」,再到「样式优先级核心知识点」,全方位解锁WPF样式的高级用法,最终实现一个支持「浅/深色全局主题切换」「按钮专属样式切换」「传统后台代码样式切换」的完整案例。 一、项目架构梳理:模块化让


2025年终总结,智启
袁庭新2026/1/3

大家好,我是袁庭新。2025年就这么溜走了,对我而言,是极为不寻常的一年,总是想着用文字把它记录下来。 文章输出 写是为了更好的思考,坚持写作,力争更好的思考。 2025年累计发表54篇原创文章,平均1周更1篇,大多数是技术相关。2025年我有个转变——每个月写一篇月总结,对这个月主要做了什么事做一个系统的梳理,尽量以可量化的形式呈现,比如,这个月写了多少篇文章,拍了几条短视频,录了几节课,办了几场讲座等诸如此类。 为什么采用这种方式呢?前些年我也不是没写过年终总结,年底一回顾,感觉又稀里糊涂过


一文带你吃透 Java 反射机制
BestAns2025/12/24

一文带你吃透 Java 反射机制 在Java开发中,“反射”绝对是个让人又爱又恨的知识点。有人觉得它晦涩难懂、破坏封装,也有人靠它实现了各种灵活的功能——比如框架开发、动态配置加载。 其实反射没那么神秘,今天就给大家用最通俗的语言讲清楚:反射到底是什么、怎么用,以及反射在实际开发中的应用。 一、Java反射到底是什么? 我们先从Java的核心特性“封装”说起。平时写代码时,我们通过new关键字创建对象,调用类的方法、访问属性,都是在“编译期”就确定好要操作的类,比如User user = new

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客