Room
| Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
|---|---|---|---|---|
| 22 octobre 2025 | 2.8.3 | - | - | - |
Déclarer des dépendances
Pour ajouter une dépendance sur Room, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Les dépendances pour Room incluent les tests de migrations Room et Room RxJava.
Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou module :
Kotlin
dependencies { val room_version = "2.8.3" 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.8.3" 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" }
Pour en savoir plus sur l'utilisation du plug-in KAPT, consultez la documentation KAPT.
Pour en savoir plus sur l'utilisation du plug-in KSP, consultez la documentation de démarrage rapide de KSP.
Pour en savoir plus sur l'utilisation des extensions Kotlin, consultez la documentation sur les extensions KTX.
Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.
Si vous utilisez des bibliothèques autres qu'Android (par exemple, des modules Gradle Java ou Kotlin uniquement), vous pouvez utiliser les annotations Room grâce à androidx.room:room-common.
Configurer les options du compilateur
Room dispose des options de processeur d'annotation suivantes.
room.schemaLocation |
directory
Permet d'exporter les schémas de base de données vers des fichiers JSON dans le répertoire donné. Pour en savoir plus, consultez Migrations Room. |
room.incremental |
boolean
Active le processeur d'annotations incrémentielles Gradle. La valeur par défaut est true.
|
room.generateKotlin |
boolean
Générez des fichiers sources Kotlin au lieu de fichiers Java. Nécessite KSP. La valeur par défaut est true à partir de la version 2.7.0.
Pour en savoir plus, consultez les notes de version 2.6.0, qui indiquent la date de son introduction.
|
Utiliser le plug-in Room Gradle
Avec Room 2.6.0 et versions ultérieures, vous pouvez utiliser le plug-in Room Gradle pour configurer les options du compilateur Room. Le plug-in configure le projet de sorte que les schémas générés (qui sont une sortie des tâches de compilation et sont utilisés pour les migrations automatiques) soient correctement configurés pour avoir des builds reproductibles et pouvant être mis en cache.
Pour ajouter le plug-in, définissez-le ainsi que sa version dans le fichier de compilation Gradle de premier niveau.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
Dans le fichier de compilation Gradle au niveau du module, appliquez le plug-in et utilisez l'extension room.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
La définition d'un schemaDirectory est obligatoire lorsque vous utilisez le plug-in Room Gradle. Cela configurera le compilateur Room, les différentes tâches de compilation et ses backends (javac, KAPT, KSP) pour générer des fichiers de schéma dans des dossiers spécifiques, par exemple schemas/flavorOneDebug/com.package.MyDatabase/1.json. Ces fichiers doivent être archivés dans le dépôt pour être utilisés pour la validation et les migrations automatiques.
Certaines options ne peuvent pas être configurées dans toutes les versions du plug-in Gradle Room, même si elles sont compatibles avec le compilateur Room. Le tableau ci-dessous liste chaque option et indique la version du plug-in Room Gradle qui a ajouté la compatibilité pour configurer cette option à l'aide de l'extension room. Si votre version est antérieure ou si l'option n'est pas encore disponible, vous pouvez utiliser les options du processeur d'annotation.
| Option | Depuis la version |
|---|---|
room.schemaLocation (obligatoire) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Utiliser les options du processeur d'annotations
Si vous n'utilisez pas le plug-in Room Gradle ou si l'option souhaitée n'est pas compatible avec votre version du plug-in, vous pouvez configurer Room à l'aide des options du processeur d'annotations, comme décrit dans Ajouter des dépendances de compilation. La façon dont vous spécifiez les options d'annotation dépend de l'utilisation de KSP ou KAPT pour 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... ) } } } }
Étant donné que room.schemaLocation est un répertoire et non un type primitif, il est nécessaire d'utiliser CommandLineArgumentsProvider lors de l'ajout de cette option afin que Gradle connaisse ce répertoire lors des vérifications de mise à jour.
L'article Migrer votre base de données Room présente une implémentation complète de CommandLineArgumentsProvider qui fournit l'emplacement du schéma.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 2.8
Version 2.8.3
22 octobre 2025
Publication d'androidx.room:room-*:2.8.3. La version 2.8.3 contient ces commits.
Correction de bugs
- Correction d'un problème de performances avec le wrapper SQLite de Room qui entraînait des appels JNI excessifs et une dégradation significative des performances lors de l'itération sur un curseur.
Version 2.8.2
8 octobre 2025
Publication d'androidx.room:room-*:2.8.2. La version 2.8.2 contient ces commits.
Correction de bugs
- Correction d'un blocage qui pouvait se produire lors de la réouverture d'une base de données fermée automatiquement à partir d'une émission Flow (b/446643789).
Version 2.8.1
24 septembre 2025
Publication d'androidx.room:room-*:2.8.1. La version 2.8.1 contient ces commits.
Correction de bugs
- Correction d'un plantage du processeur qui se produisait lors du traitement d'une fonction DAO avec un lambda de suspension. (b/442220723).
- Correction d'une condition de concurrence qui empêchait les flux de recevoir les dernières mises à jour.
Version 2.8.0
10 septembre 2025
Publication d'androidx.room:room-*:2.8.0. La version 2.8.0 contient ces commits.
Changements importants depuis la version 2.7.0 :
- Ajout d'un nouvel artefact
androidx.room:room-sqlite-wrappercontenant des API permettant d'obtenir un wrapperSupportSQLiteDatabaseà partir d'unRoomDatabaseavec unSQLiteDriverconfiguré. Pour obtenir le wrapper, utilisez la nouvelle fonction d'extensionRoomDatabase.getSupportWrapper(). Il s'agit d'un artefact de compatibilité permettant de conserver les utilisations deSupportSQLiteDatabase, généralement obtenues à partir deroomDatabase.openHelper.writableDatabase, même si la base de données Room est configurée avec unSQLiteDriver. Ce wrapper est utile pour la migration incrémentielle des bases de code qui souhaitent adopter les API SQLiteDriver, mais qui utilisent beaucoup les API SupportSQLite et qui veulent profiter deBundledSQLiteDriver. Pour en savoir plus, consultez le guide de migration. - Ajout de la prise en charge des cibles KMP Watch OS et Tv OS.
- Mise à jour de la version Android minSDK de la bibliothèque, qui passe de l'API 21 à l'API 23
Version 2.8.0-rc02
27 août 2025
Publication d'androidx.room:room-*:2.8.0-rc02. La version 2.8.0-rc02 contient ces commits.
Modifications apportées à l'API
- Mise à jour de la version minSDK de l'API 21 à l'API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- Mise à jour de la version minimale du plug-in Android Gradle (AGP) compatible avec le plug-in Room Gradle, qui passe de 8.1 à 8.4. (Ia0d28)
Correction de bugs
- Correction d'un problème qui entraînait l'exécution d'une migration destructive même si un chemin de migration était disponible pour une base de données préinstallée (b/432634197).
Version 2.8.0-rc01
13 août 2025
Publication d'androidx.room:room-*:2.8.0-rc01. La version 2.8.0-rc01 contient ces commits.
Modifications apportées à l'API
Correction de bugs
- Correction d'une condition de course où les flux Room n'émettaient pas le dernier résultat de requête dans une situation d'écriture/requête multiple asynchrone. (Ic9a3c)
Version 2.8.0-beta01
1er août 2025
Publication d'androidx.room:room-*:2.8.0-beta01. La version 2.8.0-beta01 contient ces commits.
Correction de bugs
- Les noms de tables et de vues sont désormais correctement échappés lors des migrations destructives. (9e55f8, b/427095319)
Version 2.8.0-alpha01
16 juillet 2025
Publication d'androidx.room:room-*:2.8.0-alpha01. La version 2.8.0-alpha01 contient ces commits.
Nouvelles fonctionnalités
- Ajout d'un nouvel artefact
androidx.room:room-sqlite-wrappercontenant des API permettant d'obtenir un wrapperSupportSQLiteDatabasedeRoomDatabaseavec unSQLiteDriverconfiguré. Pour obtenir le wrapper, utilisez la nouvelle fonction d'extensionRoomDatabase.getSupportWrapper(). Il s'agit d'un artefact de compatibilité permettant de conserver les utilisations deSupportSQLiteDatabase, généralement obtenues à partir deRoomDatabase.openHelper.writableDatabase, même si la base de données Room est configurée avec unSQLiteDriver. Ce wrapper est utile pour la migration incrémentielle des bases de code qui souhaitent adopterSQLiteDriver, mais qui utilisent beaucoup les APISupportSQLiteet qui veulent profiter deBundledSQLiteDriver. (Icf6ac) - Ajout de cibles KMP pour Watch OS et TV OS (I228f6, b/394238801)
Correction de bugs
- Correction d'un blocage qui pouvait se produire occasionnellement lors de l'utilisation de transactions suspendues et de
AndroidSQLiteDriver. (b/415006268)
Version 2.7
Version 2.7.2
18 juin 2025
Publication d'androidx.room:room-*:2.7.2. La version 2.7.2 contient ces commits.
Correction de bugs
- Correction d'un problème qui entraînait une lecture incorrecte des valeurs d'annotation lors du traitement des sources natives avec KSP, ce qui entraînait parfois l'absence d'exportations de schéma. (b/416549580)
- Correction d'un bug qui entraînait l'exécution des instructions SQL avec des commentaires en tête comme s'il s'agissait de requêtes non lues. (b/413061402)
- Correction d'un problème lié à l'échec de la configuration du plug-in Gradle de Room en raison du répertoire de schéma vide. (b/417823384)
- La bibliothèque n'émet plus d'exception
SQLiteExceptionlorsque l'obtention d'une connexion prend trop de temps. Elle envoie un message de journalisation à la place. La journalisation au lieu de la génération d'exceptions permet de contourner les boucleurs de suspension iOS, ce qui amène Room à mal interpréter le délai d'expiration qui se produit dans la coroutine Kotlin acquérant la connexion et empêche ainsi l'exception d'être générée lorsqu'une application iOS est mise en arrière-plan, puis reprise au milieu d'une opération de base de données. (b/422448815)
Version 2.7.1
23 avril 2025
Publication d'androidx.room:room-*:2.7.1. La version 2.7.1 contient ces commits.
Correction de bugs
- Correction du bug
IndexOutOfBoundsExceptionlors de la validation du convertisseur de type fourni. (b/409804755). - Prise en charge de
RoomDatabase.runInTransaction()lorsqu'unSQLiteDriverest configuré avec Room. (b/408364828).
Version 2.7.0
9 avril 2025
Publication d'androidx.room:room-*:2.7.0. La version 2.7.0 contient ces commits.
Modifications importantes depuis la version 2.6.0
- Compatibilité avec Kotlin Multiplatform (KMP) : dans cette version, Room a été refactorisé pour devenir une bibliothèque Kotlin Multiplatform (KMP). Les plates-formes actuellement compatibles sont Android, iOS, JVM (Desktop), Mac natif et Linux natif. Pour savoir comment commencer à utiliser Room KMP, veuillez consulter la documentation officielle de Room KMP. Dans le cadre de la compatibilité avec KMP, Room peut également être configuré avec un
SQLiteDriver. Pour savoir comment migrer une application existante vers les API Driver et Room KMP, consultez la documentation sur la migration. - L'option Génération de code Kotlin sur KSP est activée par défaut si le traitement est effectué via KSP. Pour les projets KAPT ou Java uniquement, Room génère toujours des sources Java.
- Kotlin 2.0 et KSP2 : Room cible désormais le langage Kotlin 2.0 et exigera que les projets soient également compilés avec Kotlin 2.0 ou une version du langage équivalente ou supérieure. La compatibilité avec KSP2 a également été ajoutée et est recommandée lorsque vous utilisez Room avec Kotlin 2.0 ou version ultérieure.
Version 2.7.0-rc03
26 mars 2025
Publication d'androidx.room:room-*:2.7.0-rc03. La version 2.7.0-rc03 contient ces commits.
Correction de bugs
- L'exception
InterruptedExceptionn'est plus générée lorsqu'un thread est interrompu lors de l'exécution des API de blocage Room, y compris les fonctions DAO de blocage (b/400584611). - Réimplémentation du pool de connexions de Room pour tenter d'atténuer
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.et les problèmes similaires (b/380088809).
Version 2.7.0-rc02
12 mars 2025
Publication d'androidx.room:room-*:2.7.0-rc02. La version 2.7.0-rc02 contient ces commits.
Correction de bugs
- Correction des migrations automatiques qui géraient incorrectement une nouvelle colonne dans une table FTS. (b/348227770, Ic53f3)
- Correction d'un plantage du compilateur Room dû à un
NullPointerExceptionlors du traitement de sources non JVM via KSP. (b/396607230, I693c9) - Correction d'un problème qui empêchait Room d'invalider les tables à la fin de l'utilisation de la connexion du rédacteur. (b/340606803, I73ef6)
Version 2.7.0-rc01
26 février 2025
Publication d'androidx.room:room-*:2.7.0-rc01. La version 2.7.0-rc01 contient ces commits.
Correction de bugs
- Correction d'un problème qui empêchait Room de définir
busy_timeoutdans la connexion initiale à la base de données, ce qui entraînait des problèmesSQLException: Error code: 5, message: database is locked(I93208, b/380088809). - Correction d'un problème dans le compilateur de Room qui entraînait le plantage du processeur KSP lors du traitement des ensembles de sources natifs (tels qu'iOS) sur Kotlin 2.1.x et KSP1 (I883b8, b/396607230).
Version 2.7.0-beta01
12 février 2025
Publication d'androidx.room:room-*:2.7.0-beta01. La version 2.7.0-beta01 contient ces commits.
Correction de bugs
- Correction d'un problème lié à
RoomDatabase.inTransaction()qui ouvrait une base de données fermée alors qu'il ne le devait pas et qui devait renvoyer rapidement la valeur "false" si la base de données était fermée (b/325432967). - Correction d'un plantage (
IllegalArgumentException: not a valid name) dans le compilateur de Room lors du traitement des fonctions DAO avec des classes de valeur / en ligne Kotlin (b/388299754). - Incluez des règles ProGuard dans l'artefact JVM de
room-runtimeafin que le constructeur par défaut de l'implémentation de base de données générée ne soit pas supprimé, car il est utilisé par l'initialisation par défaut de Room qui utilise la réflexion (b/392657750).
Version 2.7.0-alpha13
29 janvier 2025
Publication d'androidx.room:room-*:2.7.0-alpha13. La version 2.7.0-alpha13 contient ces commits.
Modifications apportées à l'API
- Room cible désormais le langage Kotlin 2.0 et exigera que les projets soient également compilés avec Kotlin 2.0 et une version de langage équivalente ou supérieure. (I8efb0, b/315461431, b/384600605)
Correction de bugs
- Correction d'un problème dans le générateur de base de données Room KMP lorsqu'un nom simple au lieu d'un chemin d'accès était utilisé dans Android et que le chemin d'accès résolu du fichier de base de données ne se trouvait pas dans le répertoire de données de l'application. (I83315, b/377830104)
- Correction d'un problème lié au plug-in Room Gradle, où la configuration des entrées et sorties de schéma entraînait un problème sur les projets Android :
property 'inputDirectory' is final and cannot be changed any further.(1dbb4c, b/376071291) - Ajout de la compatibilité avec KSP2 dans le plug-in Room Gradle, ce qui corrige un problème qui empêchait le plug-in de configurer correctement le répertoire de schéma. (Iec3c4, b/379159770)
Contribution externe
- Correction d'un problème lié à l'intégration de la pagination
Room, qui entraînait des sauts d'UI lorsque la clé initiale à actualiser était trop proche de la fin de la liste. Merci à Eva ! (I2abbe, b/389729367)
Version 2.7.0-alpha12
11 décembre 2024
Publication d'androidx.room:room-*:2.7.0-alpha12. La version 2.7.0-alpha12 contient ces commits.
Modifications apportées à l'API
- Ajout de l'API expérimentale
RoomDatabase.Builder.setInMemoryTrackingMode()pour configurer si Room utilisera ou non une table en mémoire pour le suivi de l'invalidation. (I2a9b2, b/185414040)
Correction de bugs
- Les migrations destructives suppriment désormais les vues pour s'assurer qu'elles sont recréées, ce qui aligne le comportement lorsque
allowDestructiveMigrationForAllTablesest activé (par défaut dans KMP) sur le comportement existant lorsqu'il est désactivé. (0a3e83, b/381518941)
Version 2.7.0-alpha11
30 octobre 2024
Publication d'androidx.room:room-*:2.7.0-alpha11. La version 2.7.0-alpha11 contient ces commits.
Modifications apportées à l'API
- Revisitez la signature de la méthode
convertRows()nouvellement ajoutée pour qu'elle soit une fonction de suspension qui reçoit unRawRoomQuerypour la pagination des salles. (Ie57b5, b/369136627)
Correction de bugs
- Correction du problème dans room-paging où un code non valide était généré lors de l'utilisation de
@Relationen association avecPagingSource.
Version 2.7.0-alpha10
16 octobre 2024
Publication d'androidx.room:room-*:2.7.0-alpha10. La version 2.7.0-alpha10 contient ces commits.
Modifications apportées à l'API
- Créez une classe
ByteArrayWrapperinterne pour prendre en charge les relations avecByteBuffersur les plates-formes non Android et non JVM. (I75543, b/367205685) - Ajout de
SQLiteStatement.getColumnType()ainsi que des différentes constantes de résultatSQLITE_DATA_*pour pouvoir récupérer le type de données d'une colonne. (I1985c, b/369636251)
Version 2.7.0-alpha09
2 octobre 2024
Publication d'androidx.room:room-*:2.7.0-alpha09. La version 2.7.0-alpha09 contient ces commits.
Correction de bugs
- Correction d'un problème lié à l'implémentation KMP de
room-pagingqui entraînait uneError code: 8, message: attempt to write a readonly databaseen raison du démarrage d'une transaction d'écriture sur une connexion de lecture. (b/368380988)
Version 2.7.0-alpha08
18 septembre 2024
Publication d'androidx.room:room-*:2.7.0-alpha08. La version 2.7.0-alpha08 contient ces commits.
Nouvelles fonctionnalités
- Les artefacts
room-pagingont été migrés pour être compatibles avec KMP. (Ib8756, b/339934824) - L'API
invalidationTrackerFlow()a été standardisée en tant qu'API first partyInvalidationTracker.createFlow()et est désormais disponible pour les ensembles de sources non Android dans les projets KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
Modifications apportées à l'API
- Tous les avertissements et messages d'erreur dans Room qui utilisent le mot
Cursoront été supprimés ou remplacés, carCursorn'est plus un terme général précis à utiliser dans la version KMP de Room. (Id8cd9, b/334087492)
Correction de bugs
- Correction d'un problème où Room KMP tentait d'émettre du code à l'aide de
UUIDpour les plates-formes non JVM. (b/362994709) - Correction d'un problème lié au plug-in Room Gradle qui entraînait une erreur telle que "Cannot change attributes of configuration … after it has been locked for mutation" (Impossible de modifier les attributs de configuration… après qu'ils ont été verrouillés pour modification) lorsqu'il était utilisé dans un projet KMP avec Compose Multiplatform. (b/343408758)
Version 2.7.0-alpha07
21 août 2024
Publication d'androidx.room:room-*:2.7.0-alpha07. La version 2.7.0-alpha07 contient ces commits.
Nouvelles fonctionnalités
- Le plug-in Room Gradle ajoute désormais automatiquement les schémas exportés aux sources de ressources de test d'instrumentation Android afin qu'ils puissent être utilisés par
MigrationTestHelper.
Correction de bugs
- Correction d'un problème lié à la valeur "actual" générée de
RoomDatabaseConstructor, qui ne comportait pas le modificateur "actual" dans la fonctioninitializesi cette fonction était également remplacée dans la déclaration "expect". (359631627) - Correction d'un problème lié à la valeur "actual" générée de
RoomDatabaseConstructor, qui ne correspondait pas à la visibilité de la déclaration "expect". (358138953)
Version 2.7.0-alpha06
7 août 2024
Publication d'androidx.room:room-*:2.7.0-alpha06. La version 2.7.0-alpha06 contient ces commits.
Modifications apportées à l'API
- Modifiez la configuration d'instanciation d'un
RoomDatabasedans un projet KMP.
En raison du modèle de compilation Kotlin 2.0, la stratégie de référence à une fonction à générer, nommée instantiateImpl(), n'est plus viable. Deux nouvelles API, @ConstructedBy et RoomDatabaseConstructor, sont introduites pour remplacer la stratégie instantiateImpl(). Voici la nouvelle stratégie :
Définissez un objet "expect" qui implémente
RoomDatabaseConstructor.expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>Associez l'objet à la déclaration
@Databaseà l'aide de@ConstructedBy.@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabaseCréer une instance de base de données sans transmettre d'argument factory
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Corrections b/316978491, b/338446862 et b/342905180
- Prise en charge de
@RawQuerydans Room KMP en ajoutant une nouvelle API appeléeRoomRawQuery, qui est semblable àSupportSQLiteQueryen termes de conservation de la chaîne SQL brute et d'une fonction permettant de lier des arguments à une instruction. Les fonctions annotées@RawQuerypeuvent désormais accepter unRoomRawQuerycomme paramètre unique. (Iea844, b/330586815) - Ajoutez une surcharge de
setQueryCallback()qui accepte unCoroutineContext. (Id66ff, b/309996304) - Ajout de la prise en charge des cibles multiplateformes Kotlin
linuxArm64(I139d3, b/338268719)
Correction de bugs
- Correction d'un problème qui entraînait la génération incorrecte d'un appel à
recursiveFetchArrayMapdans les cibles non Android. (710c36, b/352482325) - Correction d'un problème qui entraînait parfois une exception "Délai d'attente dépassé lors de la tentative de connexion" dans un projet KMP. (fa72d0, b/347737870)
- Correction d'un problème dans les migrations automatiques qui vérifiaient les clés étrangères trop tôt, avant que d'autres tables n'aient modifié leurs schémas pour se conformer aux nouvelles clés étrangères. (7672c0, b/352085724)
Version 2.7.0-alpha05
10 juillet 2024
Publication d'androidx.room:room-*:2.7.0-alpha05. La version 2.7.0-alpha05 contient ces commits.
Modifications apportées à l'API
- Remplacement du nom
SQLiteKtparSQLiteet du nomBundledSQLiteKtparBundledSQLite. (I8b501)
Correction de bugs
- Correction d'un bug qui provoquait le blocage ou l'échec d'un
RoomDatabaseavec un délai d'expiration de la connexion lors de l'utilisation deAndroidSQLiteDriver.
Version 2.7.0-alpha04
12 juin 2024
Publication d'androidx.room:room-*:2.7.0-alpha04. La version 2.7.0-alpha04 contient ces commits.
Correction de bugs
- Correction d'un problème dans le processeur d'annotations de Room qui générait du code KMP incompatible lorsqu'un type de retour multimap était défini dans un DAO. (b/340983093)
- Correction d'un problème qui empêchait Room de trouver l'implémentation de base de données générée si la classe annotée
@Databasen'avait pas de package. (b/342097292) - Correction d'un problème qui entraînait parfois un
ConcurrentModificationExceptionlorsque la base de données était fermée automatiquement en raison de son inactivité, et que la fermeture automatique et l'invalidation de plusieurs instances étaient activées.
Version 2.7.0-alpha03
29 mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha03. La version 2.7.0-alpha03 contient ces commits.
Correction de bugs
- Correction de divers problèmes concernant Kotlin 2.0 et KSP 2.0. Notez que la prise en charge de Kotlin 2.0 avec KSP 2 n'est pas complète. L'équipe travaille sur les différentes API et les modifications de comportement dans le nouveau compilateur. (b/314151707)
Version 2.7.0-alpha02
14 mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha02. La version 2.7.0-alpha02 contient ces commits.
Correction de bugs
- Correction de divers problèmes liés à KSP.
Version 2.7.0-alpha01
1er mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha01. La version 2.7.0-alpha01 contient ces commits.
Nouvelles fonctionnalités
- Compatibilité avec Kotlin Multiplatform (KMP) : dans cette version, Room a été refactorisé pour devenir une bibliothèque Kotlin Multiplatform (KMP). Bien qu'il reste encore du travail à faire, cette version introduit une nouvelle version de Room dans laquelle la majorité des fonctionnalités ont été "communes" (rendues multiplate-formes). Les plates-formes actuellement compatibles sont Android, iOS, JVM (Desktop), Mac natif et Linux natif. Toutes les fonctionnalités manquantes sur les plates-formes nouvellement compatibles seront ajoutées dans les prochaines versions de Room.
Pour savoir comment commencer à utiliser Room KMP, veuillez consulter la documentation officielle de Room KMP.
- L'option Génération de code Kotlin sur KSP est activée par défaut si le traitement est effectué via KSP. Pour les projets KAPT ou Java uniquement, Room génère toujours des sources Java.
Modifications apportées à l'API
- Une surcharge de
Room.databaseBuilder()a été ajoutée. Elle accepte un paramètre lambda destiné à être utilisé avec une fonction générée par Room pour éviter d'utiliser la réflexion lors de l'instanciation de l'implémentationRoomDatabasegénérée. Exemple d'utilisation :
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Une API permettant de configurer une pièce avec un
CoroutineContexta été ajoutée au générateur :RoomDatabase.Builder.setQueryCoroutineContext. Notez qu'unRoomDatabasene peut être configuré qu'avec des exécuteurs utilisantsetQueryExecutorou avec un contexte de coroutine, mais pas les deux. - Une API permettant de configurer Room avec un pilote
SQLitea été ajoutée :RoomDatabase.Builder.setDriver(). Pour en savoir plus sur l'APISQLiteDriver, consultez la documentation SQLite KMP. - Des API permettant d'accéder à
SQLiteConnectionsous-jacent à partir des API du pilote ont été ajoutées :RoomDatabase.useReaderConnectionetRoomDatabase.useWriterConnection. - Les rappels liés à Varios Room disposent désormais d'une version surchargée qui reçoit
SQLiteConnectionau lieu deSupportSQLiteDatabase. Elles sont destinées à être remplacées lors de la migration vers un projet KMP. Pour en savoir plus sur la migration des utilisations de Room dans une application Android vers un module KMP commun, consultez le guide de migration. Les rappels sont les suivants :Migration.migrate(SQLiteConnection)AutoMigrationSpec.onPostMigrate(SQLiteConnection)RoomDatabase.Callback.onCreate(SQLiteConnection)RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)RoomDatabase.Callback.onOpen(SQLiteConnection)
- L'artefact KTX
androidx.room:room-ktxa été fusionné avecandroidx.room:room-runtimeet toutes ses API. L'artefact est désormais vide. Veuillez le supprimer de votre liste de dépendances.
Version 2.6
Version 2.6.1
29 novembre 2023
Publication d'androidx.room:room-*:2.6.1. Liste des commits de la version 2.6.1
Correction de bugs
- Résolution d'un problème dans le code généré où la valeur par défaut des colonnes Double dans
EntityCursorConverterétait définie sur 0 au lieu de 0.0. Une solution potentielle pour un cas limite similaire pour les colonnes de type Float a également été incluse. (Id75f5, b/304584179) - Les exceptions générées à partir des chargements
PagingSourceseront désormais propagées en tant queLoadStateUpdatedeLoadResult.Errorcontenant le Throwable. Cet état d'erreur est observable viaPagingDataAdapter.loadStateFlow(Views)ouLazyPagingItems.loadState(Compose). Notez qu'il s'agit d'un changement de comportement. Auparavant, les erreurs de chargement étaient signalées sous forme d'exception générée par la méthode DAO qui déclenchait le chargement. (I93887, b/302708983)
Version 2.6.0
18 octobre 2023
Publication d'androidx.room:room-*:2.6.0. Liste des commits de la version 2.6.0
Modifications importantes depuis la version 2.5.0
- L'option permettant d'activer la génération de code Kotlin (ou "Kotlin CodeGen") est désormais disponible dans Room KSP. (4297ec0). Pour activer Kotlin CodeGen dans Room, ajoutez le nom de l'option
room.generateKotlinà vos options de processeur pour KSP. Pour en savoir plus sur la façon de transmettre les options de processeur pour KSP, consultez la documentation KSP.
Remarque : Lorsque vous utilisez Kotlin CodeGen, il est important de noter que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites en tant que getters ou requêtes DAO dans Kotlin CodeGen ne sont pas autorisées. Elles doivent être réécrites en tant que fonctions pour éviter la fausse idée que la valeur de la propriété est immuable et qu'elle a un résultat stocké fixe. Une autre restriction a été ajoutée : les types de retour de collection Nullable ne sont plus autorisés dans Room pour Kotlin CodeGen.
Avertissement : Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez Kotlin CodeGen. Dans Kotlin CodeGen, la possibilité de valeur nulle des arguments de type est importante, alors qu'elle est généralement ignorée en Java. Par exemple, supposons que vous ayez un type de retour `Flow<foo\>` et que la table soit vide. Dans Java CodeGen, cela ne posera aucun problème, mais dans Kotlin CodeGen, vous obtiendrez une erreur. Pour éviter cela, vous devrez utiliser `Flow<foo?\>`, en supposant qu'une valeur nulle est émise. </foo?\></foo\>
- Le nouvel artefact pour le plug-in Room Gradle a été ajouté à Room avec l'ID
androidx.room, ce qui résout divers problèmes existants dans Room concernant les entrées et sorties de schémas via les options du processeur d'annotations Gradle. Pour en savoir plus, consultez les notes de version de Room 2.6.0-alpha02. - Les classes de valeurs dans les entités Room sont désormais compatibles avec KSP. (4194095)
- Les types de renvoi de Map imbriqués dans les fonctions DAO sont désormais compatibles avec Room. (I13f48, 203008711)
Version 2.6.0-rc01
20 septembre 2023
Publication d'androidx.room:room-*:2.6.0-rc01. Liste des commits de la version 2.6.0-rc01
Version 2.6.0-beta01
23 août 2023
Publication d'androidx.room:room-*:2.6.0-beta01. Liste des commits de la version 2.6.0-beta01
Correction de bugs
- Gestion du cas particulier de l'exception
SQLitelors de l'insertion/mise à jour. Lorsque l'exception2067 SQLITE_CONSTRAINT_UNIQUEest générée lors d'une insertion/mise à jour, l'insertion/mise à jour doit effectuer une mise à jour. (If2849, b/243039555)
Version 2.6.0-alpha03
9 août 2023
Publication d'androidx.room:room-*:2.6.0-alpha03. Liste des commits de la version 2.6.0-alpha03.
Nouvelles fonctionnalités
- Les types de renvoi de Map imbriqués dans les fonctions DAO sont désormais compatibles avec Room. (I13f48, 203008711)
Modifications apportées à l'API
- Une nouvelle annotation de type appelée
@MapColumna été créée pour remplacer@MapInfo, qui est désormais obsolète. Pour chaque nom de colonne (keyColumnName,valueColumnNameou les deux) fourni dans une annotation@MapInfo, vous devrez déclarer une annotation@MapColumnavec uniquementcolumnNameet utiliser l'annotation sur l'argument de type spécifique auquel il est fait référence (la clé ou la valeur de la carte) dans le type de retour de la fonction DAO. En effet, l'annotation@MapColumnest utilisée directement sur l'argument de type dans le type de retour d'une fonction DAO, au lieu de l'être sur la fonction elle-même comme@MapInfo. Pour en savoir plus, veuillez consulter la documentation@MapColumn. (Ib0305, b/203008711) - Mise à jour des fichiers API pour annoter la suppression de la compatibilité. (I8e87a, b/287516207)
- Les API du plug-in Gradle Room ont été mises à jour pour ne pas toujours nécessiter de configurations par variante. Cela signifie que le plug-in peut accepter un emplacement global pour toutes les variantes sans créer plusieurs répertoires, ce qui permet des migrations plus fluides. Il est également suffisamment flexible pour configurer manuellement des schémas de saveurs ou de types de compilation tout en conservant les avantages du plug-in (compilations reproductibles et mises en cache). (I09d6f, b/278266663)
Correction de bugs
- Correction d'une faille potentielle de fuite de mémoire dans
QueryInterceptorStatement. (I193d1) - Correction d'un comportement incorrect dans la fonction
QueryInterceptorDatabase execSQL(). (Iefdc8)
Version 2.6.0-alpha02
21 juin 2023
Publication d'androidx.room:room-*:2.6.0-alpha02. Liste des commits de la version 2.6.0-alpha02.
Plug-in Gradle Room
Cette nouvelle version contient un nouvel artefact pour le plug-in Room Gradle avec l'ID androidx.room, qui résout divers problèmes existants dans Room concernant les entrées et les sorties de schémas via les options du processeur d'annotations Gradle. Le plug-in Room Gradle configure le projet de sorte que les schémas générés qui sont utilisés pour les migrations automatiques et qui sont le résultat des tâches de compilation soient correctement configurés pour avoir des builds reproductibles et mis en cache. Le plug-in propose un DSL pour configurer l'emplacement du schéma de base :
room {
schemaDirectory("$projectDir/schemas/")
}
Le plug-in configure ensuite le compilateur Room, les différentes tâches de compilation et ses backends (javac, KAPT, KSP) pour générer des fichiers de schéma dans des dossiers de saveur, c'est-à-dire schemas/flavorOneDebug/com.package.MyDatabase/1.json. Comme d'habitude, ces fichiers sont enregistrés dans le dépôt pour être utilisés pour la validation et les migrations automatiques. Lorsque vous migrez vers l'utilisation du plug-in au lieu des options du processeur d'annotation, les fichiers de schéma existants doivent être copiés dans les répertoires de saveur générés créés par le plug-in. Il s'agit d'une opération de migration ponctuelle qui doit être effectuée manuellement. La documentation du schéma sur developers.android.com sera mise à jour à l'avenir une fois les commentaires pris en compte et le plug-in stable. N'hésitez donc pas à l'essayer.
Modifications apportées à l'API
RoomDatabase.QueryCallbacka été défini comme une interface fonctionnelle pour permettre les utilisations de la conversion SAM. (Iab8ea, b/281008549)
Correction de bugs
- Résolution du problème survenant lors de l'instanciation de la base de données dans Robolectric après la migration des sources Room de Java vers Kotlin. (Ic053c, b/274924903)
Version 2.6.0-alpha01
22 mars 2023
Publication d'androidx.room:room-*:2.6.0-alpha01. Liste des commits de la version 2.6.0-alpha01.
Nouvelles fonctionnalités
- Prise en charge des classes de valeurs dans Room pour KSP. Room peut désormais prendre en charge les classes de valeurs dans les entités. (4194095)
- La génération de code Kotlin(ou "Kotlin CodeGen") peut désormais être activée dans Room (4297ec0). Pour activer Kotlin CodeGen dans Room, ajoutez le nom de l'option
room.generateKotlinà vos options de processeur pour KSP. Pour en savoir plus sur la façon de transmettre les options de processeur pour KSP, consultez la documentation KSP.
Remarque : Lorsque vous utilisez Kotlin CodeGen, il est important de noter que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites en tant que getters ou requêtes DAO dans Kotlin CodeGen ne sont pas autorisées. Elles doivent être réécrites en tant que fonctions pour éviter la fausse idée que la valeur de la propriété est immuable et qu'elle a un résultat stocké fixe. Une autre restriction ajoutée est que les types de retour de collection Nullable ne sont plus autorisés dans Room pour Kotlin CodeGen.
Avertissement : Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez Kotlin CodeGen. Dans Kotlin CodeGen, la possibilité de valeur nulle des arguments de type est importante, alors qu'elle est généralement ignorée en Java. Par exemple, supposons que vous ayez un type de retour `Flow<foo\>` et que la table soit vide. Dans Java CodeGen, cela ne posera aucun problème, mais dans Kotlin CodeGen, vous obtiendrez une erreur. Pour éviter cela, vous devrez utiliser `Flow<foo?\>`, en supposant qu'une valeur nulle est émise. </foo?\></foo\>
Modifications apportées à l'API
- Protection contre l'utilisation non pertinente de collections acceptant la valeur Null dans les types de retour de méthode DAO. (I777dc, b/253271782, b/259426907)
- Ajout d'une API permettant de créer un Flow qui émet des modifications du suivi de l'invalidation. L'API est utile pour créer des flux qui doivent réagir aux modifications de la base de données. (I8c790, b/252899305)
Correction de bugs
- Interdire les propriétés abstraites en tant que getters ou requêtes DAO dans la génération de code Kotlin. Elles doivent plutôt être réécrites en tant que fonctions pour éviter la fausse idée que la valeur de la propriété est immuable et qu'elle a un résultat stocké fixe. (If6a13, b/127483380, b/257967987)
Version 2.5.2
Version 2.5.2
21 juin 2023
Publication d'androidx.room:room-*:2.5.2. Liste des commits de la version 2.5.2
Correction de bugs
- Correction d'un problème d'incompatibilité avec kotlinx-metadata-jvm. (386d5c)
- Correction d'un problème qui entraînait l'affichage d'une erreur Room lors de l'utilisation dans un test Robolectric. (f79bea, b/274924903)
Version 2.5.1
Version 2.5.1
22 mars 2023
Publication d'androidx.room:room-*:2.5.1. Liste des commits de la version 2.5.1.
Correction de bugs
- Évitez de cocher le répertoire parent de la base de données dans
FrameworkSQLiteHelpersi la base de données est déjà ouverte. (5de86b8) - Utilisez une vérification
isOpenInternalpour vérifier si la base de données est déjà ouverte. (e91fb35) - Une meilleure gestion du cas réentrant dans
acquireTransactionThread()deRoomest désormais disponible. (219f98b). Lors d'une transaction de suspension, Room utilise un thread de l'exécuteur de transactions, y démarre une boucle d'événements et y distribue les opérations de base de données de suspension afin qu'elles soient toutes encapsulées dans la coroutine de transaction. Le thread de transaction est généralement différent de celui qui démarre la transaction, mais dans certains cas, ils sont identiques. Pour gérer ces cas de réentrance,withTransaction()a été refactorisé pour ne plus dépendre d'un job de contrôle. Il exécutera plutôt le bloc de transaction de suspension à partir derunBlockingdans le thread de transaction.
Version 2.5.0
Version 2.5.0
22 février 2023
Publication de androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 et androidx.room:room-paging-rxjava3:2.5.0. Liste des commits de la version 2.5.0
Version 2.5.0
11 janvier 2023
Publication de androidx.room:room-*:2.5.0. Liste des commits de la version 2.5.0
Modifications importantes depuis la version 2.4.0
- Toutes les sources
room-runtimeont été converties en Kotlin depuis Java. Notez que vous pouvez rencontrer des problèmes d'incompatibilité des sources si votre code est en Kotlin, en raison de la conversion de la bibliothèque en Kotlin. Par exemple, une modification incompatible avec la source est que, dansInvalidationTracker, vous devrez désormais déclareronInvalidate()dansObserverpour avoir un paramètre de typeSetet non de typeMutableSet. De plus, certaines méthodes getter ont été converties en propriétés nécessitant la syntaxe d'accès aux propriétés sur les fichiers Kotlin. Veuillez signaler un bug en cas d'incompatibilités majeures. - Ajout d'une annotation de raccourci,
@Upsert, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353) - Ajout des artefacts de room-paging
room-paging-rxjava2,room-paging-rxjava3etroom-paging-guavapour Room Paging. - Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans
@MapInfo(Icc4b5)
Version 2.5.0-rc01
7 décembre 2022
Publication d'androidx.room:room-*:2.5.0-rc01. Liste des commits de la version 2.5.0-rc01
- Cette version est identique à la version
2.5.0-beta02.
Version 2.5.0-beta02
9 novembre 2022
Publication d'androidx.room:room-*:2.5.0-beta02. Liste des commits de la version 2.5.0-beta02
Modifications apportées à l'API
- Correction de diverses API qui convertissent des arguments de requête invariants (
Array<Any?>) en contravariants (Array<out Any?>) pour qu'ils correspondent au comportement du tableau Java. (b/253531073)
Version 2.5.0-beta01
5 octobre 2022
Publication d'androidx.room:room-*:2.5.0-beta01. Liste des commits de la version 2.5.0-beta01.
Modifications apportées à l'API
- L'API 16 doit désormais correspondre à la version minimale qui prend en charge
@Upsert, car il est impossible d'identifier une contrainte de clé primaire dans les API plus anciennes. (I5f67f, b/243039555)
Correction de bugs
- Correction d'un problème qui provoquait l'exportation incorrecte des tables fantômes vers les fichiers de schéma
.json, ce qui les corrompait. (I4f83b, b/246751839)
Version 2.5.0-alpha03
24 août 2022
Publication d'androidx.room:room-*:2.5.0-alpha03. Liste des commits de la version 2.5.0-alpha03.
Nouvelles fonctionnalités
- Ajout d'une annotation de raccourci,
@Upsert, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353)
Correction de bugs
- Lors de la vérification des contraintes de clé étrangère par migration automatique, Room générera désormais une
SQLiteConstraintExceptionau lieu d'uneIllegalStateException. (I328dd) - Corrige une modification incompatible avec la source Kotlin pour les getter/propriétés de
getOpenHelper,getQueryExecutoretgetTransactionExecutor. (Iad0ac)
Version 2.5.0-alpha02
1er juin 2022
Publication d'androidx.room:room-*:2.5.0-alpha02. Liste des commits de la version 2.5.0-alpha02
Nouvelles fonctionnalités
- Nouveaux artefacts
room-paging:room-paging-rxjava2,room-paging-rxjava3etroom-paging-guavaont été ajoutés pour Room Paging.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
Modifications apportées à l'API
room-runtimea été entièrement converti en Kotlin depuis Java. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources en raison de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, la nouvelle version devra gérer ces cas. Par exemple, une modification incompatible avec la source est que, dans
InvalidationTracker, vous devrez désormais déclareronInvalidate()dansObserverpour avoir un paramètre de typeSetet non de typeMutableSet.- Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans
@MapInfo(Icc4b5) - Correction d'un problème de compatibilité des sources pour autoriser à nouveau
@Ignoredans les getters de propriété. (Ifc2fb)
Correction de bugs
- Duplique l'algorithme heuristique de résolution des colonnes. Room va désormais tenter de résoudre les colonnes ambiguës dans une requête en multimap. Cela permet aux JOIN ayant des tableaux aux noms identiques d'être correctement mappés à un objet de données de résultat. (I4b444, b/201306012, b/212279118)
Version 2.5.0-alpha01
23 février 2022
Publication d'androidx.room:room-*:2.5.0-alpha01. Liste des commits de la version 2.5.0-alpha01.
Modifications apportées à l'API
- Correction d'un problème où
@IntDefde Room n'était pas utilisé dans les sources Kotlin. (I75f41, b/217951311) - Correction d'un problème de compatibilité des sources pour autoriser à nouveau
@Querydans les getters de propriété. (I0a09b) - Conversion de room-common de Java vers Kotlin. (I69c48, b/206858235)
Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources, car certaines propriétés ont été déplacées vers des objets compagnons lors de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, il faudra apposer le suffixe ".Companion" à la nouvelle version pour accéder à ces propriétés.
- Conversion de room-migration de Java vers Kotlin. (I2724b, b/206858622)
- Conversion de fichiers associés à
pagingdansroom-runtimede Java en Kotlin. (I82fc8, b/206859668) - Ajout d'API pour le verrouillage et l'utilisation de plusieurs processus au niveau de FrameworkSQLite*, afin de protéger les premières migrations et créations multiprocessus de bases de données. (Ied267, b/193182592)
Correction de bugs
- Ajout de la prise en charge des propriétés internes dans les sources Kotlin.
Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes).
Si vous utilisez des annotations
@JvmNamepersonnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).
Version 2.4.3
Version 2.4.3
27 juillet 2022
Publication d'androidx.room:room-*:2.4.3. Liste des commits de la version 2.4.3
Correction de bugs
- Correction d'un problème qui empêchait Room de reconnaître les fonctions de suspension dans Kotlin 1.7. (b/236612358)
Version 2.4.2
Version 2.4.2
23 février 2022
Publication d'androidx.room:room-*:2.4.2. Liste des commits de la version 2.4.2
Correction de bugs
- Résolution d'un problème de génération de code pour une fonction de suspension
@Transactionde DAO avec un corps qui génère une méthode d'interface par défaut en raison d'une compilation avec-Xjvm-default=allou équivalent. (Ia4ce5) - Correction d'un bug dans lequel Room génère du code pour une méthode de requête de type renvoyé
Array<ByteArray>. (If086e, b/213789489)
Version 2.4.1
Version 2.4.1
12 janvier 2022
Publication d'androidx.room:room-*:2.4.1. Liste des commits de la version 2.4.1
Correction de bugs
- Ajout de la prise en charge des propriétés internes dans les sources Kotlin.
Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes).
Si vous utilisez des annotations
@JvmNamepersonnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).
Version 2.4.0
Version 2.4.0
15 décembre 2021
Publication d'androidx.room:room-*:2.4.0. Liste des commits de la version 2.4.0.
Changements importants depuis la version 2.3.0
- Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété
@Database#autoMigrationspour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation@AutoMigrationpeut déclarer une classe de spécification contenant ces entrées. Consultez la documentation@AutoMigrationpour en savoir plus. - Injection de dépendances dans les migrations automatiques :
@ProvidedAutoMigrationSpecest une nouvelle API permettant de déclarer qu'uneAutoMigrationSpecsera fournie au moment de l'exécution viaRoomDatabase.Builder#addAutoMigrationSpec(). Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes. - Prise en charge de l'assistant de test de migration pour les migrations automatiques : le
MigrationTestHelperde Room a été mis à jour pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendantrunMigrationsAndValidate. - Assistance pour Room-Paging :
androidx.room:room-pagingest disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyantandroidx.paging.PagingSource. - Méthodes de requête associées : Room est désormais compatible avec les méthodes
@Daode types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types en multimaps compatibles sontMap,SparseArray,LongSparseArray, ainsi qu'ImmutableMap,ImmutableSetMultimapetImmutableListMultimapde Guava.
Version 2.4.0-rc01
1er décembre 2021
Publication d'androidx.room:room-*:2.4.0-rc01. Liste des commits de la version 2.4.0-rc01
Nouvelles fonctionnalités
- Mettez à jour la dépendance de Room vers la version
1.6.0-1.0.1sur KSP pour prendre en charge Kotlin 1.6
Version 2.4.0-beta02
17 novembre 2021
Publication d'androidx.room:room-*:2.4.0-beta02. Liste des commits de la version 2.4.0-beta02
Nouvelles fonctionnalités
- Ajout de la prise en charge de SparseArray et de LongSparseArray dans @MapInfo. (Ic91a2b/138910317)
Correction de bugs
- Ajout d'un nouvel analyseur de TypeConverter qui prend en compte les informations relatives à la possibilité de valeur nulle dans les types. Étant donné que ces informations ne sont disponibles que dans KSP, elles sont activées par défaut uniquement dans KSP. En cas de problème, vous pouvez les désactiver en transmettant room.useNullAwareTypeAnalysis=false au processeur d'annotations. Si cela se produit, veuillez signaler un bug, car cet indicateur sera supprimé. Avec ce nouvel analyseur de TypeConverter, il est recommandé de ne fournir que des types de TypeConverters non nuls, car le nouvel analyseur peut les encapsuler grâce à une vérification des valeurs nulles. Notez que cela n'a aucun impact pour les utilisateurs de KAPT ou de Java, car les processeurs d'annotation (contrairement à KSP) n'ont pas d'informations de valeur nulle dans les types. (Ia88f9, b/193437407)
- Correction d'un bug qui provoquait l'échec de la compilation de Room avec une erreur SQL lorsqu'une entité FTS déclarait utiliser le jeton ICU. (I00db9, b/201753224)
- Résolution d'un problème lors des migrations automatiques concernant une nouvelle colonne ajoutée à une entité intégrée entre les versions. (I5fcb1b/193798291)
- Correction d'un problème concernant les types renvoyés des méthodes de requêtes associées dans les requêtes LEFT JOIN. Avec ces modifications, dans le cas d'un mappage de type un à plusieurs, la collection renvoyée pour une clé n'inclura pas l'objet de valeur non valide s'il ne se trouve pas dans le curseur. Si aucune valeur valide n'est trouvée, alors une clé est mappée à une collection vide. (Id5552b/201946438)
- Correction d'un problème lié à la migration automatique et dans lequel les mots-clés SQLite qui ne parvenaient pas à être échappés dans les noms de colonnes. (Idbed4b/197133152)
Version 2.4.0-beta01
13 octobre 2021
Publication d'androidx.room:room-*:2.4.0-beta01. Liste des commits de la version 2.4.0-beta01
Correction de bugs
- Correction d'un problème concernant les migrations automatiques qui n'ajoutaient pas de nouvelles colonnes lorsqu'une autre table de la même migration comportait également une nouvelle colonne du même nom. (Ia5db5, b/200818663)
- L'implémentation de PagingSource générée par la room-paging utilise désormais le
queryExecutortransmis viaRoomDatabase.Builder. Il peut donc être remplacé, au lieu de remplacerDispatchers.IO, comme c'était le cas auparavant. (Iae259)
Version 2.4.0-alpha05
29 septembre 2021
Publication d'androidx.room:room-*:2.4.0-alpha05. Liste des commits de la version 2.4.0-alpha05
Nouvelles fonctionnalités
- Ajout d'un convertisseur de type intégré pour UUID. (I671e8, b/73132006)
Modifications apportées à l'API
Ajout d'une nouvelle propriété à l'annotation TypeConverters pour permettre aux développeurs de désactiver les convertisseurs Enum et UUID intégrés. Par défaut, ces convertisseurs sont activés, mais vous pouvez les désactiver pour un certain champ d'application ou pour l'ensemble de la base de données. Pour en savoir plus, consultez la documentation sur TypeConverters. (36ae9e, b/195413406)
Prise en charge des clés/valeurs non-POJO pour les types renvoyés en multimap dans les DAO via l'annotation
@MapInfo. (I4d704)
@MapInfo est requis lorsque la colonne clé ou valeur de la map provient d'une seule colonne. Voici un exemple :
@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>
- Déclarer
room-pagingcomme artefact obligatoire lorsque Paging3 est utilisé avec Room. (Ieaffe)
Correction de bugs
- Correction d'un problème qui empêchait de classer correctement les résultats de requêtes en multimap lorsque la requête contenait une clause ORDER BY d'une colonne de la clé de la map. (I6b887)
Contribution externe
- Ajout d'une API pour spécifier l'ordre de l'index dans @Index. Merci à Nikita Zhelonkin. (I033fc)
Version 2.4.0-alpha04
21 juillet 2021
Publication d'androidx.room:room-*:2.4.0-alpha04. Liste des commits de la version 2.4.0-alpha04
Nouvelles fonctionnalités
Room est désormais compatible avec les méthodes
@Daode types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types de multimap pris en charge sontMap, ainsi queImmutableMap,ImmutableSetMultimapetImmutableListMultimapde Guava.Voici des exemples de requêtes en multimap :
Map des relations un à un
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>Map des relations un à plusieurs (multimap standard)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>Le résultat en multimap peut également être encapsulé dans les types renvoyés asynchrones compatibles, tels que
LiveData,Observablede Rx ou les coroutinesFlow.
Room-Paging
androidx.room:room-pagingest disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyantandroidx.paging.PagingSource.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }Cet artefact remplace l'implémentation
androidx.paging.PagingSourcegénérée par Room par une implémentation basée sur les API Paging 3.0. La nouvelle implémentation de PagingSource analyse les clés différemment. Toute clé fournie manuellement à PagingSource de Room doit donc tenir compte de ce changement de comportement, y compris l'initialKey transmise via le constructeur de Pager. Les pages commenceront à se charger à partir deKey,Keyétant le premier élément chargé. Cela diffère du comportement existant, oùLoadParams.Refresh.Keyest traité comme la position de défilement de l'utilisateur et où les éléments sont chargés avant et après la clé.L'artefact est facultatif et si vous choisissez de ne pas l'activer, alors vous reviendrez à la prise en charge existante de Paging 3.0, introduite par Room 2.3. Toutefois, cet artefact sera obligatoire dans la prochaine version pour les utilisateurs de Room avec Paging 3.0. Pour l'activer, ajoutez le nouvel artefact room-paging à votre chemin de classe. Si vous utilisez Gradle, vous pouvez ajouter l'extrait de code suivant à votre build.gradle :
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correction de bugs
- Correction d'un problème dans les migrations automatiques lors du traitement des violations des clés étrangères. (b/190113935)
Version 2.4.0-alpha03
16 juin 2021
Publication d'androidx.room:room-*:2.4.0-alpha03. Liste des commits de la version 2.4.0-alpha03
Modifications apportées à l'API
- Mise à jour du
MigrationTestHelperde Room pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendantrunMigrationsAndValidate.
Correction de bugs
Correction d'un problème lié à la bibliothèque native SQLite de Room pour prendre en charge les puces Apple M1. (b/174695268
Correction d'un problème qui empêchait Room de générer des erreurs lorsque le type renvoyé d'une fonction @Transaction était un flux. (I56ddd, b/190075899)
Correction d'un problème lié aux index des migrations automatiques. b/177673291
Mises à jour des dépendances
- La compatibilité de KSP avec Room dépend désormais de KSP
1.5.10-1.0.0-beta01. (1ecb11, b/160322705)
Version 2.4.0-alpha02
5 mai 2021
Publication d'androidx.room:room-*:2.4.0-alpha02. Liste des commits de la version 2.4.0-alpha02
Modifications apportées à l'API
@ProvidedAutoMigrationSpecest une nouvelle API permettant de déclarer qu'uneAutoMigrationSpecsera fournie au moment de l'exécution viaRoomDatabase.Builder#addAutoMigrationSpec(). Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes.
Correction de bugs
- Correction d'un problème lié aux migrations automatiques dans lequel les
@DatabaseViews ne sont pas recréées correctement.
Contribution externe
- Correction d'un problème dans le
JournalMode.TRUNCATEde Room où le rappel àInvalidationTrackerse faisait parfois de manière incorrecte, trop tard, ou pas du tout. Merci àUli Bubenheimer | bubenheimer@users.noreply.github.com. (b/154040286)
Version 2.4.0-alpha01
21 avril 2021
Publication d'androidx.room:room-*:2.4.0-alpha01. Liste des commits de la version 2.4.0-alpha01
Nouvelles fonctionnalités
- Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété
@Database#autoMigrationspour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation@AutoMigrationpeut déclarer une classe de spécification contenant ces entrées. Consultez la documentation@AutoMigrationpour en savoir plus.
Correction de bugs
- Correction d'un problème de validation incorrecte de
defaultValueavec des parenthèses supplémentaires par le schéma de validation de Room. b/182284899
Version 2.3.0
Version 2.3.0
21 avril 2021
Publication d'androidx.room:room-*:2.3.0. Liste des commits de la version 2.3.0
Changements importants depuis la version 2.2.0
- Prise en charge intégrée de l'énumération : si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité.
- Rappel de requête : Room propose désormais une API générale de callback, RoomDatabase.QueryCallback, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini via
RoomDatabase.Builder#setQueryCallback(). - Améliorations pré-empaquetées : Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée.
- Convertisseurs de types intégrés : Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation @ProvidedTypeConverter.
- Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact
androidx.room:room-rxjava3est disponible pour prendre en charge RxJava3. - Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes
@Queryannotées dont le type renvoyé estandroidx.paging.PagingSource.
Version 2.3.0-rc01
24 mars 2021
Publication d'androidx.room:room-*:2.3.0-rc01. Liste des commits de la version 2.3.0-rc01
Correction de bugs
- Correction d'un problème empêchant les requêtes de flux de coroutines créées par Room d'être utilisées dans un bloc de suspension
withTransaction. (I797bf)
Version 2.3.0-beta03
10 mars 2021
Publication d'androidx.room:room-*:2.3.0-beta03. Liste des commits de la version 2.3.0-beta03
Nouvelles fonctionnalités
- Ajout de la prise en charge de la compilation incrémentielle pour KSP. (I031c1, b/176453350)
Correction de bugs
- Correction d'un bug qui provoquait un ANR lors de la création de PagingSource sur le thread principal. (I42b74, b/181221318)
- Correction de la visibilité de
@ExperimentalRoomApi, qui est désormais publique, et non privée. (b/181356119)
Contribution externe
- Autoriser Room à accepter un type renvoyé POJO dans une méthode DAO annotée avec
@Querylorsqu'elle est également annotée avec@SkipQueryVerification. Room fera de son mieux pour convertir le résultat de la requête en type renvoyé POJO de la même manière que pour une méthode DAO annotée avec@RawQuery. Merci à "Markus Riegel | hey@marcorei.com". (I45acb)
Version 2.3.0-beta02
18 février 2021
Publication d'androidx.room:room-*:2.3.0-beta02. Liste des commits de la version 2.3.0-beta02
Nouvelles fonctionnalités
Room est désormais compatible, à titre expérimental, avec le traitement des symboles Kotlin (KSP).
KSP remplace KAPT pour exécuter les processeurs d'annotations de manière native sur le compilateur Kotlin, ce qui réduit considérablement les durées de compilation.
Pour utiliser Room avec KSP, vous pouvez appliquer le plug-in KSP de Gradle et remplacer la configuration
kaptdans votre fichier de compilation parksp. Par exemple, au lieu dekapt 'androidx.room:room-compiler:2.3.0-beta02', utilisezksp 'androidx.room:room-compiler:2.3.0-beta02'. Consultez la documentation KSP pour en savoir plus.Notez que KSP est expérimental. Il est donc recommandé de continuer à utiliser KAPT pour le code de production. La réduction des durées de compilation ne s'applique que si aucun autre processeur n'utilise KAPT. Consultez b/160322705 pour en savoir plus sur les problèmes connus.
Version 2.3.0-beta01
27 janvier 2021
Publication d'androidx.room:room-*:2.3.0-beta01. Liste des commits de la version 2.3.0-beta01
Nouvelles fonctionnalités
- Bases de données fermables automatiquement : Room peut désormais fermer les bases de données qui ne sont pas consultées après un certain temps. Il s'agit d'une fonctionnalité expérimentale qui peut être activée en appelant
RoomDatabase.Builder#setAutoCloseTimeout(). Cette fonctionnalité est utile pour les applications comportant plusieurs bases de données.
Correction de bugs
- Correction d'un problème, dans lequel les méthodes DAO comportant plusieurs méthodes
@Updateou@Deleteavec différentes stratégies de conflit généraient du code avec une seule de ces stratégies, en ignorant celle qui était définie. (/I0b90d, b/176138543)
Version 2.3.0-alpha04
16 décembre 2020
Publication d'androidx.room:room-*:2.3.0-alpha04. Liste des commits de la version 2.3.0-alpha04
Nouvelles fonctionnalités
- Room propose désormais une API générale de callback
RoomDatabase.QueryCallback, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini viaRoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608) - Si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité. (b/73132006)
Problème connu
- Si un convertisseur de type unilatéral pour la lecture existe déjà pour l'énumération, il est possible que Room utilise accidentellement le convertisseur intégré de type chaîne vers énumération, ce qui n'est pas forcément souhaitable. Il s'agit d'un problème connu qui peut être résolu en créant un convertisseur bidirectionnel. Voir : b/175707691
Correction de bugs
- Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)
- Correction d'un problème qui empêchait Room de trouver la classe générée lorsque plusieurs chargeurs de classes étaient utilisés. Merci d'avoir corrigé le problème "Serendipity | 892449346@qq.com" ! (b/170141113)
- Correction d'un problème dans lequel Room générait un code incorrect lorsqu'un
@Daode Kotlin avait une classe de base dont les génériques étaient primitifs dans la JVM. (b/160258066)
Contribution externe
- Room utilisera désormais
beginTransactionNonExclusivepar défaut si le mode WAL est activé et si le niveau d'API est de 16 ou plus. Merci à "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com" ! (b/126258791)
Version 2.3.0-alpha03
14 octobre 2020
Publication d'androidx.room:room-*:2.3.0-alpha03. Liste des commits de la version 2.3.0-alpha03
Nouvelles fonctionnalités
Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation
@ProvidedTypeConverter. Merci à "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée. Merci à "Ahmed El-Helw ahmedre@gmail.com". (3e6792, b/146911060)
Modifications apportées à l'API
Ajout d'une cible manquante à l'annotation
@ForeignKeyempêchant son utilisation en dehors de l'annotation@Entity. (Iced1e)Le champ
mCallbacksdansRoomDatabase.javaest maintenant masqué. (d576cb, b/76109329)
Correction de bugs
Mise à jour de la documentation relative aux TypeConverters afin de préciser que ces derniers ne peuvent être utilisés que pour convertir des colonnes/champs, et non des lignes. (I07c56, b/77307836)
Mise à jour vers le DaoProcessor pour corriger l'erreur du compilateur sur le DAO avec un super-type générique incluant des "primitives" Kotlin. (Ice6bb, b/160258066)
Mise à jour de la documentation relative aux méthodes des observateurs pour clarifier le threading. (Ifd1d9, b/153948821)
Correction d'un problème lié à la mauvaise validation des tableaux FTS par Room, pour ceux ayant déclaré leur colonne "id de ligne" (d62ebc, b/145858914)
Contributions externes
Résoudre les problèmes liés aux paramètres régionaux en majuscules/minuscules pour le Turc. (5746e3), b/68159494
Remplace la
ConcurrentHashMapdansRoomDatabaseparCollections.synchronizedMap()pour éviter les problèmes sur Android Lollipop. (d1cfc7, b/162431855)Ajout d'un rappel onOpenPrepackagedDatabase pour quand une base de données pré-empaquetée est copiée. (I1ba74, b/148934423)
Version 2.3.0-alpha02
22 juillet 2020
Publication d'androidx.room:room-*:2.3.0-alpha02. Liste des commits de la version 2.3.0-alpha02
Nouvelles fonctionnalités
- Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact
androidx.room:room-rxjava3est disponible pour prendre en charge RxJava3. (b/152427884)
Modifications apportées à l'API
- Vous pouvez maintenant déclarer une classe
@TypeConverterdans la classe d'objets Kotlin. (b/151110764) - L'option de traitement des annotations incrémentielles
Roomest désormais activée par défaut. (b/112110217)
Version 2.3.0-alpha01
10 juin 2020
Publication d'androidx.room:room-*:2.3.0-alpha01. Liste des commits de la version 2.3.0-alpha01
Nouvelles fonctionnalités
Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes
@Queryannotées dont le type renvoyé estandroidx.paging.PagingSource.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Modifications apportées à l'API
@RewriteQueriesToDropUnusedColumnsest une nouvelle annotation pratique qui permet à Room de réécrire la projection "*" dans une requête de sorte à supprimer les colonnes inutilisées dans le résultat.- L'option de traitement
room.expandProjectionest désormais obsolète. Utilisez@RewriteQueriesToDropUnusedColumnspour remplacer les requêtes d'optimisation de Room avec des projections en étoiles. Notez que@RewriteQueriesToDropUnusedColumnsne remplace pas la solution de conflit des colonnesroom.expandProjectionconcernant les types renvoyés contenant des champs@Embedded.
Correction de bugs
- Correction d'un bug qui empêchait Room de détecter correctement la version JDK utilisée pour activer le processeur d'annotations incrémentielles. Merci à Blaz Solar (me@blaz.solar). (b/155215201)
- Room intègre désormais sa dépendance ANTLR au processeur d'annotations pour éviter les conflits de versions avec d'autres processeurs qui utilisent également ANTLR. (b/150106190)
Version 2.2.6
Version 2.2.6
16 décembre 2020
Publication d'androidx.room:room-*:2.2.6. Liste des commits de la version 2.2.6
Correction de bugs
- Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)
Version 2.2.5
Version 2.2.5
18 mars 2020
Publication d'androidx.room:room-*:2.2.5. Liste des commits de la version 2.2.5
Correction de bugs
- Déclarer
MultiInstanceInvalidationServicedirectBootAware. Merci à "Mygod contact-git@mygod.be". (b/148240967) - Correction d'un bug qui provoquait un plantage lorsque l'invalidation de plusieurs instances était activée et que la base de données contenait une entité FTS. (b/148969394)
- Correction d'un problème lors du chargement des bibliothèques natives SQLite dans le processeur d'annotations de Room, qui entraînait le plantage du compilateur en raison de compilations parallèles. (b/146217083)
Version 2.2.4
Version 2.2.4
19 février 2020
Publication d'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 et androidx.room:room-testing:2.2.4. Liste des commits de la version 2.2.4
Correction de bugs
- Correction d'un problème de suspension des transactions qui s'interbloquaient si la coroutine était annulée rapidement avant le début de la transaction. (b/148181325)
- Correction d'un problème lié à la mauvaise utilisation de @Generated lors de la compilation avec JDK 9. (b/146538330)
- Correction d'un problème dans lequel Room générait un code incorrect lorsqu'une interface DAO en Kotlin avait une fonction concrète. (b/146825845)
Version 2.2.3
Version 2.2.3
18 décembre 2019
Publication d'androidx.room:room-*:2.2.3. Liste des commits de la version 2.2.3
Correction de bugs
- Correction d'un bug qui empêchait Room de valider une base de données n'ayant pas fait l'objet d'une migration et contenant un ancien hachage avec des index dans son schéma. (b/139306173)
Version 2.2.2
Version 2.2.2
20 novembre 2019
Publication d'androidx.room:room-*:2.2.2. Liste des commits de la version 2.2.2
Correction de bugs
- Correction d'un bug qui provoquait le renvoi d'éléments associés nuls dans Room lors de la collecte d'une relation de type un à un avec plus de 999 lignes. (b/143105450)
Version 2.2.1
Version 2.2.1
23 octobre 2019
Publication d'androidx.room:room-*:2.2.1. Liste des commits de la version 2.2.1
Correction de bugs
- Correction d'un bug qui empêchait Room de signaler correctement une
CURSOR_MISMATCHlorsque l'option de compilationexpandProjectionétait activée. (b/140759491) - Ajout d'un mécanisme de nouvelle tentative pour gérer la bibliothèque native manquante utilisée pour vérifier les requêtes au moment de la compilation.
Version 2.2.0
Version 2.2.0
9 octobre 2019
Publication d'androidx.room:room-*:2.2.0. Liste des commits de la version 2.2.0
Changements importants depuis la version 2.1.0
- Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans
RoomDatabase.Builderpour créer un objetRoomDatabaseà partir d'un fichier de base de données déjà renseigné.createFromAsset()s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis quecreateFromFile()s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732 - Valeurs par défaut du schéma :
@ColumnInfodispose désormais d'une nouvelle propriétédefaultValuequi peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772 - Relations plusieurs à plusieurs :
@Relationa maintenant une nouvelle propriétéassociateBy, qui accepte une nouvelle annotation@Junction, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917 - Relations un à un : la restriction dans les champs POJO annotés avec
@Relationpour être de typeListouSeta été levée, ce qui permet de représenter les relations à valeur unique. b/62905145 - Entité cible : les annotations DAO
@Insert,@Updateet@Deleteont désormais une nouvelle propriététargetEntity, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506 - Flux de coroutines :
@Queryles méthodes DAO peuvent désormais être de type renvoyéFlow<T>. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyéChannel<T>est une erreur, Room vous encourage plutôt à utiliserFlowet les fonctions similaires pour convertir le flux (Flow) en un canal (Channel). b/130428884 - Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur
room.incremental. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217 - Projections étendues : une nouvelle option de compilateur expérimentale
room.expandProjectiona été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec@Query("SELECT * FROM Song")qui renvoie un POJO nomméSongIdAndTitleavec seulement deux champs. Room réécrit la requête dansSELECT id, title FROM Songpour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissementCURSOR_MISMATCHqui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé.
Version 2.2.0-rc01
5 septembre 2019
Publication d'androidx.room:room:2.2.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.
Aucune modification publique depuis Room 2.2.0-beta01.
Version 2.2.0-beta01
22 août 2019
Publication d'androidx.room:room-*:2.2.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.
Correction de bugs
- Correction d'un bug qui provoquait l'arrêt de la génération de nouvelles valeurs par une requête de flux de coroutine après un certain temps. (b/139175786)
- Correction d'un bug qui empêchait Room d'accepter un ancien code de hachage de schéma lors de l'ouverture d'une base de données n'ayant pas fait l'objet d'une migration depuis Room 1.0, provoquant un plantage de l'exécution en raison d'un schéma non valide. (b/139306173)
Version 2.2.0-alpha02
7 août 2019
Publication d'androidx.room:room-*:2.2.0-alpha02. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Flux de coroutines :
@Queryles méthodes DAO peuvent désormais être de type renvoyéFlow<T>. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyéChannel<T>est une erreur, Room vous encourage plutôt à utiliserFlowet les fonctions similaires pour convertir le flux (Flow) en un canal (Channel). b/130428884 - Projections étendues : une nouvelle option de compilateur expérimentale
room.expandProjectiona été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec@Query("SELECT * FROM Song")qui renvoie un POJO nomméSongIdAndTitleavec seulement deux champs. Room réécrit la requête dansSELECT id, title FROM Songpour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissementCURSOR_MISMATCHqui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé. onDestructiveMigrateest une nouvelle API de callback ajoutée àRoomDatabase.Callback, utilisée lorsque Room migre destructivement une base de données. b/79962330
Correction de bugs
- Correction d'un bug pour lequel Room générait un code incorrect lors de l'utilisation d'un setter de champ lorsque le champ était protégé. b/136194628
- Correction d'un bug pour lequel l'InvalidationTracker envoyait un NPE dans un second processus lorsque l'invalidation de plusieurs instances était activée et que le service d'invalidation était fermé. b/137454915
- Correction d'un bug qui empêchait Room d'identifier correctement le type renvoyé d'une fonction de suspension héritée annotée avec
@RawQuery. b/137878827 - Mise à jour du code généré pour
@Relationlorsque la clé associée est de type BLOB afin d'utiliser unByteBuffercomparable. b/137881998 - Correction d'un bug pour lequel Room signalait des setters manquants dans les POJO utilisés en tant que paramètres d'entité partiels de
@Insert,@Updateet@Delete. b/138664463 - Correction d'un bug dans lequel Room signalait des getters et setters manquants dans une colonne ignorée via
@Entitylorsque la classe d'entité était utilisée dans certaines méthodes DAO. b/138238182{/2. - Correction d'un bug qui empêchait Room de convertir correctement les arguments de liaison nommés en arguments de position, ce qui entraînait une exception d'exécution lors de l'exécution d'une requête avec des paramètres réutilisés. b/137254857
Version 2.2.0-alpha01
10 juillet 2019
Nouvelles fonctionnalités
- Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans
RoomDatabase.Builderpour créer un objetRoomDatabaseà partir d'un fichier de base de données déjà renseigné.createFromAsset()s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis quecreateFromFile()s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732 - Valeurs par défaut du schéma :
@ColumnInfodispose désormais d'une nouvelle propriétédefaultValuequi peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772Remarque : Si votre schéma de base de données contient déjà des valeurs par défaut, telles que celles ajoutées via
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, et que vous décidez de définir des valeurs par défaut via@ColumnInfopour ces mêmes colonnes, vous devrez peut-être fournir une migration pour valider les valeurs par défaut non comptabilisées. Pour en savoir plus, consultez Migrations Room. - Relations plusieurs à plusieurs :
@Relationa maintenant une nouvelle propriétéassociateBy, qui accepte une nouvelle annotation@Junction, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917 - Relations un à un : la restriction dans les champs POJO annotés avec
@Relationpour être de typeListouSeta été levée, ce qui permet de représenter les relations à valeur unique. b/62905145 - Entité cible : les annotations DAO
@Insert,@Updateet@Deleteont désormais une nouvelle propriététargetEntity, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506 - Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur
room.incremental. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217
Correction de bugs
- Room ne propagera plus
EmptySetResultExceptionau gestionnaire d'erreurs globales lorsque le flux Rx d'une requête aura été supprimé avant la fin de la requête. b/130257475 - Correction d'un bug pour lequel Room affichait un message d'erreur incorrect dans lorsqu'une fonction DAO de suspension annotée avec
@RawQueryn'avait pas de type renvoyé. b/134303897 - Room ne générera plus d'adaptateurs DAO avec des types bruts. b/135747255
Version 2.1.0
Version 2.1.0
13 juin 2019
Publication de Room 2.1.0 sans aucune modification par rapport à la version 2.1.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.
Changements importants depuis la version 2.0.0
- FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec
@Entitypeuvent désormais également être annotées avec@Fts3ou@Fts4pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. - Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation
@DatabaseView. - Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Inclue
room-ktxdans vos dépendances pour bénéficier de cette fonctionnalité. L'artefact ktx fournit également la fonction d'extensionRoomDatabase.withTransactionpour effectuer des transactions de base de données dans une coroutine. - Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations Room
@PrimaryKey,@ColumnInfo,@Embeddedet@Relationpeuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de@CopyAnnotationspour que Room puisse les comprendre. - Compatibilité asynchrone supplémentaire : les méthodes DAO annotées avec
@Insert,@Deleteou@Update, ainsi que@Querycontenant les instructionsINSERT,DELETEouUPDATEsont désormais compatibles avec les types renvoyés RxCompletable,SingleetMaybe, ainsi que les types renvoyésListenableFuturede Guava. Elles peuvent également être suspendues. enableMultiInstanceInvalidationest une nouvelle API deRoomDatabase.Builderpermettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données.fallbackToDestructiveMigrationOnDowngradeest une nouvelle API deRoomDatabase.Builderpermettant de recréer automatiquement la base de données en cas de retour à une version antérieure.ignoredColumnsest une nouvelle API de l'annotation@Entityqui permet de répertorier les champs ignorés par leur nom.- Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les propriétés en tant que
vars.
Version 2.1.0-rc01
29 mai 2019
Correction de bugs
- Correction d'une erreur d'initialisation de Room, qui pouvait se produire en raison d'une configuration de "temp_store" déjà configurée. b/132602198
- Correction d'un avertissement concernant l'utilisation de guillemets doubles pour les utilisateurs de SQLite version 3.27.0 et ultérieure. b/131712640
- Correction d'un bug qui provoquait le plantage de l'InvalidationTracker lorsque plusieurs vérifications d'invalidation se produisaient en parallèle. b/133457594
Version 2.1.0-beta01
7 mai 2019
androidx.room 2.1.0-beta01 est disponible sans aucune modification par rapport à la version 2.1.0-alpha07. Les commits inclus dans cette version sont disponibles sur cette page.
Version 2.1.0-alpha07
25 avril 2019
Modifications apportées à l'API/Nouveaux comportements
- La fonction d'extension
RoomDatabase.withTransactiona été modifiée pour ne plus utiliser un bloc fonction avec unCoroutineScopecomme destinataire. Cela évite d'ignorer le wrappercoroutineScope { }supplémentaire nécessaire pour exécuter simultanément des éléments dans le bloc de transactions.
Correction de bugs
- Correction d'un bug qui empêchait Room de faire correspondre un TypeConverter pour une fonction DAO en Kotlin contenant un paramètre de type "Collection". b/122066791
Version 2.1.0-alpha06
22 mars 2019
Modifications apportées à l'API/Nouveaux comportements
- Les requêtes de transaction asynchrones sont maintenant sérialisées de sorte que Room n'utilise pas plus d'un thread pour exécuter des transactions de base de données.
RoomDatabase.Builder.setTransactionExecutor(Executor)a été ajouté pour permettre la configuration de l'exécuteur pour les transactions. RoomDatabase.runInTransaction(Callable)n'encapsulera plus d'exceptions vérifiées dans RuntimeExceptions. b/128623748
Correction de bugs
- Correction d'un bug qui empêchait l'outil de suivi d'invalidation d'observer le contenu d'un tableau si des observateurs étaient ajoutés à la fois pour le contenu du tableau et pour le contenu externe d'un tableau FTS. b/128508917
- Mise à jour de la grammaire SQLite
Roompour qu'elle corresponde à celle de SQLite 3.24.0. b/110883668
Version 2.1.0-alpha05
13 mars 2019
Nouvelles fonctionnalités
- La fonction d'extension
RoomDatabase.withTransactionvous permet d'effectuer des transactions de base de données dans une coroutine de façon sécurisée. L'artefactroom-ktxprend en charge les fonctions d'extension de Room ainsi que les coroutines. - Les méthodes DAO non abstraites annotées avec
@Transactionpeuvent désormais être des fonctions de suspension. b/120241587
Modifications apportées à l'API/Nouveaux comportements
- L'artefact
room-coroutinesa été renomméroom-ktxet porte le même nom que les autres artefacts Androidx. beginTransaction,setTransactionSuccessfuletendTransactiondansRoomDatabaseont été abandonnés au profit derunInTransactionet de la fonction d'extensionroom-ktxwithTransaction.
Correction de bugs
- Correction d'un bug qui provoquait la suppression des arguments de tokenisation si le jeton utilisé était SIMPLE. b/125427014
- Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension dont les paramètres correspondaient à une classe interne. b/123767877
- Correction d'un bug pour les méthodes DAO différées
@Querydont les instructionsINSERT,UPDATEouDELETEpréparaient la requête dans le thread principal. b/123695593 - Correction de plusieurs bugs entraînant la génération par Room d'un code incorrect pour certaines fonctions de suspension. b/123466702 et b/123457323
- Correction d'un bug où les anciennes utilisations de certaines méthodes n'étaient pas correctement supprimées dans le code généré. b/117602586
- Mise à jour de la dépendance de Room à androidx.sqlite vers la version 1.0.2, qui contient des correctifs pour gérer correctement les bases de données corrompues. b/124476912
Problèmes connus
- Room 2.1.0-alpha05 dépend de l'artefact
kotlinx-metadata-jvm, qui n'est actuellement pas disponible dans Maven Central. (KT-27991). Vous pouvez résoudre cette dépendance en ajoutantmaven { url "https://kotlin.bintray.com/kotlinx/" }aux dépôts de votre projet.
Version 2.1.0-alpha04
25 janvier 2019
Nouvelles fonctionnalités
- Les méthodes DAO annotées avec
@Querycontenant des instructionsINSERT,UPDATEouDELETEpeuvent désormais renvoyer des types asynchronesSingle,Mayble,CompletableetListenableFuture. Elles peuvent également être des fonctions de suspension. b/120227284
Modifications apportées à l'API/Nouveaux comportements
- Room génère désormais une erreur si une méthode DAO non abstraite annotée avec
@Transactionrenvoie un type asynchrone tel queSingle,Mayble,Completable,LiveDataouListenableFuture. Étant donné que les transactions sont cloisonnées dans les threads, il est actuellement impossible pour Room de démarrer et d'arrêter une transaction autour d'une fonction qui pourrait effectuer des requêtes dans différents threads. b/120109336 OnConflictStrategy.FAILetOnConflictStrategy.ROLLBACKont été abandonnés (@Deprecated), car ils ne se comportent pas comme prévu avec les liaisons SQLite actuelles d'Android. b/117266738
Correction de bugs
- Correction d'un bug qui empêchait Room d'utiliser correctement le TypeConverter d'un type renvoyé si la méthode DAO était une fonction de suspension. b/122988159
- Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension héritées comme étant des fonctions sans suspension. b/122902595
- Correction d'un bug pour lequel Room générait un code incorrect dans Room lorsqu'un champ
@Embeddedse trouvait dans une classe parente et était utilisé dans plusieurs classes enfants. b/121099048 - Correction d'un problème pour lequel la base de données s'interbloquait lors de l'appel de fonction de suspension DAO entre une
beginTransaction()et uneendTransaction(). b/120854786
Version 2.1.0-alpha03
4 décembre 2018
Modifications apportées à l'API
- Le FTS
tokenizerdans@Fts3/@Fts4utilise désormais une chaîne au lieu d'une énumération. Cela permet à Room d'utiliser des générateurs de jetons personnalisés. Les générateurs de jetons intégrés sont toujours définis dansFtsOptionsen tant que constantes de chaîne. b/119234881
Nouvelles fonctionnalités
- Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Publication d'un nouvel artefact,
room-coroutines, pour permettre la suspension de fonctions dans Room. b/69474692 - Les méthodes DAO annotées avec
@Insert,@Deleteou@Updateprennent désormais en chargeListenableFuturecomme type renvoyé. b/119418331
Correction de bugs
- Correction d'un bug à cause duquel Room tentait par erreur de trouver un constructeur avec des colonnes dans la propriété
ignoredColumnsde@Entity. b/119830714 - Correction d'un bug qui empêchait Room de marquer les paramètres de méthode DAO comme finaux dans l'implémentation générée. b/118015483
- Correction d'un bug provoquant le plantage du processeur
Roomlors du signalement d'une erreur sur une requête contenant des symboles spéciaux. b/119520136 - Correction d'un bug provoquant le refus par Room de plusieurs implémentations de
Collectionen tant qu'arguments d'une expressionIN. b/119884035 - Correction d'un bug provoquant la récupération de mémoire des "LiveData" renvoyées par Room lorsqu'elles étaient indéfiniment observées, empêchant ainsi l'émission de nouvelles données. b/74477406
- Mise à jour du verrouillage de fin de
RoomDatabasepour réduire les conflits de verrouillage. b/117900450
Version 2.1.0-alpha02
30 octobre 2018
Nouvelles fonctionnalités
- Ajout de la prise en charge du référencement de
@DatabaseViewdans une@Relation. b/117680932
Correction de bugs
- Correction d'un bug provoquant l'exécution d'opérations d'E/S de disque par Room dans le thread principal lors de l'abonnement ou de la suppression à partir d'un type renvoyé Rx. b/117201279
- Correction d'un bug qui empêchait Room de trouver un convertisseur de type approprié pour un champ dans une classe d'entité Kotlin. b/111404868
- Correction d'un bug entraînant la génération par Room d'un code incorrect pour une implémentation d'interface
DAOcontenant une méthode par défaut Kotlin sans argument. b/117527454 - Mise à jour de l'analyseur grammatical SQLite
Roompour corriger un problème de performances pouvant entraîner de longs délais de compilation. b/117401230
Version 2.1.0-alpha01
8 octobre 2018
Nouvelles fonctionnalités
- FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec
@Entitypeuvent désormais également être annotées avec@Fts3ou@Fts4pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. b/62356416 - Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation "@DatabaseView". b/67033276
- Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations
@PrimaryKey,@ColumnInfo,@Embeddedet@Relationde Room peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de@CopyAnnotationspour que Room puisse les comprendre. b/62408420 - Compatibilité supplémentaire avec les types renvoyés Rx : les méthodes DAO annotées avec
@Insert,@Deleteou@Updatesont désormais compatibles avec les types renvoyés RxCompletable,Single<T>etMaybe<T>. b/63317956 - Types immuables avec
@Relation: auparavant, Room exigeait que les champs portant l'annotation@Relationpuissent être définis, mais ils peuvent désormais servir de paramètres de constructeur. enableMultiInstanceInvalidationest une nouvelle API deRoomDatabase.Builderpermettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données. Ce mécanisme d'invalidation multi-instance fonctionne également pour plusieurs processus. b/62334005fallbackToDestructiveMigrationOnDowngrade: une nouvelle API deRoomDatabase.Builderpermettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954ignoredColumns: nouvelle API de l'annotation@Entityqui permet de répertorier les champs ignorés par leur nom. Utile pour ignorer les champs hérités d'une entité. b/63522075
Modifications apportées à l'API/Nouveaux comportements
mCallbacketmDatabasedansRoomDatabasesont désormais@Deprecatedet seront supprimés dans la prochaine version majeure de Room. b/76109329
Correction de bugs
- Correction de deux problèmes entraînant une mauvaise récupération de Room à partir d'une base de données corrompue ou d'une migration incorrecte lors de l'initialisation. b/111504749 et b/111519144
- Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les champs en tant que
vars. b/105769985
Version 2.0.0
Version 2.0.0
1er octobre 2018
Publication de androidx.room 2.0.0 sans aucune modification par rapport à la version 2.0.0-rc01.
Version 2.0.0-rc01
20 septembre 2018
Publication de androidx.room 2.0.0-rc01 sans aucune modification par rapport à la version 2.0.0-beta01.
Version 2.0.0-beta01
2 juillet 2018
Modifications apportées à l'API/Nouveaux comportements
- Ajout de
RoomDatabase.Builder.setQueryExecutor()pour permettre la personnalisation de l'emplacement d'exécution des requêtes. - Ajout de la compatibilité avec RxJava2
Observable. - Les implémentations de DAO et de base de données générées sont maintenant finales.
Correction de bugs
- Spécification du nom de la classe ou du champ dans l'erreur "Impossible de trouver la fonction "getter" pour le champ". b/73334503
- Correction de la rétrocompatibilité de RoomOpenHelper avec les anciennes versions de Room b/110197391
Dépendances antérieures à AndroidX
Pour les versions de Room antérieures à AndroidX ci-dessous, incluez les dépendances suivantes :
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"
}
Version 1.1.1
Version 1.1.1
19 juin 2018
Room 1.1.1 est identique à Room 1.1.1-rc1.
Version 1.1.1-rc1
16 mai 2018 Nous vous recommandons vivement d'utiliser Room 1.1.1-rc1 au lieu de la version 1.1.0 si vous utilisez des migrations.
Correction d'un bug empêchant Room de gérer correctement l'initialisation après la migration. b/79362399
Version 1.1.0
Version 1.1.0-beta3
19 avril 2018
Correction de bugs
- Correction d'une erreur de compilation lorsqu'un POJO Kotlin fait référence à une entité relationnelle définie en Java. b/78199923
Version 1.1.0-beta2
5 avril 2018
Correction de bugs
Correction d'un bug critique dans les implémentations
RoomRxSingleetMaybe, dans lesquelles la requête était recyclée à l'avance, causant des problèmes si vous ajoutiez plus d'un observateur aux instancesSingleouMayberenvoyées. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] ne
VACUUMla base de données si elle est appelée dans une transaction. b/77235565
Version 1.1.0-beta1
21 mars 2018
Modifications apportées à l'API
- Sur la base des commentaires relatifs à l'API,
@RawQueryn'accepte plus la transmission d'uneStringcomme paramètre de requête. Vous devez utiliser [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (voir [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] pour créer facilement une instance de [SupportSQLiteQuery][ref-SupportSQLiteQuery] avec prise en charge des arguments). - La méthode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] de RoomDatabase.Builder accepte désormais
vararg intau lieu devararg Integer.
Correction de bugs
- [RoomDatabase.clearAllTables][ref-clearAllTables] tente maintenant de renvoyer de l'espace au système d'exploitation en définissant un point de contrôle WAL et en exécutant
VACUUMsur la base de données. - [
@RawQuery][ref-RawQuery] accepte désormais n'importe quel POJO pour la propriétéobservedEntities, à condition que le POJO fasse référence à une ou plusieurs entités via ses champsEmbeddedou sesRelations. b/74041772 - Paging : l'implémentation d'une DataSource de Room gère désormais correctement les dépendances multitables (telles que les relations et les jointures). Auparavant, l'activation de nouveaux résultats ou l'exécution d'une compilation échouaient. b/74128314
Version 1.1.0-alpha1
22 janvier 2018
Nouvelles fonctionnalités
RawQuery: cette nouvelle API permet aux méthodes@Daode recevoir le SQL en tant que paramètre de requête. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom: cette nouvelle API deRoomDatabase.Builderpermet un contrôle plus précis des versions de schéma de départ à partir desquelles les migrations destructives sont autorisées (en comparaison avec la méthode "fallbackToDestructiveMigration"). b/64989640- Room ne prend désormais en charge que les API Paging les plus récentes (alpha-4 et ultérieures) et abandonne la prise en charge du
LivePagedListProviderobsolète. Pour utiliser la nouvelle version alpha de Room, vous devez utiliser Pagingalpha-4ou version ultérieure et passer deLivePagedListProvideràLivePagedListBuildersi vous ne l'avez pas déjà fait.
Correction de bugs
- Meilleure compatibilité avec les types Kapt de Kotlin. b/69164099
- L'ordre des champs n'invalide plus le schéma. b/64290754