Room
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
11 de diciembre de 2024 | 2.6.1 | - | - | 2.7.0-alpha12 |
Cómo declarar dependencias
Para agregar una dependencia en Room, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Las dependencias de Room incluyen pruebas de migraciones de Room y Room RxJava.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Para obtener información sobre el uso del complemento KAPT, consulta la documentación de KAPT.
Para obtener información sobre el uso del complemento KSP, consulta la documentación de inicio rápido de KSP.
Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
De manera opcional, para las bibliotecas que no sean de Android (es decir, módulos de Gradle únicos de Java o Kotlin), puedes contar con androidx.room:room-common
para usar las anotaciones de Room.
Cómo configurar las opciones del compilador
Room tiene las siguientes opciones de procesador de anotaciones.
room.schemaLocation |
directory
Habilita la exportación de esquemas de bases de datos a archivos JSON en el directorio determinado. Consulta Migraciones de Room para obtener más información. |
room.incremental |
boolean
Habilita el procesador de anotaciones incrementales de Gradle. El valor predeterminado es true .
|
room.generateKotlin |
boolean
Genera archivos fuente de Kotlin en lugar de Java. Requiere KSP. El valor predeterminado es false .
Consulta las notas de la versión 2.6.0 para obtener más detalles.
|
Usa el complemento de Gradle de Room
Con Room 2.6.0 y versiones posteriores, puedes usar el complemento de Gradle de Room para configurar opciones para el compilador de Room. El complemento configura el proyecto de modo que los esquemas generados (que son un resultado de las tareas de compilación y se consumen para las migraciones automáticas) estén configurados correctamente para tener compilaciones reproducibles y almacenables en caché.
Para agregar el complemento, define el complemento y su versión en el archivo de compilación de Gradle de nivel superior.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
En el archivo de compilación de Gradle a nivel del módulo, aplica el complemento y usa la extensión room
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Es obligatorio configurar un schemaDirectory
cuando se usa el complemento de Gradle de Room. Esto configurará el compilador de Room y las diversas tareas de compilación y sus backends (javac, KAPT, KSP) para generar archivos de esquemas en carpetas con variantes, por ejemplo, schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Estos archivos se deben verificar en el repositorio para usarlos en la validación y las migraciones automáticas.
Algunas opciones no se pueden configurar en todas las versiones del complemento de Gradle de Room, aunque el compilador de Room las admite. En la siguiente tabla, se enumera cada opción y se muestra la versión del complemento de Room para Gradle que agregó compatibilidad para configurar esa opción con la extensión room
. Si tu versión es anterior o si la opción aún no es compatible, puedes usar las opciones del procesador de anotaciones en su lugar.
Opción | Desde la versión |
---|---|
room.schemaLocation (obligatorio) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Cómo usar las opciones del procesador de anotaciones
Si no usas el complemento de Gradle de Room o si la versión del complemento que usas no es compatible con la opción que deseas, puedes configurar Room con las opciones del procesador de anotaciones, como se describe en Cómo agregar dependencias de compilación. La forma en que especificas las opciones de anotación depende de si usas KSP o KAPT para Room.
Groovy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
Como room.schemaLocation
es un directorio y no un tipo primitivo, es necesario usar un CommandLineArgumentsProvider
cuando se agrega esta opción para que Gradle conozca este directorio cuando realice verificaciones actualizadas.
En Cómo migrar tu base de datos de Room, se muestra una implementación completa de CommandLineArgumentsProvider
que proporciona la ubicación del esquema.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 2.7
Versión 2.7.0-alpha12
11 de diciembre de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha12
. La versión 2.7.0-alpha12 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API experimental
RoomDatabase.Builder.setInMemoryTrackingMode()
para configurar si Room usará una tabla en memoria o no para el seguimiento de invalidación. (I2a9b2, b/185414040).
Correcciones de errores: Las migraciones destructivas ahora dejan caer vistas para garantizar que se vuelvan a crear, alineando el comportamiento cuando allowDestructiveMigrationForAllTables
está ACTIVADA (configuración predeterminada de KMP) con el comportamiento existente cuando está DESACTIVADA. (0a3e83, b/381518941)
Versión 2.7.0-alpha11
30 de octubre de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha11
. La versión 2.7.0-alpha11 contiene estas confirmaciones.
Cambios en la API
- Revisa la firma del método
convertRows()
recién agregada para que sea una función de suspensión que reciba unRawRoomQuery
para la paginación de habitaciones. (Ie57b5, b/369136627).
Correcciones de errores
- Se corrigió el problema en room-paging por el que se generaba un código no válido cuando se usaba
@Relation
junto conPagingSource
.
Versión 2.7.0-alpha10
16 de octubre de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha10
. La versión 2.7.0-alpha10 contiene estas confirmaciones.
Cambios en la API
- Crea una clase
ByteArrayWrapper
interna para admitir relaciones conByteBuffer
en plataformas que no sean de Android ni JVM. (I75543, b/367205685). - Agrega
SQLiteStatement.getColumnType()
junto con las diversas constantes de resultadosSQLITE_DATA_*
para permitir la recuperación del tipo de datos de una columna. (I1985c, b/369636251).
Versión 2.7.0-alpha09
2 de octubre de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha09
. La versión 2.7.0-alpha09 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema con la implementación de KMP de
room-paging
que causaba unError code: 8, message: attempt to write a readonly database
debido a que se iniciaba una transacción de escritura en una conexión de lectura. (b/368380988).
Versión 2.7.0-alpha08
18 de septiembre de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha08
. La versión 2.7.0-alpha08 contiene estas confirmaciones.
Nuevas funciones
- Los artefactos de
room-paging
se migraron para que sean compatibles con KMP. (Ib8756, b/339934824). - La API
invalidationTrackerFlow()
se generalizó como una API propia comoInvalidationTracker.createFlow()
y ahora está disponible para conjuntos de orígenes que no son de Android en proyectos de KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
Cambios en la API
- Se quitaron o reemplazaron todas las advertencias y los mensajes de error de Room que usaban la palabra
Cursor
, ya queCursor
ya no es un término general preciso para usar en la versión de KMP de Room. (Id8cd9, b/334087492).
Correcciones de errores
- Se corrigió un problema por el que Room KMP intentaba emitir código con
UUID
para plataformas que no son JVM. (b/362994709). - Se corrigió un problema con el complemento de Gradle de Room que causaba un error como "Cannot change attributes of configuration … after it has been locked for mutation" cuando se usaba en un proyecto de KMP con Compose multiplataforma. (b/343408758).
Versión 2.7.0-alpha07
21 de agosto de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha07
. La versión 2.7.0-alpha07 contiene estas confirmaciones.
Nuevas funciones
- El complemento de Gradle de Room ahora agregará automáticamente los esquemas exportados a las fuentes de recursos de la prueba de instrumentación de Android para que
MigrationTestHelper
pueda usarlos.
Correcciones de errores
- Se corrigió un problema con el "real" generado de
RoomDatabaseConstructor
que no tenía el modificador "real" en la funcióninitialize
si esa función también se anulaba en la declaración "expect". (359631627). - Se corrigió un problema por el que el "real" generado de
RoomDatabaseConstructor
no coincidía con la visibilidad de la declaración "expect". (358138953).
Versión 2.7.0-alpha06
7 de agosto de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha06
. La versión 2.7.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Cambia la configuración de creación de instancias de un
RoomDatabase
en un proyecto de KMP.
Debido al modelo de compilación de Kotlin 2.0, la estrategia de hacer referencia a una función que se generará, llamada instantiateImpl()
, ya no es viable. Se presentan dos APIs nuevas, @ConstructedBy
y RoomDatabaseConstructor
, que reemplazan a la estrategia instantiateImpl()
. La nueva estrategia es la siguiente:
Define un objeto expect que implemente
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Vincula el objeto con la declaración
@Database
con@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Crea una instancia de base de datos nueva, pero sin pasar un argumento de fábrica
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Se corrigieron b/316978491, b/338446862 y b/342905180.
- Se agregó compatibilidad con
@RawQuery
en Room KMP mediante una nueva API llamadaRoomRawQuery
que es similar aSupportSQLiteQuery
en términos de retención en la cadena SQL sin procesar y una función para vincular argumentos en una sentencia. Las funciones con anotaciones@RawQuery
ahora pueden aceptar unRoomRawQuery
como su único parámetro. (Iea844, b/330586815). - Agrega una sobrecarga de
setQueryCallback()
que acepte unCoroutineContext
. (Id66ff, b/309996304). - Se agregó compatibilidad con los destinos multiplataforma de Kotlin
linuxArm64
(I139d3, b/338268719).
Correcciones de errores
- Se corrigió un problema por el que Room generaba de forma incorrecta una llamada a
recursiveFetchArrayMap
en destinos que no son de Android. (710c36, b/352482325). - Se solucionó un problema por el que, a veces, Room arrojaba una excepción sobre el tiempo de espera de una conexión en un proyecto de KMP. (fa72d0, b/347737870).
- Se solucionó un problema en las migraciones automáticas que verificaba las claves externas demasiado pronto antes de que otras tablas cambiaran sus esquemas para cumplir con las nuevas claves externas. (7672c0, b/352085724).
Versión 2.7.0-alpha05
10 de julio de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha05
. La versión 2.7.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
SQLiteKt
porSQLite
y el deBundledSQLiteKt
porBundledSQLite
(I8b501).
Correcciones de errores
- Se corrigió un error por el que un
RoomDatabase
generaba un interbloqueo o un error con un tiempo de espera de conexión cuando se usabaAndroidSQLiteDriver
.
Versión 2.7.0-alpha04
12 de junio de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha04
. La versión 2.7.0-alpha04 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el que el procesador de anotaciones de Room generaba un código KMP incompatible cuando se definía un tipo de datos multimapa en un DAO (b/340983093).
- Se corrigió un problema por el que Room no podía encontrar la implementación de la base de datos generada si la clase con anotaciones
@Database
no tenía un paquete. (b/342097292). - Se corrigió un problema por el que, a veces, habilitar el cierre automático y la invalidación de varias instancias causaba un
ConcurrentModificationException
cuando la base de datos se cerraba automáticamente debido a que estaba inactiva.
Versión 2.7.0-alpha03
29 de mayo de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha03
. La versión 2.7.0-alpha03 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron varios problemas relacionados con Kotlin 2.0 y KSP 2.0. Ten en cuenta que Kotlin 2.0 con compatibilidad con KSP 2 no está completo y el equipo está trabajando en las diversas APIs y cambios de comportamiento en el nuevo compilador. (b/314151707).
Versión 2.7.0-alpha02
14 de mayo de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha02
. La versión 2.7.0-alpha02 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron varios problemas de KSP.
Versión 2.7.0-alpha01
1 de mayo de 2024
Lanzamiento de androidx.room:room-*:2.7.0-alpha01
. La versión 2.7.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Compatibilidad con Kotlin multiplataforma (KMP): En esta versión, Room se refactorizó para convertirse en una biblioteca de Kotlin multiplataforma (KMP). Aunque aún queda trabajo por hacer, esta versión presenta una nueva versión de Room en la que la mayoría de las funciones se “unificaron” (se hicieron multiplataforma). Las plataformas compatibles actualmente son Android, iOS, JVM (computadoras), Mac nativa y Linux nativa. Las funciones que faltan en las plataformas compatibles recientemente se completarán en las próximas versiones de Room.
Para obtener más información sobre cómo comenzar a usar Room KMP, consulta la documentación oficial de Room KMP.
- La generación de código de Kotlin en KSP se activó de forma predeterminada si el procesamiento se realiza a través de KSP. Para proyectos solo de KAPT o Java, Room seguirá generando fuentes de Java.
Cambios en la API
- Se agregó una sobrecarga de
Room.databaseBuilder()
que toma un parámetro lambda que se debe usar con una función generada por Room para evitar el uso de reflexión cuando se crea una instancia de la implementaciónRoomDatabase
generada. Un ejemplo de uso es el siguiente:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Se agregó una API para configurar una habitación con un
CoroutineContext
al compilador:RoomDatabase.Builder.setQueryCoroutineContext
. Ten en cuenta que unRoomDatabase
solo se puede configurar con ejecutores que usansetQueryExecutor
o con un contexto de corrutina, pero no con ambos. - Se agregó una API para configurar Room con un controlador
SQLite
:RoomDatabase.Builder.setDriver()
. Para obtener más información sobre la API del controladorSQLite
, consulta la documentación de KMP de SQLite. - Se agregaron APIs para acceder al
SQLiteConnection
subyacente desde las APIs del controlador:RoomDatabase.useReaderConnection
yRoomDatabase.useWriterConnection
. - Varias devoluciones de llamada relacionadas con Room ahora tienen una versión sobrecargada que recibe
SQLiteConnection
en lugar deSupportSQLiteDatabase
. Se espera que se anulen cuando se realice la migración a un proyecto de KMP. Para obtener más información sobre cómo migrar los usos de Room en una app para Android a un módulo KMP común, consulta la guía de migración. Las devoluciones de llamada son las siguientes:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- El artefacto KTX
androidx.room:room-ktx
se unió aandroidx.room:room-runtime
junto con todas sus APIs, y ahora está en blanco. Quítalo de tu lista de dependencias.
Versión 2.6
Versión 2.6.1
29 de noviembre de 2023
Lanzamiento de androidx.room:room-*:2.6.1
. La versión 2.6.1 contiene estas confirmaciones.
Correcciones de errores
- Se resolvió un problema en el código generado en el que el valor predeterminado de las columnas dobles en
EntityCursorConverter
se establecía en 0 en lugar de 0.0. También se incluyó una posible solución para un caso extremo similar para las columnas de tipo de número de punto flotante. (Id75f5, b/304584179). - Las excepciones que se arrojan de las cargas de
PagingSource
ahora se propagarán como unLoadStateUpdate
deLoadResult.Error
que contiene el Throwable. Este estado de error se puede observar a través dePagingDataAdapter.loadStateFlow(Views)
oLazyPagingItems.loadState(Compose)
. Ten en cuenta que esto marca un cambio de comportamiento en el que, en el pasado, los errores de carga se propagaban como una excepción que generaba el método dao que activaba la carga. (I93887, b/302708983).
Versión 2.6.0
18 de octubre de 2023
Lanzamiento de androidx.room:room-*:2.6.0
. La versión 2.6.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.5.0
- La opción para habilitar la generación de código de Kotlin (o "Kotlin CodeGen") ahora está disponible en Room KSP. (4297ec0). Para activar Kotlin CodeGen en Room, agrega el nombre de la opción
room.generateKotlin
a tus opciones de procesador para KSP. Para obtener más detalles sobre cómo pasar opciones de procesador para KSP, consulta la documentación de KSP.
Nota: Cuando se usa Kotlin CodeGen, es importante tener en cuenta que se agregaron restricciones adicionales. No se permiten propiedades abstractas como getters o consultas de DAO en Kotlin CodeGen, y se espera que se vuelvan a escribir como funciones para evitar la noción falsa de que el valor de la propiedad es inmutable y tiene un resultado almacenado fijo. Otra restricción que se agregó es que ya no se permiten los tipos de objetos que devuelven colecciones Nullable en Room para Kotlin CodeGen.
Advertencia: Es posible que tus proyectos sean más estrictos en términos de nulabilidad cuando uses Kotlin CodeGen. En Kotlin CodeGen, la nulidad de los argumentos de tipo es importante, mientras que en Java se ignora en su mayoría. Por ejemplo, supongamos que tienes un tipo de datos que se muestra como "Flow<foo\>" y la tabla está vacía. En Java CodeGen, esto no causará ningún problema, pero en Kotlin CodeGen, recibirás un error. Para evitar esto, deberás usar "Flow<foo?\>", suponiendo que se emite un valor nulo. </foo?\></foo\>
- Se agregó el nuevo artefacto del complemento de Gradle de Room con el ID
androidx.room
, que resuelve varios problemas existentes en Room relacionados con tener entradas y salidas de esquemas a través de las opciones del procesador de anotaciones de Gradle. Para obtener más detalles, consulta las notas de la versión 2.6.0-alpha02 de Room. - Las clases de valor en las entidades de Room ahora son compatibles con KSP. (4194095).
- Los tipos de datos que se muestran de Map anidados en las funciones de DAO ahora son compatibles con Room. (I13f48, 203008711)
Versión 2.6.0-rc01
20 de septiembre de 2023
Lanzamiento de androidx.room:room-*:2.6.0-rc01
. La versión 2.6.0-rc01 contiene estas confirmaciones.
Versión 2.6.0-beta01
23 de agosto de 2023
Lanzamiento de androidx.room:room-*:2.6.0-beta01
. La versión 2.6.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Controla la excepción de caso especial
SQLite
durante la inserción y actualización que se produce cuando se genera la excepción2067 SQLITE_CONSTRAINT_UNIQUE
durante una inserción y actualización. La inserción y actualización deben realizar una actualización. (If2849, b/243039555)
Versión 2.6.0-alpha03
9 de agosto de 2023
Lanzamiento de androidx.room:room-*:2.6.0-alpha03
. La versión 2.6.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Los tipos de datos que se muestran de Map anidados en las funciones de DAO ahora son compatibles con Room. (I13f48, 203008711)
Cambios en la API
- Se creó una nueva anotación de tipo llamada
@MapColumn
para reemplazar@MapInfo
, que ahora dejó de estar disponible. Para cada nombre de columna (keyColumnName
,valueColumnName
o ambos) proporcionado en una anotación@MapInfo
, deberás declarar una anotación@MapColumn
con solocolumnName
y usar la anotación en el argumento de tipo específico al que se hace referencia (la clave o el valor del mapa) en el tipo que se muestra de la función DAO. Esto se debe a que la anotación@MapColumn
se usa directamente en el argumento de tipo dentro del tipo de datos que se muestra de una función DAO, en lugar de en la función en sí, como@MapInfo
. Para obtener más información, consulta la documentación de@MapColumn
. (Ib0305, b/203008711). - Se actualizaron los archivos de API para anotar la supresión de compatibilidad (I8e87a, b/287516207).
- Se actualizaron las APIs del complemento de Gradle de Room para que no siempre requieran configuraciones por variante. Esto significa que el complemento puede aceptar una ubicación global para todas las variantes sin crear varios directorios, lo que permite realizar migraciones más fluidas, pero también es lo suficientemente flexible como para configurar manualmente variantes o esquemas de tipo de compilación y, al mismo tiempo, conservar los beneficios del complemento (compilaciones reproducibles y almacenables en caché). (I09d6f, b/278266663).
Correcciones de errores
- Se corrigió una posible vulnerabilidad de fuga de memoria en
QueryInterceptorStatement
. (I193d1). - Se corrigió el comportamiento incorrecto de la función
QueryInterceptorDatabase execSQL()
. (Iefdc8).
Versión 2.6.0-alpha02
21 de junio de 2023
Lanzamiento de androidx.room:room-*:2.6.0-alpha02
. La versión 2.6.0-alpha02 contiene estas confirmaciones.
Complemento de Gradle de Room
Esta nueva versión contiene un artefacto nuevo para el complemento de Room para Gradle con el ID androidx.room
, que resuelve varios problemas existentes en Room relacionados con tener entradas y salidas de esquemas a través de las opciones del procesador de anotaciones de Gradle. El complemento de Gradle de Room configura el proyecto de modo que los esquemas generados que se consumen para las migraciones automáticas y que son el resultado de las tareas de compilación estén configurados correctamente para tener compilaciones reproducibles y almacenables en caché. El complemento ofrece un DSL para configurar la ubicación del esquema base:
room {
schemaDirectory("$projectDir/schemas/")
}
Luego, el complemento configurará el compilador de Room y las diversas tareas de compilación y sus backends (javac, KAPT, KSP) para generar archivos de esquemas en carpetas con variantes, es decir, schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Como de costumbre, estos archivos se registran en el repositorio para usarse en la validación y las migraciones automáticas. Cuando se migra al uso del complemento en lugar de las opciones del procesador de anotaciones, los archivos de esquema existentes se deben copiar en los directorios de variantes generados que crea el complemento. Esta es una operación de migración única que se debe realizar de forma manual. La documentación del esquema en developers.android.com se actualizará en el futuro una vez que se tomen en cuenta los comentarios y el complemento alcance la estabilidad, así que pruébalo.
Cambios en la API
RoomDatabase.QueryCallback
se definió como una interfaz funcional para permitir usos de conversiones de SAM. (Iab8ea, b/281008549).
Correcciones de errores
- Se resolvió el problema que se generaba cuando se creaba una instancia de la base de datos en Robolectric después de la migración de las fuentes de Room de Java a Kotlin. (Ic053c, b/274924903).
Versión 2.6.0-alpha01
22 de marzo de 2023
Lanzamiento de androidx.room:room-*:2.6.0-alpha01
. La versión 2.6.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Se admiten clases de valor en Room para KSP. Room ahora puede admitir clases de valor en Entities. (4194095).
- La generación de código Kotlin(o "Kotlin CodeGen") ahora se puede habilitar en Room (4297ec0). Para activar Kotlin CodeGen en Room, agrega el nombre de la opción
room.generateKotlin
a tus opciones de procesador para KSP. Para obtener más detalles sobre cómo pasar opciones de procesador para KSP, consulta la documentación de KSP.
Nota: Cuando se usa Kotlin CodeGen, es importante tener en cuenta que se agregaron restricciones adicionales. No se permiten propiedades abstractas como getters o consultas de DAO en Kotlin CodeGen, y se espera que se vuelvan a escribir como funciones para evitar la noción falsa de que el valor de la propiedad es inmutable y tiene un resultado almacenado fijo. Otra restricción que se agregó es que ya no se permiten los tipos de objetos que devuelven colecciones Nullable en Room para Kotlin CodeGen.
Advertencia: Es posible que tus proyectos sean más estrictos en términos de nulabilidad cuando uses Kotlin CodeGen. En Kotlin CodeGen, la nulidad de los argumentos de tipo es importante, mientras que en Java se ignora en su mayoría. Por ejemplo, supongamos que tienes un tipo de datos que se muestra como "Flow<foo\>" y la tabla está vacía. En Java CodeGen, esto no causará ningún problema, pero en Kotlin CodeGen, recibirás un error. Para evitar esto, deberás usar "Flow<foo?\>", suponiendo que se emite un valor nulo. </foo?\></foo\>
Cambios en la API
- Evita el uso sin sentido de colecciones nullable en los tipos de datos que devuelven los métodos de DAO. (I777dc, b/253271782, b/259426907).
- Se agregó una API para crear un flujo que emite cambios del rastreador de invalidación. La API es útil para crear transmisiones que deben reaccionar a los cambios en la base de datos. (I8c790, b/252899305).
Correcciones de errores
- No se permiten propiedades abstractas como getters o consultas de DAO en la generación de código de Kotlin. En su lugar, deben reescribirse como funciones para evitar la noción falsa de que el valor de la propiedad es inmutable y tiene un resultado almacenado fijo. (If6a13, b/127483380, b/257967987)
Versión 2.5.2
Versión 2.5.2
21 de junio de 2023
Lanzamiento de androidx.room:room-*:2.5.2
. La versión 2.5.2 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema de incompatibilidad con kotlinx-metadata-jvm. (386d5c).
- Se solucionó un problema que causaba que Room arrojara un error cuando se usaba en una prueba de Robolectric. (f79bea, b/274924903).
Versión 2.5.1
Versión 2.5.1
22 de marzo de 2023
Lanzamiento de androidx.room:room-*:2.5.1
. La versión 2.5.1 contiene estas confirmaciones.
Correcciones de errores
- Evita verificar el directorio principal de la base de datos en
FrameworkSQLiteHelper
si la base de datos ya está abierta. (5de86b8). - Usa una verificación
isOpenInternal
cuando compruebes si la base de datos ya está abierta. (e91fb35). - Ahora está disponible un mejor control del caso de reentrada en
acquireTransactionThread()
de Room. (219f98b). Durante una transacción de suspensión, Room usa un subproceso del ejecutor de transacciones, inicia un bucle de eventos en él y le envía operaciones de suspensión de la base de datos para que todas estén encapsuladas en la corrutina de la transacción. Por lo general, se espera que el subproceso de la transacción sea diferente del que la inicia, pero, en algunos casos, son iguales. Para controlar estos casos reentrantes, se refactorizówithTransaction()
para que ya no dependa de un trabajo de control y, en su lugar, ejecute el bloque de suspensión de transacciones desderunBlocking
en el subproceso de transacciones.
Versión 2.5.0
Versión 2.5.0
22 de febrero de 2023
Lanzamiento de androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
y androidx.room:room-paging-rxjava3:2.5.0
. La versión 2.5.0 contiene estas confirmaciones.
Versión 2.5.0
11 de enero de 2023
Lanzamiento de androidx.room:room-*:2.5.0
. La versión 2.5.0 contiene estas confirmaciones.
Cambios importantes desde 2.4.0
- Todos los orígenes de
room-runtime
se convirtieron de Java a Kotlin Ten en cuenta que, si tu código está en Kotlin, es posible que encuentres problemas de incompatibilidad de origen debido a la conversión de la biblioteca a Kotlin. Por ejemplo, un cambio incompatible de origen conocido es que, enInvalidationTracker
, ahora deberás declararonInvalidate()
enObserver
para tener un parámetro de tipoSet
, en lugar deMutableSet
. Además, algunos métodos get se convirtieron en propiedades que requieren la sintaxis de acceso a las propiedades en archivos Kotlin. Informa un error si hay alguna incompatibilidad significativa. - Se agregó una nueva anotación de acceso directo,
@Upsert
, que intenta insertar una entidad cuando no hay conflicto de singularidad, o bien actualizar la entidad si es que lo hay (I7aaab, b/241964353). - Se agregaron los nuevos artefactos de room-paging
room-paging-rxjava2
,room-paging-rxjava3
yroom-paging-guava
para obtener compatibilidad con Paging de Room. - Se agregaron APIs para proporcionar nombres de tablas de clave y valor para la desambiguación en
@MapInfo
(Icc4b5).
Versión 2.5.0-rc01
7 de diciembre de 2022
Lanzamiento de androidx.room:room-*:2.5.0-rc01
. La versión 2.5.0-rc01 contiene estas confirmaciones.
- Esta versión es idéntica a la versión
2.5.0-beta02
.
Versión 2.5.0-beta02
9 de noviembre de 2022
Se lanzó androidx.room:room-*:2.5.0-beta02
. La versión 2.5.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se corrigieron varias APIs que tomaban argumentos de consulta de invariantes (
Array<Any?>
) a contravariantes (Array<out Any?>
) para que coincidan con el comportamiento del array de Java (b/253531073).
Versión 2.5.0-beta01
5 de octubre de 2022
Lanzamiento de androidx.room:room-*:2.5.0-beta01
. La versión 2.5.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Restringe la versión mínima que admite
@Upsert
para que sea API 16. Esto se debe a la incapacidad de identificar un conflicto de restricción de clave primaria en APIs anteriores. (I5f67f, b/243039555)
Correcciones de errores
- Se corrigió un problema en el que las tablas paralelas se exportaban de forma incorrecta a los archivos de esquema
.json
y se dañaban. (I4f83b, b/246751839)
Versión 2.5.0-alpha03
24 de agosto de 2022
Lanzamiento de androidx.room:room-*:2.5.0-alpha03
. La versión 2.5.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva anotación de acceso directo,
@Upsert
, que intenta insertar una entidad cuando no hay conflicto de singularidad, o bien actualizar la entidad si es que lo hay (I7aaab, b/241964353).
Correcciones de errores
- Ahora Room mostrará una
SQLiteConstraintException
en lugar de unaIllegalStateException
durante la verificación automática de restricciones de clave externa (I328dd). - Se corrigió un cambio incompatible en el código fuente de Kotlin para el método get y las propiedades
getOpenHelper
,getQueryExecutor
ygetTransactionExecutor
(Iad0ac).
Versión 2.5.0-alpha02
1 de junio de 2022
Se lanzó androidx.room:room-*:2.5.0-alpha02
. La versión 2.5.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron nuevos artefactos
room-paging
(room-paging-rxjava2
,room-paging-rxjava3
yroom-paging-guava
) para brindar compatibilidad con Paging de Room (41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906).
Cambios en la API
- Todo el
room-runtime
se convirtió de Java a Kotlin (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668).Nota: Es posible que encuentres problemas de incompatibilidad de origen debido a que la bibliotecas se convirtió a Kotlin. Si tu código estaba en Kotlin y llamaba a la versión anterior de Room, la nueva versión deberá controlar estos casos. Por ejemplo, un cambio incompatible de origen conocido es que, en
InvalidationTracker
, ahora deberás declararonInvalidate()
enObserver
para tener un parámetro de tipoSet
, en lugar deMutableSet
. - Se agregaron APIs para proporcionar nombres de tablas de clave y valor para la desambiguación en
@MapInfo
(Icc4b5). - Se corrigió un problema de compatibilidad de origen para volver a permitir
@Ignore
en métodos get de propiedad (Ifc2fb).
Correcciones de errores
- Se duplicó el algoritmo heurístico de resolución de columna. Ahora Room intentará resolver columnas ambiguas en una consulta multimapa. Esto permite que las JOIN con tablas que contienen tablas del mismo nombre se asignen correctamente a un objeto de datos de resultado (I4b444, b/201306012, b/212279118).
Versión 2.5.0-alpha01
23 de febrero de 2022
Lanzamiento de androidx.room:room-*:2.5.0-alpha01
. La versión 2.5.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se corrigió un problema por el que no se aplicaba el uso de Room
@IntDef
en fuentes de Kotlin (I75f41, b/217951311). - Se corrigió un problema de compatibilidad de origen para volver a permitir
@Query
en métodos get de propiedad (I0a09b). - Se convirtió room-common de Java a Kotlin (I69c48, b/206858235).
Nota: Es posible que encuentres problemas de incompatibilidad de fuente, ya que algunas propiedades se trasladaron a objetos complementarios durante la conversión de biblioteca a Kotlin. Si tu código estaba en Kotlin y llamaba a la versión anterior de Room, la nueva versión necesitará el sufijo ".Companion" cuando accedas a esas propiedades.
- Se convirtió room-migration de Java a Kotlin (I2724b, b/206858622).
- Se convirtieron los archivos relacionados con
paging
enroom-runtime
de Java a Kotlin (I82fc8, b/206859668). - Se agregó una API para el bloqueo y uso de varios procesos a nivel de FrameworkSQLite* a fin de proteger la primera creación de bases de datos y migraciones de varios procesos (Ied267, b/193182592).
Correcciones de errores
- Se agregó compatibilidad para propiedades internas en fuentes de Kotlin.
Este es un pequeño cambio de comportamiento en Room, en el que se usa el nombre de origen de las funciones y se hace coincidir con propiedades como métodos get y set (antes se usaba el nombre JVM de la función, que es diferente para funciones o propiedades internas).
Si usas anotaciones
@JvmName
personalizadas para hacer coincidir los métodos get y set con propiedades privadas, vuelve a verificar el código que se generó después de la actualización (If6531, b/205289020).
Versión 2.4.3
Versión 2.4.3
27 de julio de 2022
Lanzamiento de androidx.room:room-*:2.4.3
. La versión 2.4.3 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que Room no reconocía las funciones de suspensión en Kotlin 1.7 (b/236612358).
Versión 2.4.2
Versión 2.4.2
23 de febrero de 2022
Lanzamiento de androidx.room:room-*:2.4.2
. La versión 2.4.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema que generaba código para una función de suspensión
@Transaction
de Dao con un cuerpo que creaba un método de interfaz predeterminado debido a la compilación con-Xjvm-default=all
o un elemento equivalente (Ia4ce5). - Se resolvió un error por el que Room generaba código para un método de consulta que muestra el tipo de datos
Array<ByteArray>
(If086e, b/213789489).
Versión 2.4.1
Versión 2.4.1
12 de enero de 2022
Lanzamiento de androidx.room:room-*:2.4.1
. La versión 2.4.1 contiene estas confirmaciones.
Correcciones de errores
- Se agregó compatibilidad para propiedades internas en fuentes de Kotlin.
Este es un pequeño cambio de comportamiento en Room, en el que se usa el nombre de origen de las funciones y se hace coincidir con propiedades como métodos get y set (antes se usaba el nombre JVM de la función, que es diferente para funciones o propiedades internas).
Si usas anotaciones
@JvmName
personalizadas para hacer coincidir los métodos get y set con propiedades privadas, vuelve a verificar el código que se generó después de la actualización (If6531, b/205289020).
Versión 2.4.0
Versión 2.4.0
15 de diciembre de 2021
Lanzamiento de androidx.room:room-*:2.4.0
. La versión 2.4.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.3.0
- Migraciones automáticas: Ahora, Room ofrece una API para generar migraciones automáticamente siempre que se exporten esquemas. Si deseas indicarle a Room que debe generar una migración automática, se puede usar una nueva propiedad
@Database#autoMigrations
para declarar las versiones desde y hasta las cuales se realizará la migración automática. Cuando Room necesita información adicional sobre el cambio de nombre o la eliminación de tablas y columnas, la anotación@AutoMigration
puede declarar una clase de especificación que contiene esas entradas. Para obtener más detalles, consulta la documentación de@AutoMigration
. - Inserción de dependencias en migraciones automáticas:
@ProvidedAutoMigrationSpec
es una nueva API proporcionará unaAutoMigrationSpec
en el tiempo de ejecución a través deRoomDatabase.Builder#addAutoMigrationSpec()
. De esta manera, un framework de inyección de dependencia puede proporcionar esas especificaciones cuando necesiten dependencias complejas. - Compatibilidad con el asistente de pruebas de migración para migraciones automáticas: Se actualizó el objeto
MigrationTestHelper
de Room para admitir migraciones automáticas mediante una nueva API de constructor que recibe la clase de base de datos en evaluación. Esto permite que el asistente agregue automáticamente migraciones automáticas de la misma manera duranterunMigrationsAndValidate
. - Compatibilidad con Room-Paging: Se lanzó
androidx.room:room-paging
, que proporciona compatibilidad nativa con Paging 3.0 para las consultas de Room que muestranandroidx.paging.PagingSource
. - Métodos de consulta relacionadas: Room ahora admite métodos
@Dao
que muestran tipos de datos multimapa, que son útiles para las instrucciones JOIN. Los tipos de multimapas compatibles sonMap
,SparseArray
yLongSparseArray
, además deImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
de Guava.
Versión 2.4.0-rc01
1 de diciembre de 2021
Lanzamiento de androidx.room:room-*:2.4.0-rc01
. La versión 2.4.0-rc01 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó la dependencia de Room en KSP a
1.6.0-1.0.1
para admitir Kotlin 1.6.
Versión 2.4.0-beta02
17 de noviembre de 2021
Lanzamiento de androidx.room:room-*:2.4.0-beta02
. La versión 2.4.0-beta02 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad para SparseArray y LongSparseArray en @MapInfo. (Ic91a2b/138910317)
Correcciones de errores
- Se agregó un nuevo analizador TypeConverter que toma en cuenta la información sobre la nulabilidad en tipos. Como esta información solo está disponible en KSP, se activa solo en KSP de forma predeterminada. Si se produce algún problema, puedes desactivarla si pasas room.useNullAwareTypeAnalysis=false al procesador de anotaciones. Si esto sucede, informa un error, ya que esta marca se quitará en el futuro. Con este nuevo analizador TypeConverter, te recomendamos que solo proporciones TypeConverter que no reciban valores nulos, ya que el nuevo analizador tiene la capacidad de unirlos con una verificación de nulabilidad. Ten en cuenta que no afecta a los usuarios que usan KAPT o Java, ya que los procesadores de anotaciones (a diferencia de KSP) no tienen información sobre la nulabilidad en tipos (Ia88f9, b/193437407).
- Se corrigió un error por el que Room no podía hacer una compilación con un error de SQL cuando una entidad FTS declaraba usar el tokenizador de ICU (I00db9, b/201753224).
- Se resolvió un problema en las migraciones automáticas relacionadas con una columna nueva que se agregaba a una entidad incorporada entre versiones (I5fcb1b/193798291).
- Se resolvió un problema relacionado con los tipos de datos que muestran los métodos de consultas relacionales en las consultas LEFT JOIN. Con estos cambios, en los casos en que haya una asignación de uno a varios, la colección que se muestra para una clave no incluirá el objeto de valor no válido si no se encuentra en el cursor. Si no se encuentran valores válidos, la clave se asignará a una colección vacía (Id5552b/201946438).
- Se resolvió el problema de migración automática por el que las palabras clave SQLite no se podían escapar en los nombres de las columnas (Idbed4b/197133152).
Versión 2.4.0-beta01
13 de octubre de 2021
Se lanzó androidx.room:room-*:2.4.0-beta01
. La versión 2.4.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que las migraciones automáticas no agregaban columnas nuevas cuando otra tabla de la misma migración también tenía una columna nueva con el mismo nombre (Ia5db5, b/200818663).
- La implementación de PagingSource que generaba la paginación de Room ahora usa el
queryExecutor
que pasaRoomDatabase.Builder
, por lo que se puede anular, en lugar deDispatchers.IO
como era antes (Iae259).
Versión 2.4.0-alpha05
29 de septiembre de 2021
Lanzamiento de androidx.room:room-*:2.4.0-alpha05
. La versión 2.4.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Se agregó un convertidor de tipo integrado para UUID. (I671e8, b/73132006)
Cambios en la API
Se agregó una nueva propiedad a la anotación TypeConverters para permitir que los desarrolladores inhabiliten los convertidores Enum y UUID integrados. De forma predeterminada, estos convertidores están activados, pero puedes inhabilitarlos para un alcance determinado o para toda la base de datos. Consulta la documentación de TypeConverters para obtener más información. (36ae9e, b/195413406)
Compatibilidad con pares clave-valor que no son POJO para los DAO que muestran tipos de datos multimapa mediante la anotación
@MapInfo
(I4d704)
Se requerirá @MapInfo
cuando la columna de clave o valor del mapa corresponda a una sola columna. Mira el ejemplo:
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- Haz que
room-paging
sea un artefacto obligatorio cuando uses Paging3 con Room. (Ieaffe)
Correcciones de errores
- Se corrigió un problema en el que los resultados de las consultas multimapa no se ordenaban correctamente cuando la consulta contenía una cláusula ORDER BY de una columna de la clave del mapa. (I6b887)
Contribución externa
- Se agregó una nueva API para especificar el orden de índices en @Index. Gracias a Nikita Zhelonkin. (I033fc)
Versión 2.4.0-alpha04
21 de julio de 2021
Lanzamiento de androidx.room:room-*:2.4.0-alpha04
. La versión 2.4.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
Ahora Room admite métodos
@Dao
que muestran tipos de datos multimapa, que son útiles para las instrucciones JOIN. Los tipos de multimapas compatibles sonMap
y tambiénImmutableMap
,ImmutableSetMultimap
oImmutableListMultimap
de Guava.Los siguientes son ejemplos de consultas multimapa:
Mapa de relación de uno a uno
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Mapa de relación de uno a varios (multimapa estándar)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
El resultado de multimapa también se puede unir en los tipos de datos asíncronos y compatibles que se muestran, como
LiveData
,Observable
de Rx oFlow
de corrutinas.
Room-Paging
Se lanza
androidx.room:room-paging
, que brinda compatibilidad nativa con Paging 3.0 para las consultas de Room que muestranandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Este artefacto reemplaza la implementación de
androidx.paging.PagingSource
que genera Room con una que se compila sobre las APIs de Paging 3.0. La implementación nueva de PagingSource analiza las claves de manera diferente, por lo que cualquier clave que se le brinde de forma manual a PagingSource de Room debería tener en cuenta este cambio de comportamiento, que incluye initialKey que se pasa a través del constructor de Pager. Las páginas comenzarán a cargarse desde el elementoKey
, yKey
será el primero que se cargue. Esto se desvía del comportamiento existente en el queLoadParams.Refresh.Key
se trata como la posición de desplazamiento del usuario, y los elementos se cargan antes de la clave y después de esta.El artefacto es opcional y, para inhabilitarlo, se recurrirá a la compatibilidad existente con Paging 3.0 que se introdujo en Room 2.3. Sin embargo, este artefacto dejará de ser opcional en una versión futura para quienes usen Room con Paging 3.0. Para habilitarlo, agrega el artefacto nuevo room-paging a la ruta de clase. Si usas Gradle, puedes agregar el siguiente fragmento a build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correcciones de errores
- Se solucionó un problema de las migraciones automáticas en relación con el control de incumplimientos de claves externas. (b/190113935)
Versión 2.4.0-alpha03
16 de junio de 2021
Lanzamiento de androidx.room:room-*:2.4.0-alpha03
. La versión 2.4.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Actualiza el objeto
MigrationTestHelper
de Room para admitir las migraciones automáticas mediante una API de constructor nueva que recibe la clase de base de datos en evaluación. Esto permite que el asistente agregue automáticamente migraciones automáticas de la misma manera duranterunMigrationsAndValidate
.
Correcciones de errores
Se solucionó un problema con la biblioteca nativa de SQLite de Room para admitir los chips M1 de Apple (b/174695268).
Se solucionó un problema por el que Room no generaba un error cuando el tipo de datos de @Transaction que se mostraba era un flujo (I56ddd, b/190075899).
Se corrigió un error en las migraciones automáticas relacionadas con índices (b/177673291).
Actualizaciones de dependencias
- La compatibilidad con KSP de Room ahora depende de KSP
1.5.10-1.0.0-beta01
(1ecb11, b/160322705).
Versión 2.4.0-alpha02
5 de mayo de 2021
Lanzamiento de androidx.room:room-*:2.4.0-alpha02
. La versión 2.4.0-alpha02 contiene estas confirmaciones.
Cambios en la API
@ProvidedAutoMigrationSpec
es una API nueva destinada a declarar que se proporcionará unaAutoMigrationSpec
en el tiempo de ejecución a través deRoomDatabase.Builder#addAutoMigrationSpec()
. De esta manera, un framework de inyección de dependencia puede proporcionar esas especificaciones cuando necesiten dependencias complejas.
Correcciones de errores
- Se corrigió un error en las migraciones automáticas en las que
@DatabaseView
no se creaba de manera correcta.
Contribución externa
- Se solucionó un problema en el modo
JournalMode.TRUNCATE
de Room en el que a veces la devolución de llamadaInvalidationTracker
no se invocaba o se hacía demasiado tarde o de manera inválida. Le agradecemos aUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286).
Versión 2.4.0-alpha01
21 de abril de 2021
Lanzamiento de androidx.room:room-*:2.4.0-alpha01
. La versión 2.4.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Migraciones automáticas: Ahora, Room ofrece una API para generar migraciones automáticamente siempre que se exporten esquemas. Si deseas indicarle a Room que debe generar una migración automática, se puede usar una nueva propiedad
@Database#autoMigrations
para declarar las versiones desde y hasta las cuales se realizará la migración automática. Cuando Room necesita información adicional sobre el cambio de nombre o la eliminación de tablas y columnas, la anotación@AutoMigration
puede declarar una clase de especificación que contiene esas entradas. Para obtener más detalles, consulta la documentación de@AutoMigration
.
Correcciones de errores
- Se corrigió un problema en el que la validación del esquema de Room validaba, de manera incorrecta, el elemento
defaultValue
con paréntesis adicionales (b/182284899).
Versión 2.3.0
Versión 2.3.0
21 de abril de 2021
Lanzamiento de androidx.room:room-*:2.3.0
. La versión 2.3.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.2.0
- Compatibilidad integrada de Enum: Ahora, Room usará, de forma predeterminada, el conversor de tipo Enum a String, y viceversa, si no se proporciona ninguno. Si ya existe un conversor de tipo para una enum, Room priorizará su uso en lugar del valor predeterminado.
- Devolución de llamada de consulta: Ahora Room ofrece una API de callback general de RoomDatabase.QueryCallback, para cuando las consultas están por ejecutarse, lo que puede ser útil si deseas registrar compilaciones de depuración. Se puede configurar la devolución de llamada con
RoomDatabase.Builder#setQueryCallback()
. - Mejora en base de datos empaquetada previamente: Ahora, Room tiene API para crear una base de datos con una lectura de base de datos empaquetada previamente de un flujo de entrada. Esto permite casos como la compresión con gzip de la base de datos previamente empaquetada.
- Convertidores de tipo proporcionados: Ahora, Room tiene API para proporcionar instancias de convertidores de tipo, de modo que la app pueda controlar su inicialización. Para marcar un convertidor de tipo que se enviará a Room, usa la nueva anotación @ProvidedTypeConverter.
- Compatibilidad con RxJava3: Room ahora admite tipos de RxJava3. De manera similar al objeto RxJava2, puedes declarar métodos DAO que muestran tipos de datos Flowable, Single, Maybe y Completable. Además, hay un nuevo artefacto
androidx.room:room-rxjava3
disponible para admitir el elemento RxJava3. - Compatibilidad con Paging 3.0: Ahora Room admitirá la generación de implementaciones para los métodos
@Query
con anotaciones que muestren el tipo de datosandroidx.paging.PagingSource
.
Versión 2.3.0-rc01
24 de marzo de 2021
Lanzamiento de androidx.room:room-*:2.3.0-rc01
. La versión 2.3.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema que impedía que se consumieran las consultas de flujo de corrutinas creadas por Room en un bloque
withTransaction
suspendido (I797bf).
Versión 2.3.0-beta03
10 de marzo de 2021
Lanzamiento de androidx.room:room-*:2.3.0-beta03
. La versión 2.3.0-beta03 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad de compilación incremental para KSP (I031c1, b/176453350).
Correcciones de errores
- Se corrigió un error en el que la creación de PagingSource en el subproceso principal podía activar un ANR (I42b74, b/181221318).
- Se corrigió la visibilidad de
@ExperimentalRoomApi
para que sea público en lugar de un paquete privado (b/181356119).
Contribución externa
- Permite que Room acepte mostrar un tipo de datos POJO para un método DAO anotado
@Query
cuando también se anota con@SkipQueryVerification
. Room hará lo posible por convertir el resultado de la consulta que se muestra en un tipo de datos POJO, de la misma manera que se hace para un método DAO anotado@RawQuery
. Gracias a "Markus Riegel | hey@marcorei.com" (I45acb).
Versión 2.3.0-beta02
18 de febrero de 2021
Lanzamiento de androidx.room:room-*:2.3.0-beta02
. La versión 2.3.0-beta02 contiene estas confirmaciones.
Nuevas funciones
Ahora, Room cuenta con compatibilidad experimental para el Procesamiento de Símbolos de Kotlin KSP.
KSP reemplaza las KAPT para ejecutar procesadores de anotaciones de forma nativa en el compilador de Kotlin, lo que reduce significativamente los tiempos de compilación.
Para usar Room con KSP, puedes aplicar el complemento de KSP de Gradle y reemplazar la configuración
kapt
en tu archivo de compilación porksp
. Por ejemplo, en lugar dekapt 'androidx.room:room-compiler:2.3.0-beta02'
, usaksp 'androidx.room:room-compiler:2.3.0-beta02'
. Consulta la documentación de KSP para obtener más detalles.Ten en cuenta que, como KSP es experimental, se recomienda seguir usando KAPT para el código de producción. La reducción de los tiempos de compilación solo es aplicable si no hay otros procesadores que usen KAPT. Consulta b/160322705 para ver los problemas conocidos.
Versión 2.3.0-beta01
27 de enero de 2021
Lanzamiento de androidx.room:room-*:2.3.0-beta01
. La versión 2.3.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Bases de datos con cierre automático: Room ahora puede cerrar bases de datos a las que no se accede después de un período determinado. Esta es una función experimental y se puede habilitar mediante una llamada a
RoomDatabase.Builder#setAutoCloseTimeout()
. Esta función resulta útil para apps que tienen varias bases de datos.
Correcciones de errores
- Se solucionó un problema por el que los métodos Dao que contenían varios métodos
@Update
o@Delete
y diferentes estrategias de conflicto generaban código con una sola estrategia, sin tener en cuenta la que estaba definida. (/I0b90d, b/176138543)
Versión 2.3.0-alpha04
16 de diciembre de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha04
. La versión 2.3.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Ahora Room ofrece una API de callback general
RoomDatabase.QueryCallback
, para cuando las consultas están por ejecutarse, lo que puede ser útil para acceder a compilaciones de depuración. Se puede configurar la devolución de llamada conRoomDatabase.Builder#setQueryCallback()
(Iaa513, b/174478034, b/74877608). - Ahora, Room usará de forma predeterminada el conversor de tipo Enum a String, y viceversa, si no se proporciona ninguno. Si ya existe un conversor de tipo para una enum, Room priorizará su uso en lugar del valor predeterminado (b/73132006).
Problema conocido
- Si ya existe un conversor de tipo unidireccional para la lectura, Room podría usar accidentalmente el conversor Enum a String, lo que podría no ser lo deseado. Este es un problema conocido y se puede solucionar si se lo convierte en un conversor bidireccional. Consulta b/175707691.
Correcciones de errores
- Se solucionó un problema en el que Room inhabilitaba de manera incorrecta el procesamiento de anotaciones incrementales en versiones más recientes del JDK (b/171387388).
- Se solucionó un problema en el que Room encontraba la clase generada cuando se usaban múltiples cargadores de clases. Gracias por la corrección, "Serendipity | 892449346@qq.com" (b/170141113).
- Se solucionó un problema por el que Room generaba códigos incorrectos cuando un elemento
@Dao
de Kotlin tenía una clase base cuyos genéricos eran primitivos en la JVM (b/160258066).
Contribución externa
- Ahora, Room usará el modo
beginTransactionNonExclusive
si el modo WAL está habilitado y el nivel de API es 16 o más. Gracias a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com" (b/126258791).
Versión 2.3.0-alpha03
14 de octubre de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha03
. La versión 2.3.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
Ahora Room tiene APIs para proporcionar instancias de convertidores de tipo, de modo que la app pueda controlar su inicialización. Para marcar un convertidor de tipo que se enviará a Room, usa la nueva anotación
@ProvidedTypeConverter
. Gracias a "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210).Ahora Room tiene API para crear una base de datos mediante una lectura de base de datos empaquetada previamente de un flujo de entrada. Esto permite casos como la compresión con gzip de la base de datos previamente empaquetada. Gracias a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060).
Cambios en la API
Se agregó el objetivo faltante a la anotación
@ForeignKey
, lo que impide su uso fuera de la anotación@Entity
(Iced1e).El campo
mCallbacks
enRoomDatabase.java
ahora está oculto (d576cb, b/76109329).
Correcciones de errores
Actualización de la documentación de TypeConverters para aclarar que TypeConverters solo se puede usar a fin de convertir columnas o campos, pero no filas (I07c56, b/77307836).
Actualización de DaoProcessor para corregir el error del compilador en Dao con un supertipo genérico con "primitivas" de Kotlin (Ice6bb, b/160258066).
Actualización de la documentación sobre agregar o quitar métodos de observador para aclarar subprocesos (Ifd1d9, b/153948821).
Se solucionó un problema en el que Room validaba de forma incorrecta las tablas de FTS que declaraban su columna rowid (d62ebc, b/145858914).
Contribuciones externas
Soluciona los problemas relacionados con el uso de mayúsculas y minúsculas de la configuración regional del turco (5746e3, b/68159494).
Reemplaza el objeto
ConcurrentHashMap
enRoomDatabase
conCollections.synchronizedMap()
para evitar problemas en Android Lollipop (d1cfc7, b/162431855).Agrega una devolución de llamada onOpenPrepackagedDatabase cuando se copia una base de datos que se empaquetó previamente (I1ba74, b/148934423).
Versión 2.3.0-alpha02
22 de julio de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha02
. La versión 2.3.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Compatibilidad con RxJava3: Room ahora admite tipos de RxJava3. De manera similar al objeto RxJava2, puedes declarar métodos DAO que muestran tipos de datos Flowable, Single, Maybe y Completable. Además, hay un nuevo artefacto
androidx.room:room-rxjava3
disponible para admitir el elemento RxJava3 (b/152427884).
Cambios en la API
- Ahora se admite declarar un elemento
@TypeConverter
en la clase Object de Kotlin (b/151110764). - La opción para el procesamiento de anotaciones incrementales de Room ahora está ACTIVADA de forma predeterminada (b/112110217).
Versión 2.3.0-alpha01
10 de junio de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha01
. La versión 2.3.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
Compatibilidad con Paging 3.0: Room ahora admitirá la generación de implementaciones para los métodos
@Query
con anotaciones que muestren el tipo de datosandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Cambios en la API
@RewriteQueriesToDropUnusedColumns
es una anotación nueva y conveniente que hace que Room reescriba la proyección "*" en una consulta de modo que se quiten las columnas no utilizadas en el resultado.- La opción de procesador
room.expandProjection
ya no está disponible. Usa@RewriteQueriesToDropUnusedColumns
como reemplazo para las consultas de optimización de Room con proyecciones "*". Ten en cuenta que@RewriteQueriesToDropUnusedColumns
no reemplaza la solución al conflicto de columnas que ofrecíaroom.expandProjection
con respecto a los tipos de datos que se muestran y que contenían campos@Embedded
.
Correcciones de errores
- Se corrigió un error por el que Room no detectaba correctamente la versión de JDK usada para habilitar la adopción incremental del procesador de anotaciones. Gracias a Blaz Solar (me@blaz.solar) (b/155215201)
- Ahora Room incorpora su dependencia de ANTLR al procesador de anotaciones a fin de evitar conflictos de versiones con otros procesadores que también usan ANTLR (b/150106190).
Versión 2.2.6
Versión 2.2.6
16 de diciembre de 2020
Lanzamiento de androidx.room:room-*:2.2.6
. La versión 2.2.6 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema en el que Room inhabilitaba de manera incorrecta el procesamiento de anotaciones incrementales en versiones más recientes del JDK (b/171387388).
Versión 2.2.5
Versión 2.2.5
18 de marzo de 2020
Lanzamiento de androidx.room:room-*:2.2.5
. La versión 2.2.5 contiene estas confirmaciones.
Correcciones de errores
- Crea directBootAware de
MultiInstanceInvalidationService
. Gracias a "Mygod contact-git@mygod.be" (b/148240967) - Se corrigió un error que causaba una falla cuando se habilitaba la invalidación de varias instancias y la base de datos contenía una entidad FTS (b/148969394).
- Se corrigió un error relacionado con la carga de las bibliotecas nativas de SQLite en el procesador de anotaciones de Room que causaba la falla del compilador debido a compilaciones paralelas (b/146217083).
Versión 2.2.4
Versión 2.2.4
19 de febrero de 2020
Lanzamiento de androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
y androidx.room:room-testing:2.2.4
. La versión 2.2.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error con la suspensión de transacciones en el que se interbloqueaban si la corrutina se cancelaba rápidamente antes de que comenzara la transacción (b/148181325).
- Se corrigió un error con el uso incorrecto de @Generated cuando se realizaban compilaciones con JDK 9 (b/146538330).
- Se corrigió un error por el que Room generaba código incorrecto cuando una interfaz DAO tenía una función concreta en Kotlin (b/146825845).
Versión 2.2.3
Versión 2.2.3
18 de diciembre de 2019
Lanzamiento de androidx.room:room-*:2.2.3
. La versión 2.2.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en el que Room no podía validar una base de datos que no se había migrado y contenía un hash heredado con índices en su esquema (b/139306173).
Versión 2.2.2
Versión 2.2.2
20 de noviembre de 2019
Lanzamiento de androidx.room:room-*:2.2.2
. La versión 2.2.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en el que la recopilación de una relación de uno a uno con más de 999 filas provocaba que Room mostrara elementos relacionados nulos (b/143105450).
Versión 2.2.1
Versión 2.2.1
23 de octubre de 2019
Lanzamiento de androidx.room:room-*:2.2.1
. La versión 2.2.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error por el que Room advertía incorrectamente sobre
CURSOR_MISMATCH
con la opción de compiladorexpandProjection
activada (b/140759491). - Se agregó un mecanismo de reintento para administrar la biblioteca nativa faltante que se utiliza para verificar consultas durante el tiempo de compilación.
Versión 2.2.0
Versión 2.2.0
9 de octubre de 2019
Lanzamiento de androidx.room:room-*:2.2.0
. La versión 2.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.1.0
- Base de datos preempaquetada: Hay dos nuevas APIs disponibles en
RoomDatabase.Builder
para crear unaRoomDatabase
si ya hay un archivo de base de datos propagado.createFromAsset()
sirve cuando el archivo de la base de datos propagado previamente está en la carpeta de elementos del APK, mientras quecreateFromFile()
sirve cuando el archivo está en una ubicación arbitraria. El uso de estas APIs cambia el comportamiento de las migraciones destructivas de manera que, durante una migración alternativa, Room intentará volver a copiar la base de datos prepropagada si está disponible. De no ser posible, como último recurso descartará todas las tablas y volverá a crearlas (b/62185732). - Valores predeterminados del esquema:
@ColumnInfo
ahora tiene una nueva propiedaddefaultValue
que se puede usar para especificar el valor predeterminado de una columna. Los valores predeterminados son parte de un esquema de base de datos y, si se los especifica, se validarán durante las migraciones (b/64088772). - Relaciones de varios a varios:
@Relation
ahora tiene una nueva propiedadassociateBy
, que toma una nueva anotación@Junction
, que se usa para declarar una relación a través de una tabla de unión, también conocida como tabla asociativa (b/69201917). - Relaciones uno a uno: Se quitó la restricción en los campos POJO anotados con
@Relation
de tipoList
oSet
, lo que permite representar relaciones de valor único con eficacia (b/62905145). - Entidad de destino: Las anotaciones de DAO
@Insert
,@Update
y@Delete
ahora tienen una nueva propiedadtargetEntity
, que permite especificar la tabla de destino sobre la que tiene efecto el método DAO. Esto permite que los parámetros de esos métodos DAO sean POJO arbitrarios que se interpretarán como entidades parciales. En la práctica, esto permite inserciones, eliminaciones y actualizaciones parciales (b/127549506). - Flujo de corrutinas: Los métodos DAO
@Query
ahora pueden serFlow<T>
de tipo de datos que se muestra. El flujo que se muestre reemitirá un nuevo conjunto de valores si se invalidan las tablas de observación en la consulta. Declarar una función DAO con un tipo de datos que se muestraChannel<T>
es un error. En cambio, Room te incentiva a usarFlow
y, luego, utilizar las funciones cercanas para convertir elFlow
en unChannel
(b/130428884). - Procesador de anotaciones incrementales de Gradle: Room ahora es un procesador de anotaciones de aislamiento de Gradle, y la incrementabilidad se puede habilitar mediante la opción
room.incremental
del procesador. Para obtener más información, consulta Opciones del compilador de Room. Si encuentras algún problema, infórmanos. Planeamos habilitar la capacidad de aumento de forma predeterminada en una versión futura y estable. b/112110217 - Expansión de proyecciones: Se agregó una nueva opción experimental de compilador
room.expandProjection
, que hace que Room reescriba una consulta con una proyección "*" para contener solo las columnas en el tipo de datos que se muestra POJO. Por ejemplo, para un método DAO con@Query("SELECT * FROM Song")
que muestra un POJO llamadoSongIdAndTitle
con solo dos campos. Luego, Room reescribe la consulta aSELECT id, title FROM Song
, de modo de obtener el conjunto mínimo de columnas para satisfacer el tipo de datos que se muestra. Básicamente, esto elimina la advertenciaCURSOR_MISMATCH
que se presenta cuando la consulta muestra columnas adicionales que no coinciden con ningún campo en el tipo de POJO que se muestra.
Versión 2.2.0-rc01
5 de septiembre de 2019
Lanzamiento de androidx.room:room:2.2.0-rc01
. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
No hay cambios públicos desde Room 2.2.0-beta01
.
Versión 2.2.0-beta01
22 de agosto de 2019
Lanzamiento de androidx.room:room-*:2.2.0-beta01
. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Correcciones de errores
- Se corrigió un error relacionado con una consulta de flujo de corrutina que dejaba de reemitir valores nuevos después de cierto tiempo (b/139175786).
- Se corrigió un error por el que Room no aceptaba un código hash de esquema heredado al abrir una base de datos que no se había migrado desde Room 1.0, lo que provocaba una falla de tiempo de ejecución debido a un esquema no válido (b/139306173).
Versión 2.2.0-alpha02
7 de agosto de 2019
Lanzamiento de androidx.room:room-*:2.2.0-alpha02
. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Flujo de corrutinas: Los métodos DAO
@Query
ahora pueden serFlow<T>
de tipo de datos que se muestra. El flujo que se muestre reemitirá un nuevo conjunto de valores si se invalidan las tablas de observación en la consulta. Declarar una función DAO con un tipo de datos que se muestraChannel<T>
es un error. En cambio, Room te incentiva a usarFlow
y, luego, utilizar las funciones cercanas para convertir elFlow
en unChannel
(b/130428884). - Expansión de proyecciones: Se agregó una nueva opción experimental de compilador
room.expandProjection
, que hace que Room reescriba una consulta con una proyección "*" para contener solo las columnas en el tipo de datos que se muestra POJO. Por ejemplo, para un método DAO con@Query("SELECT * FROM Song")
que muestra un POJO llamadoSongIdAndTitle
con solo dos campos. Luego, Room reescribe la consulta aSELECT id, title FROM Song
, de modo de obtener el conjunto mínimo de columnas para satisfacer el tipo de datos que se muestra. Básicamente, esto elimina la advertenciaCURSOR_MISMATCH
que se presenta cuando la consulta muestra columnas adicionales que no coinciden con ningún campo en el tipo de POJO que se muestra. onDestructiveMigrate
es una nueva API de callback que se agrega aRoomDatabase.Callback
para cuando Room migra una base de datos de manera destructiva (b/79962330).
Correcciones de errores
- Se corrigió un error relacionado con Room por el que se generaba un código incorrecto usando un método set de campo cuando el campo estaba protegido (b/136194628).
- Se corrigió un error que hacía que el InvalidationTracker arrojara una NPE en un segundo proceso cuando se habilitaba la invalidación de varias instancias y se cancelaba el servicio de invalidación (b/137454915).
- Se corrigió un error por el cual Room no identificaba correctamente el tipo de datos que se muestra de una función de suspensión heredada con anotación
@RawQuery
(b/137878827). - Se actualizó el código generado para
@Relation
cuando la clave relacionada es de tipo BLOB a fin de usar unByteBuffer
que sea comparable (b/137881998). - Se corrigió un error por el que Room reclamaba la falta de métodos set en los POJO utilizados como parámetros de entidad parciales de
@Insert
,@Update
, y@Delete
(b/138664463). - Se corrigió un error por el que Room reclamaba la falta de métodos get y set para una columna ignorada a través de
@Entity
cuando se utilizaba la clase de entidad en algunos métodos DAO (b/138238182). - Se corrigió un error por el que Room no convertía correctamente los argumentos de vinculación con nombre en argumentos posicionales, lo que causaba una excepción de tiempo de ejecución cuando se ejecutaba una consulta con parámetros reutilizados (b/137254857).
Versión 2.2.0-alpha01
10 de julio de 2019
Nuevas funciones
- Base de datos preempaquetada: Hay dos nuevas APIs disponibles en
RoomDatabase.Builder
para crear unaRoomDatabase
si ya hay un archivo de base de datos propagado.createFromAsset()
sirve cuando el archivo de la base de datos propagado previamente está en la carpeta de elementos del APK, mientras quecreateFromFile()
sirve cuando el archivo está en una ubicación arbitraria. El uso de estas APIs cambia el comportamiento de las migraciones destructivas de manera que, durante una migración alternativa, Room intentará volver a copiar la base de datos prepropagada si está disponible. De no ser posible, como último recurso descartará todas las tablas y volverá a crearlas (b/62185732). - Valores predeterminados del esquema:
@ColumnInfo
ahora tiene una nueva propiedaddefaultValue
que se puede usar para especificar el valor predeterminado de una columna. Los valores predeterminados son parte de un esquema de base de datos y, si se los especifica, se validarán durante las migraciones (b/64088772).Nota: Si el esquema de tu base de datos ya tiene valores predeterminados, como los que se agregaron mediante
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, y decides definir los valores predeterminados a través de@ColumnInfo
en las mismas columnas, es posible que debas proporcionar una migración para validar los valores predeterminados no contabilizados. Para obtener más información, consulta Migraciones de Room. - Relaciones de varios a varios:
@Relation
ahora tiene una nueva propiedadassociateBy
, que toma una nueva anotación@Junction
, que se usa para declarar una relación a través de una tabla de unión, también conocida como tabla asociativa (b/69201917). - Relaciones uno a uno: Se quitó la restricción en los campos POJO anotados con
@Relation
de tipoList
oSet
, lo que permite representar relaciones de valor único con eficacia (b/62905145). - Entidad de destino: Las anotaciones de DAO
@Insert
,@Update
y@Delete
ahora tienen una nueva propiedadtargetEntity
, que permite especificar la tabla de destino sobre la que tiene efecto el método DAO. Esto permite que los parámetros de esos métodos DAO sean POJO arbitrarios que se interpretarán como entidades parciales. En la práctica, esto permite inserciones, eliminaciones y actualizaciones parciales (b/127549506). - Procesador de anotaciones incrementales de Gradle: Room ahora es un procesador de anotaciones de aislamiento de Gradle, y la incrementabilidad se puede habilitar mediante la opción
room.incremental
del procesador. Para obtener más información, consulta Opciones del compilador de Room. Si encuentras algún problema, infórmanos. Planeamos habilitar la capacidad de aumento de forma predeterminada en una versión futura y estable. b/112110217
Correcciones de errores
- Room ya no propagará la
EmptySetResultException
al controlador de errores global cuando se haya eliminado la transmisión Rx antes de que se complete la consulta (b/130257475). - Se corrigió un error por el que Room mostraba un mensaje de error incorrecto cuando una función de DAO de suspensión anotada con
@RawQuery
no tenía un tipo de datos que se muestra (b/134303897). - Room ya no generará adaptadores DAO con tipos sin procesar (b/135747255).
Versión 2.1.0
Versión 2.1.0
13 junio de 2019
Lanzamiento de Room 2.1.0 sin modificaciones desde 2.1.0-rc01
. Para conocer las confirmaciones incluidas en la versión, consulta este artículo.
Cambios importantes desde la versión 2.0.0
- FTS: Ahora Room admite entidades con una tabla de asignación FTS3 o FTS4. Ahora las clases con anotaciones
@Entity
también pueden tener anotaciones@Fts3
o@Fts4
a fin de declarar una clase con una tabla de asignación de búsqueda de texto completo. Para lograr una mayor personalización, hay opciones de FTS disponibles a través de los métodos de anotación. - Vistas: Ahora Room permite declarar una clase como una consulta almacenada, también conocida como vista, mediante la anotación
@DatabaseView
. - Corrutinas: Ahora los métodos DAO pueden ser funciones de suspensión. Incluye
room-ktx
en tus dependencias para aprovechar esta función. El artefacto ktx también proporciona la función de extensiónRoomDatabase.withTransaction
para realizar transacciones de bases de datos dentro de una corrutina. - Valor automático: Ahora Room permite declarar clases con anotaciones AutoValue como entidades y POJO. Ahora puedes declarar las anotaciones
@PrimaryKey
,@ColumnInfo
,@Embedded
y@Relation
de Room en métodos abstractos de la clase con anotaciones de valor. Ten en cuenta que estas anotaciones también deben ir acompañadas de@CopyAnnotations
para que Room pueda comprenderlas correctamente. - Compatibilidad con datos asíncronos adicionales: Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
, junto con@Query
que contengan instruccionesINSERT
,DELETE
oUPDATE
, ahora admiten mostrar los tipos de datos RxCompletable
,Single
,Maybe
, y el tipo de datosListenableFuture
de Guava, y pueden ser funciones de suspensión. enableMultiInstanceInvalidation
es una API nueva enRoomDatabase.Builder
que sirve para habilitar la invalidación en varias instancias de RoomDatabase con el mismo archivo de base de datos.fallbackToDestructiveMigrationOnDowngrade
es una API nueva enRoomDatabase.Builder
que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior.ignoredColumns
es una API nueva en la anotación@Entity
que se puede usar para crear una lista de campos ignorados según su nombre.- Room usará correctamente el constructor primario de Kotlin en las clases de datos, lo que evitará la necesidad de declarar las propiedades como
vars
.
Versión 2.1.0-rc01
29 de mayo de 2019
Correcciones de errores
- Se corrigió un error de inicialización de Room que podía ocurrir debido a una configuración de temp_store ya establecida (b/132602198).
- Se corrigió una advertencia de uso de comillas dobles para usuarios con SQLite 3.27.0 y versiones posteriores (b/131712640).
- Se corrigió un error en el que InvalidationTracker causaba una falla cuando se producían varias verificaciones de invalidación en paralelo (b/133457594).
Versión 2.1.0-beta01
7 de mayo de 2019
Lanzamiento de androidx.room 2.1.0-beta01
sin modificaciones desde 2.1.0-alpha07. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Versión 2.1.0-alpha07
25 de abril de 2019
Cambios de comportamiento/API
- Se modificó la función de extensión
RoomDatabase.withTransaction
de modo que ya no tome un bloqueo de funciones con unCoroutineScope
como receptor. De esta manera, se evita omitir el wrappercoroutineScope { }
adicional necesario para ejecutar las acciones en el bloqueo de transacciones de manera simultánea.
Correcciones de errores
- Se corrigió un error por el que Room no podía encontrar una coincidencia con un TypeConverter para una función de DAO de Kotlin que contenía un parámetro de tipo Collection (b/122066791).
Versión 2.1.0-alpha06
22 de marzo de 2019
Cambios de comportamiento/API
- Ahora se serializan las consultas de transacciones asíncronas, de modo que Room no usará más de un subproceso para ejecutar transacciones de la base de datos.
Se agregó
RoomDatabase.Builder.setTransactionExecutor(Executor)
para permitir la configuración del ejecutor que se debe utilizar en las transacciones. RoomDatabase.runInTransaction(Callable)
ya no unirá las excepciones marcadas en RuntimeExceptions (b/128623748).
Correcciones de errores
- Se corrigió un error en el que el seguimiento de invalidaciones dejaba de observar una tabla de contenido si se agregaban observadores tanto para la tabla de contenido como para una tabla FTS de contenido externo (b/128508917).
- Se actualizó la gramática de SQLite de Room para que coincida con SQLite 3.24.0 (b/110883668).
Versión 2.1.0-alpha05
13 de marzo de 2019
Nuevas funciones
- La función de extensión
RoomDatabase.withTransaction
te permite realizar transacciones de bases de datos de forma segura dentro de una corrutina. Las funciones de extensiones de Room, junto con la compatibilidad con corrutinas, están disponibles en el artefactoroom-ktx
. - Los métodos DAO no abstractos con anotaciones
@Transaction
ahora pueden ser funciones de suspensión (b/120241587).
Cambios de comportamiento/API
- Se cambió el nombre del artefacto
room-coroutines
porroom-ktx
para seguir la misma nomenclatura que otros artefactos androidx. - Los objetos
beginTransaction
,setTransactionSuccessful
yendTransaction
enRoomDatabase
dejaron de estar disponibles, y se los reemplazó porrunInTransaction
y la función de extensiónroom-ktx
withTransaction
.
Correcciones de errores
- Se corrigió un error por el que se soltaban los argumentos del tokenizador si el que se usaba era SIMPLE. b/125427014
- Se corrigió un error por el que Room no identificaba correctamente las funciones de suspensión con parámetros cuyo tipo era una clase interna (b/123767877).
- Se corrigió un error por el que el método
@Query
diferido de DAO con instruccionesINSERT
,UPDATE
oDELETE
preparaba con anticipación la consulta en el subproceso principal (b/123695593). - Se corrigieron varios errores por los que Room generaba códigos incorrectos para algunas funciones de suspensión. b/123466702 y b/123457323
- Se corrigió un error por el que no se suprimía correctamente el uso obsoleto de los métodos en el código generado. b/117602586
- Se actualizó la dependencia de Room de androidx.sqlite a 1.0.2, que contiene correcciones a fin de controlar de forma correcta las bases de datos dañadas. b/124476912
Errores conocidos
- Room 2.1.0-alpha05 depende del artefacto
kotlinx-metadata-jvm
que no está disponible actualmente en Maven Central (KT-27991). Puedes resolver esta dependencia si agregasmaven { url "https://kotlin.bintray.com/kotlinx/" }
a los repositorios de tu proyecto.
Versión 2.1.0-alpha04
25 de enero de 2019
Nuevas funciones
- Los métodos DAO con anotaciones
@Query
que contienen instruccionesINSERT
,UPDATE
oDELETE
ahora pueden mostrar tipos asíncronosSingle
,Mayble
,Completable
yListenableFuture
. Además, también pueden ser funciones de suspensión. b/120227284
Cambios de comportamiento/API
- Room ahora mostrará un error si un método DAO no abstracto con anotaciones
@Transaction
muestra un tipo asíncrono comoSingle
,Mayble
,Completable
,LiveData
oListenableFuture
. Dado que las transacciones están confinadas en subprocesos, por el momento, es imposible que Room comience y finalice una transacción en torno a una función que puede realizar consultas en diferentes subprocesos (b/120109336). OnConflictStrategy.FAIL
yOnConflictStrategy.ROLLBACK
ahora son@Deprecated
, ya que no se comportan según lo esperado con las vinculaciones actuales SQLite de Android (b/117266738).
Correcciones de errores
- Se corrigió un error por el que Room no usaba correctamente el TypeConverter de un tipo de resultado si el método DAO era una función de suspensión. b/122988159
- Se corrigió un error por el que Room identificaba de manera incorrecta las funciones de suspensión heredadas como de no suspensión (b/122902595).
- Se corrigió un error por el que Room generaba códigos incorrectos cuando un campo
@Embedded
estaba en una clase superior y se usaba en varias clases secundarias (b/121099048). - Se solucionó un problema por el que se bloqueaba la base de datos al invocar funciones de suspensión de DAO entre
beginTransaction()
yendTransaction()
(b/120854786).
Versión 2.1.0-alpha03
4 de diciembre de 2018
Cambios en la API
- Ahora el FTS
tokenizer
en@Fts3
/@Fts4
lleva una cadena en lugar de una enumeración. Esto permite que Room use tokenizadores personalizados. Los asignadores de tokens integrados todavía están definidos enFtsOptions
como constantes de cadena (b/119234881).
Nuevas funciones
- Corrutinas: Ahora los métodos DAO pueden ser funciones de suspensión. Para admitir las funciones de suspensión en Room, se lanzó un nuevo artefacto,
room-coroutines
. b/69474692 - Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
ahora admitenListenableFuture
como tipo de datos que se muestra. b/119418331
Correcciones de errores
- Se solucionó un error por el que Room intentaba incorrectamente encontrar un constructor con columnas en la propiedad
ignoredColumns
de@Entity
(b/119830714). - Se solucionó un error por el que Room no identificaba parámetros del método DAO como finales en su implementación generada (b/118015483).
- Se solucionó un error en el que el procesador de Room fallaba al informar un error en una consulta con símbolos especiales. b/119520136
- Se corrigió un error por el que Room rechazaba varias implementaciones de
Collection
como argumentos de una expresiónIN
. b/119884035 - Se corrigió un error en el que los LiveData mostrados por Room recibían elementos no utilizados recopilados cuando se observaban de manera indefinida, lo que ocasionaba que ya no emitieran datos nuevos. b/74477406
- Se actualizó el bloqueo de cierre de
RoomDatabase
a fin de reducir la contención de bloqueo (b/117900450).
Versión 2.1.0-alpha02
30 de octubre de 2018
Nuevas funciones
- Se agregó compatibilidad para hacer referencia a
@DatabaseView
en@Relation
. b/117680932
Correcciones de errores
- Se corrigió un error por el que Room realizaba operaciones de E/S en el disco en el subproceso principal al suscribirse y desechar un tipo de datos que se muestra Rx (b/117201279).
- Se corrigió un error en el que Room no encontraba un convertidor de tipo apropiado para un campo en una clase de entidad de Kotlin. b/111404868
- Se corrigió un error en el que Room generaba un código incorrecto para una implementación de interfaz
DAO
que incluye un método predeterminado de Kotlin sin argumentos. b/117527454 - Se actualizó el analizador de gramática de SQLite de Room y se corrigió un problema de rendimiento que prolongaba los tiempos de compilación (b/117401230).
Versión 2.1.0-alpha01
8 de octubre de 2018
Nuevas funciones
- FTS: Ahora Room admite entidades con una tabla de asignación FTS3 o FTS4. Ahora las clases con anotaciones
@Entity
también pueden tener anotaciones@Fts3
o@Fts4
a fin de declarar una clase con una tabla de mapeo de búsqueda en el texto completo. Las opciones de FTS para mayor personalización están disponibles mediante los métodos de la anotación. b/62356416 - Vistas: Ahora Room permite declarar una clase como una consulta almacenada, también conocida como vista, mediante la anotación @DatabaseView (b/67033276).
- Valor automático: Ahora Room permite declarar clases con anotaciones AutoValue como entidades y POJO. Ahora puedes declarar las anotaciones
@PrimaryKey
,@ColumnInfo
,@Embedded
y@Relation
de Room en métodos abstractos de la clase con anotaciones de valor. Ten en cuenta que estas anotaciones deben estar acompañadas de@CopyAnnotations
para que Room pueda entenderlas correctamente. b/62408420 - Compatibilidad adicional con tipos de datos que se muestran Rx: Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
ahora admiten mostrar los tipos de datos RxCompletable
,Single<T>
yMaybe<T>
. b/63317956 - Tipos con
@Relation
que no cambian: Antes, Room requería que los campos con anotaciones@Relation
pudieran configurarse, pero ahora pueden ser parámetros de constructor. enableMultiInstanceInvalidation
: Es una API nueva enRoomDatabase.Builder
que sirve para habilitar la invalidación en varias instancias de RoomDatabase con el mismo archivo de base de datos. Este mecanismo de invalidación de varias instancias también funciona con distintos procesos. b/62334005fallbackToDestructiveMigrationOnDowngrade
: Es una API nueva enRoomDatabase.Builder
que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior. b/110416954ignoredColumns
: Es una API nueva en la anotación@Entity
que se puede usar para crear una lista de campos ignorados según su nombre. Sirve para ignorar campos heredados en una entidad (b/63522075).
Cambios de comportamiento/API
- Ahora
mCallback
ymDatabase
enRoomDatabase
son@Deprecated
y se quitarán en la próxima versión de Room. b/76109329
Correcciones de errores
- Se corrigieron dos errores en los que Room no se recuperaba correctamente de una base de datos dañada o una migración incorrecta durante la inicialización. b/111504749 y b/111519144
- Ahora Room usará de forma correcta el constructor principal de Kotlin en clases de datos, lo que evita la necesidad de declarar los campos como
vars
(b/105769985).
Versión 2.0.0
Versión 2.0.0
1 de octubre de 2018
Lanzamiento de androidx.room 2.0.0
sin cambios desde la versión 2.0.0-rc01.
Versión 2.0.0-rc01
20 de septiembre de 2018
Lanzamiento de androidx.room 2.0.0-rc01
sin modificaciones desde la versión 2.0.0-beta01.
Versión 2.0.0-beta01
2 de julio de 2018
Cambios de comportamiento/API
- Se agregó
RoomDatabase.Builder.setQueryExecutor()
para permitir personalizar dónde se ejecutan las consultas. - Se agregó compatibilidad con RxJava2
Observable
. - Ahora las implementaciones generadas de DAO y Database son definitivas.
Correcciones de errores
- Especifica el nombre de clase/campo en el error "no se puede encontrar un captador para el campo". b/73334503
- Se corrigió la compatibilidad de versiones anteriores de RoomOpenHelper con versiones anteriores de Room. b/110197391
Dependencias anteriores a AndroidX
Para las versiones de Room anteriores a AndroidX, incluye estas dependencias:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
Versión 1.1.1
Versión 1.1.1
19 de junio de 2018
Room 1.1.1
es idéntico a Room 1.1.1-rc1
.
Versión 1.1.1-rc1
16 de mayo de 2018
Recomendamos utilizar Room 1.1.1-rc1
en lugar de 1.1.0
si usas migraciones.
Se solucionó un error por el que Room no administraba correctamente la inicialización posterior a la migración (b/79362399).
Versión 1.1.0
Versión 1.1.0-beta3
19 de abril de 2018
Correcciones de errores
- Se corrigió un error de compilación que ocurría cuando un POJO de Kotlin hacía referencia a una entidad de relación que se había definido en Java (b/78199923).
Versión 1.1.0-beta2
5 de abril de 2018
Correcciones de errores
Se corrigió un error crítico en las implementaciones
Single
yMaybe
de Rx de Room, en el que se reciclaba la consulta antes de tiempo, lo que ocasionaba problemas si agregabas más de un observador a las instancias deSingle
oMaybe
que se habían mostrado (b/76031240).[RoomDatabase.ImageAllTables][ref-clearAllTables] no ejecutará
VACUUM
en la base de datos si se invoca dentro de una transacción (b/77235565).
Versión 1.1.0-beta1
21 de marzo de 2018
Cambios en la API
- En función de los comentarios de revisión de la API,
@RawQuery
ya no acepta que se pase unaString
como parámetro de consulta. Debes usar [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (Consulta [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] para crear fácilmente una instancia de [SupportSQLiteQuery][ref-SupportSQLiteQuery] con compatibilidad con argumentos). - El método [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] de RoomDatabase.Builder ahora acepta
vararg int
en lugar devararg Integer
.
Correcciones de errores
- Ahora [RoomDatabase.clearAllTables][ref-clearAllTables] intenta mostrar espacio al sistema operativo al configurar un punto de control de WAL y realizar un
VACUUM
de la base de datos. - Ahora [
@RawQuery
][ref-RawQuery] acepta cualquier POJO de la propiedadobservedEntities
, siempre y cuando tenga referencias a una o más entidades a través de sus camposEmbedded
oRelation
s (b/74041772). - Paging: Ahora la implementación DataSource de Room administra correctamente dependencias con varias tablas (como relaciones y uniones). Anteriormente, fallaban al activar resultados nuevos o hacer una compilación. b/74128314
Versión 1.1.0-alpha1
22 de enero de 2018
Nuevas funciones
RawQuery
: esta API nueva permite que los métodos@Dao
reciban la instrucción SQL como un parámetro de consulta. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: Esta API nueva enRoomDatabase.Builder
permite controlar de manera más detallada desde qué versiones de esquema iniciales se permiten las migraciones destructivas (en comparación con fallbackToDestructiveMigration). b/64989640- Ahora Room solo es compatible con las APIs de Paging más recientes (alpha-4+), de manera que ya no admite
LivePagedListProvider
, que dejó de estar disponible. Para usar la nueva versión Alfa de Room, debes utilizar paginación dealpha-4
o versiones posteriores y cambiar deLivePagedListProvider
aLivePagedListBuilder
, si todavía no lo hiciste.
Correcciones de errores
- Compatibilidad mejorada para tipos Kotlin Kapt. b/69164099
- El orden de los campos ya no invalida el esquema (b/64290754).