Комната
| Последнее обновление | Основная версия | Release Candidate | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| 9 сентября 2026 г. | 2.8.5 | - | - | - |
Как объявлять зависимости
Чтобы добавить зависимость от Room, необходимо добавить в проект репозиторий Google Maven. Подробная информация приведена в репозитории Google Maven.
Зависимости для Room включают тестирование переноса данных Room и Room RxJava.
Добавьте в файл build.gradle приложения или модуля зависимости для нужных артефактов:
Котлин
dependencies { val room_version = "2.8.5" 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") }
Круто
dependencies { def room_version = "2.8.5" 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" }
Информацию об использовании плагина KAPT можно найти в документации по KAPT.
Информацию об использовании плагина KSP можно найти в кратком руководстве по KSP.
Информацию об использовании расширений Kotlin можно найти в документации по KTX.
Подробнее о зависимостях при сборке можно узнать в документации по Android.
Для библиотек, не предназначенных для Android (например, модулей Gradle только на Java или Kotlin), можно использовать androidx.room:room-common, чтобы применять аннотации Room.
Настройка параметров компилятора
В Room есть следующие параметры инструмента обработки аннотаций.
room.schemaLocation |
directory
Позволяет экспортировать схемы баз данных в файлы JSON в указанном каталоге. Подробнее о переносе переговорных комнат… |
room.incremental |
boolean
Включает инкрементный инструмент обработки аннотаций Gradle. Значение по умолчанию – true.
|
room.generateKotlin |
boolean
Генерировать исходные файлы Kotlin вместо Java. Требуется KSP. Значение по умолчанию – true (начиная с версии 2.7.0).
Подробную информацию о том, когда эта функция была добавлена, можно найти в примечаниях к версии 2.6.0.
|
Используйте плагин Room Gradle
В Room версии 2.6.0 и выше вы можете использовать плагин Room Gradle для настройки параметров компилятора Room. Плагин настраивает проект таким образом, чтобы сгенерированные схемы (которые являются результатом задач компиляции и используются для автоматической миграции) были правильно настроены для воспроизводимых и кэшируемых сборок.
Чтобы добавить плагин, в файле сборки Gradle верхнего уровня определите плагин и его версию.
Яркий
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
В файле сборки Gradle на уровне модуля примените плагин и используйте расширение room.
Яркий
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
При использовании плагина Room Gradle необходимо задать значение schemaDirectory. Это позволит настроить компилятор Room, различные задачи компиляции и серверные части (javac, KAPT, KSP) для вывода файлов схемы в папки, например schemas/flavorOneDebug/com.package.MyDatabase/1.json. Эти файлы нужно добавить в репозиторий, чтобы использовать их для проверки и автоматического переноса.
Некоторые параметры нельзя настроить во всех версиях плагина Room Gradle, даже если они поддерживаются компилятором Room. В таблице ниже перечислены все параметры и указана версия плагина Room Gradle, в которой добавлена поддержка настройки этого параметра с помощью расширения room. Если версия ниже или функция ещё не поддерживается, можно использовать параметры процессора аннотаций.
| Option | С версии |
|---|---|
room.schemaLocation (обязательное поле) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Как использовать параметры процессора аннотаций
Если вы не используете плагин Room Gradle или нужный вам вариант не поддерживается вашей версией плагина, вы можете настроить Room с помощью параметров процессора аннотаций, как описано в разделе Добавление зависимостей сборки. Способ указания параметров аннотации зависит от того, используете ли вы KSP или KAPT для Room.
Яркий
// 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... ) } } } }
Поскольку room.schemaLocation – это каталог, а не примитивный тип, при добавлении этого параметра необходимо использовать CommandLineArgumentsProvider, чтобы Gradle знал об этом каталоге при проверке актуальности.
Перенос базы данных Room – полная реализация CommandLineArgumentsProvider, в которой указано местоположение схемы.
Отзыв
Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите проблемы или решите что-то предложить, отправьте отзыв. Прежде чем сообщать о новых ошибках, изучите уже добавленные. Вы можете добавить свой голос к существующей проблеме, нажав на значок звездочки.
Дополнительную информацию можно найти в документации по системе отслеживания ошибок.
Версия 2.8
Версия 2.8.5
9 сентября 2026 г.
Выход androidx.room:room-*:2.8.5. Версия 2.8.5 содержит эти коммиты.
Исправление ошибок
- Теперь при вызове запросов на приостановку работы комнаты и операций отслеживания недействительности после закрытия базы данных будет возникать исключение
IllegalStateException. (Ic0166, b/543076356)
Версия 2.8.4
19 ноября 2025 г.
Выход androidx.room:room-*:2.8.4. Версия 2.8.4 содержит эти коммиты.
Исправление ошибок
- Добавлен кеш подготовленных операторов в пул подключений Room при использовании
SQLiteDriver, у которого нет внутреннего пула, напримерBundledSQLiteDriver. Это повышает производительность при повторном выполнении одной и той же инструкции SQL. (5f43bc, b/319653917) - Исправлена проблема, из-за которой в фактическом или ожидаемом сообщении об ошибке при проверке схемы отсутствовала информация. (8b23da, b/454531083)
- Исправлена ошибка, из-за которой в сгенерированном коде Kotlin для Room отсутствовали функции DAO
@Transactionс переменными типа. (a8365d, b/251316420) - Повысьте эффективность контейнера Room
SupportSQLite, избегая переходов между потоками и сохраняя такое же поведение блокировки, как у APISupportSQLiteDatabase. (fc70e4)
Версия 2.8.3
22 октября 2025 г.
Выход androidx.room:room-*:2.8.3. Версия 2.8.3 содержит эти коммиты.
Исправление ошибок
- Исправлена проблема производительности Room SQLite Wrapper, которая вызывала чрезмерное количество вызовов JNI и значительное снижение производительности при итерации по курсору.
Версия 2.8.2
8 октября 2025 г.
Выход сингла "androidx.room:room-*:2.8.2". Версия 2.8.2 содержит эти коммиты.
Исправление ошибок
- Исправлена взаимоблокировка, которая могла возникнуть при повторном открытии автоматически закрытой базы данных из потока (b/446643789).
Версия 2.8.1
24 сентября 2025 г.
Выход androidx.room:room-*:2.8.1. Версия 2.8.1 содержит эти коммиты.
Исправление ошибок
- Исправлен сбой процессора, который возникал при обработке функции DAO с лямбда-выражением suspend. (b/442220723).
- Исправлено состояние гонки, из-за которого в потоки не поступали последние обновления.
Версия 2.8.0
10 сентября 2025 г.
Выход сингла "androidx.room:room-*:2.8.0". Версия 2.8.0 содержит эти коммиты.
Важные изменения с версии 2.7.0
- Добавлен новый артефакт
androidx.room:room-sqlite-wrapper, содержащий API для получения оболочкиSupportSQLiteDatabaseизRoomDatabaseс настроеннымSQLiteDriver. Чтобы получить оболочку, используйте новую функцию расширенияRoomDatabase.getSupportWrapper(). Это артефакт совместимости для поддержки использованияSupportSQLiteDatabase, обычно получаемого изroomDatabase.openHelper.writableDatabase, даже если база данных Room настроена с помощьюSQLiteDriver. Эта оболочка полезна для постепенного переноса баз кода, в которых нужно использовать API SQLiteDriver, но при этом широко используются API SupportSQLite, и при этом они хотят воспользоваться преимуществамиBundledSQLiteDriver. Подробную информацию об этом вы найдете в руководстве по переходу. - Добавлена поддержка целей KMP для Watch OS и Tv OS.
- Минимальная версия SDK для Android в библиотеке обновлена с API 21 до API 23.
Версия 2.8.0-rc02
27 августа 2025 года
Выход androidx.room:room-*:2.8.0-rc02. Версия 2.8.0-rc02 содержит эти коммиты.
Изменения в API
- Обновлен минимальный уровень SDK с API 21 до API 23 (Ibdfca, b/380448311, b/435705964, b/435705223).
- Минимальная версия плагина Android Gradle (AGP), совместимая с плагином Room Gradle, теперь 8.4, а не 8.1. (Ia0d28)
Исправление ошибок
- Исправлена ошибка, из-за которой выполнялся деструктивный перенос, даже если для предварительно упакованной базы данных был доступен путь переноса (b/432634197).
Версия 2.8.0-rc01
13 августа 2025 г.
Выход androidx.room:room-*:2.8.0-rc01. Версия 2.8.0-rc01 содержит эти коммиты.
Изменения в API
Исправление ошибок
- Исправлено состояние гонки, из-за которого Room Flows не выдавал последний результат запроса в асинхронной ситуации с несколькими запросами или операциями записи. (Ic9a3c)
Версия 2.8.0-beta01
1 августа 2025 г.
Выход androidx.room:room-*:2.8.0-beta01. Версия 2.8.0-beta01 содержит эти коммиты.
Исправленные ошибки
- Названия таблиц и представлений теперь корректно экранируются при деструктивных переносах. (9e55f8, b/427095319)
Версия 2.8.0-alpha01
16 июля 2025 г.
Выход androidx.room:room-*:2.8.0-alpha01. Версия 2.8.0-alpha01 содержит эти коммиты.
Новые функции
- Добавлен новый артефакт
androidx.room:room-sqlite-wrapper, который содержит API для получения оболочкиSupportSQLiteDatabaseобъектаRoomDatabaseс настроеннымSQLiteDriver. Чтобы получить оболочку, используйте новую функцию расширенияRoomDatabase.getSupportWrapper(). Это артефакт совместимости для поддержки использованияSupportSQLiteDatabase, обычно получаемого изRoomDatabase.openHelper.writableDatabase, даже если база данных Room настроена с помощьюSQLiteDriver. Этот оберточный код полезен для постепенного переноса кода, если вы хотите использоватьSQLiteDriver, но у вас много кода, в котором применяется APISupportSQLite, и при этом вы хотите воспользоваться преимуществамиBundledSQLiteDriver. (Icf6ac) - Добавлены цели KMP для Watch OS и TV OS (I228f6, b/394238801).
Исправление ошибок
- Исправлена взаимоблокировка, которая могла иногда возникать при использовании приостановки транзакций и
AndroidSQLiteDriver. (b/415006268)
Версия 2.7
Версия 2.7.2
18 июня 2025 г.
Выход сингла "androidx.room:room-*:2.7.2". Версия 2.7.2 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой значения аннотаций неправильно считывались при обработке нативных источников с помощью KSP, что иногда приводило к отсутствию экспорта схемы. (b/416549580)
- Исправлена ошибка, из-за которой комментарии в начале SQL-запроса приводили к тому, что команды выполнялись как запросы, не предназначенные для чтения. (b/413061402)
- Исправлена проблема, из-за которой плагин Gradle для Room не мог настроиться, поскольку каталог схемы был пуст. (b/417823384)
- Если получение подключения занимает слишком много времени, больше не будет возникать исключение
SQLiteException. Вместо этого библиотека отправит сообщение в журнале. Регистрация вместо исключения позволяет избежать проблем с приостановкой объектов looper в iOS, из-за которых Room неправильно интерпретирует время ожидания, возникающее в сопрограмме Kotlin при получении подключения. В результате исключение не возникает, когда приложение iOS переходит в фоновый режим, а затем возобновляет работу в середине операции с базой данных. (b/422448815)
Версия 2.7.1
23 апреля 2025 г.
Выход androidx.room:room-*:2.7.1. Версия 2.7.1 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка
IndexOutOfBoundsExceptionпри проверке предоставленного конвертера типов. (b/409804755). - Поддержка
RoomDatabase.runInTransaction(), когдаSQLiteDriverнастроен с помощью Room. (b/408364828).
Версия 2.7.0
9 апреля 2025 г.
Выход androidx.room:room-*:2.7.0. Версия 2.7.0 содержит эти коммиты.
Важные изменения, внесенные в версию 2.6.0
- Поддержка Kotlin Multiplatform (KMP). В этой версии Room был переработан и стал библиотекой Kotlin Multiplatform (KMP). В настоящее время поддерживаются следующие платформы: Android, iOS, JVM (компьютеры), Mac и Linux. Подробнее о том, как начать работу с Room KMP, можно узнать из официальной документации. В рамках поддержки KMP Room также можно настроить с помощью
SQLiteDriver. Информацию о том, как перенести существующее приложение на API драйверов и Room KMP, можно найти в документации по переносу. - Генерация кода Kotlin в KSP включена по умолчанию, если обработка выполняется через KSP. Для проектов, в которых используется только KAPT или Java, Room по-прежнему будет генерировать источники Java.
- Kotlin 2.0 и KSP2. Теперь Room предназначен для языка Kotlin 2.0, поэтому проекты должны компилироваться с использованием Kotlin 2.0 или более поздней версии. Также добавлена поддержка KSP2, которую рекомендуется использовать при работе с Room 2.0 или более поздней версии.
Версия 2.7.0-rc03
26 марта 2025 г.
Выход androidx.room:room-*:2.7.0-rc03. Версия 2.7.0-rc03 содержит эти коммиты.
Исправленные ошибки
- Теперь не возникает ошибка
InterruptedException, когда поток прерывается во время выполнения блокирующих API Room, включая блокирующие функции DAO (b/400584611). - Мы заново реализовали пул подключений Room, чтобы устранить ошибку
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.и другие подобные проблемы (b/380088809).
Версия 2.7.0-rc02
12 марта 2025 г.
Выход сингла "androidx.room:room-*:2.7.0-rc02". Версия 2.7.0-rc02 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой автоматический перенос неправильно обрабатывал новый столбец в таблице FTS. (b/348227770, Ic53f3)
- Исправлен сбой компилятора Room из-за
NullPointerExceptionпри обработке источников, не относящихся к JVM, с помощью KSP. (b/396607230, I693c9) - Исправлена ошибка, из-за которой Room не аннулировал таблицы после использования подключения для записи. (b/340606803, I73ef6)
Версия 2.7.0-rc01
26 февраля 2025 г.
Выход androidx.room:room-*:2.7.0-rc01. Версия 2.7.0-rc01 содержит эти коммиты.
Исправленные ошибки
- Исправлена проблема, из-за которой Room не устанавливал значение
busy_timeoutпри первоначальном подключении к базе данных, что приводило к проблемам сSQLException: Error code: 5, message: database is locked(I93208, b/380088809). - Исправлена ошибка в компиляторе Room, из-за которой процессор KSP аварийно завершал работу при обработке нативных наборов исходных файлов (например, iOS) в Kotlin 2.1.x и KSP1 (I883b8, b/396607230).
Версия 2.7.0-beta01
12 февраля 2025 г.
Выход сингла "androidx.room:room-*:2.7.0-beta01". Версия 2.7.0-beta01 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой
RoomDatabase.inTransaction()открывал закрытую базу данных, когда этого не требовалось, и не возвращал быстро значение false, если база данных закрыта (b/325432967). - Исправлен сбой (
IllegalArgumentException: not a valid name) в компиляторе Room при обработке функций DAO с классами Kotlin inline / value (b/388299754). - В артефакт JVM
room-runtimeдобавлены правила Proguard, чтобы конструктор по умолчанию для сгенерированной реализации базы данных не удалялся, поскольку он используется при инициализации Room по умолчанию с помощью рефлексии (b/392657750).
Версия 2.7.0-alpha13
29 января 2025 г.
Выход androidx.room:room-*:2.7.0-alpha13. Версия 2.7.0-alpha13 содержит эти коммиты.
Изменения в API
- Room теперь ориентируется на язык Kotlin 2.0 и требует, чтобы проекты также компилировались с Kotlin 2.0 или эквивалентной или более высокой версией языка. (I8efb0, b/315461431, b/384600605)
Исправление ошибок
- Исправлена ошибка в конструкторе баз данных Room KMP, когда в Android использовалось простое имя вместо пути и путь к файлу базы данных не находился в каталоге данных приложения. (I83315, b/377830104)
- Исправлена ошибка в плагине Room Gradle, из-за которой настройка входных и выходных данных схемы вызывала проблему в проектах для Android:
property 'inputDirectory' is final and cannot be changed any further.(1dbb4c, b/376071291). - Добавлена поддержка KSP2 в плагине Room Gradle, исправлена проблема, из-за которой плагин неправильно настраивал каталог схемы. (Iec3c4, b/379159770)
Внешний вклад
- Исправлена проблема с интеграцией разбивки на страницы
Room, из-за которой в интерфейсе возникали скачки, когда начальный ключ для обновления находился слишком близко к концу списка. Спасибо Еве! (I2abbe, b/389729367)
Версия 2.7.0-alpha12
11 декабря 2024 г.
Выход сингла "androidx.room:room-*:2.7.0-alpha12". Версия 2.7.0-alpha12 содержит эти коммиты.
Изменения в API
- Добавьте экспериментальный API
RoomDatabase.Builder.setInMemoryTrackingMode(), чтобы настроить, будет ли Room использовать таблицу в памяти для отслеживания недействительности. (I2a9b2, b/185414040)
Исправление ошибок
- При деструктивных переносах теперь удаляются представления, чтобы они были воссозданы. Это позволяет привести поведение при включенном параметре
allowDestructiveMigrationForAllTables(значение по умолчанию в KMP) к поведению при отключенном параметре. (0a3e83, b/381518941)
Версия 2.7.0-alpha11
30 октября 2024 г.
Выход androidx.room:room-*:2.7.0-alpha11. Версия 2.7.0-alpha11 содержит эти коммиты.
Изменения в API
- Измените сигнатуру нового метода
convertRows(), чтобы он стал функцией приостановки, которая получаетRawRoomQueryдля разбивки на страницы в Room. (Ie57b5, b/369136627)
Исправленные ошибки
- Исправлена ошибка, из-за которой при использовании
@Relationвместе сPagingSourceгенерировался недействительный код.
Версия 2.7.0-alpha10
16 октября 2024 г.
Выход сингла "androidx.room:room-*:2.7.0-alpha10". Версия 2.7.0-alpha10 содержит эти коммиты.
Изменения в API
- Создайте внутренний класс
ByteArrayWrapperдля поддержки отношений сByteBufferна платформах, отличных от Android и JVM. (I75543, b/367205685) - Добавьте
SQLiteStatement.getColumnType()вместе с различными константами результатовSQLITE_DATA_*, чтобы получать тип данных столбца. (I1985c, b/369636251)
Версия 2.7.0-alpha09
2 октября 2024 г.
Выход сингла "androidx.room:room-*:2.7.0-alpha09". Версия 2.7.0-alpha09 содержит эти коммиты.
Исправленные ошибки
- Исправлена проблема с реализацией
room-pagingв KMP, из-за которой возникала ошибкаError code: 8, message: attempt to write a readonly database, вызванная запуском транзакции записи в подключении для чтения. (b/368380988)
Версия 2.7.0-alpha08
18 сентября 2024 г.
Выход сингла "androidx.room:room-*:2.7.0-alpha08". Версия 2.7.0-alpha08 содержит эти коммиты.
Новые функции
- Объекты
room-pagingбыли перенесены и теперь совместимы с KMP. (Ib8756, b/339934824) - API
invalidationTrackerFlow()был стандартизирован как собственный APIInvalidationTracker.createFlow()и теперь доступен для наборов исходных файлов, отличных от Android, в проектах KMP. (I1fbfa, I8fb29, b/329291639, b/329315924)
Изменения в API
- Все предупреждения и сообщения об ошибках в Room, в которых используется слово
Cursor, были удалены или заменены, посколькуCursorбольше не является точным общим термином для использования в версии KMP Room. (Id8cd9, b/334087492)
Исправление ошибок
- Исправлена проблема, из-за которой Room KMP пытался сгенерировать код с помощью
UUIDдля платформ, отличных от JVM. (b/362994709) - Исправлена ошибка в плагине Room Gradle, из-за которой при использовании в проекте KMP с Compose Multiplatform возникала ошибка "Невозможно изменить атрибуты конфигурации… после того, как она была заблокирована для изменения". (b/343408758)
Версия 2.7.0-alpha07
21 августа 2024 г.
Выход androidx.room:room-*:2.7.0-alpha07. Версия 2.7.0-alpha07 содержит эти коммиты.
Новые функции
- Теперь плагин Room Gradle будет автоматически добавлять экспортированные схемы в источники ресурсов инструментальных тестов Android, чтобы их можно было использовать в
MigrationTestHelper.
Исправление ошибок
- Исправлена проблема, из-за которой в сгенерированном значении "actual" для правила
RoomDatabaseConstructorотсутствовал модификатор "actual" в функцииinitialize, если эта функция также переопределялась в объявлении "expect". (359631627) - Исправлена проблема, из-за которой сгенерированное значение "фактическое" для элемента
RoomDatabaseConstructorне соответствовало видимости объявления "ожидаемое". (358138953)
Версия 2.7.0-alpha06
7 августа 2024 г.
Выход androidx.room:room-*:2.7.0-alpha06. Версия 2.7.0-alpha06 содержит эти коммиты.
Изменения в API
- Измените настройки создания экземпляра для
RoomDatabaseв проекте KMP.
Из-за модели компиляции Kotlin 2.0 стратегия ссылки на функцию, которая будет сгенерирована, с именем instantiateImpl() больше не работает. Представляем два новых API: @ConstructedBy и RoomDatabaseConstructor, которые заменят стратегию instantiateImpl(). Новая стратегия выглядит следующим образом:
Определите объект expect, реализующий
RoomDatabaseConstructorexpect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>Свяжите объект с декларацией
@Database, используя@ConstructedBy.@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabaseСоздайте новый экземпляр базы данных, не передавая аргумент factory.
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Исправлены ошибки b/316978491, b/338446862 и b/342905180.
- Поддержка
@RawQueryв Room KMP путем добавления нового APIRoomRawQuery, который похож наSupportSQLiteQueryв плане хранения необработанной строки SQL и функции для привязки аргументов к оператору. Функции с аннотациями@RawQueryтеперь могут приниматьRoomRawQueryв качестве единственного параметра. (Iea844, b/330586815) - Добавьте перегрузку
setQueryCallback(), которая принимаетCoroutineContext. (Id66ff, b/309996304) - Добавлена поддержка целевых платформ
linuxArm64Kotlin Multiplatform (I139d3, b/338268719).
Исправление ошибок
- Исправлена проблема, из-за которой Room неправильно генерировал вызов
recursiveFetchArrayMapв целях, отличных от Android. (710c36, b/352482325) - Исправлена ошибка, из-за которой Room иногда выдавал исключение "Время ожидания подключения истекло" в проекте KMP. (fa72d0, b/347737870)
- Исправлена проблема с автоматическим переносом, из-за которой внешние ключи проверялись слишком рано, до того как схемы других таблиц были изменены в соответствии с новыми внешними ключами. (7672c0, b/352085724)
Версия 2.7.0-alpha05
10 июля 2024 г.
Выход androidx.room:room-*:2.7.0-alpha05. Версия 2.7.0-alpha05 содержит эти коммиты.
Изменения в API
- Название
SQLiteKtизменено наSQLite, аBundledSQLiteKt– наBundledSQLite. (I8b501)
Исправление ошибок
- Исправлена ошибка, из-за которой
RoomDatabaseзависал или выдавал ошибку с истечением времени ожидания подключения при использованииAndroidSQLiteDriver.
Версия 2.7.0-alpha04
12 июня 2024 г.
Выход androidx.room:room-*:2.7.0-alpha04. Версия 2.7.0-alpha04 содержит эти коммиты.
Исправление ошибок
- Исправлена проблема, из-за которой процессор аннотаций Room генерировал несовместимый код KMP, когда в DAO был определен тип возвращаемого значения с несколькими картами. (b/340983093)
- Исправлена проблема, из-за которой Room не удавалось найти сгенерированную реализацию базы данных, если у класса с аннотацией
@Databaseне было пакета. (b/342097292) - Исправлена ошибка, из-за которой при включении автоматического закрытия и аннулирования многооконного режима иногда возникала ошибка
ConcurrentModificationException, когда база данных автоматически закрывалась из-за простоя.
Версия 2.7.0-alpha03
29 мая 2024 г.
Выход androidx.room:room-*:2.7.0-alpha03. Версия 2.7.0-alpha03 содержит эти коммиты.
Исправление ошибок
- Исправлены различные проблемы, связанные с Kotlin 2.0 и KSP 2.0. Обратите внимание, что поддержка Kotlin 2.0 с KSP 2 ещё не завершена. Команда работает над различными API и изменениями в поведении нового компилятора. (b/314151707)
Версия 2.7.0-alpha02
14 мая 2024 г.
Выход androidx.room:room-*:2.7.0-alpha02. Версия 2.7.0-alpha02 содержит эти коммиты.
Исправленные ошибки
- Исправлены различные проблемы с KSP.
Версия 2.7.0-alpha01
1 мая 2024 г.
Выход сингла "androidx.room:room-*:2.7.0-alpha01". Версия 2.7.0-alpha01 содержит эти коммиты.
Новые функции
- Поддержка Kotlin Multiplatform (KMP). В этом выпуске Room была переработана и стала библиотекой Kotlin Multiplatform (KMP). В этой версии Room большинство функций стали мультиплатформенными. В настоящее время поддерживаются следующие платформы: Android, iOS, JVM (компьютер), macOS и Linux. Недостающие функции будут добавлены в будущих версиях Room.
Подробнее о том, как начать работу с Room KMP, можно узнать из официальной документации.
- Генерация кода Kotlin на KSP включена по умолчанию, если обработка выполняется с помощью KSP. Для проектов, использующих только KAPT или Java, Room по-прежнему будет генерировать исходный код Java.
Изменения в API
- Добавлена перегрузка
Room.databaseBuilder(), которая принимает параметр лямбда-функции, предназначенный для использования с функцией, сгенерированной Room, чтобы избежать использования отражения при создании экземпляра сгенерированной реализацииRoomDatabase. Пример использования:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- В конструктор добавлен API для настройки комнаты с помощью
CoroutineContext:RoomDatabase.Builder.setQueryCoroutineContext. Обратите внимание, чтоRoomDatabaseможно настроить только с исполнителями, использующимиsetQueryExecutor, или с контекстом Coroutine, но не с обоими. - Добавлен API для настройки переговорной комнаты с помощью драйвера
SQLite:RoomDatabase.Builder.setDriver(). Дополнительную информацию оSQLiteDriver API можно найти в документации по SQLite KMP. - Добавлены API для доступа к базовому
SQLiteConnectionиз API для водителей:RoomDatabase.useReaderConnectionиRoomDatabase.useWriterConnection. - У некоторых обратных вызовов, связанных с комнатами, теперь есть перегруженная версия, которая получает
SQLiteConnectionвместоSupportSQLiteDatabase. Эти значения должны быть переопределены при переносе в проект KMP. Подробнее о том, как перенести использование Room в приложении Android в общий модуль KMP, рассказывается в руководстве по переносу. Доступны следующие обратные вызовы:Migration.migrate(SQLiteConnection)AutoMigrationSpec.onPostMigrate(SQLiteConnection)RoomDatabase.Callback.onCreate(SQLiteConnection)RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)RoomDatabase.Callback.onOpen(SQLiteConnection)
- Артефакт KTX
androidx.room:room-ktxбыл объединен сandroidx.room:room-runtimeвместе со всеми его API. Теперь артефакт пуст. Удалите его из списка зависимостей.
Версия 2.6
Версия 2.6.1
29 ноября 2023 г.
Выход androidx.room:room-*:2.6.1. Версия 2.6.1 содержит следующие коммиты:
Исправление ошибок
- Исправлена проблема в сгенерированном коде, из-за которой для столбцов типа Double в
EntityCursorConverterпо умолчанию устанавливалось значение 0 вместо 0.0. Также добавлено потенциальное исправление для аналогичного пограничного случая для столбцов с заданным типом данных Float. (Id75f5, b/304584179) - Исключения, возникающие при загрузке
PagingSource, теперь будут распространяться какLoadStateUpdateтипаLoadResult.Error, содержащий Throwable. Этот статус ошибки можно отслеживать с помощью правилPagingDataAdapter.loadStateFlow(Views)илиLazyPagingItems.loadState(Compose). Обратите внимание, что это изменение поведения. Раньше ошибки загрузки передавались как исключение, вызванное методом DAO, который инициировал загрузку. (I93887, b/302708983)
Версия 2.6.0
18 октября 2023 г.
Выход сингла "androidx.room:room-*:2.6.0". Версия 2.6.0 содержит следующие коммиты:
Важные изменения с версии 2.5.0
- В Room KSP теперь можно включить генерацию кода Kotlin (Kotlin CodeGen). (4297ec0). Чтобы включить Kotlin CodeGen в Room, добавьте название параметра
room.generateKotlinв параметры процессора для KSP. Подробнее о том, как передавать параметры процессора для KSP, рассказывается в документации по KSP.
Примечание. При использовании Kotlin CodeGen важно помнить, что были добавлены дополнительные ограничения. Абстрактные свойства в качестве геттеров или запросов DAO в Kotlin CodeGen запрещены. Их нужно переписать как функции, чтобы не создавать ложное впечатление, что значение свойства неизменяемо и имеет фиксированный сохраненный результат. Ещё одно ограничение: в Room для Kotlin CodeGen больше не допускаются типы возвращаемых значений коллекций, допускающие значение NULL.
Предупреждение. При использовании Kotlin CodeGen вы можете обнаружить, что ваши проекты более строги с точки зрения допустимости значений NULL. В Kotlin CodeGen допустимость значений NULL для аргументов типа важна, а в Java она в основном игнорируется. Например, если тип возвращаемого значения – `Flow<foo\>`, а таблица пуста, В Java CodeGen это не вызовет никаких проблем, но в Kotlin CodeGen вы получите ошибку. Чтобы избежать этого, используйте `Flow<foo?\>`, если возвращается значение null. </foo?\></foo\>
- В Room добавлен новый артефакт для плагина Room Gradle с идентификатором
androidx.room. Он решает различные существующие проблемы в Room, связанные с наличием входных и выходных данных схем через параметры процессора аннотаций Gradle. Подробнее о примечаниях к выпуску Room 2.6.0-alpha02. - Классы значений в объектах Room теперь поддерживаются для KSP. (4194095)
- В Room теперь поддерживаются вложенные типы возвращаемых значений Map в функциях DAO. (I13f48, 203008711)
Версия 2.6.0-rc01
20 сентября 2023 г.
Выход androidx.room:room-*:2.6.0-rc01. Версия 2.6.0-rc01 содержит следующие коммиты:
Версия 2.6.0-beta01
23 августа 2023 г.
Выход androidx.room:room-*:2.6.0-beta01. Версия 2.6.0-beta01 содержит эти коммиты.
Исправленные ошибки
- Обработка исключения
SQLiteпри вставке или обновлении. Если при вставке или обновлении возникает исключение2067 SQLITE_CONSTRAINT_UNIQUE, вставка или обновление должны быть выполнены. (If2849, b/243039555)
Версия 2.6.0-alpha03
9 августа 2023 г.
Выход androidx.room:room-*:2.6.0-alpha03. Версия 2.6.0-alpha03 содержит следующие коммиты:
Новые функции
- В Room теперь поддерживаются вложенные типы возвращаемых значений Map в функциях DAO. (I13f48, 203008711)
Изменения в API
- Вместо устаревшего типа аннотации
@MapInfoсоздан новый –@MapColumn. Для каждого названия столбца (keyColumnName,valueColumnNameили обоих), указанного в аннотации@MapInfo, вам нужно будет объявить аннотацию@MapColumnтолько сcolumnNameи использовать аннотацию в аргументе определенного типа, на который ссылается аннотация (ключ или значение карты), в типе возвращаемого значения функции DAO. Это связано с тем, что аннотация@MapColumnиспользуется непосредственно в аргументе типа в типе возвращаемого значения функции DAO, а не в самой функции, как@MapInfo. Подробную информацию можно найти в документации по@MapColumn. (Ib0305, b/203008711) - Обновлены файлы API для аннотирования подавления совместимости (I8e87a, b/287516207)
- API плагина Room Gradle были обновлены, чтобы не всегда требовать конфигурации для каждого варианта. Это означает, что плагин может принимать глобальное местоположение для всех вариантов без создания нескольких каталогов, что позволяет выполнять более плавные переносы, но при этом достаточно гибок, чтобы вручную настраивать схемы типов или создавать схемы типов сборки, сохраняя при этом преимущества плагина (воспроизводимые и кэшируемые сборки). (I09d6f, b/278266663)
Исправленные ошибки
- Устранена уязвимость, связанная с потенциальной утечкой памяти в
QueryInterceptorStatement. (I193d1) - Исправлено некорректное поведение функции
QueryInterceptorDatabase execSQL(). (Iefdc8)
Версия 2.6.0-alpha02
21 июня 2023 г.
Выход androidx.room:room-*:2.6.0-alpha02. Версия 2.6.0-alpha02 содержит следующие коммиты:
Плагин Gradle для Room
В этом выпуске добавлен новый артефакт для плагина Room Gradle с идентификатором androidx.room, который решает различные существующие проблемы в Room, связанные с наличием входных и выходных данных схем через параметры процессора аннотаций Gradle. Плагин Room Gradle настраивает проект таким образом, чтобы сгенерированные схемы, которые используются для автоматической миграции и являются результатом задач компиляции, были правильно настроены для воспроизводимых и кешируемых сборок. Плагин предлагает DSL для настройки местоположения основной схемы:
room {
schemaDirectory("$projectDir/schemas/")
}
Плагин настроит компилятор Room и различные задачи компиляции, а также его серверные части (javac, KAPT, KSP) для вывода файлов схемы в папки с вариантами, например schemas/flavorOneDebug/com.package.MyDatabase/1.json. Как обычно, эти файлы регистрируются в репозитории и используются для проверки и автоматической миграции. При переходе на использование плагина вместо параметров инструмента обработки аннотаций существующие файлы схемы необходимо скопировать в созданные плагином каталоги разновидностей. Это однократная операция переноса, которую необходимо выполнить вручную. Документация по схеме на сайте developers.android.com будет обновлена, когда мы обработаем отзывы и плагин станет стабильным. Попробуйте его уже сейчас.
Изменения в API
RoomDatabase.QueryCallbackопределен как функциональный интерфейс, позволяющий использовать преобразование SAM. (Iab8ea, b/281008549)
Исправленные ошибки
- Устранена проблема, возникающая при создании экземпляра базы данных в Robolectric после переноса источников Room с Java на Kotlin. (Ic053c, b/274924903)
Версия 2.6.0-alpha01
22 марта 2023 г.
Выход androidx.room:room-*:2.6.0-alpha01. Версия 2.6.0-alpha01 содержит следующие коммиты:
Новые функции
- Поддержка классов значений в Room для KSP. Room теперь поддерживает классы значений в сущностях. (4194095)
- Теперь в Room можно включить генерацию кода Kotlin (4297ec0). Чтобы включить Kotlin CodeGen в Room, добавьте название параметра
room.generateKotlinв параметры процессора для KSP. Подробнее о том, как передавать параметры процессора для KSP, рассказывается в документации по KSP.
Примечание. При использовании Kotlin CodeGen важно учитывать, что были добавлены дополнительные ограничения. Абстрактные свойства в виде геттеров DAO или запросов DAO в Kotlin CodeGen запрещены. Вместо них нужно использовать функции, чтобы избежать ложного представления о том, что значение свойства неизменно и имеет фиксированный сохраненный результат. Ещё одно ограничение: в Room для Kotlin CodeGen больше нельзя использовать типы возвращаемых значений коллекций, допускающие значение NULL.
Предупреждение. При использовании Kotlin CodeGen вы можете обнаружить, что ваши проекты более строги с точки зрения допустимости значений NULL. В Kotlin CodeGen допустимость значений NULL для аргументов типа важна, а в Java она в основном игнорируется. Например, если тип возвращаемого значения – `Flow<foo\>`, а таблица пуста, В Java CodeGen это не вызовет проблем, но в Kotlin CodeGen вы получите ошибку. Чтобы избежать этого, используйте `Flow<foo?\>`, если возвращается значение null. </foo?\></foo\>
Изменения в API
- Защита от бессмысленного использования коллекций, допускающих значение NULL, в типах возвращаемых значений методов DAO. (I777dc, b/253271782, b/259426907)
- Добавлен API для создания потока, который передает изменения трекера недействительности. API полезен для создания потоков, которые должны реагировать на изменения в базе данных. (I8c790, b/252899305)
Исправление ошибок
- Запретите абстрактные свойства в качестве геттеров DAO или запросов DAO в генераторе кода Kotlin. Вместо этого их следует переписать как функции, чтобы избежать ложного представления о том, что значение свойства неизменяемо и имеет фиксированный сохраненный результат. (If6a13, b/127483380, b/257967987)
Версия 2.5.2
Версия 2.5.2
21 июня 2023 г.
Выход сингла "androidx.room:room-*:2.5.2". Версия 2.5.2 содержит эти коммиты.
Исправление ошибок
- Исправлена проблема несовместимости с kotlinx-metadata-jvm. (386d5c)
- Исправлена ошибка, из-за которой при использовании Room в тесте Robolectric возникала ошибка. (f79bea, b/274924903)
Версия 2.5.1
Версия 2.5.1
22 марта 2023 г.
Выход androidx.room:room-*:2.5.1. Версия 2.5.1 содержит следующие коммиты:
Исправление ошибок
- Если база данных уже открыта, не проверяйте родительский каталог базы данных в
FrameworkSQLiteHelper. (5de86b8) - Используйте проверку
isOpenInternal, чтобы узнать, открыта ли база данных. (e91fb35) - Улучшена обработка повторного входа в
acquireTransactionThread()изRoom. (219f98b). Во время приостановленной транзакции Room использует поток из исполнителя транзакций, запускает в нем цикл событий и отправляет в него приостановленные операции с базой данных, чтобы все они были заключены в сопрограмму транзакции. Обычно поток транзакции отличается от потока, который ее запустил, но в некоторых случаях они совпадают. Чтобы обрабатывать такие случаи,withTransaction()был переработан и больше не полагается на управляющую задачу. Вместо этого он будет выполнять блокировку транзакции изrunBlockingв потоке транзакции.
Версия 2.5.0
Версия 2.5.0
22 февраля 2023 г.
androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 и androidx.room:room-paging-rxjava3:2.5.0. Версия 2.5.0 содержит следующие коммиты:
Версия 2.5.0
11 января 2023 г.
Выход androidx.room:room-*:2.5.0. Версия 2.5.0 содержит следующие коммиты:
Важные изменения с версии 2.4.0
- Все источники
room-runtimeбыли преобразованы из Java в Kotlin. Обратите внимание, что если ваш код написан на Kotlin, то из-за преобразования библиотеки в Kotlin могут возникнуть проблемы с совместимостью исходного кода. Например, в версииInvalidationTrackerвам нужно будет объявитьonInvalidate()вObserver, чтобы параметр имел типSet, а неMutableSet. Кроме того, некоторые методы получения были преобразованы в свойства, требующие синтаксиса доступа к свойствам в файлах Kotlin. Если вы обнаружите серьезные проблемы с совместимостью, сообщите о них. - Добавлена новая аннотация для сочетаний клавиш –
@Upsert. Она пытается вставить объект, если нет конфликта уникальности, или обновить объект, если конфликт есть. (I7aaab, b/241964353) - Добавлены новые артефакты для оповещения в помещениях:
room-paging-rxjava2,room-paging-rxjava3иroom-paging-guava. - Добавлены API для предоставления названий таблиц ключей и значений для устранения неоднозначности в
@MapInfo(Icc4b5)
Версия 2.5.0-rc01
7 декабря 2022 г.
Выход androidx.room:room-*:2.5.0-rc01. Версия 2.5.0-rc01 содержит следующие коммиты:
- Этот релиз идентичен релизу
2.5.0-beta02.
Версия 2.5.0-beta02
9 ноября 2022 г.
Выход androidx.room:room-*:2.5.0-beta02. Версия 2.5.0-beta02 содержит следующие коммиты:
Изменения в API
- Исправлены различные API, которые принимают аргументы запроса от инвариантного (
Array<Any?>) до контравариантного (Array<out Any?>), чтобы соответствовать поведению массива Java. (b/253531073)
Версия 2.5.0-beta01
5 октября 2022 г.
Выход сингла "androidx.room:room-*:2.5.0-beta01". Версия 2.5.0-beta01 содержит следующие коммиты:
Изменения в API
- Ограничьте минимальную версию, поддерживающую
@Upsert, до API 16. Это связано с тем, что в старых API невозможно определить конфликт ограничений первичного ключа. (I5f67f, b/243039555)
Исправление ошибок
- Устранена проблема, из-за которой теневые таблицы неправильно экспортировались в файлы схемы
.json, повреждая их. (I4f83b, b/246751839)
Версия 2.5.0-alpha03
24 августа 2022 г.
Выход androidx.room:room-*:2.5.0-alpha03. Версия 2.5.0-alpha03 содержит эти коммиты.
Новые функции
- Добавлена новая аннотация для сочетаний клавиш –
@Upsert. Она пытается вставить объект, если нет конфликта уникальности, или обновить объект, если конфликт есть. (I7aaab, b/241964353)
Исправление ошибок
- Теперь Room будет выдавать исключение
SQLiteConstraintExceptionвместоIllegalStateExceptionпри проверке ограничения внешнего ключа во время автоматического переноса. (I328dd) - Исправлена несовместимость исходного кода Kotlin для геттера / свойств
getOpenHelper,getQueryExecutorиgetTransactionExecutor. (Iad0ac)
Версия 2.5.0-alpha02
1 июня 2022 г.
Выход androidx.room:room-*:2.5.0-alpha02. Версия 2.5.0-alpha02 содержит эти коммиты.
Новые функции
- Добавлены новые артефакты
room-pagingroom-paging-rxjava2,room-paging-rxjava3иroom-paging-guavaдля поддержки в функции "Постраничная разбивка".(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
Изменения в API
- Все файлы
room-runtimeбыли преобразованы из Java в Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)Примечание. Из-за преобразования библиотеки в Kotlin могут возникнуть проблемы с совместимостью исходного кода. Если ваш код был написан на Kotlin и вызывал старую версию Room, то в новой версии нужно будет обработать эти случаи. Например, в
InvalidationTrackerвам нужно будет объявитьonInvalidate()вObserver, чтобы получить параметр типаSet, а неMutableSet. - Добавлены API для предоставления названий таблиц ключей и значений для устранения неоднозначности в
@MapInfo(Icc4b5) - Устраните проблему совместимости источника, чтобы снова разрешить
@Ignoreв геттерах свойств. (Ifc2fb)
Исправленные ошибки
- Эвристический алгоритм разрешения дублирующихся столбцов. Теперь Room будет пытаться разрешить неоднозначные столбцы в запросе multimap. Это позволяет правильно сопоставлять результаты запросов JOIN с таблицами, содержащими таблицы с одинаковыми названиями, с объектом данных результата. (I4b444, b/201306012, b/212279118)
Версия 2.5.0-alpha01
23 февраля 2022 г.
Выход сингла "androidx.room:room-*:2.5.0-alpha01". Версия 2.5.0-alpha01 содержит следующие коммиты:
Изменения в API
- Исправлена ошибка, из-за которой использование Room
@IntDefне применялось в источниках Kotlin. (I75f41, b/217951311) - Исправлена проблема совместимости с источником, чтобы снова разрешить
@Queryв геттерах свойств. (I0a09b) - Преобразован общий код для переговорных комнат с Java на Kotlin. (I69c48, b/206858235)
Примечание. При преобразовании библиотеки в Kotlin некоторые свойства были перенесены в сопутствующие объекты, поэтому могут возникнуть проблемы с несовместимостью источников. Если ваш код написан на Kotlin и вызывает старую версию Room, то при обращении к этим свойствам в новой версии потребуется суффикс .Companion.
- Перенос room-migration с Java на Kotlin. (I2724b, b/206858622)
- Преобразовано
pagingсвязанных файлов вroom-runtimeс Java на Kotlin. (I82fc8, b/206859668) - Добавлен API для многопроцессной блокировки и использования на уровне FrameworkSQLite*, чтобы защитить многопроцессное первое создание базы данных и перенос данных. (Ied267, b/193182592)
Исправление ошибок
- Добавлена поддержка внутренних свойств в источниках Kotlin.
Это небольшое изменение в поведении Room, при котором он будет использовать исходное название функций, сопоставляя их со свойствами как геттеры/сеттеры (ранее использовалось название функции JVM, которое отличается для внутренних функций/свойств).
Если вы используете специальные аннотации
@JvmNameдля сопоставления методов получения и установки с частными свойствами, после обновления проверьте сгенерированный код (If6531, b/205289020).
Версия 2.4.3
Версия 2.4.3
27 июля 2022 г.
Выход сингла "androidx.room:room-*:2.4.3". Версия 2.4.3 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой Room не распознавал функции suspend в Kotlin 1.7 (b/236612358).
Версия 2.4.2
Версия 2.4.2
23 февраля 2022 г.
Выход androidx.room:room-*:2.4.2. Версия 2.4.2 содержит следующие коммиты:
Исправленные ошибки
- Исправлена ошибка, из-за которой при компиляции с помощью
-Xjvm-default=allили эквивалентного инструмента генерировался код для функции приостановки Dao@Transactionс телом, генерирующим метод интерфейса по умолчанию. (Ia4ce5) - Исправлена ошибка, из-за которой Room генерировал код для метода запроса с типом возвращаемого значения
Array<ByteArray>. (If086e, b/213789489)
Версия 2.4.1
Версия 2.4.1
12 января 2022 г.
Выход androidx.room:room-*:2.4.1. Версия 2.4.1 содержит следующие коммиты:
Исправленные ошибки
- Добавлена поддержка внутренних свойств в источниках Kotlin.
Это небольшое изменение в поведении Room, при котором для сопоставления функций со свойствами в качестве геттеров и сеттеров будет использоваться исходное название функций (ранее использовалось название JVM, которое отличается для внутренних функций и свойств).
Если вы используете специальные аннотации
@JvmNameдля сопоставления методов получения и установки с частными свойствами, проверьте сгенерированный код после обновления (If6531, b/205289020).
Версия 2.4.0
Версия 2.4.0
15 декабря 2021 г.
Выход androidx.room:room-*:2.4.0. Версия 2.4.0 содержит следующие коммиты:
Важные изменения с версии 2.3.0
- Автоматический перенос. Room теперь предлагает API для автоматического создания переносов при условии, что схемы экспортированы. Чтобы сообщить Room, что нужно автоматически перенести данные в новый ресурс, можно использовать новое свойство
@Database#autoMigrations, в котором указываются версии, между которыми нужно выполнить перенос. Если Room требуется дополнительная информация о переименовании или удалении таблиц и столбцов, аннотация@AutoMigrationможет объявить класс спецификации, содержащий такие входные данные. Подробная информация приведена в документации по@AutoMigration. - Внедрение зависимостей при автоматическом переносе.
@ProvidedAutoMigrationSpec– это новый API, который позволяет указать, чтоAutoMigrationSpecбудет предоставлен во время выполнения с помощьюRoomDatabase.Builder#addAutoMigrationSpec(). Это позволяет фреймворку внедрения зависимостей предоставлять такие спецификации, когда им требуются сложные зависимости. - Поддержка автоматического переноса в инструменте Migration Test Helper.
MigrationTestHelperбыл обновлен, чтобы поддерживать автоматический перенос. Для этого был добавлен новый API конструктора, который получает класс тестируемой базы данных. Это позволит помощнику автоматически добавлять автоматические переносы таким же образом во времяrunMigrationsAndValidate. - Поддержка Room-Paging. Выпущена библиотека
androidx.room:room-paging, которая обеспечивает нативную поддержку Paging 3.0 для запросов Room, возвращающихandroidx.paging.PagingSource. - Методы реляционных запросов. Room теперь поддерживает типы возвращаемых значений multimap для методов
@Dao, которые полезны для операторов JOIN. Поддерживаются следующие типы multimap:Map,SparseArray,LongSparseArray, а такжеImmutableMap,ImmutableSetMultimapиImmutableListMultimapиз библиотеки Guava.
Версия 2.4.0-rc01
1 декабря 2021 г.
Выход сингла "androidx.room:room-*:2.4.0-rc01". Версия 2.4.0-rc01 содержит эти коммиты.
Новые функции
- Обновите зависимость Room от KSP до версии
1.6.0-1.0.1, чтобы обеспечить поддержку Kotlin 1.6.
Версия 2.4.0-beta02
17 ноября 2021 г.
Выход androidx.room:room-*:2.4.0-beta02. Версия 2.4.0-beta02 содержит следующие коммиты:
Новые функции
- Мы добавили поддержку SparseArray и LongSparseArray в @MapInfo. (Ic91a2b/138910317)
Исправление ошибок
- Мы добавили новый анализатор TypeConverter, который учитывает информацию о допустимости значения NULL в типах. Поскольку эта информация доступна только в KSP, по умолчанию она включена только в KSP. Если это вызывает проблемы, вы можете отключить его, передав room.useNullAwareTypeAnalysis=false в аннотацию процессора. Если это произойдет, сообщите об ошибке, поскольку в будущем этот флаг будет удален. Новый анализатор TypeConverter предлагает предоставлять только ненулевые получающие TypeConverter, поскольку он может обернуть их проверкой на null. Обратите внимание, что это не влияет на пользователей, которые используют KAPT или Java в качестве процессоров аннотаций (в отличие от KSP), поскольку в типах нет информации о возможности нулевого значения. (Ia88f9, b/193437407)
- Исправлена ошибка, из-за которой Room не удавалось скомпилировать с ошибкой SQL, когда объект FTS был объявлен для использования токенизатора ICU. (I00db9, b/201753224)
- Исправлена проблема с автоматическим переносом данных, связанная с добавлением нового столбца во встроенный объект между версиями. (I5fcb1b/193798291)
- Мы устранили проблему, связанную с типами возвращаемых значений метода реляционного запроса в запросах LEFT JOIN. В результате этих изменений, если присутствует сопоставление "один ко многим", коллекция, возвращаемая для ключа, не будет включать недопустимый объект значения, если он не найден в курсоре. Если действительные значения не найдены, ключ будет сопоставлен с пустой коллекцией. (Id5552b/201946438)
- Устранена проблема с автоматическим переносом, из-за которой не удавалось экранировать ключевые слова SQLite в названиях столбцов. (Idbed4b/197133152)
Версия 2.4.0-beta01
13 октября 2021 г.
Выход androidx.room:room-*:2.4.0-beta01. Версия 2.4.0-beta01 содержит следующие коммиты:
Исправление ошибок
- Исправлена проблема, из-за которой при автоматическом переносе не добавлялись новые столбцы, если в другой таблице в том же автоматическом переносе также был новый столбец с тем же названием. (Ia5db5, b/200818663)
- Реализация PagingSource, сгенерированная библиотекой room-paging, теперь использует параметр
queryExecutor, переданный черезRoomDatabase.Builder, поэтому его можно переопределить, а неDispatchers.IO, как раньше. (Iae259)
Версия 2.4.0-alpha05
29 сентября 2021 г.
Выход androidx.room:room-*:2.4.0-alpha05. Версия 2.4.0-alpha05 содержит следующие коммиты:
Новые функции
- Добавлен встроенный преобразователь типов для UUID. (I671e8, b/73132006)
Изменения в API
В аннотацию TypeConverters добавлено новое свойство, позволяющее разработчикам отключать встроенные конвертеры Enum и UUID. По умолчанию эти конвертеры включены, но вы можете отключить их для определенной области или для всей базы данных. Подробная информация приведена в документации по TypeConverters. (36ae9e, b/195413406)
Поддержка ключей и значений, не относящихся к POJO, для типов возвращаемых значений Multimap в DAO с помощью аннотации
@MapInfo. (I4d704)
@MapInfo будет обязательным, если ключ или столбец значений карты взяты из одного столбца. Пример:
@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>
- Сделайте
room-pagingобязательным артефактом при использовании Paging3 с Room. (Ieaffe)
Исправление ошибок
- Исправлена ошибка, из-за которой результаты запросов к нескольким картам упорядочивались неправильно, если запрос содержал предложение ORDER BY для столбца из ключа карты. (I6b887)
Внешний вклад
- Добавлен новый API для указания порядка индексации в @Index. Никита Желонкин (I033fc)
Версия 2.4.0-alpha04
21 июля 2021 г.
Выход androidx.room:room-*:2.4.0-alpha04. Версия 2.4.0-alpha04 содержит следующие коммиты:
Новые функции
Room теперь поддерживает типы возвращаемых значений multimap в методах
@Dao, что полезно для операторов JOIN. Поддерживаются следующие типы multimap:Map, а такжеImmutableMap,ImmutableSetMultimapиImmutableListMultimapиз библиотеки Guava.Примеры запросов с несколькими картами:
Карта отношений "один к одному"
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>Карта отношений "один ко многим" (стандартная мультикарта)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>Результат multimap также может быть обернут в поддерживаемые асинхронные типы возвращаемого значения, такие как
LiveData,Observableиз Rx или сопрограммыFlow.
Room-Paging
androidx.room:room-pagingс поддержкой Paging 3.0 для запросов Room, возвращающихandroidx.paging.PagingSource.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }Этот артефакт заменяет реализацию
androidx.paging.PagingSource, созданную Room, на реализацию, построенную на основе API Paging 3.0. Новая реализация PagingSource анализирует ключи иначе, поэтому любой ключ, вручную предоставленный PagingSource Room, должен учитывать это изменение поведения, включая initialKey, переданный через конструктор Pager. Страницы будут загружаться сKey, иKeyбудет первым загруженным элементом. Это отличается от существующего поведения, при которомLoadParams.Refresh.Keyрассматривается как положение прокрутки пользователя, а элементы загружаются как до, так и после клавиши.Артефакт необязателен, и отказ от него приведет к возврату к существующей поддержке Paging 3.0, которая была представлена в Room 2.3. Однако в будущих выпусках для тех, кто использует Room с Paging 3.0, этот артефакт станет обязательным. Чтобы включить эту функцию, добавьте новый артефакт room-paging в classpath. Если вы используете Gradle, добавьте в файл build.gradle следующий фрагмент кода:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Исправление ошибок
- Исправлена проблема с автоматическим переносом данных, связанная с обработкой нарушений внешних ключей. (b/190113935)
Версия 2.4.0-alpha03
16 июня 2021 г.
Выход androidx.room:room-*:2.4.0-alpha03. Версия 2.4.0-alpha03 содержит следующие коммиты:
Изменения в API
- Обновите Room до версии
MigrationTestHelper, чтобы поддерживать автоматический перенос данных. Для этого добавьте новый API конструктора, который получает класс тестируемой базы данных. Это позволит помощнику автоматически добавлять автопереходы так же, как и во времяrunMigrationsAndValidate.
Исправление ошибок
Исправлена проблема с нативной библиотекой SQLite Room для поддержки чипов Apple M1. (b/174695268
Исправлена ошибка, из-за которой Room не выдавал ошибку, когда типом возвращаемого значения функции @Transaction был Flow (I56ddd, b/190075899).
Исправлена проблема с индексами при автоматическом переносе. b/177673291
Обновление зависимостей
- Поддержка KSP в Room теперь зависит от KSP
1.5.10-1.0.0-beta01. (1ecb11, b/160322705)
Версия 2.4.0-alpha02
5 мая 2021 г.
Выход androidx.room:room-*:2.4.0-alpha02. Версия 2.4.0-alpha02 содержит эти коммиты.
Изменения в API
@ProvidedAutoMigrationSpec– это новый API, позволяющий заявлять, чтоAutoMigrationSpecбудет предоставлен во время выполнения с помощьюRoomDatabase.Builder#addAutoMigrationSpec(). Это позволяет фреймворку внедрения зависимостей предоставлять такие спецификации, когда им требуются сложные зависимости.
Исправление ошибок
- Устранена проблема с автоматическим переносом, из-за которой не удавалось правильно воссоздать
@DatabaseView.
Внешний вклад
- Исправлена ошибка в Room
JournalMode.TRUNCATE, из-за которой обратный вызовInvalidationTrackerиногда вызывался неправильно, слишком поздно или не вызывался вообще. БлагодаримUli Bubenheimer | bubenheimer@users.noreply.github.com(b/154040286).
Версия 2.4.0-alpha01
21 апреля 2021 г.
Выход androidx.room:room-*:2.4.0-alpha01. Версия 2.4.0-alpha01 содержит следующие коммиты:
Новые функции
- Автоматический перенос. Room теперь предлагает API для автоматического создания переносов при условии, что схемы экспортированы. Чтобы сообщить Room, что нужно сгенерировать автоматический перенос, можно использовать новое свойство
@Database#autoMigrations, в котором указываются версии, между которыми выполняется перенос. Если Room требуется дополнительная информация о переименовании или удалении таблиц и столбцов, аннотация@AutoMigrationможет объявить класс спецификации, содержащий такие входные данные. Дополнительную информацию можно найти в документации по@AutoMigration.
Исправление ошибок
- Исправлена проблема, из-за которой
defaultValueс лишними скобками неправильно проверялись при валидации схемы Room. b/182284899
Версия 2.3.0
Версия 2.3.0
21 апреля 2021 г.
Выход сингла "androidx.room:room-*:2.3.0". Версия 2.3.0 содержит эти коммиты.
Важные изменения, внесенные в версию 2.2.0
- Встроенная поддержка Enum. Теперь Room по умолчанию использует конвертер типов Enum в String и наоборот, если не указан другой. Если конвертер типов для перечисления уже существует, Room будет использовать его вместо стандартного.
- Обратный вызов запроса. Теперь Room предлагает общий API обратного вызова RoomDatabase.QueryCallback, который вызывается при выполнении запросов. Это может быть полезно для ведения журналов в отладочных сборках. Обратный вызов можно настроить с помощью
RoomDatabase.Builder#setQueryCallback(). - Улучшение готового пакета. Теперь в Room есть API для создания базы данных с помощью готовой базы данных, прочитанной из входного потока. Это позволяет использовать, например, базы данных, упакованные в gzip.
- Предоставляемые конвертеры типов. Теперь в Room есть API для предоставления экземпляров конвертеров типов, чтобы приложение могло контролировать их инициализацию. Чтобы отметить преобразователь типов, который будет предоставлен Room, используйте новую аннотацию @ProvidedTypeConverter.
- Поддержка RxJava3. Room теперь поддерживает типы RxJava3. Как и в RxJava2, вы можете объявлять методы DAO, типом возвращаемого значения которых являются Flowable, Single, Maybe и Completable. Кроме того, для поддержки RxJava3 доступен новый артефакт
androidx.room:room-rxjava3. - Поддержка Paging 3.0. Room теперь поддерживает создание реализаций для методов с аннотацией
@Query, тип возвращаемого значения которых –androidx.paging.PagingSource.
Версия 2.3.0-rc01
24 марта 2021 г.
Выход сингла "androidx.room:room-*:2.3.0-rc01". Версия 2.3.0-rc01 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка, из-за которой запросы Coroutine Flow, созданные Room, не могли быть использованы в приостанавливающем блоке
withTransaction. (I797bf)
Версия 2.3.0-beta03
10 марта 2021 г.
Выход androidx.room:room-*:2.3.0-beta03. Версия 2.3.0-beta03 содержит следующие коммиты:
Новые функции
- Добавлена поддержка инкрементной компиляции для KSP. (I031c1, b/176453350)
Исправление ошибок
- Исправлена ошибка, из-за которой создание PagingSource в основном потоке могло привести к ошибке ANR. (I42b74, b/181221318)
- Исправлена видимость
@ExperimentalRoomApi: теперь она открыта для всех, а не только для пакета. (b/181356119)
Внешний вклад
- Разрешить Room принимать тип возвращаемого значения POJO в методе DAO с аннотацией
@Query, если он также имеет аннотацию@SkipQueryVerification. Room попытается преобразовать результат запроса в тип POJO, как это делается для метода DAO с аннотацией@RawQuery. Благодарим Markus Riegel | hey@marcorei.com. (I45acb)
Версия 2.3.0-beta02
18 февраля 2021 г.
Выход androidx.room:room-*:2.3.0-beta02. Версия 2.3.0-beta02 содержит следующие коммиты:
Новые функции
В Room добавлена экспериментальная поддержка Kotlin Symbol Processing KSP.
KSP – это замена KAPT, позволяющая запускать процессоры аннотаций непосредственно в компиляторе Kotlin, что значительно сокращает время сборки.
Чтобы использовать Room с KSP, примените плагин KSP Gradle и замените конфигурацию
kaptв файле сборки наksp. Например, вместоkapt 'androidx.room:room-compiler:2.3.0-beta02'используйтеksp 'androidx.room:room-compiler:2.3.0-beta02'. Подробная информация приведена в документации по KSP.Поскольку KSP находится на стадии эксперимента, для рабочего кода рекомендуется использовать KAPT. Уменьшение времени сборки возможно только в том случае, если нет других процессоров, использующих KAPT. Ознакомьтесь с известными проблемами.
Версия 2.3.0-beta01
27 января 2021 г.
Выход сингла "androidx.room:room-*:2.3.0-beta01". Версия 2.3.0-beta01 содержит следующие коммиты:
Новые функции
- Автоматическое закрытие баз данных. Теперь Room может закрывать базы данных, к которым не обращались в течение определенного времени. Это экспериментальная функция, которую можно включить с помощью метода
RoomDatabase.Builder#setAutoCloseTimeout(). Эта функция полезна для приложений с несколькими базами данных.
Исправленные ошибки
- Исправлена проблема, из-за которой методы Dao с несколькими методами
@Updateили@Deleteс разными стратегиями конфликтов генерировали код только с одной из стратегий, игнорируя определенную. (/I0b90d, b/176138543)
Версия 2.3.0-alpha04
16 декабря 2020 г.
Выход сингла "androidx.room:room-*:2.3.0-alpha04". Версия 2.3.0-alpha04 содержит следующие коммиты:
Новые функции
- Теперь Room предлагает общий API обратного вызова
RoomDatabase.QueryCallback, который вызывается перед выполнением запросов. Он может быть полезен для ведения журналов в отладочных сборках. Обратный вызов можно настроить с помощьюRoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608) - Теперь Room будет по умолчанию использовать преобразователь типов Enum в String и наоборот, если он не указан. Если конвертер типов для перечисления уже существует, Room будет использовать его вместо конвертера по умолчанию. (b/73132006)
Известная проблема
- Если для Enum уже существует односторонний преобразователь типов для чтения, Room может случайно использовать встроенный преобразователь String в Enum, что может быть нежелательно. Это известная проблема, которую можно решить, сделав конвертер двусторонним. Подробнее: b/175707691.
Исправление ошибок
- Исправлена проблема, из-за которой Room неправильно отключал инкрементную обработку аннотаций в новых версиях JDK. (b/171387388)
- Исправлена проблема с поиском сгенерированного класса в Room при использовании нескольких загрузчиков классов. Благодарим за исправление "Serendipity | 892449346@qq.com"! (b/170141113)
- Исправлена ошибка, из-за которой Room генерировал неправильный код, когда у класса Kotlin
@Daoбыл базовый класс, чьи обобщенные типы были примитивными типами в JVM. (b/160258066)
Внешний вклад
- Теперь по умолчанию в Room будет использоваться
beginTransactionNonExclusive, если включен режим WAL и API версии 16 или выше. Благодарим Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
Версия 2.3.0-alpha03
14 октября 2020 г.
Выход сингла "androidx.room:room-*:2.3.0-alpha03". Версия 2.3.0-alpha03 содержит следующие коммиты:
Новые функции
В Room теперь есть API для предоставления экземпляров преобразователей типов, чтобы приложение могло управлять их инициализацией. Чтобы отметить конвертер типов, который будет предоставлен Room, используйте новую аннотацию
@ProvidedTypeConverter. Благодарим mzgreen (yairobbe@gmail.com). (Ie4fa5, b/121067210)Теперь в Room есть API для создания базы данных с помощью готовой базы данных, считанной из входного потока. Это позволяет обрабатывать случаи, когда база данных в пакете сжата с помощью gzip. Благодарим Ахмеда Эль-Хельва (Ahmed El-Helw) ahmedre@gmail.com (3e6792, b/146911060).
Изменения в API
Добавлен отсутствующий целевой объект для аннотации
@ForeignKey, чтобы ее нельзя было использовать вне аннотации@Entity. (Iced1e)Поле
mCallbacksвRoomDatabase.javaтеперь скрыто. (d576cb, b/76109329)
Исправление ошибок
В документацию по TypeConverters добавлено уточнение о том, что TypeConverters можно использовать только для преобразования столбцов / полей, но не строк. (I07c56, b/77307836)
Обновление DaoProcessor для исправления ошибки компилятора в Dao с общим супертипом с примитивами Kotlin. (Ice6bb, b/160258066)
В документацию по методам добавления и удаления наблюдателя добавлено разъяснение о потоках (Ifd1d9, b/153948821)
Исправлена проблема, из-за которой Room неправильно проверял таблицы FTS, в которых был объявлен столбец rowid. (d62ebc, b/145858914)
Внешние вклады
Исправлены проблемы с регистром букв в турецком языке (5746e3), b/68159494
Замените
ConcurrentHashMapвнутриRoomDatabaseнаCollections.synchronizedMap(), чтобы избежать проблем в Android Lollipop (d1cfc7, b/162431855).Добавьте обратный вызов onOpenPrepackagedDatabase, который будет срабатывать при копировании предварительно упакованной базы данных. (I1ba74, b/148934423)
Версия 2.3.0-alpha02
22 июля 2020 г.
Выход сингла "androidx.room:room-*:2.3.0-alpha02". Версия 2.3.0-alpha02 содержит следующие коммиты:
Новые функции
- Поддержка RxJava3. Room теперь поддерживает типы RxJava3. Как и в RxJava2, вы можете объявлять методы DAO, типом возвращаемого значения которых являются Flowable, Single, Maybe и Completable. Кроме того, для поддержки RxJava3 доступен новый артефакт
androidx.room:room-rxjava3. (b/152427884)
Изменения в API
- Теперь можно объявлять
@TypeConverterв классе объектов Kotlin. (b/151110764) - Параметр обработки дополнительных аннотаций
Roomтеперь включен по умолчанию. (b/112110217)
Версия 2.3.0-alpha01
10 июня 2020 г.
Выход androidx.room:room-*:2.3.0-alpha01. Версия 2.3.0-alpha01 содержит эти коммиты.
Новые функции
Поддержка Paging 3.0. Room теперь поддерживает создание реализаций для методов с аннотацией
@Query, возвращающих типandroidx.paging.PagingSource.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Изменения в API
@RewriteQueriesToDropUnusedColumns– это новая удобная аннотация, которая заставляет Room переписать проекцию "*" в запросе, чтобы неиспользуемые столбцы в результате были удалены.- Прекращена поддержка параметра обработчика
room.expandProjection. Используйте@RewriteQueriesToDropUnusedColumnsвместо запросов с оптимизацией переговорных комнат и прогнозами на основе звезд. Обратите внимание, что@RewriteQueriesToDropUnusedColumnsне заменяет решение конфликта столбцовroom.expandProjection, предлагаемое в отношении типов возвращаемых значений, содержащих поля@Embedded.
Исправление ошибок
- Исправлена ошибка, из-за которой Room неверно определял версию JDK, используемую для включения инкрементального инструмента обработки аннотаций. Благодарим Блаза Солара (me@blaz.solar) (b/155215201).
- Теперь Room встраивает зависимость ANTLR в процессор аннотаций, чтобы избежать конфликтов версий с другими процессорами, которые также используют ANTLR. (b/150106190)
Версия 2.2.6
Версия 2.2.6
16 декабря 2020 г.
Выход сингла "androidx.room:room-*:2.2.6". Версия 2.2.6 содержит следующие коммиты:
Исправленные ошибки
- Исправлена ошибка, из-за которой Room неправильно отключал инкрементную обработку аннотаций в новых версиях JDK. (b/171387388)
Версия 2.2.5
Версия 2.2.5
18 марта 2020 г.
Выход androidx.room:room-*:2.2.5. Версия 2.2.5 содержит следующие коммиты:
Исправление ошибок
- Сделайте
MultiInstanceInvalidationServiceсовместимым с режимом Direct Boot. Благодарим Mygod contact-git@mygod.be (b/148240967) - Исправлена ошибка, которая приводила к сбою, когда была включена инвалидация многооконного режима, а база данных содержала объект FTS. (b/148969394)
- Исправлена проблема, из-за которой при загрузке нативных библиотек SQLite в процессоре аннотаций Room происходил сбой компилятора из-за параллельной компиляции. (b/146217083)
Версия 2.2.4
Версия 2.2.4
19 февраля 2020 г.
Выпущены 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 и androidx.room:room-testing:2.2.4. Версия 2.2.4 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой приостановленные транзакции могли зависать, если сопрограмма отменялась слишком быстро, до того как транзакция фактически начиналась. (b/148181325)
- Исправлена ошибка, из-за которой аннотация @Generated неправильно использовалась при сборке с JDK 9. (b/146538330)
- Исправлена ошибка, из-за которой Room генерировал неправильный код, когда в интерфейсе DAO в Kotlin была конкретная функция. (b/146825845)
Версия 2.2.3
Версия 2.2.3
18 декабря 2019 г.
Выход androidx.room:room-*:2.2.3. Версия 2.2.3 содержит следующие коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой Room не удавалось проверить базу данных, которая не была перенесена и содержала устаревший хеш с индексами в схеме. (b/139306173)
Версия 2.2.2
Версия 2.2.2
20 ноября 2019 г.
Выход сингла "androidx.room:room-*:2.2.2". Версия 2.2.2 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой при сборе отношения "один к одному" с более чем 999 строками Room возвращал нулевые связанные элементы. (b/143105450)
Версия 2.2.1
Версия 2.2.1
23 октября 2019 г.
Выход androidx.room:room-*:2.2.1. Версия 2.2.1 содержит следующие коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой Room неправильно предупреждал о
CURSOR_MISMATCHпри включенном параметре компилятораexpandProjection. (b/140759491) - Добавлен механизм повторных попыток для обработки отсутствующей нативной библиотеки, используемой для проверки запросов во время компиляции.
Версия 2.2.0
Версия 2.2.0
9 октября 2019 г.
Выход сингла "androidx.room:room-*:2.2.0". Версия 2.2.0 содержит следующие коммиты.
Важные изменения с версии 2.1.0
- Предварительно упакованная база данных. В
RoomDatabase.Builderтеперь доступны два новых API для созданияRoomDatabaseна основе уже заполненного файла базы данных.createFromAsset()используется, когда автоматически заполненный файл базы данных находится в папке объектов APK, аcreateFromFile()– когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивных переносов. При резервном переносе Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна. В противном случае Room удалит и заново создаст все таблицы. b/62185732 - Значения по умолчанию для схемы. В
@ColumnInfoтеперь есть новое свойствоdefaultValue, которое можно использовать, чтобы задать значение по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время переноса, если они указаны. b/64088772 - Отношения "многие ко многим". В
@Relationдобавлено новое свойствоassociateBy, которое принимает новую аннотацию@Junction, используемую для объявления отношения, которое должно быть удовлетворено через таблицу соединений. b/69201917 - Отношения "один к одному". Снято ограничение, согласно которому поля POJO, аннотированные с помощью
@Relation, должны иметь типListилиSet. Это позволяет представлять отношения с одним значением. b/62905145 - Целевой объект. Аннотации DAO
@Insert,@Updateи@Deleteтеперь имеют новое свойствоtargetEntity, которое позволяет указать целевую таблицу, с которой должен работать метод DAO. Это позволяет использовать в качестве параметров методов DAO произвольные объекты POJO, которые будут интерпретироваться как частичные объекты. На практике это позволяет частично вставлять, удалять и обновлять данные. b/127549506 - Coroutines Flow: Теперь методы DAO могут иметь тип возвращаемого значения
Flow<T>.@QueryВозвращенный поток повторно выдаст новый набор значений, если наблюдаемые таблицы в запросе недействительны. Объявление функции DAO с типом возвращаемого значенияChannel<T>является ошибкой. Вместо этого Room рекомендует использоватьFlow, а затем использовать соседние функции для преобразованияFlowвChannel. b/130428884 - Инкрементный процессор аннотаций Gradle. Room теперь является изолирующим процессором аннотаций Gradle, и инкрементность можно включить с помощью параметра процессора
room.incremental. Подробнее о параметрах компилятора Room… Если у вас возникнут проблемы, сообщите нам о них здесь. Мы планируем включить возможность инкрементального обновления по умолчанию в одной из будущих стабильных версий. b/112110217 - Расширение проекций. Добавлен новый экспериментальный параметр компилятора
room.expandProjection, который позволяет Room переписывать запрос с проекцией звездочки так, чтобы он содержал только столбцы в типе возвращаемого значения POJO. Например, для метода DAO с@Query("SELECT * FROM Song"), который возвращаетSongIdAndTitleтолько с двумя полями. Затем Room перепишет запрос вSELECT id, title FROM Song, чтобы получить минимальный набор столбцов, соответствующий типу возвращаемого значения. Это позволяет устранить предупреждениеCURSOR_MISMATCH, которое появляется, когда запрос возвращает дополнительные столбцы, не соответствующие ни одному полю в возвращаемом типе POJO.
Версия 2.2.0-rc01
5 сентября 2019 г.
Выход сингла "androidx.room:room:2.2.0-rc01". Список коммитов, включенных в эту версию, можно найти здесь.
С момента создания переговорной комнаты 2.2.0-beta01 общедоступные изменения не вносились.
Версия 2.2.0-beta01
22 августа 2019 г.
Выход androidx.room:room-*:2.2.0-beta01. Список коммитов, включенных в эту версию, можно найти здесь.
Исправление ошибок
- Исправлена ошибка, из-за которой запрос Coroutine Flow переставал повторно выдавать новые значения через определенное время. (b/139175786)
- Исправлена ошибка, из-за которой Room не принимал хеш-код устаревшей схемы при открытии базы данных, которая не была перенесена с версии Room 1.0, что приводило к сбою во время выполнения из-за недействительной схемы. (b/139306173)
Версия 2.2.0-alpha02
7 августа 2019 г.
Выход androidx.room:room-*:2.2.0-alpha02. Список коммитов, включенных в эту версию, можно найти здесь.
Новые функции
- Coroutines Flow: Теперь методы DAO могут иметь тип возвращаемого значения
Flow<T>.@QueryВозвращенный поток повторно выдаст новый набор значений, если наблюдаемые таблицы в запросе недействительны. Объявление функции DAO с типом возвращаемого значенияChannel<T>является ошибкой. Вместо этого Room рекомендует использоватьFlow, а затем соседние функции для преобразованияFlowвChannel. b/130428884 - Расширение проекций. Добавлен новый экспериментальный параметр компилятора
room.expandProjection, который заставляет Room переписывать запрос со звездной проекцией, чтобы он содержал только столбцы в типе возвращаемого значения POJO. Например, для метода DAO с@Query("SELECT * FROM Song"), который возвращает POJO с названиемSongIdAndTitleи только двумя полями. Затем Room перепишет запрос вSELECT id, title FROM Song, чтобы получить минимальный набор столбцов, соответствующий типу возвращаемого значения. Это позволяет избежать предупрежденияCURSOR_MISMATCH, которое появляется, когда запрос возвращает дополнительные столбцы, не соответствующие ни одному полю в возвращаемом типе POJO. onDestructiveMigrate– новый Callback API, добавленный вRoomDatabase.Callbackдля случаев, когда Room выполняет деструктивный перенос базы данных. b/79962330
Исправление ошибок
- Исправлена ошибка, из-за которой Room генерировал неправильный код, используя метод в качестве сеттера поля, когда поле защищено. b/136194628
- Исправлена ошибка, из-за которой InvalidationTracker выдавал NPE во втором процессе, когда была включена аннуляция нескольких экземпляров и сервис аннуляции был отключен. b/137454915
- Исправлена ошибка, из-за которой Room неверно определял тип возвращаемого значения унаследованной функции приостановки, помеченной аннотацией
@RawQuery. b/137878827 - Обновлен сгенерированный код для
@Relation, когда связанный ключ имеет тип BLOB, чтобы использовать сравнимыйByteBuffer. b/137881998 - Исправлена ошибка, из-за которой Room жаловался на отсутствие методов установки в POJO, используемых в качестве параметров частичной сущности для
@Insert,@Updateи@Delete. b/138664463 - Исправлена ошибка, из-за которой Room сообщал об отсутствии методов получения и установки для игнорируемого столбца, заданного с помощью
@Entity, когда класс объекта использовался в определенных методах DAO. b/138238182 - Исправлена ошибка, из-за которой Room неправильно преобразовывал именованные аргументы привязки в позиционные, что приводило к исключению времени выполнения при выполнении запроса с повторно используемыми параметрами.b/137254857
Версия 2.2.0-alpha01
10 июля 2019 г.
Новые функции
- Готовая база данных. В
RoomDatabase.Builderтеперь доступны два новых API, которые позволяют создаватьRoomDatabaseна основе уже заполненного файла базы данных.createFromAsset()используется, когда автоматически заполненный файл базы данных находится в папке объектов APK, аcreateFromFile()– когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивных переносов. При резервном переносе Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна. В противном случае он просто удалит и заново создаст все таблицы. b/62185732 - Значения по умолчанию в схеме. В
@ColumnInfoтеперь есть новое свойствоdefaultValue, которое можно использовать, чтобы указать значение по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время переноса, если они указаны. b/64088772Примечание. Если в схеме вашей базы данных уже есть значения по умолчанию, например добавленные с помощью
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, и вы решите задать значения по умолчанию для тех же столбцов с помощью@ColumnInfo, вам может потребоваться выполнить перенос, чтобы проверить неучтенные значения по умолчанию. Подробнее о переносе переговорных комнат… - Отношения "многие ко многим". В
@Relationтеперь есть новое свойствоassociateBy, которое принимает новую аннотацию@Junction, используемую для объявления отношения, которое должно быть удовлетворено с помощью соединительной таблицы (также известной как таблица объединения). b/69201917 - Отношения "один к одному". Ограничение на использование в полях POJO, аннотированных с помощью
@Relation, типовListилиSetснято. Теперь можно представлять отношения с одним значением.b/62905145 - Целевой объект. В аннотациях DAO
@Insert,@Updateи@Deleteтеперь есть новое свойствоtargetEntity, которое позволяет указать целевую таблицу, на которую должен воздействовать метод DAO. Это позволяет использовать в качестве параметров методов DAO произвольные объекты POJO, которые будут интерпретироваться как частичные объекты. На практике это позволяет частично вставлять, удалять и обновлять данные. b/127549506 - Инкрементный процессор аннотаций Gradle. Room теперь является изолирующим процессором аннотаций Gradle, и инкрементность можно включить с помощью параметра процессора
room.incremental. Подробнее о параметрах компилятора Room… Если у вас возникнут проблемы, сообщите нам о них здесь. Мы планируем включить возможность инкрементального обновления по умолчанию в одной из будущих стабильных версий. b/112110217
Исправление ошибок
- Теперь Room не будет передавать
EmptySetResultExceptionглобальному обработчику ошибок, если поток Rx запроса был удален до завершения запроса. b/130257475 - Исправлена ошибка, из-за которой Room показывал неверное сообщение об ошибке, когда функция suspend DAO, аннотированная с помощью
@RawQuery, не имела типа возвращаемого значения.b/134303897 - Room больше не будет создавать адаптеры DAO с необработанными типами. b/135747255
Версия 2.1.0
Версия 2.1.0
13 июня 2019 г.
Версия Room 2.1.0 выпущена без изменений по сравнению с версией 2.1.0-rc01. Список коммитов, включенных в версию, можно найти здесь.
Важные изменения, внесенные в версию 2.0.0
- FTS. Теперь Room поддерживает объекты с таблицей FTS3 или FTS4. Классы, аннотированные с помощью тега
@Entity, теперь можно дополнительно аннотировать с помощью тегов@Fts3или@Fts4, чтобы объявить класс с таблицей полнотекстового поиска сопоставлений. Дополнительные параметры FTS для дальнейшей настройки доступны через методы аннотации. - Представления. Теперь в Room можно объявлять класс как сохраненный запрос, также известный как представление, с помощью аннотации
@DatabaseView. - Корутины. Методы DAO теперь могут быть функциями приостановки. Чтобы использовать эту функцию, добавьте в зависимости
room-ktx. Артефакт KTX также предоставляет функцию расширенияRoomDatabase.withTransactionдля выполнения транзакций базы данных в сопрограмме. - Автоматическое значение. Теперь Room поддерживает объявление классов с аннотацией AutoValue как объектов и POJO. Аннотации Room
@PrimaryKey,@ColumnInfo,@Embeddedи@Relationтеперь можно объявлять в абстрактных методах класса с аннотацией AutoValue. Обратите внимание, что эти аннотации должны сопровождаться элементом@CopyAnnotations, чтобы Room мог их правильно интерпретировать. - Дополнительная поддержка асинхронных запросов. Методы DAO, аннотированные с помощью
@Insert,@Deleteили@Update, а также@Query, содержащие операторыINSERT,DELETEилиUPDATE, теперь поддерживают типы возвращаемых значений RxCompletable,Single,Maybeи тип возвращаемого значения GuavaListenableFuture, а также могут быть функциями приостановки. enableMultiInstanceInvalidation– это новый API вRoomDatabase.Builder, который позволяет выполнять аннулирование в нескольких экземплярах RoomDatabase, используя один и тот же файл базы данных.fallbackToDestructiveMigrationOnDowngrade– это новый API вRoomDatabase.Builder, который автоматически воссоздает базу данных при переходе на более раннюю версию.ignoredColumns– новый API в аннотации@Entity, который можно использовать для перечисления игнорируемых полей по названию.- Теперь Room будет правильно использовать основной конструктор Kotlin в классах данных, поэтому вам не придется объявлять свойства как
vars.
Версия 2.1.0-rc01
29 мая 2019 г.
Исправление ошибок
- Исправлена ошибка инициализации переговорной комнаты, которая могла возникать из-за уже настроенной конфигурации temp_store. b/132602198
- Исправлено предупреждение об использовании двойных кавычек для пользователей с SQLite 3.27.0 и более поздних версий. b/131712640
- Исправлена ошибка, из-за которой InvalidationTracker вызывал сбой при параллельном выполнении нескольких проверок недействительности.b/133457594
Версия 2.1.0-beta01
7 мая 2019 г.
Версия androidx.room 2.1.0-beta01 не содержит изменений по сравнению с версией 2.1.0-alpha07. Список коммитов, включенных в эту версию, можно найти здесь.
Версия 2.1.0-alpha07
25 апреля 2019 г.
Изменения в API и поведении
- Функция расширения
RoomDatabase.withTransactionбольше не принимает блок функций сCoroutineScopeв качестве получателя. Это позволяет избежать пропуска дополнительной оболочкиcoroutineScope { }, необходимой для одновременного выполнения операций в блоке транзакции.
Исправление ошибок
- Исправлена ошибка, из-за которой Room не мог сопоставить TypeConverter для функции Kotlin DAO, содержащей параметр типа Collection.b/122066791
Версия 2.1.0-alpha06
22 марта 2019 г.
Изменения в API и поведении
- Асинхронные запросы транзакций теперь сериализуются, поэтому Room не будет использовать более одного потока для выполнения транзакций базы данных.
Добавлен метод
RoomDatabase.Builder.setTransactionExecutor(Executor), позволяющий настраивать исполнителя для транзакций. RoomDatabase.runInTransaction(Callable)Больше не будет оборачивать проверяемые исключения в RuntimeExceptions. b/128623748
Исправление ошибок
- Исправлена ошибка, из-за которой трекер недействительности переставал отслеживать таблицу контента, если были добавлены наблюдатели как для таблицы контента, так и для таблицы FTS внешнего контента. b/128508917
- Обновлена грамматика SQLite
Roomдля соответствия SQLite 3.24.0. b/110883668
Версия 2.1.0-alpha05
13 марта 2019 г.
Новые функции
- Функция расширения
RoomDatabase.withTransactionпозволяет безопасно выполнять транзакции с базами данных в рамках сопрограммы. Функции расширений Room и поддержка сопрограмм доступны в артефактеroom-ktx. - Неабстрактные методы DAO, аннотированные с помощью
@Transaction, теперь могут быть функциями приостановки. b/120241587
Изменения в API и поведении
- Артефакт
room-coroutinesбыл переименован вroom-ktx, чтобы его название соответствовало названиям других артефактов androidx. beginTransaction,setTransactionSuccessfulиendTransactionвRoomDatabaseустарели. Вместо них теперь используютсяrunInTransactionи функция расширенияroom-ktxwithTransaction.
Исправленные ошибки
- Исправлена ошибка, из-за которой аргументы токенизатора удалялись, если использовался токенизатор SIMPLE. b/125427014
- Исправлена ошибка, из-за которой Room не удавалось правильно идентифицировать приостанавливающие функции с параметрами, тип которых был внутренним классом. b/123767877
- Исправлена ошибка, из-за которой отложенный метод DAO
@Queryс операторамиINSERT,UPDATEилиDELETEбыстро подготавливал запрос в основном потоке. b/123695593 - Исправлены ошибки, из-за которых Room генерировал неправильный код для некоторых функций приостановки. b/123466702 и b/123457323
- Исправлена ошибка, из-за которой в сгенерированном коде неверно подавлялось устаревшее использование методов. b/117602586
- Обновлена зависимость Room от androidx.sqlite до версии 1.0.2, в которой исправлены ошибки, связанные с обработкой поврежденных баз данных. b/124476912
Известные проблемы
- Версия Room 2.1.0-alpha05 зависит от артефакта
kotlinx-metadata-jvm, который в настоящее время недоступен в Maven Central (KT-27991). Эту зависимость можно устранить, добавивmaven { url "https://kotlin.bintray.com/kotlinx/" }в репозитории проекта.
Версия 2.1.0-alpha04
25 января 2019 г.
Новые функции
- Методы DAO, аннотированные с помощью
@Queryи содержащие операторыINSERT,UPDATEилиDELETE, теперь могут возвращать асинхронные типыSingle,Mayble,CompletableиListenableFuture. Кроме того, они могут быть функциями приостановки. b/120227284
Изменения в API и поведении
- Теперь Room будет выдавать ошибку, если неабстрактный метод DAO, аннотированный с помощью
@Transaction, возвращает асинхронный тип, напримерSingle,Mayble,Completable,LiveDataилиListenableFuture. Поскольку транзакции ограничены потоком, в настоящее время Room не может начать и завершить транзакцию вокруг функции, которая может выполнять запросы в разных потоках. b/120109336 OnConflictStrategy.FAILиOnConflictStrategy.ROLLBACK@Deprecated, поскольку они не работают должным образом с текущими привязками SQLite в Android. b/117266738
Исправление ошибок
- Исправлена ошибка, из-за которой Room неправильно использовал TypeConverter типа возвращаемого значения, если метод DAO был функцией suspend. b/122988159
- Исправлена ошибка, из-за которой Room неправильно определял унаследованные функции приостановки как не приостанавливающие. b/122902595
- Исправлена ошибка, из-за которой Room генерировал неправильный код, когда поле
@Embeddedнаходилось в родительском классе и использовалось в нескольких дочерних классах. b/121099048 - Исправлена проблема, из-за которой база данных блокировалась при вызове функций приостановки DAO между
beginTransaction()иendTransaction(). b/120854786
Версия 2.1.0-alpha03
4 декабря 2018 г.
Изменения в API
- Функция FTS
tokenizerв@Fts3/@Fts4теперь принимает строку вместо перечисления. Это позволяет использовать собственные токенизаторы в Room. Встроенные токенизаторы по-прежнему определяются вFtsOptionsкак строковые константы. b/119234881
Новые функции
- Корутины. Методы DAO теперь могут быть функциями приостановки. Для поддержки функций приостановки в Room был выпущен новый артефакт
room-coroutines. b/69474692 - Методы DAO, аннотированные с помощью
@Insert,@Deleteили@Update, теперь поддерживаютListenableFutureв качестве типа возвращаемого значения. b/119418331
Исправление ошибок
- Исправлена ошибка, из-за которой Room пытался найти конструктор со столбцами в свойстве
ignoredColumnsкласса@Entity. b/119830714 - Исправлена ошибка, из-за которой Room не помечал параметры метода DAO как final в сгенерированной реализации. b/118015483
- Исправлена ошибка, из-за которой процессор
Roomаварийно завершал работу при сообщении об ошибке в запросе со специальными символами. b/119520136 - Исправлена ошибка, из-за которой Room отклонял другие реализации
Collectionв качестве аргументов выраженияIN. b/119884035 - Исправлена ошибка, из-за которой LiveData, возвращенные из Room, собирались как мусор, когда наблюдались постоянно, из-за чего они больше не выдавали новые данные. b/74477406
- Обновлена блокировка закрытия
RoomDatabase, чтобы уменьшить конфликт блокировок. b/117900450
Версия 2.1.0-alpha02
30 октября 2018 г.
Новые функции
- Добавлена поддержка ссылок на
@DatabaseViewв@Relation. b/117680932
Исправление ошибок
- Исправлена ошибка, из-за которой библиотека Room выполняла операции I/O на диске в основном потоке при подписке и удалении из типа возвращаемого значения Rx. b/117201279
- Исправлена ошибка, из-за которой Room не удавалось найти подходящий конвертер типов для поля в классе сущности Kotlin. b/111404868
- Исправлена ошибка, из-за которой Room генерировал неправильный код для реализации интерфейса
DAO, содержащей метод Kotlin по умолчанию без аргументов. b/117527454 - Обновлен парсер грамматики
RoomSQLite. Исправлена проблема с производительностью, из-за которой сборка занимала много времени. b/117401230
Версия 2.1.0-alpha01
8 октября 2018 г.
Новые функции
- FTS. Room теперь поддерживает объекты с таблицей сопоставления FTS3 или FTS4. Классы, аннотированные с помощью
@Entity, теперь можно дополнительно аннотировать с помощью@Fts3или@Fts4, чтобы объявить класс с таблицей полнотекстового поиска сопоставлений. Дополнительные настройки полнотекстового поиска доступны в методах аннотации. b/62356416 - Представления. Теперь в Room можно объявлять класс как сохраненный запрос, также известный как представление, с помощью аннотации @DatabaseView. b/67033276
- Автоматическое значение. Теперь Room поддерживает объявление классов с аннотацией AutoValue как объектов и POJO. Аннотации Room
@PrimaryKey,@ColumnInfo,@Embeddedи@Relationтеперь можно объявлять в абстрактных методах класса с аннотацией auto value. Обратите внимание, что эти аннотации также должны сопровождаться элементом@CopyAnnotations, чтобы Room мог их правильно интерпретировать. b/62408420 - Поддержка дополнительных типов возвращаемых значений Rx. Методы DAO, аннотированные с помощью
@Insert,@Deleteили@Update, теперь поддерживают типы возвращаемых значений RxCompletable,Single<T>иMaybe<T>. b/63317956 - Неизменяемые типы с аннотацией
@Relation. Ранее для полей с аннотацией@Relationтребовалось задавать значения в Room, но теперь их можно передавать в качестве параметров конструктора. enableMultiInstanceInvalidation– новый API вRoomDatabase.Builder, позволяющий отменять действие в нескольких экземплярах RoomDatabase, используя один и тот же файл базы данных. Этот механизм аннулирования нескольких экземпляров также работает в нескольких процессах. b/62334005fallbackToDestructiveMigrationOnDowngrade– новый API вRoomDatabase.Builder, который автоматически воссоздает базу данных при переходе на более раннюю версию. b/110416954ignoredColumns– новый API в аннотации@Entity, который можно использовать для перечисления игнорируемых полей по названию. Полезно для игнорирования унаследованных полей в объекте. b/63522075
Изменения в API и поведении
mCallbackиmDatabaseвRoomDatabaseтеперь называются@Deprecatedи будут удалены в следующей основной версии Room. b/76109329
Исправленные ошибки
- Исправлены две проблемы, из-за которых Room не мог правильно восстановиться после повреждения базы данных или сбоя при переносе во время инициализации. b/111504749 и b/111519144
- Теперь Room будет правильно использовать основной конструктор Kotlin в классах данных, поэтому объявлять поля как
varsне нужно. b/105769985
Версия 2.0.0
Версия 2.0.0
1 октября 2018 г.
Версия androidx.room 2.0.0 выпущена без изменений по сравнению с 2.0.0-rc01.
Версия 2.0.0-rc01
20 сентября 2018 г.
Версия androidx.room 2.0.0-rc01 выпущена без изменений по сравнению с 2.0.0-beta01.
Версия 2.0.0-beta01
2 июля 2018 г.
Изменения в API и поведении
- Добавлен параметр
RoomDatabase.Builder.setQueryExecutor(), позволяющий настраивать место выполнения запросов. - Добавлена поддержка RxJava2
Observable. - Сгенерированные реализации DAO и базы данных теперь являются окончательными
Исправленные ошибки
- Укажите название класса/поля в ошибке "не удается найти метод получения для поля" b/73334503
- Исправлена обратная совместимость RoomOpenHelper со старыми версиями Room b/110197391
Зависимости до AndroidX
Для версий Room, предшествующих AndroidX, включите следующие зависимости:
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"
}
Версия 1.1.1
Версия 1.1.1
19 июня 2018 г.
Комната 1.1.1 идентична комнате 1.1.1-rc1.
Версия 1.1.1-rc1
16 мая 2018 г.
Если вы используете перенос данных, мы настоятельно рекомендуем использовать Room 1.1.1-rc1 вместо 1.1.0.
Исправлена ошибка, из-за которой Room неправильно обрабатывал инициализацию после переноса данных. b/79362399
Версия 1.1.0
Версия 1.1.0-beta3
19 апреля 2018 г.
Исправление ошибок
- Исправлена ошибка компиляции, возникавшая, когда POJO-класс Kotlin ссылался на объект отношения, определенный в Java b/78199923.
Версия 1.1.0-beta2
5 апреля 2018 г.
Исправление ошибок
Исправлена критическая ошибка в реализациях
RoomRxSingleиMaybe, из-за которой запрос преждевременно возвращался в пул, что приводило к проблемам при добавлении более одного наблюдателя к возвращенным экземплярамSingleилиMaybe. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] не
VACUUMбазу данных, если вызывается внутри транзакции. b/77235565
Версия 1.1.0-beta1
21 марта 2018 г.
Изменения в API
- На основе отзывов об API функция
@RawQueryбольше не принимает параметр запросаString. Вам нужно использовать [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (чтобы легко создать экземпляр [SupportSQLiteQuery][ref-SupportSQLiteQuery] с поддержкой аргументов, используйте [SimpleSQLiteQuery][ref-SimpleSQLiteQuery]). - Метод [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] класса RoomDatabase.Builder теперь принимает значение
vararg intвместоvararg Integer.
Исправленные ошибки
- [RoomDatabase.clearAllTables][ref-clearAllTables] теперь пытается вернуть пространство операционной системе, устанавливая контрольную точку WAL и выполняя команду
VACUUMдля базы данных. - [
@RawQuery][ref-RawQuery] теперь принимает любой Pojo для свойстваobservedEntities, если Pojo ссылается на один или несколько объектов через поляEmbeddedилиRelation. b/74041772 - Paging: Реализация DataSource в Room теперь корректно обрабатывает зависимости между несколькими таблицами (например, отношения и объединения). Ранее при этом не удавалось получить новые результаты или скомпилировать код. b/74128314
Версия 1.1.0-alpha1
22 января 2018 г.
Новые функции
RawQuery: новый API позволяет методам@Daoполучать SQL в качестве параметра запроса. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom. Этот новый API вRoomDatabase.Builderпозволяет точнее контролировать, с каких начальных версий схемы разрешены деструктивные переносы (по сравнению с fallbackToDestructiveMigration). b/64989640- Теперь Room поддерживает только новые API разбивки на страницы (alpha-4 и более поздние версии), а поддержка устаревших API
LivePagedListProviderпрекращена. Чтобы использовать новую альфа-версию Room, вам нужно будет использовать разбиение на страницыalpha-4или более позднюю версию и перейти сLivePagedListProviderнаLivePagedListBuilder, если вы ещё этого не сделали.
Исправленные ошибки
- Улучшена поддержка типов Kotlin Kapt. b/69164099
- Порядок полей больше не влияет на действительность схемы. b/64290754