Комната
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
30 октября 2024 г. | 2.6.1 | - | - | 2.7.0-альфа11 |
Объявление зависимостей
Чтобы добавить зависимость от Room, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Зависимости для Room включают тестирование миграции Room и Room RxJava.
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Информацию об использовании плагина KAPT смотрите в документации KAPT .
Информацию об использовании плагина KSP см. в документации по быстрому запуску KSP .
Информацию об использовании расширений Kotlin смотрите в документации ktx .
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
При желании для библиотек, отличных от Android (например, модулей Gradle только для Java или Kotlin), вы можете использовать androidx.room:room-common
для использования аннотаций Room.
Настройка параметров компилятора
Room имеет следующие параметры обработчика аннотаций.
room.schemaLocation | directory Позволяет экспортировать схемы базы данных в файлы JSON в указанном каталоге. Дополнительную информацию см. в разделе «Миграция помещений» . |
room.incremental | boolean Включает процессор инкрементных аннотаций Gradle. Значение по умолчанию — true . |
room.generateKotlin | boolean Генерируйте исходные файлы Kotlin вместо Java. Требуется КСП. Значение по умолчанию — false . Дополнительные сведения см. в примечаниях к версии 2.6.0 . |
Используйте плагин Room Gradle
В версии Room 2.6.0 и выше вы можете использовать плагин Room Gradle для настройки параметров компилятора Room. Плагин настраивает проект таким образом, чтобы сгенерированные схемы (которые являются результатом задач компиляции и используются для автоматической миграции) были правильно настроены для создания воспроизводимых и кэшируемых сборок.
Чтобы добавить плагин, в файле сборки Gradle верхнего уровня определите плагин и его версию.
классный
plugins { id 'androidx.room' version "$room_version" apply false }
Котлин
plugins { id("androidx.room") version "$room_version" apply false }
В файле сборки Gradle на уровне модуля примените плагин и используйте расширение room
.
классный
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Котлин
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
. Если ваша версия ниже или если этот параметр еще не поддерживается, вместо этого вы можете использовать параметры обработчика аннотаций .
Вариант | Начиная с версии |
---|---|
room.schemaLocation (обязательно) | 2.6.0 |
room.incremental | - |
room.generateKotlin | - |
Использовать параметры обработчика аннотаций
Если вы не используете плагин Room Gradle или если нужный вам параметр не поддерживается вашей версией плагина, вы можете настроить Room с помощью параметров обработчика аннотаций, как описано в разделе Добавление зависимостей сборки . Способ указания параметров аннотации зависит от того, используете ли вы KSP или KAPT для комнаты.
классный
// 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... ] } } } }
Котлин
// 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 знал об этом каталоге при проведении обновленных проверок. В разделе «Миграция базы данных комнаты» показана полная реализация CommandLineArgumentsProvider
, которая предоставляет расположение схемы.
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см . в документации по системе отслеживания проблем .
Версия 2.7
Версия 2.7.0-альфа11
30 октября 2024 г.
Выпущен androidx.room:room-*:2.7.0-alpha11
. Версия 2.7.0-alpha11 содержит эти коммиты .
Изменения API
- Вернитесь к недавно добавленной сигнатуре метода
convertRows()
чтобы она стала функцией приостановки, которая получаетRawRoomQuery
для пейджинга комнаты. ( Ie57b5 , б/369136627 )
Исправления ошибок
- Исправлена проблема при пейджинге комнаты, из-за которой генерировался недопустимый код при использовании
@Relation
в сочетании сPagingSource
.
Версия 2.7.0-альфа10
16 октября 2024 г.
androidx.room:room-*:2.7.0-alpha10
выпущен. Версия 2.7.0-alpha10 содержит эти коммиты .
Изменения API
- Создайте внутренний класс
ByteArrayWrapper
для поддержки отношений сByteBuffer
на платформах, отличных от Android и не JVM. ( I75543 , б/367205685 ) - Добавьте
SQLiteStatement.getColumnType()
вместе с различными результирующими константамиSQLITE_DATA_*
, чтобы можно было получить тип данных столбца. ( I1985c , б/369636251 )
Версия 2.7.0-альфа09
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
, из-за запуска транзакции записи при соединении чтения. ( б / 368380988 )
Версия 2.7.0-альфа08
18 сентября 2024 г.
androidx.room:room-*:2.7.0-alpha08
выпущен. Версия 2.7.0-alpha08 содержит эти коммиты .
Новые возможности
- Артефакты
room-paging
были перенесены для совместимости с KMP. ( Ib8756 , б/339934824 ) - API-интерфейс
invalidationTrackerFlow()
был распространен как собственный API какInvalidationTracker.createFlow()
и теперь доступен для исходных наборов, отличных от Android, в проектах KMP. ( I1fbfa , ( I8fb29 ), б/329291639 , б/329315924 )
Изменения API
- Все предупреждения и сообщения об ошибках в Room, в которых используется слово
Cursor
были удалены или заменены, посколькуCursor
больше не является точным общим термином для использования в версии Room KMP. ( Id8cd9 , б/334087492 )
Исправления ошибок
- Исправлена проблема, из-за которой Room KMP пытался создать код с использованием
UUID
для платформ, отличных от JVM. ( б/362994709 ) - Исправлена проблема с плагином Room Gradle, которая вызывала такую ошибку, как «Невозможно изменить атрибуты конфигурации… после того, как она была заблокирована для мутации» при использовании в проекте KMP с Compose Multiplatform. ( б/343408758 )
Версия 2.7.0-альфа07
21 августа 2024 г.
androidx.room:room-*:2.7.0-alpha07
выпущен. Версия 2.7.0-alpha07 содержит эти коммиты .
Новые возможности
- Плагин Room Gradle теперь автоматически добавит экспортированные схемы в источники ресурсов Android Instrumentation Test, чтобы их мог использовать
MigrationTestHelper
.
Исправления ошибок
- Исправлена проблема, из-за которой в сгенерированном «фактическом» конструкторе
RoomDatabaseConstructor
отсутствовал модификатор «фактический» в функцииinitialize
, если такая функция также переопределена в объявлении «ожидаемый». ( 359631627 ) - Исправлена проблема, из-за которой сгенерированное «фактическое» значение
RoomDatabaseConstructor
не соответствовало видимости объявления «ожидаемое». ( 358138953 )
Версия 2.7.0-альфа06
7 августа 2024 г.
Выпущен androidx.room:room-*:2.7.0-alpha06
. Версия 2.7.0-alpha06 содержит эти коммиты .
Изменения API
- Измените настройку создания экземпляра
RoomDatabase
в проекте KMP.
Благодаря модели компиляции Kotlin 2.0 стратегия ссылки на будущую функцию с именем instantiateImpl()
более жизнеспособна. Представлены два новых API, @ConstructedBy
и RoomDatabaseConstructor
, которые заменяют стратегию instantiateImpl()
. Новая стратегия заключается в следующем:
Определите ожидаемый объект, реализующий
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Свяжите объект с объявлением
@Database
используя@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Создайте новый экземпляр базы данных, но без передачи фабричного аргумента.
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Исправления b/316978491 , b/338446862 и b/342905180.
- Поддержка
@RawQuery
в Room KMP путем добавления нового API под названиемRoomRawQuery
, который похож наSupportSQLiteQuery
с точки зрения хранения необработанной строки SQL и функции для привязки аргументов к оператору. Функции с аннотациями@RawQuery
теперь могут приниматьRoomRawQuery
в качестве единственного параметра. ( Iea844 , б/330586815 ) - Добавьте перегрузку
setQueryCallback()
, которая принимаетCoroutineContext
. ( Id66ff , б/309996304 ) - Добавлена поддержка многоплатформенных целей
linuxArm64
Kotlin ( I139d3 , b/338268719 ).
Исправления ошибок
- Исправлена проблема, из-за которой Room неправильно генерировал вызов
recursiveFetchArrayMap
в целях, отличных от Android. ( 710c36 , б/352482325 ) - Исправлена проблема, из-за которой иногда Room выдавала исключение «Время ожидания подключения истекло» в проекте KMP. ( fa72d0 , b/347737870 )
- Исправлена проблема при автоматической миграции, из-за которой внешние ключи проверялись слишком рано, прежде чем другие таблицы изменили свои схемы в соответствии с новыми внешними ключами. ( 7672c0 , б/352085724 )
Версия 2.7.0-альфа05
10 июля 2024 г.
androidx.room:room-*:2.7.0-alpha05
выпущен. Версия 2.7.0-alpha05 содержит эти коммиты .
Изменения API
-
SQLiteKt
переименован вSQLite
, аBundledSQLiteKt
— вBundledSQLite
. ( I8b501 )
Исправления ошибок
- Исправлена ошибка, из-за которой
RoomDatabase
блокировалась или выходила из строя из-за тайм-аута соединения при использованииAndroidSQLiteDriver
.
Версия 2.7.0-альфа04
12 июня 2024 г.
androidx.room:room-*:2.7.0-alpha04
выпущен. Версия 2.7.0-alpha04 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой процессор аннотаций Room генерировал несовместимый код KMP, когда в DAO был определен тип возвращаемого значения с несколькими картами. ( б / 340983093 )
- Исправлена проблема, из-за которой Room не мог найти сгенерированную реализацию базы данных, если у аннотированного класса
@Database
не было пакета. ( б/342097292 ) - Исправлена проблема, из-за которой включение автоматического закрытия и аннулирования нескольких экземпляров иногда вызывало исключение
ConcurrentModificationException
, когда база данных автоматически закрывалась из-за простоя.
Версия 2.7.0-альфа03
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 и изменениями поведения в новом компиляторе. ( б / 314151707 )
Версия 2.7.0-альфа02
14 мая 2024 г.
Выпущен androidx.room:room-*:2.7.0-alpha02
. Версия 2.7.0-alpha02 содержит эти коммиты .
Исправления ошибок
- Исправлены различные проблемы KSP.
Версия 2.7.0-альфа01
1 мая 2024 г.
androidx.room:room-*:2.7.0-alpha01
выпущен. Версия 2.7.0-alpha01 содержит эти коммиты .
Новые возможности
- Поддержка многоплатформенности Kotlin (KMP) . В этом выпуске Room была реорганизована и стала многоплатформенной библиотекой Kotlin (KMP). Хотя еще предстоит проделать некоторую работу, в этом выпуске представлена новая версия Room, в которой большая часть функциональности была «унифицирована» (сделана мультиплатформенной). В настоящее время поддерживаются платформы Android, iOS, JVM (настольный компьютер), собственный Mac и собственный Linux. Любая недостающая функциональность новых поддерживаемых платформ будет дополнена в будущих выпусках Room.
Дополнительную информацию о том, как начать использовать Room KMP, можно найти в официальной документации 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 для настройки Room с помощью драйвера
SQLite
:RoomDatabase.Builder.setDriver()
. Дополнительную информацию об API драйвераSQLite
см. в документации SQLite KMP. - Были добавлены API-интерфейсы для доступа к базовому
SQLiteConnection
из API-интерфейсов драйвера:RoomDatabase.useReaderConnection
иRoomDatabase.useWriterConnection
. - Обратные вызовы, связанные с Varios Room, теперь имеют перегруженную версию, которая получает
SQLiteConnection
вместоSupportSQLiteDatabase
. Они предназначены для переопределения при переходе на проект KMP. Дополнительную информацию о переносе использования комнаты в приложении 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 , б/304584179 ) - Исключения, создаваемые при загрузке
PagingSource
, теперь будут распространяться какLoadStateUpdate
LoadResult.Error
содержащий Throwable. Это состояние ошибки можно наблюдать с помощьюPagingDataAdapter.loadStateFlow(Views)
илиLazyPagingItems.loadState(Compose)
. Обратите внимание, что это знаменует собой изменение поведения, когда в прошлом ошибки загрузки всплывали в виде исключения, выданного методом dao, который инициировал загрузку. ( I93887 , б/302708983 )
Версия 2.6.0
18 октября 2023 г.
Выпущен androidx.room:room-*:2.6.0
. Версия 2.6.0 содержит эти коммиты.
Важные изменения с версии 2.5.0
- Возможность включения генерации кода Kotlin (или «Kotlin CodeGen») теперь доступна в Room KSP. ( 4297ек0 ). Чтобы включить Kotlin CodeGen в Room, добавьте имя опции
room.generateKotlin
в параметры процессора для KSP. Подробнее о том, как передать параметры процессора для KSP, см. в документации KSP .
Примечание. При использовании Kotlin CodeGen важно учитывать, что были добавлены дополнительные ограничения. Абстрактные свойства в качестве геттеров DAO или запросов DAO в Kotlin CodeGen запрещены, и вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о том, что значение свойства является неизменным и имеет фиксированный сохраненный результат. Еще одно добавленное ограничение заключается в том, что типы возвращаемых коллекций Nullable больше не разрешены в Room для Kotlin CodeGen.
Предупреждение. При использовании Kotlin CodeGen вы можете обнаружить, что ваши проекты более строги с точки зрения допустимости значений NULL. В Kotlin CodeGen важна возможность обнуления аргументов типа, тогда как в Java это по большей части игнорируется. Например, предположим, что у вас есть `Flow
- В Room был добавлен новый артефакт для плагина Room Gradle с идентификатором
androidx.room
, который решает различные существующие проблемы в Room, связанные с наличием входных и выходных данных схем через параметры процессора аннотаций Gradle. Более подробную информацию можно найти в примечаниях к выпуску Room Version 2.6.0-alpha02 . - Классы значений в объектах помещений теперь поддерживаются для KSP. ( 4194095 )
- Типы возврата вложенных карт в функциях DAO теперь поддерживаются в Room. ( I13f48 , 203008711 )
Версия 2.6.0-rc01
20 сентября 2023 г.
androidx.room:room-*:2.6.0-rc01
выпущен. Версия 2.6.0-rc01 содержит эти коммиты.
Версия 2.6.0-бета01
23 августа 2023 г.
androidx.room:room-*:2.6.0-beta01
выпущен. Версия 2.6.0-beta01 содержит эти коммиты.
Исправления ошибок
- Обработка особого случая
SQLite
во время обновления, возникающего, когда во время обновления создается исключение2067 SQLITE_CONSTRAINT_UNIQUE
, upsert должен выполнить обновление. ( Если2849 , б/243039555 )
Версия 2.6.0-альфа03
9 августа 2023 г.
Выпущен androidx.room:room-*:2.6.0-alpha03
. Версия 2.6.0-alpha03 содержит эти коммиты.
Новые возможности
Изменения API
- Новая аннотация типа
@MapColumn
была создана вместо@MapInfo
, которая сейчас устарела. Для каждого имени столбца (keyColumnName
,valueColumnName
или обоих), указанного в аннотации@MapInfo
, вам нужно будет объявить аннотацию@MapColumn
только сcolumnName
и использовать аннотацию для конкретного аргумента типа, на который ссылаются (ключ или значение карты) в типе возвращаемого значения функции DAO. Это связано с тем, что аннотация@MapColumn
используется непосредственно в аргументе типа в возвращаемом типе функции DAO, а не в самой функции, как@MapInfo
. Для получения дополнительной информации обратитесь к документации@MapColumn
. ( Ib0305 , b/203008711 ) - Обновлены файлы API для подавления аннотаций совместимости ( I8e87a , b/287516207 ).
- API-интерфейсы плагина Room Gradle были обновлены, чтобы не всегда требовать настройки для каждого варианта. Это означает, что плагин может принимать глобальное местоположение для всех вариантов без создания нескольких каталогов, что обеспечивает более плавную миграцию, но при этом является достаточно гибким, чтобы вручную настраивать варианты или схемы типов сборки, сохраняя при этом преимущества плагина (воспроизводимые и кэшируемые сборки). ( I09d6f , б / 278266663 )
Исправления ошибок
- Исправлена потенциальная уязвимость утечки памяти в
QueryInterceptorStatement
. ( I193d1 ) - Исправлено некорректное поведение функции
QueryInterceptorDatabase execSQL()
. ( Iefdc8 )
Версия 2.6.0-альфа02
21 июня 2023 г.
androidx.room:room-*:2.6.0-alpha02
выпущен. Версия 2.6.0-alpha02 содержит эти коммиты.
Плагин Room Gradle
Этот новый выпуск содержит новый артефакт для плагина 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 , б/281008549 )
Исправления ошибок
- Решение проблемы, возникающей при создании экземпляра базы данных в Robolectric после миграции исходников Room с Java на Kotlin. ( Ic053c , б/274924903 )
Версия 2.6.0-альфа01
22 марта 2023 г.
androidx.room:room-*:2.6.0-alpha01
выпущен. Версия 2.6.0-alpha01 содержит эти коммиты.
Новые возможности
- Поддержка классов значений в Room for KSP. Room теперь может поддерживать классы значений в Entities. ( 4194095 )
- Генерацию кода Kotlin (или «Kotlin CodeGen») теперь можно включить в комнате ( 4297ec0 ). Чтобы включить Kotlin CodeGen в Room, добавьте имя опции
room.generateKotlin
в параметры процессора для KSP. Подробнее о том, как передать параметры процессора для KSP, см. в документации KSP .
Примечание. При использовании Kotlin CodeGen важно учитывать, что были добавлены дополнительные ограничения. Абстрактные свойства в качестве геттеров DAO или запросов DAO в Kotlin CodeGen запрещены, и вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о том, что значение свойства является неизменным и имеет фиксированный сохраненный результат. Еще одно добавленное ограничение заключается в том, что типы возвращаемых коллекций Nullable больше не разрешены в Room для Kotlin CodeGen.
Предупреждение. При использовании Kotlin CodeGen вы можете обнаружить, что ваши проекты более строги с точки зрения допустимости значений NULL. В Kotlin CodeGen важна возможность обнуления аргументов типа, тогда как в Java это по большей части игнорируется. Например, предположим, что у вас есть `Flow
Изменения API
- Защита от бессмысленного использования коллекций, допускающих значение NULL, в возвращаемых типах метода DAO. ( I777dc , б/253271782 , б/259426907 )
- Добавьте API для создания потока, который генерирует изменения трекера недействительности. API полезен для создания потоков, которые должны реагировать на изменения базы данных. ( I8c790 , б/252899305 )
Исправления ошибок
- Запретите абстрактные свойства в качестве геттеров DAO или запросов DAO в генераторе кода Kotlin. Вместо этого их следует переписать как функции, чтобы избежать ложного представления о том, что значение свойства является неизменным и имеет фиксированный сохраненный результат. ( If6a13 , б/127483380 , б/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 , б / 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 , б / 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-бета02
9 ноября 2022 г.
Выпущен androidx.room:room-*:2.5.0-beta02
. Версия 2.5.0-beta02 содержит эти коммиты.
Изменения API
- Исправлены различные API, которые переводят аргументы запроса из инвариантного (
Array<Any?>
) в контравариантный (Array<out Any?>
), чтобы соответствовать поведению массива Java. ( б / 253531073 )
Версия 2.5.0-бета01
5 октября 2022 г.
androidx.room:room-*:2.5.0-beta01
выпущен. Версия 2.5.0-beta01 содержит эти коммиты.
Изменения API
- Ограничьте минимальную версию, поддерживающую
@Upsert
, API 16. Это связано с невозможностью идентифицировать конфликт ограничений первичного ключа в старых API. ( I5f67f , б / 243039555 )
Исправления ошибок
- Исправлена проблема, из-за которой теневые таблицы неправильно экспортировались в файлы схемы
.json
, что приводило к их повреждению. ( I4f83b , б/246751839 )
Версия 2.5.0-альфа03
24 августа 2022 г.
androidx.room:room-*:2.5.0-alpha03
выпущен. Версия 2.5.0-alpha03 содержит эти коммиты.
Новые возможности
- Добавлена новая аннотация ярлыка
@Upsert
, которая пытается вставить объект при отсутствии конфликта уникальности или обновить объект при наличии конфликта. ( I7aaab , б / 241964353 )
Исправления ошибок
- Room теперь будет выдавать исключение
SQLiteConstraintException
вместоIllegalStateException
во время проверки ограничения внешнего ключа при автоматической миграции. ( I328dd ) - Исправьте несовместимое с исходным кодом Kotlin изменение для геттеров/свойств
getOpenHelper
,getQueryExecutor
иgetTransactionExecutor
. ( Iad0ac )
Версия 2.5.0-альфа02
1 июня 2022 г.
androidx.room:room-*:2.5.0-alpha02
выпущен. Версия 2.5.0-alpha02 содержит эти коммиты.
Новые возможности
- Новые артефакты
room-paging
room-paging-rxjava2
,room-paging-rxjava3
иroom-paging-guava
были добавлены для поддержки в Room Paging.( 41a1d4 , b/203666906 ),( eb6098 , b/203666906 ),( 1b9ae4 , б/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 теперь попытается разрешить неоднозначные столбцы в запросе с несколькими картами. Это позволяет правильно сопоставлять соединения JOIN с таблицами, содержащими одноименные таблицы, с объектом данных результата. ( I4b444 , б/201306012 , б/212279118 )
Версия 2.5.0-альфа01
23 февраля 2022 г.
androidx.room:room-*:2.5.0-alpha01
выпущен. Версия 2.5.0-alpha01 содержит эти коммиты.
Изменения API
- Исправлена проблема, из-за которой использование Room
@IntDef
не применялось в источниках Kotlin. ( I75f41 , б/217951311 ) - Исправлена проблема совместимости исходного кода, позволяющая повторно разрешить
@Query
в методах получения свойств. ( I0a09b ) - Коммун конвертирован из Java в Kotlin. ( I69c48 , б / 206858235 )
Примечание. Вы можете столкнуться с проблемами несовместимости исходного кода, поскольку некоторые свойства были перемещены в сопутствующие объекты во время преобразования библиотеки в Kotlin. Если ваш код был написан на Kotlin и вызывал старую версию Room, новой версии потребуется суффикс «.Companion» для доступа к этим свойствам.
- Преобразована миграция комнат с Java на Kotlin. ( I2724b , б / 206858622 )
- Файлы, связанные с
paging
, преобразованы воroom-runtime
из Java в Kotlin. ( I82fc8 , б / 206859668 ) - Добавлен API для многопроцессной блокировки и использования на уровне FrameworkSQLite* для защиты многопроцессного создания и миграции баз данных в первый раз. ( Иед267 , р/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 не распознавала функции приостановки в Kotlin 1.7 ( b/236612358 ).
Версия 2.4.2
Версия 2.4.2
23 февраля 2022 г.
Выпущен androidx.room:room-*:2.4.2
. Версия 2.4.2 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с генерацией кода для функции приостановки Dao
@Transaction
с телом, которое генерирует метод интерфейса по умолчанию из-за компиляции с-Xjvm-default=all
или эквивалентным. ( Ia4ce5 ) - Устранение ошибки, из-за которой Room генерирует код для метода запроса возвращаемого типа
Array<ByteArray>
. ( If086e , б/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()
. Это позволяет платформе внедрения зависимостей предоставлять такие спецификации, когда им нужны сложные зависимости. - Поддержка помощника по тестированию миграции для автоматической миграции .
MigrationTestHelper
комнаты был обновлен для поддержки автоматической миграции путем предоставления нового API-конструктора, который получает тестируемый класс базы данных. Это позволяет помощнику автоматически добавлять автоматические миграции таким же образом во времяrunMigrationsAndValidate
. - Поддержка Room-Paging : выпущен
androidx.room:room-paging
, обеспечивающий встроенную поддержку Paging 3.0 для запросов Room, возвращающихandroidx.paging.PagingSource
. - Методы реляционных запросов . Room теперь поддерживает методы
@Dao
возвращаемых типов с несколькими отображениями, полезные для операторов JOIN. Поддерживаемые типы мультикарт: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-бета02
17 ноября 2021 г.
Выпущен androidx.room:room-*:2.4.0-beta02
. Версия 2.4.0-beta02 содержит эти коммиты.
Новые возможности
- Мы добавили поддержку SparseArray и LongSparseArray в @MapInfo. ( Ic91a2 б/138910317 )
Исправления ошибок
- Мы добавили новый анализатор TypeConverter, который учитывает информацию об отсутствии значений в типах. Поскольку эта информация доступна только в KSP, она включается по умолчанию только в KSP. Если это вызывает какие -либо проблемы, вы можете выключить их, пройдя Room.USENULLAWARETYPEANALYSISS = FALSE в процессор аннотации. Если это произойдет, пожалуйста, пожалуйста, ошибку файла, так как этот флаг будет удален в будущем. С помощью этого нового анализатора TypeConverter предполагается предоставить только ненулевые приемные типов, поскольку новый анализатор имеет возможность обернуть их с нулевой проверкой. Обратите внимание, что это не оказывает влияния для пользователей, использующих KAPT или Java в качестве процессоров аннотаций (в отличие от KSP), не имеют информации о нулевой информации в типах. ( IA88F9 , B/193437407 )
- Исправьте ошибку, в которой комната не сможет компилироваться с ошибкой SQL, когда объект FTS объявила об использовании токенизатора ICU. ( I00db9 , b/201753224 )
- Решенная проблема в автоматических миграциях относительно нового столбца, добавленной в встроенную сущность между версиями. ( I5fcb1 b/193798291 )
- Мы решили проблему относительно типов возврата метода реляционного запроса в слевах запросах. С этими изменениями, в случае, когда присутствует сопоставление 1-ray-many, коллекция, возвращаемая для ключа, не будет включать объект неверного значения, если он не будет найден в курсоре. Если не найдено допустимых значений, то ключ будет сопоставлен с пустой коллекцией. ( ID5552 B/201946438 )
- Решено проблему автоматической миграции, в которой ключевые слова SQLite не смогли избежать в именах столбцов. ( Idbed4 b/197133152 )
Версия 2.4.0-бета01
13 октября 2021 года
androidx.room:room-*:2.4.0-beta01
выпускается. Версия 2.4.0-бета01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с автоматическими миграциями, не добавляющими новые столбцы, когда другая таблица в той же автоматической миграции также имела новый столбец с тем же именем. ( IA5DB5 , B/200818663 )
- Реализация Pagingsource, созданная в результате помещения в комнате, теперь использует
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 )
Поддержка непо-клавиш/значения для типов возврата мультимапа в 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 с комнатой. ( Ieaffe )
Исправления ошибок
- Исправьте проблему, в которой результаты Multimap запросов были неправильно упорядочены, когда запрос содержал пункт заказа по столбцу из ключа карты. ( I6b887 )
Внешний вклад
- Добавлен новый API, чтобы указать порядок индекса в @index. Спасибо Никите Желонкин. ( I033FC )
Версия 2.4.0-Alpha04
21 июля 2021 г.
androidx.room:room-*:2.4.0-alpha04
-*:2.4.0-Alpha04 выпускается. Версия 2.4.0-Alpha04 содержит эти коммиты.
Новые возможности
Комната теперь поддерживает Multimap Returs Types
@Dao
Методы, полезные для операторов соединения. Поддерживаемые типы мультимапа являютсяMap
наряду сImmutableMap
Guava,ImmutableSetMultimap
иImmutableListMultimap
.Ниже приведены примеры запросов с мультимапом:
Карта отношений один к одному
@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>>
Результат мультимапа также может быть завершен в поддерживаемых асинхровых типах возврата, таких как
LiveData
, RX,Observable
илиFlow
.
Расположение в комнате
androidx.room:room-paging
Proom Postring, предоставляя нативную поддержку Paging 3.0 для комнатных запросов, возвращающихandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Этот артефакт заменяет внедрение
androidx.paging.PagingSource
, созданная в комнате с одной из API Paging 3.0. Новая реализация Pagingsource разбирается по -разному, поэтому любой ключевой, поставляемый вручную в Pagingsource в комнате, необходимо учитывать это изменение поведения, включая начальный ключ, пройденное через конструктор пейджера. Страницы начнут загружаться сKey
, иKey
является первым загруженным элементом. Это отклоняется от существующего поведения, гдеLoadParams.Refresh.Key
рассматривается как положение прокрутки пользователя, а элементы загружаются как до, так и после ключа.Артефакт необязательно и отказался от того, что выпадет в отставку с существующей поддержкой Paging 3.0, которая была введена в комнате 2.3. Тем не менее, этот артефакт станет неопенциальным в будущем выпуске для тех, кто использует комнату с Paging 3.0. Чтобы забрать, добавьте новый артефакт, разбитый номером, в свой обложка класса. Если вы используете Gradle, вы можете добавить следующий фрагмент в свой build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Исправления ошибок
- Исправьте проблему в области автоматических миграций, касающихся нарушения нарушений иностранных ключей. ( б/190113935 )
Версия 2.4.0-Alpha03
16 июня 2021 года
androidx.room:room-*:2.4.0-alpha03
выпускается. Версия 2.4.0-Alpha03 содержит эти коммиты.
API меняется
- Обновление
MigrationTestHelper
в комнате для поддержки автоматических миграций, предоставляя новый API конструктора, который получает тестовый класс базы данных. Это позволяет помощнику автоматически добавлять автоматические миграции таким же образом во времяrunMigrationsAndValidate
.
Исправления ошибок
Исправлена проблема с нативной библиотекой SQLITE Room для поддержки чипсов Apple M1. ( B/174695268
Исправлена проблема, в которой комната не ошибся, когда тип возврата функции @Transaction был потоком ( i56ddd , b/190075899 )
Исправьте проблему в области автоматических миграций в отношении индексов. B/177673291
Обновления зависимости
- Поддержка KSP в комнате теперь зависит от 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
s, где не будет должным образом воссоздан.
Внешний вклад
- Исправьте проблему в Room's
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 содержит эти коммиты.
Новые возможности
- Авто Миграция : Комната теперь предлагает API для автоматического генерирования миграций, если схемы экспортируются. Чтобы комната знала, что он должен генерировать автоматическую миграцию, новая собственность
@Database#autoMigrations
может использоваться для объявления версий для автоматической миграции из и. Когда комната нуждается в дополнительной информации о таблицах и переиме на столбцах или удалениях, тогда аннотация@AutoMigration
может объявить спецификационный класс, содержащий такие входы. Смотрите документацию@AutoMigration
для получения более подробной информации.
Исправления ошибок
- Исправьте проблему, в которой
defaultValue
с дополнительной скобкой была неправильно проверена с помощью проверки схемы комнаты. б/182284899
Версия 2.3.0
Версия 2.3.0
21 апреля 2021 года
androidx.room:room-*:2.3.0
выпущен. Версия 2.3.0 содержит эти коммиты.
Важные изменения с 2.2.0
- Встроенная поддержка Enum : теперь комната будет по умолчанию использовать перечисление в строку и наоборот, конвертер типа, если их не будет предоставлено. Если преобразователь типа для перечисления уже существует, комната будет расставлять приоритеты, используя его по умолчанию.
- Обратный вызов запроса : Комната теперь предлагает общий обратный вызов API Poomdatabase.queryCallback, поскольку когда запросы собираются выполнить, что может быть полезно для регистрации в сборках отладки. Обратный вызов может быть установлен через
RoomDatabase.Builder#setQueryCallback()
. - Предварительно упакованное улучшение : в комнате теперь есть API для создания базы данных с использованием предварительно упакованной считываемой базы данных из входного потока. Это допускает такие случаи, как, когда база данных предварительной упаковки GZEPID.
- Предоставленные конвертеры типа : в комнате теперь есть API для предоставления экземпляров конвертеров типа, чтобы приложение могло контролировать свою инициализацию. Чтобы отметить конвертер типа, который будет предоставлен в комнате, используйте новую аннотацию @providtypeconverter.
- Поддержка Rxjava3 : комната теперь поддерживает типы Rxjava3. Подобно rxjava2, вы можете объявить методы DAO, тип возврата, тип возврата, является протекаемым, единственным, возможно, и завершенным. Кроме того, новый Artifact
androidx.room:room-rxjava3
доступен для поддержки Rxjava3. - Поддержка Paging 3.0 : теперь комната будет поддерживать создание реализаций для аннотированных методов
@Query
, тип возврата которогоandroidx.paging.PagingSource
.
Версия 2.3.0-RC01
24 марта 2021 года
androidx.room:room-*:2.3.0-rc01
выпущен. Версия 2.3.0-RC01 содержит эти коммиты.
Исправления ошибок
- Исправьте проблему, которая предотвращала запросы потока Coroutine, созданные местом для использования в блоке подвешивания
withTransaction
. ( I797bf )
Версия 2.3.0-бета03
10 марта 2021 года
androidx.room:room-*:2.3.0-beta03
выпущен. Версия 2.3.0-бета03 содержит эти коммиты.
Новые возможности
- Добавлена дополнительная поддержка компиляции для KSP. ( I031C1 , B/176453350 )
Исправления ошибок
- Исправлена ошибка, где создание Pagingsource на главном потоке могло вызвать ANR. ( I42B74 , B/181221318 )
- Исправлено видимость
@ExperimentalRoomApi
, чтобы быть публичным, а не пакет частной. ( B/181356119 )
Внешний вклад
- Позвольте комнату принять тип возврата POJO в методе DAO, аннотированного
@Query
когда он также аннотирован@SkipQueryVerification
. Комната сделает наилучшую эффективность для преобразования результата запроса в тип возврата Pojo так же, как это делается для аннотированного метода DAO@RawQuery
. Спасибо Маркусу Ригелю | hey@marcorei.com '. ( I45acb )
Версия 2.3.0-бета02
18 февраля 2021 года
androidx.room:room-*:2.3.0-beta02
-*:2.3.0-BETA02 выпускается. Версия 2.3.0-бета02 содержит эти коммиты.
Новые возможности
Комната теперь имеет экспериментальную поддержку для обработки символов Kotlin KSP .
KSP является заменой для KAPT для запуска Annotation Rocessors национально на компиляторе Kotlin, что значительно сокращает время сборки.
Чтобы использовать комнату с 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. См . B/160322705 для известных проблем.
Версия 2.3.0-бета01
27 января 2021 года
androidx.room:room-*:2.3.0-beta01
-*:2.3.0-BETA01 выпускается. Версия 2.3.0-бета01 содержит эти коммиты.
Новые возможности
- Auto Croldable Databases : 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 выпускается. Версия 2.3.0-Alpha04 содержит эти коммиты.
Новые возможности
- Комната теперь предлагает общий обратный вызов API
RoomDatabase.QueryCallback
, поскольку когда запросы собираются выполнить, что может быть полезно для регистрации в сборках отладки. Обратный вызов может быть установлен черезRoomDatabase.Builder#setQueryCallback()
. ( IAA513 , B/174478034 , B/74877608 ) - Комната теперь по умолчанию будет использовать перечисление в строку и преобразователь типа наоборот, если не будет предоставлен. Если преобразователь типа для перечисления уже существует, комната будет расставлять приоритеты, используя его по умолчанию. ( B/73132006 )
Известный вопрос
- Если для перечисления одностороннего типа для чтения уже существует, комната может случайно использовать встроенную строку для перечисления преобразователя, который может не желать. Это известная проблема и может быть исправлена, сделав его двусторонним преобразователем. См.: B/175707691
Исправления ошибок
- Исправлена проблема, в которой комната неверно отключила инкрементную обработку аннотаций в более новых версиях JDK. ( B/171387388 )
- Исправлена проблема с поиском комнаты, обнаружив сгенерированный класс, когда используются несколько погрузчиков класса. Спасибо за исправление 'Serendipity | 892449346@qq.com '! ( B/170141113 )
- Исправлена проблема, в которой комната генерирует неправильный код, когда у котлина
@Dao
был базовый класс, чьи дженерики являются примитивами в JVM. ( B/160258066 )
Внешний вклад
- Комната теперь по умолчанию использует
beginTransactionNonExclusive
, если режим WAL включен и API составляет 16 или более. Спасибо Ахмеду И. Халилу | ahmedibrahimkhali@gmail.com '! ( B/126258791 )
Версия 2.3.0-Alpha03
14 октября 2020 г.
androidx.room:room-*:2.3.0-alpha03
выпускается. Версия 2.3.0-Alpha03 содержит эти коммиты.
Новые возможности
В комнате теперь есть API для предоставления экземпляров преобразователей типа, так что приложение может контролировать свою инициализацию. Чтобы отметить конвертер типа, который будет предоставлен в комнате, используйте новую аннотацию
@ProvidedTypeConverter
. Спасибо «mzgreen yairobbe@gmail.com ». ( IE4FA5 , B/121067210 )В комнате теперь есть API для создания базы данных с использованием предварительно упакованной считываемой базы данных из входного потока. Это допускает такие случаи, как, когда база данных предварительной упаковки GZEPID. Спасибо «Ахмед Эль - Хелв Ахмедре »
API меняется
Добавлена отсутствующая цель к аннотации
@ForeignKey
, предотвращая его использование за пределами аннотации@Entity
. ( Iced1e )Field
mCallbacks
вRoomDatabase.java
теперь скрыт. ( D576CB , B/76109329 )
Исправления ошибок
Обновите документацию TypeConverters, чтобы прояснить, что TypeConverters можно использовать только для преобразования столбцов / полей, а не строк. ( I07C56 , B/77307836 )
Обновите Daoprocessor, чтобы исправить ошибку компилятора на DAO с общим супер -типом с Kotlin "примитивами". ( ICE6BB , B/160258066 )
Обновление Добавить/удалить документацию наблюдателя, чтобы уточнить потоки ( ifd1d9 , b/153948821 )
Исправьте проблему с номером неправильной проверкой таблиц FTS, которые объявили их колонку Rowid. ( D62EBC , B/145858914 )
Внешние взносы
Исправлена проблемы с верхним/нижним регионом, связанные с турецкой ( 5746E3 ), B/68159494
Замените
ConcurrentHashMap
внутриRoomDatabase
наCollections.synchronizedMap()
.Добавьте обратный вызов OnoPenPrepackagedDatabase, когда копируется расфасованный DB. ( I1ba74 , b/1489344423 )
Версия 2.3.0-Alpha02
22 июля 2020 года
androidx.room:room-*:2.3.0-alpha02
-*:2.3.0-Alpha02 выпускается. Версия 2.3.0-Alpha02 содержит эти коммиты.
Новые возможности
- Поддержка Rxjava3 : комната теперь поддерживает типы Rxjava3. Подобно rxjava2, вы можете объявить методы DAO, тип возврата, тип возврата, является протекаемым, единственным, возможно, и завершенным. Кроме того, новый Artifact
androidx.room:room-rxjava3
доступен для поддержки Rxjava3. ( B/152427884 )
API меняется
- Объявление
@TypeConverter
в классе объекта Kotlin теперь поддерживается. ( B/151110764 ) - Параметр «Инкрементная обработка аннотации комнаты» теперь включена по умолчанию. ( B/112110217 )
Версия 2.3.0-Alpha01
10 июня 2020 года
androidx.room:room-*:2.3.0-alpha01
выпускается. Версия 2.3.0-Alpha01 содержит эти коммиты.
Новые возможности
Поддержка Paging 3.0 : теперь комната будет поддерживать создание реализаций для аннотированных методов
@Query
, тип возврата которогоandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
API меняется
-
@RewriteQueriesToDropUnusedColumns
- это новая удобная аннотация, которая делает комнату переписать проекцию «*» в запросе, так что неиспользованные столбцы в результате удаляются. - Опция процессора.
room.expandProjection
теперь устарела. Используйте@RewriteQueriesToDropUnusedColumns
в качестве замены для оптимизации комнат с помощью звездных проекций. Обратите внимание, что@RewriteQueriesToDropUnusedColumns
не@Embedded
room.expandProjection
для конфликта колонки.
Исправления ошибок
- Исправлена ошибка, в которой комната не будет правильно обнаружить версию JDK, используемую для включения процессора дополнительной аннотации. Спасибо Blaz Solar (me@blaz.solar) ( B/155215201 )
- Комната теперь внедряет свою зависимость ANTLR в процессор аннотации, чтобы избежать конфликтов версий с другими процессорами, которые также используют ANTLR. ( B/150106190 )
Версия 2.2.6
Версия 2.2.6
16 декабря 2020 года
androidx.room:room-*:2.2.6
выпущен. Версия 2.2.6 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, в которой комната неверно отключила инкрементную обработку аннотаций в более новых версиях JDK. ( B/171387388 )
Версия 2.2.5
Версия 2.2.5
18 марта 2020 г.
androidx.room:room-*:2.2.5
выпущен. Версия 2.2.5 содержит эти коммиты.
Исправления ошибок
- Сделайте
MultiInstanceInvalidationService
DirectBootaWare. Спасибо Mygod contact-git@mygod.be '( b/148240967 ) - Исправлена ошибка, которая вызовет сбой, когда была включена неверное разрешение на многочисленное положение, а в базе данных содержалась объект FTS. ( B/148969394 )
- Исправлена проблема при загрузке местных библиотек SQLite в процессоре аннотации комнаты, которая заставит компилятор сбой из -за параллельных компиляций. ( B/146217083 )
Версия 2.2.4
Версия 2.2.4
19 февраля 2020 года
androidx.room:room-common:2.2.4
androidx.room:room-guava:2.2.4
Room-Common:2.2.4, androidx.room:room-compiler:2.2.4
: Room-Compiler:2.2.4, Androidx.room: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
Room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4
Room-Rxjava2:2.2.4, и androidx.room:room-testing:2.2.4
Testing:2.2.4. Версия 2.2.4 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с приостановкой транзакций, в которых они будут тупиться, если коратика была быстро отменена до того, как транзакция фактически началась. ( B/148181325 )
- Исправлена проблема с тем, что @GenerTed использовался при строительстве с JDK 9. ( B/146538330 )
- Исправлена проблема, в которой комната генерирует неправильный код, когда интерфейс DAO в Котлине имел конкретную функцию. ( B/146825845 )
Версия 2.2.3
Версия 2.2.3
18 декабря 2019 г.
androidx.room:room-*:2.2.3
выпущен. Версия 2.2.3 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, в которой комната не смогла бы проверить базу данных, которая не прошла через какую -либо миграцию и содержала унаследованный хэш с индексами в своей схеме. ( B/139306173 )
Версия 2.2.2
Версия 2.2.2
20 ноября 2019 года
androidx.room:room-*:2.2.2
выпущен. Версия 2.2.2 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, при которой сборы отношений один к одному с более чем 999 строк приведут место для возврата нулевых связующих предметов. ( B/143105450 )
Версия 2.2.1
Версия 2.2.1
23 октября 2019 года
androidx.room:room-*:2.2.1
выпущен. Версия 2.2.1 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, в которой комната неправильно предупредила бы о
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
- Предварительно упакованная база данных : два новых API в
RoomDatabase.Builder
теперь доступны для созданияRoomDatabase
с учетом уже заполненной файла базы данных.createFromAsset()
предназначен для того, когда предварительно заполненный файл базы данных находится в папке Assets APK, в то время какcreateFromFile()
предназначен для того, когда файл находится в произвольном месте. Использование этих API изменяет поведение разрушительных миграций так, чтобы во время запасной миграции комната попыталась повторно копировать предварительно заполненную базу данных, если таковые имеются, в противном случае он отступает, чтобы просто сбрасывать и воссоздать все таблицы. B/62185732 - Значения по умолчанию схемы :
@ColumnInfo
теперь имеет новое свойствоdefaultValue
, которое можно использовать для указания значения по умолчанию столбца. Значения по умолчанию являются частью схемы базы данных и будут подтверждены во время миграций, если указано. B/64088772 - Отношения с многими ко многим :
@Relation
теперь имеет новую собственностьassociateBy
, которая принимает новую аннотацию@Junction
, используемой для объявления отношения, которое необходимо удовлетворить с помощью таблицы соединения (также известного как таблица соединения). B/69201917 - Отношения один на один : ограничение в полях POJO аннотированное с
@Relation
, чтобы быть изList
илиSet
типа, было снято, что эффективно позволяет представлять отношения с одним значением. B/62905145 - Целевая сущность : Dao Annnotations
@Insert
,@Update
и@Delete
теперь имеют новуюtargetEntity
свойство, что позволяет указать целевую таблицу, на которой метод DAO предназначен для действия. Это позволяет параметрам этих методов DAO быть произвольными pojos, которые будут интерпретироваться как частичные объекты. На практике это позволяет частичные вставки, удаляет и обновляются. б/127549506 - Coroutines Flow :
@Query
DAO Методы теперь могут быть поFlow<T>
. Возвращенный поток вновь вызовет новый набор значений, если таблицы наблюдений в запросе недействительны. Объявление функции DAO с помощьюChannel<T>
типа возврата является ошибкой, вместо этого комната побуждает вас использоватьFlow
, а затем использовать соседние функции для преобразованияFlow
вChannel
. B/130428884 - Процессор инкрементной аннотации Gradle : комната теперь является изолирующим процессором аннотации Gradle, и увеличение может быть включена через
room.incremental
для процессора. Смотрите варианты компилятора номера для получения дополнительной информации. Если вы столкнетесь с какими -либо проблемами, пожалуйста, подайте здесь ошибку. Мы планируем включить повышение по умолчанию в будущей стабильной версии. B/112110217 - Расширение прогнозов : новая экспериментальная
room.expandProjection
для компилятора. Была добавлена эксплуатация, которая заставляет место для переписывания запроса со звездной проекцией, чтобы содержать только столбцы в возвращающемся типе POJO. Например, для метода DAO с@Query("SELECT * FROM Song")
который возвращает Pojo с именемSongIdAndTitle
только с двумя полями. Затем комната переписывает запрос, чтобы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-бета01
22 августа 2019 г.
androidx.room:room-*:2.2.0-beta01
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Исправлена ошибка, в которой запрос потока коратика остановит новые значения после определенного времени. ( B/139175786 )
- Исправлена ошибка, в которой комната не примет код хеша на устаревшей схеме при открытии базы данных, которая не прошла миграцию со времен комнаты 1.0, что привело к сбою времени выполнения из -за неверной схемы. ( B/139306173 )
Версия 2.2.0-Alpha02
7 августа 2019 года
androidx.room:room-*:2.2.0-alpha02
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
- Coroutines Flow :
@Query
DAO Методы теперь могут быть поFlow<T>
. Возвращенный поток вновь вызовет новый набор значений, если таблицы наблюдений в запросе недействительны. Объявление функции DAO с помощьюChannel<T>
типа возврата является ошибкой, вместо этого комната побуждает вас использоватьFlow
, а затем использовать соседние функции для преобразованияFlow
вChannel
. B/130428884 - Расширение прогнозов : новая экспериментальная
room.expandProjection
для компилятора. Была добавлена эксплуатация, которая заставляет место для переписывания запроса со звездной проекцией, чтобы содержать только столбцы в возвращающемся типе POJO. Например, для метода DAO с@Query("SELECT * FROM Song")
который возвращает Pojo с именемSongIdAndTitle
только с двумя полями. Затем комната переписывает запрос, чтобыSELECT id, title FROM Song
так, чтобы минимальный набор столбцов для удовлетворения типа возврата был извлечен. Это, по сути, устраняет предупреждениеCURSOR_MISMATCH
, которое представлено, когда запрос возвращает дополнительные столбцы, которые не соответствуют какому -либо полю в возвращающемся типе POJO. -
onDestructiveMigrate
- это новый API обратного вызова, добавленный вRoomDatabase.Callback
, когда комната разрушительно мигрирует базу данных. B/79962330
Исправления ошибок
- Исправлена ошибка, в которой комната генерирует неправильный код, используя метод в качестве поля, когда поле защищено. B/136194628
- Исправлена ошибка, которая привела к тому, что InvalidationTracker бросил NPE во втором процессе, когда была включена межответствующая недействительность, а служба недействительной была убита. B/137454915
- Исправлена ошибка, в которой комната не будет правильно идентифицировать тип возврата унаследованной функции подвески, аннотированной с
@RawQuery
. B/137878827 - Обновлено сгенерированный код для
@Relation
, когда клавиша относительного типа имеет Blob для использованияByteBuffer
, который сопоставим. B/137881998 - Исправлена ошибка, где комната жаловалась бы на отсутствующие сеттеры на pojos, используемых в качестве параметров частичной сущности
@Insert
,@Update
и@Delete
. B/138664463 - Исправлена ошибка, в которой комната жаловалась бы на отсутствие Getters & Setters для игнорируемой столбцы через
@Entity
, когда класс объектов использовался в определенных методах DAO. B/138238182 - Исправлена ошибка, в которой комната не была бы правильно преобразовать с именованные привязки Args в позиционные ARG, вызывая исключение времени выполнения при выполнении запроса с повторными параметрами. B/137254857
Версия 2.2.0-Alpha01
10 июля 2019 года
Новые возможности
- Предварительно упакованная база данных : два новых API в
RoomDatabase.Builder
теперь доступны для созданияRoomDatabase
с учетом уже заполненной файла базы данных.createFromAsset()
предназначен для того, когда предварительно заполненный файл базы данных находится в папке Assets APK, в то время какcreateFromFile()
предназначен для того, когда файл находится в произвольном месте. Использование этих API изменяет поведение разрушительных миграций так, чтобы во время запасной миграции комната попыталась повторно копировать предварительно заполненную базу данных, если таковые имеются, в противном случае он отступает, чтобы просто сбрасывать и воссоздать все таблицы. 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 Annnotations
@Insert
,@Update
и@Delete
теперь имеют новуюtargetEntity
свойство, что позволяет указать целевую таблицу, на которой метод DAO предназначен для действия. Это позволяет параметрам этих методов DAO быть произвольными pojos, которые будут интерпретироваться как частичные объекты. На практике это позволяет частичные вставки, удаляет и обновляются. б/127549506 - Процессор инкрементной аннотации Gradle : комната теперь является изолирующим процессором аннотации Gradle, и увеличение может быть включена через
room.incremental
для процессора. Смотрите варианты компилятора номера для получения дополнительной информации. Если вы столкнетесь с какими -либо проблемами, пожалуйста, подайте здесь ошибку. Мы планируем включить повышение по умолчанию в будущей стабильной версии. B/112110217
Исправления ошибок
- Комната больше не будет распространять
EmptySetResultException
в Глобальном обработчике ошибок, когда RX -поток запроса был устранен до завершения запроса. B/130257475 - Исправлена ошибка, в которой комната покажет неверное сообщение об ошибке, когда функция приостановки DAO, аннотированная с
@RawQuery
не имела возврата. B/134303897 - Комната больше не будет генерировать адаптеры DAO с необработанными типами. B/135747255
Версия 2.1.0
Версия 2.1.0
13 июня 2019 года
Комната 2.1.0 выпускается без изменений с 2.1.0-rc01
. Коммуты, включенные в версию, можно найти здесь .
Важные изменения с 2,0,0
- FTS : Комната теперь поддерживает организации с картирующей таблицей FTS3 или FTS4 . Классы, аннотированные с помощью
@Entity
теперь могут быть дополнительно аннотированы с@Fts3
или@Fts4
чтобы объявить класс с таблицей полнотекстового поиска сопоставления. Варианты FTS для дальнейшей настройки доступны с помощью методов аннотации. - Вид : Комната теперь поддерживает объявление класса в качестве хранимого запроса, также известного как вид , используя аннотацию
@DatabaseView
. - Курторы : DAO Методы теперь могут быть приостановлены функциями. Включите в свои зависимости
room-ktx
чтобы воспользоваться этой функциональностью. Артефакт KTX также обеспечивает функцию расширенияRoomDatabase.withTransaction
для выполнения транзакций базы данных в коратике. - Автозапункт : комната теперь поддерживает объявление аннотированных классов Autovalue как сущности и Pojos. Комнатные аннотации
@PrimaryKey
,@ColumnInfo
,@Embedded
и@Relation
теперь могут быть объявлены в абстрактных методах Annotated Class, аннотированного класса. Обратите внимание, что эти аннотации также должны сопровождаться@CopyAnnotations
для места для правильного понимания их. - Дополнительная асинхронная поддержка : методы DAO, аннотированные с помощью
@Insert
,@Delete
или@Update
, а также@Query
содержащийINSERT
,DELETE
илиUPDATE
операторов, теперь поддерживают типы возврата RX,Completable
,Single
,Maybe
, и типListenableFuture
Guava, и они также могут быть приостановленными функциями. -
enableMultiInstanceInvalidation
- это новый API вRoomDatabase.Builder
чтобы обеспечить недействительность в разных экземплярах PoomDatabase с использованием одного и того же файла базы данных. -
fallbackToDestructiveMigrationOnDowngrade
-это новый API вRoomDatabase.Builder
для автоматического воссоздания базы данных, если произойдет понижение. -
ignoredColumns
- это новый API в аннотации@Entity
, который можно использовать для перечисления поля игнорируемых по имени. - Комната теперь будет правильно использовать основной конструктор Kotlin в классах данных, избегая необходимости объявлять свойства как
vars
.
Версия 2.1.0-RC01
29 мая 2019 года
Исправления ошибок
- Исправлена ошибка инициализации комнаты, которая может произойти из -за уже настроенной конфигурации temp_store. B/132602198
- Исправлено предупреждение об использовании двойной цитаты для пользователей с SQLite 3.27.0 и выше. B/131712640
- Исправлена ошибка, в которой невидимый обработок будет вызвать сбой, когда параллельно будет проходить многочисленные проверки на недействительную. 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 { }
, необходимой для одновременного запуска вещей в блоке транзакций.
Исправления ошибок
- Исправлена ошибка, в которой комната не может соответствовать типовочному конвертеру для функции Kotlin DAO, содержащей параметр типа сбора. б/122066791
Версия 2.1.0-Alpha06
22 марта 2019 года
API / поведение изменения
- Асинхронные запросы транзакции теперь сериализуются так, что комната не будет использовать более одного потока для выполнения транзакций базы данных.
RoomDatabase.Builder.setTransactionExecutor(Executor)
был добавлен, чтобы позволить настройку исполнителя для использования для транзакций. -
RoomDatabase.runInTransaction(Callable)
больше не будет завершенным завершением исключений в Runtimeexceptions. B/128623748
Исправления ошибок
- Fixed a bug where the invalidation tracker would stop observing a content table if observers for both the content table and an external content FTS table were added. b/128508917
- Updated Room's SQLite grammar to match SQLite 3.24.0. b/110883668
Version 2.1.0-alpha05
March 13, 2019
Новые возможности
- The extension function
RoomDatabase.withTransaction
allows you to safely perform database transactions within a coroutine. Room extensions functions along with coroutines support are available in theroom-ktx
artifact. - Non-abstract DAO methods annotated with
@Transaction
can now be suspend functions. b/120241587
API / Behavior Changes
- The artifact
room-coroutines
has been renamed toroom-ktx
following the same naming as other androidx artifacts. -
beginTransaction
,setTransactionSuccessful
andendTransaction
inRoomDatabase
have been deprecated in favor ofrunInTransaction
and theroom-ktx
extension functionwithTransaction
.
Bug Fixes
- Fixed a bug where tokenizer arguments were being dropped if the tokenizer used was SIMPLE. b/125427014
- Fixed a bug where Room would fail to correctly identify suspending functions with parameters whos type were an inner class. b/123767877
- Fixed a bug where deferred
@Query
DAO method withINSERT
,UPDATE
orDELETE
statements were eagerly preparing the query in the main thread. b/123695593 - Fixed various bugs where Room would generate incorrect code for certain suspend functions. b/123466702 and b/123457323
- Fixed a bug where deprecated usage of methods were not being correctly suppressed in generated code. b/117602586
- Updated Room dependency of androidx.sqlite to 1.0.2 which contain fixes for correctly handling corrupted databases. b/124476912
Известные проблемы
- Room 2.1.0-alpha05 depends on the
kotlinx-metadata-jvm
artifact which is not currently available in Maven Central ( KT-27991 ). This dependency can be resolved by addingmaven { url "https://kotlin.bintray.com/kotlinx/" }
to your project repositories.
Version 2.1.0-alpha04
January 25, 2019
Новые возможности
- DAO methods annotated with
@Query
containingINSERT
,UPDATE
orDELETE
statements can now return async typesSingle
,Mayble
,Completable
andListenableFuture
. Additionally they can also be suspend functions. b/120227284
API / Behavior Changes
- Room will now throw an error if a non-abstract DAO method annotated with
@Transaction
returns an async type such asSingle
,Mayble
,Completable
,LiveData
orListenableFuture
. Since transactions are thread confined it is currently impossible for Room to begin and end a transaction around a function that may peform queries in different threads. b/120109336 -
OnConflictStrategy.FAIL
andOnConflictStrategy.ROLLBACK
have been@Deprecated
since they do not behave as intended with Android's current SQLite bindings. b/117266738
Bug Fixes
- Fixed a bug where Room wouldn't correctly use the TypeConverter of a return type if the DAO method was a suspend function. b/122988159
- Fixed a bug where Room would incorrectly identify inherited suspend functions as non-suspending. b/122902595
- Fixed a bug where Room would generate incorrect code when an
@Embedded
field was in a parent class and used in multiple child classes. b/121099048 - Fixed an issue where the database would deadlock when invoking DAO suspend functions between a
beginTransaction()
andendTransaction()
. b/120854786
Version 2.1.0-alpha03
December 4, 2018
API Changes
- The FTS
tokenizer
in@Fts3
/@Fts4
now takes a String instead of an Enum. This allows custom tokenizers to be used by Room. Built-in tokenizers are still defined inFtsOptions
as string constants. b/119234881
Новые возможности
- Couroutines : DAO methods can now be suspend functions. To support suspend functions in Room a new artifact has been released,
room-coroutines
. b/69474692 - DAO methods annotated with
@Insert
,@Delete
or@Update
now supportListenableFuture
as return type. b/119418331
Bug Fixes
- Fixed a bug where Room would incorrectly attempt to find a constructor with columns in the
ignoredColumns
property of@Entity
. b/119830714 - Fixed a bug where Room would not mark DAO method parameters as final in their generated implementation. b/118015483
- Fixed a bug where Room's processor would crash when reporting an error on a query with special symbols. b/119520136
- Fixed a bug where Room would decline other various
Collection
implementations as arguments of anIN
expression. b/119884035 - Fixed a bug where LiveData returned from Room would get garbage collected when observed forever causing it to no longer emit new data. b/74477406
- Updated
RoomDatabase
's close lock to reduce lock contention. b/117900450
Version 2.1.0-alpha02
October 30, 2018
Новые возможности
- Added support for referencing a
@DatabaseView
in a@Relation
. b/117680932
Bug Fixes
- Fixed a bug where Room would perform disk I/O in the main thread when subscribing and disposing from an Rx return type. b/117201279
- Fixed a bug where Room would fail to find an appropriate type converter for a field in a Kotlin entity class. b/111404868
- Fixed a bug where Room would generate incorrect code for a
DAO
interface implementation containing a Kotlin default method that has no arguments. b/117527454 - Updated Room's SQLite grammar parser, fixing a performance issue that would cause long build times. b/117401230
Version 2.1.0-alpha01
October 8, 2018
Новые возможности
- FTS : Room now supports entities with a mapping FTS3 or FTS4 table. Classes annotated with
@Entity
can now be additionally annotated with@Fts3
or@Fts4
to declare a class with a mapping full-text search table. FTS options for further customization are available via the annotation's methods. b/62356416 - Views : Room now supports declaring a class as a stored query, also known as a view using the @DatabaseView annotation. b/67033276
- Auto Value : Room now supports declaring AutoValue annotated classes as entities and POJOs. The Room annotations
@PrimaryKey
,@ColumnInfo
,@Embedded
and@Relation
can now be declared in an auto value annotated class' abstract methods. Note that these annotation must also be accompanied by@CopyAnnotations
for Room to properly understand them. b/62408420 - Additional Rx Return Types Support : DAO methods annotated with
@Insert
,@Delete
or@Update
now support Rx return typesCompletable
,Single<T>
andMaybe<T>
. b/63317956 - Immutable Types with
@Relation
: Room previously required@Relation
annotated fields to be settable but now they can be constructor parameters. -
enableMultiInstanceInvalidation
: Is a new API inRoomDatabase.Builder
to enable invalidation across multiple instances of RoomDatabase using the same database file. This multi-instance invalidation mechanism also works across multiple processes. b/62334005 -
fallbackToDestructiveMigrationOnDowngrade
: Is a new API inRoomDatabase.Builder
to automatically re-create the database if a downgrade happens. b/110416954 -
ignoredColumns
: Is a new API in the@Entity
annotation that can be used to list ignored fields by name. Useful for ignoring inherited fields on an entity. b/63522075
API / Behavior Changes
-
mCallback
andmDatabase
inRoomDatabase
are now@Deprecated
and will be removed in the next major version of Room. b/76109329
Bug Fixes
- Fixed two issues where Room wouldn't properly recover from a corrupted database or a bad migration during initialization. b/111504749 and b/111519144
- Room will now properly use Kotlin's primary constructor in data classes avoiding the need to declare the fields as
vars
. b/105769985
Version 2.0.0
Version 2.0.0
October 1, 2018
androidx.room 2.0.0
is released with no changes from 2.0.0-rc01.
Version 2.0.0-rc01
September 20, 2018
androidx.room 2.0.0-rc01
is released with no changes from 2.0.0-beta01.
Version 2.0.0-beta01
July 2, 2018
API / Behavior Changes
- Added
RoomDatabase.Builder.setQueryExecutor()
to allow customization of where queries are run - Added RxJava2
Observable
support - Generated DAO and Database implementations are now final
Bug Fixes
- Specify class/field name in "cannot find getter for field" error b/73334503
- Fixed RoomOpenHelper backwards compatibility with older versions of Room b/110197391
Pre-AndroidX Dependencies
For the pre-AndroidX versions of Room, include these dependencies:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
Version 1.1.1
Version 1.1.1
June 19, 2018
Room 1.1.1
is identical to Room 1.1.1-rc1
.
Version 1.1.1-rc1
May 16, 2018 We highly recommend using Room 1.1.1-rc1
instead of 1.1.0
if you are using migrations.
Fixed a bug where Room would not handle post migration initialization properly b/79362399
Версия 1.1.0
Version 1.1.0-beta3
19 апреля 2018 г.
Bug Fixes
- Fix compilation error when a Kotlin POJO references a relation entity that was defined in Java b/78199923
Version 1.1.0-beta2
April 5, 2018
Bug Fixes
Fixed a critical bug in Room's Rx
Single
andMaybe
implementations where it would recycle the query ahead of time, causing problems if you add more than 1 observer to the returnedSingle
orMaybe
instancces. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] will not
VACUUM
the database if it is called inside a transaction. b/77235565
Version 1.1.0-beta1
March 21, 2018
API Changes
- Based on API Review feedback,
@RawQuery
does not accept passing aString
as the query parameter anymore. You need to use [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (see [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] to easily create an instance of [SupportSQLiteQuery][ref-SupportSQLiteQuery] with argument support). - RoomDatabase.Builder's [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] method now accepts
vararg int
instead ofvararg Integer
.
Bug Fixes
- [RoomDatabase.clearAllTables][ref-clearAllTables] now tries to return space back to the operating system by setting a WAL checkpoint and
VACUUM
ing the database. - [
@RawQuery
][ref-RawQuery] now accepts any Pojo for theobservedEntities
property as long as the Pojo references to one or more entities via itsEmbedded
fields orRelation
s. b/74041772 - Paging: Room's DataSource implementation now correctly handles multi-table dependencies (such as relations, and joins). Previously these would fail to trigger new results, or could fail to compile. b/74128314
Version 1.1.0-alpha1
January 22, 2018
Новые возможности
-
RawQuery
: This new API allows@Dao
methods to receive the SQL as a query parameter b/62103290 , b/71458963 -
fallBackToDestructiveMigrationsFrom
: This new API inRoomDatabase.Builder
allows for finer grained control over from which starting schema versions destructive migrations are allowed (as compared to fallbackToDestructiveMigration) b/64989640 - Room now only supports newer Paging APIs (alpha-4+), dropping support for the deprecated
LivePagedListProvider
. To use the new Room alpha, you'll need to use pagingalpha-4
or higher, and switch fromLivePagedListProvider
toLivePagedListBuilder
if you haven't already.
Bug Fixes
- Improved support for Kotlin Kapt types. b/69164099
- Order of fields do not invalidate schema anymore. b/64290754