Room 3: Migración a la Nueva Versión Principal con Soporte para wasmJs y Corutinas
Room 3 introduce el paquete androidx.room3, eliminando completamente la dependencia de la API específica de Android para el controlador SQLite. La API pública ahora utiliza alternativas documentadas para el manejo de conexiones.
Ejemplo de transición del estilo antiguo al nuevo:
// Antes
roomDatabase.query("select * from users").use { cursor -> ... }
// Después
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("select * from users") { stmt -> ... }
}
La generación de código ha migrado de KAPT a KSP. Toda la lógica interna de los DAO se ha reescrito para usar corutinas, simplificando el trabajo asíncrono en Kotlin Multiplataforma.
La mejora clave es el soporte para wasmJs. La versión KMP de Room ahora es compatible con WebAssembly, abriendo posibilidades para el desarrollo web móvil.
Las funciones obsoletas se han eliminado, limpiando la base de código heredado.
Pasos para Migrar a Room 3
La migración procede sin cambios arquitectónicos radicales. Los pasos principales son:
- Actualizar el plugin y las dependencias en build.gradle.kts:
// build.gradle.kts raíz
plugins {
id("androidx.room3") version "3.0.0-alpha02" apply false
}
// build.gradle.kts de la librería
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")
}
- Reemplazar importaciones: RoomDatabase, @Entity y otras clases ahora están en el paquete room3.
- Compilar el proyecto y corregir cualquier error. Se han añadido funciones suspend a los DAO y ha cambiado la nomenclatura de métodos.
- Verificar los esquemas de base de datos en el directorio schemas — Room 3 los requiere para la compilación.
Después de la migración, probar en todos los objetivos: JVM, Android, iOS, wasmJs.
Ventajas para el Desarrollo KMP
- Corutinas en el núcleo: Las funciones suspend son el estándar en los DAO, eliminando la necesidad de Flow o LiveData.
- wasmJs: Soporte completo para WebAssembly permite ejecutar Room en el navegador sin soluciones alternativas.
- KSP en lugar de KAPT: Compilación más rápida, menos artefactos.
Comparación de rendimiento de generación de código (basada en proyectos KMP típicos):
| Métrica | Room 2 (KAPT) | Room 3 (KSP) |
|----------------------|---------------|---------------|
| Tiempo de compilación| 45 seg | 22 seg |
| Tamaño APK | 1.2 MB | 0.9 MB |
| Ejecuta en wasm | No | Sí |
Los datos son aproximados y dependen del tamaño del proyecto.
Puntos Clave
- Nuevo paquete room3 con una API limpia libre de dependencias de Android.
- Soporte completo para corutinas y KSP en KMP.
- Integración wasmJs para aplicaciones web.
- La migración es sencilla: actualizar dependencias + corregir importaciones.
- Versión alfa: esperar la versión estable para uso en producción.
Recomendaciones de Implementación
Para desarrolladores de nivel medio/senior: comenzar con proyectos KMP nuevos. Para proyectos heredados, posponer la migración hasta 3.0.0-estable.
Probar con escenarios del mundo real:
- Transacciones con funciones suspend.
- Migraciones de esquema en wasm.
- Rendimiento de consultas en el navegador.
Room 3 fortalece su posición como ORM universal para multiplataforma, especialmente con el crecimiento del ecosistema wasm.
— Editorial Team
Aún no hay comentarios.