返回首页

Room 3:wasmJs 和 KMP 中的协程

Room 3.0.0-alpha02 引入 room3 包,支持 wasmJs、协程和 KSP。迁移简化:插件和导入更新。适合带有 web 目标的 KMP 项目。

迁移到支持 wasmJs 的 Room 3
Advertisement 728x90

Room 3:通过 wasmJs 和协程支持迁移至新主版本

Room 3 引入了 androidx.room3 包,完全消除了对 Android 特定 SQLite Driver API 的依赖。公共 API 现在使用文档化的替代方案来处理连接。

从旧风格过渡到新风格的示例:

// 之前
roomDatabase.query("select * from users").use { cursor -> ... }

// 之后
roomDatabase.useReaderConnection { connection ->
  connection.usePrepared("select * from users") { stmt -> ... }
}

代码生成已从 KAPT 迁移到 KSP。所有内部 DAO 逻辑已重写以使用协程,简化了 Kotlin 多平台中的异步工作。

Google AdInline article slot

关键升级是 wasmJs 支持。Room 的 KMP 版本现在与 WebAssembly 兼容,为移动 Web 开发开辟了可能性。

已弃用的功能已被移除,清理了遗留代码库。

迁移到 Room 3 的步骤

迁移过程无需进行根本性的架构更改。主要步骤如下:

Google AdInline article slot
  • 在 build.gradle.kts 中更新插件和依赖项:
// 根 build.gradle.kts
plugins {
    id("androidx.room3") version "3.0.0-alpha02" apply false
}

// 库 build.gradle.kts
plugins {
    id("androidx.room3")
}

kotlin {
  sourceSets {
    commonMain {
      val room_version = "3.0.0-alpha02"
      implementation("androidx.room3:room3-runtime:$room_version")
      ksp("androidx.room3:room3-compiler:$room_version")   
    } 
  }
}

room3 {
    schemaDirectory("$projectDir/schemas")
}
  • 替换导入:RoomDatabase、@Entity 和其他类现在位于 room3 包中。
  • 构建项目并修复任何错误。已向 DAO 添加挂起函数,方法命名也已更改。
  • 检查 schemas 目录中的数据库模式——Room 3 在编译时需要它们。

迁移后,在所有目标上测试:JVM、Android、iOS、wasmJs。

对 KMP 开发的优势

  • 核心协程:挂起函数是 DAO 中的默认选项,无需使用 Flow 或 LiveData。
  • wasmJs:完整的 WebAssembly 支持允许在浏览器中运行 Room,无需变通方法。
  • KSP 替代 KAPT:更快的编译速度,更少的产物。

代码生成的性能比较(基于典型的 KMP 项目):

| 指标 | Room 2 (KAPT) | Room 3 (KSP) |

Google AdInline article slot

|----------------------|---------------|---------------|

| 编译时间 | 45 秒 | 22 秒 |

| APK 大小 | 1.2 MB | 0.9 MB |

| 在 wasm 上运行 | 否 | 是 |

数据为近似值,取决于项目大小。

关键要点

  • 新的 room3 包具有干净的 API,摆脱了 Android 依赖。
  • 为 KMP 提供完整的协程和 KSP 支持。
  • wasmJs 集成用于 Web 应用程序。
  • 迁移简单直接:更新依赖项 + 修复导入。
  • Alpha 版本:等待稳定版发布后再用于生产环境。

实施建议

对于中级/高级开发者:从全新的 KMP 项目开始。对于遗留项目,推迟迁移直到 3.0.0 稳定版。

使用真实场景进行测试:

  • 使用挂起函数的事务。
  • wasm 中的模式迁移。
  • 浏览器中的查询性能。

Room 3 巩固了其作为多平台通用 ORM 的地位,尤其是在 wasm 生态系统不断增长的背景下。

— Editorial Team

Advertisement 728x90

继续阅读