Se lanzó la primera versión alfa de Room 3.0. Room 3.0 es una versión principal de la biblioteca que incluye cambios significativos y se enfoca en Kotlin Multiplatform (KMP). Además, agrega compatibilidad con JavaScript y WebAssembly (WASM) sobre la compatibilidad existente con Android, iOS y JVM para computadoras de escritorio.
En este blog, describimos los cambios rotundos, los motivos de Room 3.0 y las diversas acciones que puedes realizar para migrar desde Room 2.0.
Cambios rotundos
Room 3.0 incluye los siguientes cambios importantes en la API:
- Se quitaron las APIs de SupportSQLite: Room 3.0 está completamente respaldado por las APIs del controlador androidx.sqlite. Las APIs de SQLiteDriver son compatibles con KMP, y quitar la dependencia de Room en la API de Android simplifica la superficie de la API para Android, ya que evita tener dos backends posibles.
- Ya no se genera código Java: Room 3.0 genera código Kotlin exclusivamente. Esto se alinea con el paradigma en evolución de Kotlin primero, pero también simplifica la base de código y el proceso de desarrollo, lo que permite iteraciones más rápidas.
- Enfoque en KSP: También dejaremos de admitir el procesamiento de anotaciones (AP) de Java y KAPT. Room 3.0 es solo un procesador de KSP (Kotlin Symbol Processing), lo que permite un mejor procesamiento de las bases de código de Kotlin sin estar limitado por el lenguaje Java.
- Prioridad de las corrutinas: Room 3.0 adopta las corrutinas de Kotlin, lo que hace que sus APIs sean prioritarias para las corrutinas. Las corrutinas son el framework asíncrono compatible con KMP, y hacer que Room sea asíncrono por naturaleza es un requisito fundamental para admitir plataformas web.
Un paquete nuevo
Para evitar problemas de compatibilidad con las implementaciones existentes de Room 2.x y para las bibliotecas con dependencias transitivas de Room (por ejemplo, WorkManager), Room 3.0 reside en un paquete nuevo, lo que significa que también tiene un nuevo grupo de Maven y nuevos IDs de artefactos. Por ejemplo, androidx.room:room-runtime se convirtió en androidx.room3:room3-runtime, y las clases como androidx.room.RoomDatabase ahora se ubicarán en androidx.room3.RoomDatabase.
Kotlin y Coroutines First
Como ya no se genera código Java, Room 3.0 también requiere KSP y el compilador de Kotlin, incluso si la base de código que interactúa con Room está en Java. Se recomienda tener un proyecto de varios módulos en el que se concentre el uso de Room y se puedan aplicar el complemento de Kotlin para Gradle y KSP sin afectar el resto de la base de código.
Room 3.0 también requiere corrutinas y, más específicamente, las funciones de DAO deben ser de suspensión, a menos que muestren un tipo reactivo, como un Flow. Room 3.0 no permite bloquear funciones de DAO. Consulta la documentación sobre corrutinas en Android para comenzar a integrar corrutinas en tu aplicación.
Migración a las APIs de SQLiteDriver
Con el cambio de SupportSQLite, las apps deberán migrar a las APIs de SQLiteDriver. Esta migración es fundamental para aprovechar todos los beneficios de Room 3.0, incluido el uso de la biblioteca de SQLite incluida a través de BundledSQLiteDriver. Puedes comenzar a migrar a las APIs del controlador hoy mismo con Room 2.7.0 y versiones posteriores. Te recomendamos que evites cualquier uso adicional de SupportSQLite. Si migras tus integraciones de Room a las APIs de SQLiteDriver, la transición a Room 3.0 será más sencilla, ya que el cambio de paquete implica, principalmente, actualizar las referencias de símbolos (importaciones) y es posible que requiera cambios mínimos en los sitios de llamada.
Para obtener una breve descripción general de las APIs de SQLiteDriver, consulta la documentación de las APIs de SQLiteDriver.
Para obtener más detalles sobre cómo migrar Room para usar las APIs de SQLiteDriver, consulta la documentación oficial para migrar desde SupportSQLite.
Wrapper de Room SupportSQLite
Entendemos que quitar por completo SupportSQLite podría no ser factible de inmediato para todos los proyectos. Para facilitar esta transición, Room 2.8.0, la versión más reciente de la serie Room 2.0, introdujo un nuevo artefacto llamado androidx.room:room-sqlite-wrapper. Este artefacto ofrece una API de compatibilidad que te permite convertir un RoomDatabase en un SupportSQLiteDatabase, incluso si las APIs de SupportSQLite en la base de datos se inhabilitaron debido a que se instaló un SQLiteDriver. Esto proporciona un puente temporal para los desarrolladores que necesitan más tiempo para migrar por completo su base de código. Este artefacto sigue existiendo en Room 3.0 como androidx.room3:room3-sqlite-wrapper para permitir la migración a Room 3.0 y, al mismo tiempo, admitir el uso crítico de SupportSQLite.
Por ejemplo, las invocaciones de roomDatabase.openHelper.writableDatabase se pueden reemplazar por roomDatabase.getSupportWrapper(), y se proporcionaría un wrapper incluso si se llama a setDriver() en el compilador de Room.
Para obtener más detalles, consulta la documentación de room-sqlite-wrapper.
Compatibilidad web con Room y SQLite
Se agregó compatibilidad con los destinos JS y WasmJS de Kotlin Multiplataforma, y se incorporaron algunos de los cambios más significativos en la API. Específicamente, muchas APIs en Room 3.0 son funciones de suspensión, ya que la compatibilidad adecuada con el almacenamiento web es asíncrona. Las APIs de SQLiteDriver también se actualizaron para admitir la Web, y hay un nuevo controlador asíncrono web disponible en androidx.sqlite:sqlite-web. Es un controlador basado en Web Worker que permite conservar la base de datos en el sistema de archivos privado del origen (OPFS).
Para obtener más detalles sobre cómo configurar Room para la Web, consulta las notas de la versión 3.0 de Room.
Tipos de devolución de DAO personalizados
Room 3.0 introduce la capacidad de agregar integraciones personalizadas a Room de manera similar a RxJava y Paging. Con una nueva API de anotación llamada @DaoReturnTypeConverter, puedes crear tu propia integración de modo que el código generado de Room sea accesible en el tiempo de ejecución. Esto permite que las funciones de @Dao tengan sus tipos de devolución personalizados sin tener que esperar a que el equipo de Room agregue la compatibilidad. Las integraciones existentes se migran para usar esta funcionalidad y, por lo tanto, ahora requerirán que quienes dependan de ella agreguen los convertidores a las definiciones de @Database o @Dao.
Por ejemplo, el convertidor de paginación se ubicará en el artefacto androidx.room3:room3-paging y se llamará PagingSourceDaoReturnTypeConverter. Mientras tanto, para LiveData, el convertidor está en androidx.room3:room3-livedata y se llama LiveDataDaoReturnTypeConverter.
Para obtener más detalles, consulta la sección DAO Return Type Converters en las notas de la versión de Room 3.0.
Modo de mantenimiento de Room 2.x
Dado que el desarrollo de Room se centrará en Room 3, la versión actual de Room 2.x entrará en modo de mantenimiento. Esto significa que no se desarrollarán funciones importantes, pero seguirán lanzándose parches (2.8.1, 2.8.2, etcétera) con correcciones de errores y actualizaciones de dependencias. El equipo se compromete a continuar con este trabajo hasta que la sala 3 se estabilice.
Conclusiones
Nos entusiasma mucho el potencial de Room 3.0 y las oportunidades que ofrece para el ecosistema de Kotlin. Mantente al tanto de las novedades a medida que continuamos este recorrido.
Seguir leyendo
-
Novedades sobre productos
El flujo de trabajo y las necesidades de IA de cada desarrollador son únicos, y es importante poder elegir cómo la IA ayuda en el desarrollo. En enero, presentamos la capacidad de elegir cualquier modelo de IA local o remoto para potenciar la funcionalidad de IA en Android Studio
Matthew Warner • Lectura de 2 min
-
Novedades sobre productos
Android Studio Panda 3 ya es estable y está listo para que lo uses en producción. Esta versión te brinda aún más control y personalización sobre tus flujos de trabajo potenciados por IA, lo que facilita más que nunca la creación de apps para Android de alta calidad.
Matt Dyor • Lectura de 3 min
-
Novedades sobre productos
En Google, nos comprometemos a llevar los modelos de IA más potentes directamente a los dispositivos Android que tienes en el bolsillo. Hoy nos complace anunciar el lanzamiento de nuestro modelo abierto de vanguardia más reciente: Gemma 4.
Caren Chang, David Chou • Lectura de 3 min
Mantente al día
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.