Комната
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
11 декабря 2024 г. | 2.6.1 | - | - | 2.7.0-альфа12 |
Объявление зависимостей
Чтобы добавить зависимость от Room, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Зависимости для Room включают тестирование миграции Room и Room RxJava.
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
Котлин
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") }
классный
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-альфа12
11 декабря 2024 г.
Выпущен androidx.room:room-*:2.7.0-alpha12
. Версия 2.7.0-alpha12 содержит эти коммиты .
Изменения API
- Добавьте экспериментальный API
RoomDatabase.Builder.setInMemoryTrackingMode()
, чтобы настроить, будет ли Room использовать таблицу в памяти для отслеживания недействительности. ( I2a9b2 , б/185414040 )
Исправления ошибок
- При деструктивной миграции представления теперь удаляются, чтобы гарантировать их воссоздание, выравнивая поведение, когда
allowDestructiveMigrationForAllTables
включен (по умолчанию KMP), с существующим поведением, когда он выключен. ( 0a3e83 , б/381518941 )
Версия 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* для защиты многопроцессного создания и миграции баз данных в первый раз. ( Ied267 , р/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.useNullAwareTypeAnalysis=false обработчику аннотаций. Если это произойдет, сообщите об ошибке в файле, поскольку в будущем этот флаг будет удален. В этом новом анализаторе TypeConverter предлагается предоставлять только ненулевые принимающие TypeConverter, поскольку новый анализатор имеет возможность обертывать их проверкой на null. Обратите внимание, что это не влияет на пользователей, использующих KAPT или Java в качестве обработчиков аннотаций (в отличие от KSP), поскольку в типах нет информации о допустимости значений NULL. ( Ia88f9 , б/193437407 )
- Исправлена ошибка, из-за которой Room не удалось скомпилировать с ошибкой SQL, когда объект FTS объявил об использовании токенизатора ICU. ( I00db9 , б/201753224 )
- Решена проблема автоматической миграции нового столбца, добавленного во встроенный объект между версиями. ( I5fcb1 б/193798291 )
- Мы решили проблему, связанную с типами возвращаемых методов реляционного запроса в запросах LEFT JOIN. Благодаря этим изменениям в случае присутствия сопоставления «1-множество» коллекция, возвращаемая для ключа, не будет включать объект недопустимого значения, если он не найден в курсоре. Если допустимые значения не найдены, ключ будет сопоставлен с пустой коллекцией. ( Id5552 б / 201946438 )
- Решена проблема автоматической миграции, из-за которой ключевые слова SQLite не могли быть экранированы в именах столбцов. ( Idbed4 b/197133152 )
Версия 2.4.0-бета01
13 октября 2021 г.
androidx.room:room-*:2.4.0-beta01
выпущен. Версия 2.4.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой при автоматической миграции не добавлялись новые столбцы, когда в другой таблице в той же автоматической миграции также был новый столбец с тем же именем. ( Ia5db5 , б/200818663 )
- Реализация PagingSource, созданная с помощью Room-Paging, теперь использует
queryExecutor
передаваемый черезRoomDatabase.Builder
, поэтому его можно переопределить вместоDispatchers.IO
ранее. ( Iae259 )
Версия 2.4.0-альфа05
29 сентября 2021 г.
androidx.room:room-*:2.4.0-alpha05
выпущен. Версия 2.4.0-alpha05 содержит эти коммиты.
Новые возможности
- Добавлен встроенный преобразователь типов для UUID . ( I671e8 , б/73132006 )
Изменения API
В аннотацию TypeConverters добавлено новое свойство, позволяющее разработчикам отключать встроенные преобразователи Enum и UUID. По умолчанию эти преобразователи включены, но вы можете отключить их для определенной области или для всей базы данных. Подробности см. в документации TypeConverters. ( 36ae9e , б/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. ( Иаффе )
Исправления ошибок
- Исправлена проблема, из-за которой результаты запросов с несколькими картами не были правильно упорядочены, если запрос содержал предложение ORDER BY столбца из ключа карты. ( I6b887 )
Внешний вклад
- Добавлен новый API для указания порядка индекса в @Index. Спасибо Никите Желонкину. ( I033fc )
Версия 2.4.0-альфа04
21 июля 2021 г.
androidx.room:room-*:2.4.0-alpha04
выпущен. Версия 2.4.0-alpha04 содержит эти коммиты.
Новые возможности
Room теперь поддерживает методы
@Dao
возвращаемых типов мультикарт, что полезно для операторов JOIN. Поддерживаемые типы мультикарт — это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
,Observable
Rx или сопрограммыFlow
.
Комнатный пейджинг
Выпущен
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
рассматривается как позиция прокрутки пользователя, а элементы загружаются как до, так и после клавиши.Артефакт является необязательным, и отказ от него приведет к возврату к существующей поддержке пейджинга 3.0, которая была представлена в комнате 2.3. Однако в будущем выпуске этот артефакт станет необязательным для тех, кто использует Room with Paging 3.0. Чтобы принять участие, добавьте новый артефакт подкачки комнат в свой путь к классам. Если вы используете Gradle, вы можете добавить следующий фрагмент в свой build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Исправления ошибок
- Исправлена проблема при автоматической миграции, связанная с обработкой нарушений внешнего ключа. ( б / 190113935 )
Версия 2.4.0-альфа03
16 июня 2021 г.
androidx.room:room-*:2.4.0-alpha03
выпущен. Версия 2.4.0-alpha03 содержит эти коммиты.
Изменения API
- Обновите
MigrationTestHelper
в Room для поддержки автоматической миграции, предоставив новый API-конструктор, который получает тестируемый класс базы данных. Это позволяет помощнику автоматически добавлять автоматические миграции таким же образом во времяrunMigrationsAndValidate
.
Исправления ошибок
Исправлена проблема с встроенной библиотекой SQLite Room для поддержки чипов Apple M1. ( б/174695268
Исправлена проблема, из-за которой Room не выдавала ошибку, когда тип возвращаемого значения функции @Transaction был Flow ( I56ddd , b/190075899 ).
Исправлена проблема с автоматической миграцией индексов. б/177673291
Обновления зависимостей
- Поддержка KSP в комнате теперь зависит от KSP
1.5.10-1.0.0-beta01
. ( 1ecb11 , б/160322705 )
Версия 2.4.0-альфа02
5 мая 2021 г.
androidx.room:room-*:2.4.0-alpha02
выпущен. Версия 2.4.0-alpha02 содержит эти коммиты.
Изменения API
-
@ProvidedAutoMigrationSpec
— это новый API для объявления того, чтоAutoMigrationSpec
будет предоставлен во время выполнения черезRoomDatabase.Builder#addAutoMigrationSpec()
. Это позволяет платформе внедрения зависимостей предоставлять такие спецификации, когда им нужны сложные зависимости.
Исправления ошибок
- Исправлена проблема с автоматической миграцией, из-за которой
@DatabaseView
не воссоздавался должным образом.
Внешний вклад
- Исправлена проблема в
JournalMode.TRUNCATE
Room, из-за которой обратный вызовInvalidationTracker
иногда вызывался некорректно, слишком поздно или вообще не вызывался. СпасибоUli Bubenheimer | bubenheimer@users.noreply.github.com
( b/154040286 )
Версия 2.4.0-альфа01
21 апреля 2021 г.
androidx.room:room-*:2.4.0-alpha01
выпущен. Версия 2.4.0-alpha01 содержит эти коммиты.
Новые возможности
- Автоматические миграции : Room теперь предлагает API для автоматического создания миграций при условии экспорта схем. Чтобы сообщить Room, что он должен сгенерировать автоматическую миграцию, можно использовать новое свойство
@Database#autoMigrations
для объявления версий, из которых и в которые будет осуществляться автоматическая миграция. Когда Room требуется дополнительная информация о переименовании или удалении таблиц и столбцов, аннотация@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 : Room теперь по умолчанию будет использовать преобразователь типов Enum в String и наоборот, если он не указан. Если преобразователь типов для перечисления уже существует, Room будет отдавать предпочтение его использованию перед преобразователем по умолчанию.
- Обратный вызов запроса : Room теперь предлагает общий API обратного вызова RoomDatabase.QueryCallback для случаев, когда запросы собираются выполняться, что может быть полезно для входа в отладочные сборки. Обратный вызов можно установить с помощью
RoomDatabase.Builder#setQueryCallback()
. - Предварительно упакованное улучшение : в Room теперь есть API для создания базы данных с использованием предварительно упакованной базы данных, считываемой из входного потока. Это учитывает такие случаи, как, например, когда база данных предварительной сборки заархивирована.
- Предоставленные преобразователи типов . В Room теперь есть API-интерфейсы для предоставления экземпляров преобразователей типов, чтобы приложение могло контролировать их инициализацию. Чтобы отметить преобразователь типов, который будет предоставлен Room, используйте новую аннотацию @ProvidedTypeConverter.
- Поддержка RxJava3 : Room теперь поддерживает типы RxJava3. Подобно RxJava2, вы можете объявлять методы DAO, возвращаемые типы которых — Flowable, Single, Maybe и Completable. Кроме того, доступен новый артефакт
androidx.room:room-rxjava3
для поддержки 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-бета03
10 марта 2021 г.
androidx.room:room-*:2.3.0-beta03
выпущен. Версия 2.3.0-beta03 содержит эти коммиты.
Новые возможности
- Добавлена поддержка инкрементной компиляции для KSP. ( I031c1 , б/176453350 )
Исправления ошибок
- Исправлена ошибка, из-за которой создание PagingSource в основном потоке могло вызвать ошибку ANR. ( I42b74 , б/181221318 )
- Исправлена ошибка, из-за которой видимость
@ExperimentalRoomApi
была общедоступной, а не частной. ( б / 181356119 )
Внешний вклад
- Разрешить Room принимать возвращаемый тип POJO в методе DAO с аннотацией
@Query
если он также аннотирован с помощью@SkipQueryVerification
. Room приложит все усилия, чтобы преобразовать результат запроса в возвращаемый тип POJO так же, как это делается для аннотированного метода DAO@RawQuery
. Спасибо Маркусу Ригелю | эй@marcorei.com'. ( I45acb )
Версия 2.3.0-бета02
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. См . b/160322705 для получения информации об известных проблемах.
Версия 2.3.0-бета01
27 января 2021 г.
Выпущен androidx.room:room-*:2.3.0-beta01
. Версия 2.3.0-beta01 содержит эти коммиты.
Новые возможности
- Автоматически закрывающиеся базы данных : теперь в комнате есть возможность закрывать базы данных, к которым не было доступа по истечении определенного периода времени. Это экспериментальная функция, которую можно включить, вызвав
RoomDatabase.Builder#setAutoCloseTimeout()
. Эта функция полезна для приложений с несколькими базами данных.
Исправления ошибок
- Устранена проблема, из-за которой методы Dao с несколькими методами
@Update
или@Delete
с разными стратегиями конфликтов создавали код только с одной из стратегий, фактически игнорируя определенную. ( /I0b90d , b/176138543 )
Версия 2.3.0-альфа04
16 декабря 2020 г.
androidx.room:room-*:2.3.0-alpha04
выпущен. Версия 2.3.0-alpha04 содержит эти коммиты.
Новые возможности
- Room теперь предлагает общий API обратного вызова
RoomDatabase.QueryCallback
для случаев, когда запросы собираются выполняться, что может быть полезно для входа в отладочные сборки. Обратный вызов можно установить с помощьюRoomDatabase.Builder#setQueryCallback()
. ( Iaa513 , б / 174478034 , б / 74877608 ) - Room теперь по умолчанию будет использовать преобразователь типов Enum в String и наоборот, если он не указан. Если преобразователь типов для перечисления уже существует, Room будет отдавать предпочтение его использованию перед преобразователем по умолчанию. ( б / 73132006 )
Известная проблема
- Если для Enum уже существует односторонний преобразователь типов для чтения, Room может случайно использовать встроенный преобразователь String в Enum, что может быть нежелательно. Это известная проблема, и ее можно исправить, установив двусторонний преобразователь. См.: б/175707691 .
Исправления ошибок
- Исправлена проблема, из-за которой Room неправильно отключала инкрементальную обработку аннотаций в новых версиях JDK. ( б / 171387388 )
- Исправлена проблема, из-за которой Room находила сгенерированный класс при использовании нескольких загрузчиков классов. Спасибо за исправление «Serendipity | 892449346@qq.com! ( б / 170141113 )
- Исправлена проблема, из-за которой Room генерировал неверный код, если у Kotlin
@Dao
был базовый класс, дженерики которого являются примитивами в JVM. ( б / 160258066 )
Внешний вклад
- Room теперь по умолчанию будет использовать
beginTransactionNonExclusive
, если включен режим WAL и API равен 16 или более. Спасибо Ахмеду Халилу | ahmedibrahimkhali@gmail.com'! ( б / 126258791 )
Версия 2.3.0-альфа03
14 октября 2020 г.
androidx.room:room-*:2.3.0-alpha03
выпущен. Версия 2.3.0-alpha03 содержит эти коммиты.
Новые возможности
В Room теперь есть API-интерфейсы для предоставления экземпляров преобразователей типов, чтобы приложение могло контролировать их инициализацию. Чтобы отметить преобразователь типов, который будет предоставлен Room, используйте новую аннотацию
@ProvidedTypeConverter
. Спасибо mzgreen yairobbe@gmail.com . ( Ie4fa5 , б/121067210 )В Room теперь есть API для создания базы данных с использованием предварительно упакованной базы данных, считываемой из входного потока. Это учитывает такие случаи, как, например, когда база данных предварительной сборки заархивирована. Спасибо «Ахмеду Эль-Хельву ahmedre@gmail.com » ( 3e6792 , b/146911060 )
Изменения API
В аннотацию
@ForeignKey
добавлена отсутствующая цель, предотвращающая ее использование за пределами аннотации@Entity
. ( Iced1e )Поле
mCallbacks
вRoomDatabase.java
теперь скрыто. ( d576cb , b/76109329 )
Исправления ошибок
Обновите документацию TypeConverters, чтобы уточнить, что TypeConverters можно использовать только для преобразования столбцов/полей, а не строк. ( I07c56 , б/77307836 )
Обновите DaoProcessor, чтобы исправить ошибку компилятора Dao с помощью универсального супертипа с «примитивами» Kotlin. ( Ice6bb , б/160258066 )
Обновите документацию по добавлению/удалению методов наблюдателя, чтобы уточнить потоки ( Ifd1d9 , b/153948821 ).
Исправлена проблема, из-за которой Room неправильно проверял таблицы FTS, в которых был объявлен столбец rowid. ( d62ebc , b/145858914 )
Внешние взносы
Исправление проблем с языковыми стандартами верхнего и нижнего регистра, связанных с турецким языком ( 5746e3 ), b/68159494.
Замените
ConcurrentHashMap
внутриRoomDatabase
наCollections.synchronizedMap()
, чтобы избежать проблем в Android Lollipop ( d1cfc7 , b/162431855 ).Добавьте обратный вызов onOpenPrepackagedDatabase при копировании предварительно упакованной базы данных. ( I1ba74 , б/148934423 )
Версия 2.3.0-альфа02
22 июля 2020 г.
androidx.room:room-*:2.3.0-alpha02
выпущен. Версия 2.3.0-alpha02 содержит эти коммиты.
Новые возможности
- Поддержка RxJava3 : Room теперь поддерживает типы RxJava3. Подобно RxJava2, вы можете объявлять методы DAO, возвращаемые типы которых — Flowable, Single, Maybe и Completable. Кроме того, доступен новый артефакт
androidx.room:room-rxjava3
для поддержки RxJava3. ( б / 152427884 )
Изменения API
- Теперь поддерживается объявление
@TypeConverter
в классе объектов Kotlin. ( б / 151110764 ) - Опция дополнительной обработки аннотаций Room теперь включена по умолчанию. ( б / 112110217 )
Версия 2.3.0-альфа01
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, используемую для включения процессора инкрементных аннотаций. Спасибо Blaz Solar (me@blaz.solar) ( b/155215201 )
- Room теперь встраивает свою зависимость ANTLR в процессор аннотаций, чтобы избежать конфликтов версий с другими процессорами, которые также используют ANTLR. ( б / 150106190 )
Версия 2.2.6
Версия 2.2.6
16 декабря 2020 г.
Выпущен androidx.room:room-*:2.2.6
. Версия 2.2.6 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой Room неправильно отключала инкрементальную обработку аннотаций в новых версиях JDK. ( б / 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. ( б / 148969394 )
- Исправлена проблема при загрузке собственных библиотек SQLite в обработчик аннотаций Room, которая приводила к сбою компилятора из-за параллельных компиляций. ( б / 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 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с приостановкой транзакций, из-за которой они блокировались, если сопрограмма была быстро отменена до фактического запуска транзакции. ( б / 148181325 )
- Исправлена ошибка, из-за которой @Generated неправильно использовался при сборке с помощью JDK 9. ( b/146538330 ).
- Исправлена проблема, из-за которой Room генерировал неправильный код, когда интерфейс DAO в Kotlin имел конкретную функцию. ( б / 146825845 )
Версия 2.2.3
Версия 2.2.3
18 декабря 2019 г.
Выпущен androidx.room:room-*:2.2.3
. Версия 2.2.3 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой Room не мог проверить базу данных, которая не прошла никакой миграции и содержала устаревший хэш с индексами в своей схеме. ( б / 139306173 )
Версия 2.2.2
Версия 2.2.2
20 ноября 2019 г.
Выпущен androidx.room:room-*:2.2.2
. Версия 2.2.2 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой при сборе отношений «один к одному» с более чем 999 строками Room возвращала нулевые связанные элементы. ( б / 143105450 )
Версия 2.2.1
Версия 2.2.1
23 октября 2019 г.
androidx.room:room-*:2.2.1
выпущен. Версия 2.2.1 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой Room неправильно предупреждала о
CURSOR_MISMATCH
при включенной опцииexpandProjection
. ( б / 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()
предназначен для случаев, когда предварительно заполненный файл базы данных находится в папке ресурсов APK, аcreateFromFile()
— для случаев, когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивной миграции, так что во время резервной миграции Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна, в противном случае он просто откажется от удаления и повторного создания всех таблиц. б/62185732 - Значения схемы по умолчанию :
@ColumnInfo
теперь имеет новое свойствоdefaultValue
, которое можно использовать для указания значения по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время миграции, если они указаны. б/64088772 - Отношения «многие-ко-многим» : у
@Relation
теперь есть новое свойствоassociateBy
, которое принимает новую аннотацию@Junction
, используемую для объявления отношения, которое должно быть удовлетворено через соединительную таблицу (также известную как таблица соединений). б/69201917 - Отношения «один к одному» . Ограничение в полях POJO, аннотированных
@Relation
, на типList
илиSet
, было снято, что позволяет эффективно представлять однозначные отношения. б/62905145 - Target Entity : аннотации DAO
@Insert
,@Update
и@Delete
теперь имеют новое свойствоtargetEntity
, которое позволяет указать целевую таблицу, над которой должен действовать метод DAO. Это позволяет параметрам этих методов DAO быть произвольными POJO, которые будут интерпретироваться как частичные сущности. На практике это позволяет осуществлять частичную вставку, удаление и обновление. б/127549506 - Coroutines Flow : методы
@Query
DAO теперь могут иметь возвращаемый типFlow<T>
. Возвращенный поток повторно отправит новый набор значений, если таблицы наблюдения в запросе станут недействительными. Объявление функции DAO с возвращаемым типомChannel<T>
является ошибкой. Вместо этого Room рекомендует использоватьFlow
, а затем использовать соседние функции для преобразованияFlow
вChannel
. б/130428884 - Процессор инкрементных аннотаций Gradle : Room теперь является процессором изолирующих аннотаций Gradle, а возможность приращения можно включить с помощью опции процессора
room.incremental
. Дополнительные сведения см. в разделе «Параметры компилятора помещений» . Если у вас возникнут какие-либо проблемы, пожалуйста, сообщите об ошибке здесь . Мы планируем включить инкрементируемость по умолчанию в будущей стабильной версии. б/112110217 - Расширяющиеся проекции : был добавлен новый экспериментальный параметр компилятора
room.expandProjection
, который заставляет Room переписывать запрос со звездообразной проекцией, чтобы он содержал только столбцы возвращаемого типа POJO. Например, для метода DAO с@Query("SELECT * FROM Song")
который возвращает POJO с именемSongIdAndTitle
только с двумя полями. Затем Room перепишет запрос наSELECT id, title FROM Song
так, чтобы был выбран минимальный набор столбцов, соответствующий типу возвращаемого значения. Это по существу устраняет предупреждениеCURSOR_MISMATCH
, которое отображается, когда запрос возвращает дополнительные столбцы, которые не соответствуют ни одному полю в возвращаемом типе POJO.
Версия 2.2.0-rc01
5 сентября 2019 г.
androidx.room:room:2.2.0-rc01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Никаких публичных изменений с момента выпуска Room 2.2.0-beta01
.
Версия 2.2.0-бета01
22 августа 2019 г.
androidx.room:room-*:2.2.0-beta01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Исправлена ошибка, из-за которой запрос Coroutine Flow переставал повторно выдавать новые значения через определенное время. ( б / 139175786 )
- Исправлена ошибка, из-за которой Room не принимал хеш-код устаревшей схемы при открытии базы данных, которая не подвергалась миграции со времен Room 1.0, что приводило к сбою во время выполнения из-за недопустимой схемы. ( б / 139306173 )
Версия 2.2.0-альфа02
7 августа 2019 г.
androidx.room:room-*:2.2.0-alpha02
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
- Coroutines Flow : методы
@Query
DAO теперь могут иметь возвращаемый типFlow<T>
. Возвращенный поток повторно отправит новый набор значений, если таблицы наблюдения в запросе станут недействительными. Объявление функции DAO с возвращаемым типомChannel<T>
является ошибкой. Вместо этого Room рекомендует использоватьFlow
, а затем использовать соседние функции для преобразованияFlow
вChannel
. б/130428884 - Расширяющиеся проекции : был добавлен новый экспериментальный параметр компилятора
room.expandProjection
, который заставляет Room переписывать запрос со звездообразной проекцией, чтобы он содержал только столбцы возвращаемого типа POJO. Например, для метода DAO с@Query("SELECT * FROM Song")
который возвращает POJO с именемSongIdAndTitle
только с двумя полями. Затем Room перепишет запрос наSELECT id, title FROM Song
так, чтобы был выбран минимальный набор столбцов, соответствующий типу возвращаемого значения. Это по существу устраняет предупреждениеCURSOR_MISMATCH
, которое отображается, когда запрос возвращает дополнительные столбцы, которые не соответствуют ни одному полю в возвращаемом типе POJO. -
onDestructiveMigrate
— это новый API обратного вызова, добавленный вRoomDatabase.Callback
на случай, когда Room деструктивно переносит базу данных. б/79962330
Исправления ошибок
- Исправлена ошибка, из-за которой Room генерировал неправильный код, используя метод установки поля, когда поле защищено. б/136194628
- Исправлена ошибка, из-за которой InvalidationTracker выдавал NPE во втором процессе, когда была включена многоэкземплярная недействительность и служба недействительности была отключена. б/137454915
- Исправлена ошибка, из-за которой Room не мог правильно определить тип возвращаемого значения унаследованной функции приостановки, помеченной
@RawQuery
. б/137878827 - Обновлен сгенерированный код для
@Relation
, когда связанный ключ имеет тип BLOB, чтобы использовать сопоставимыйByteBuffer
. б/137881998 - Исправлена ошибка, из-за которой Room жаловался на отсутствие установщиков в POJO, используемых в качестве частичных параметров сущности
@Insert
,@Update
и@Delete
. б/138664463 - Исправлена ошибка, из-за которой Room жаловался на отсутствие геттеров и сеттеров для игнорируемого столбца через
@Entity
когда класс сущности использовался в определенных методах DAO. б/138238182 - Исправлена ошибка, из-за которой Room некорректно преобразовывал именованные аргументы привязки в позиционные аргументы, вызывая исключение во время выполнения при выполнении запроса с повторно используемыми параметрами. б/137254857
Версия 2.2.0-альфа01
10 июля 2019 г.
Новые возможности
- Предварительно упакованная база данных : теперь доступны два новых API в
RoomDatabase.Builder
для созданияRoomDatabase
с использованием уже заполненного файла базы данных.createFromAsset()
предназначен для случаев, когда предварительно заполненный файл базы данных находится в папке ресурсов APK, аcreateFromFile()
— для случаев, когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивной миграции, так что во время резервной миграции Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна, в противном случае он просто откажется от удаления и повторного создания всех таблиц. б/62185732 - Значения схемы по умолчанию :
@ColumnInfo
теперь имеет новое свойствоdefaultValue
, которое можно использовать для указания значения по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время миграции, если они указаны. б/64088772Примечание. Если в вашей схеме базы данных уже есть значения по умолчанию, например добавленные с помощью
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, и вы решили определить значения по умолчанию с помощью@ColumnInfo
для тех же столбцов, вам может потребоваться выполнить миграцию. для проверки неучтенных значений по умолчанию. Дополнительную информацию см. в разделе «Миграция помещений» . - Отношения «многие-ко-многим» : у
@Relation
теперь есть новое свойствоassociateBy
, которое принимает новую аннотацию@Junction
, используемую для объявления отношения, которое должно быть удовлетворено через соединительную таблицу (также известную как таблица соединений). б/69201917 - Отношения «один к одному» . Ограничение в полях POJO, аннотированных
@Relation
, на типList
илиSet
, было снято, что позволяет эффективно представлять однозначные отношения. б/62905145 - Target Entity : аннотации DAO
@Insert
,@Update
и@Delete
теперь имеют новое свойствоtargetEntity
, которое позволяет указать целевую таблицу, над которой должен действовать метод DAO. Это позволяет параметрам этих методов DAO быть произвольными POJO, которые будут интерпретироваться как частичные сущности. На практике это позволяет осуществлять частичную вставку, удаление и обновление. б/127549506 - Процессор инкрементных аннотаций Gradle : Room теперь является процессором изолирующих аннотаций Gradle, а возможность приращения можно включить с помощью опции процессора
room.incremental
. Дополнительные сведения см. в разделе «Параметры компилятора помещений» . Если у вас возникнут какие-либо проблемы, пожалуйста, сообщите об ошибке здесь . Мы планируем включить инкрементируемость по умолчанию в будущей стабильной версии. б/112110217
Исправления ошибок
- Room больше не будет передавать
EmptySetResultException
глобальному обработчику ошибок, если поток Rx запроса был удален до завершения запроса. б/130257475 - Исправлена ошибка, из-за которой Room отображала неправильное сообщение об ошибке, когда функция приостановки DAO, помеченная
@RawQuery
не имела возвращаемого типа. б/134303897 - Room больше не будет генерировать адаптеры DAO с необработанными типами. б/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 для дальнейшей настройки доступны через методы аннотации. - Представления : Room теперь поддерживает объявление класса как хранимого запроса, также известного как представление , с использованием аннотации
@DatabaseView
. - Курутины : методы DAO теперь могут быть приостанавливаемыми функциями. Включите
room-ktx
в свои зависимости, чтобы воспользоваться этой функциональностью. Артефакт ktx также предоставляет функцию расширенияRoomDatabase.withTransaction
для выполнения транзакций базы данных внутри сопрограммы. - Auto Value : Room теперь поддерживает объявление аннотированных классов AutoValue как сущностей и POJO. Аннотации Room
@PrimaryKey
,@ColumnInfo
,@Embedded
и@Relation
теперь могут быть объявлены в абстрактных методах класса с аннотациями автоматического значения. Обратите внимание, что эти аннотации также должны сопровождаться@CopyAnnotations
, чтобы Room правильно их понимала. - Дополнительная поддержка Async : методы 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. б/132602198
- Исправлено предупреждение об использовании двойной кавычки для пользователей SQLite 3.27.0 и выше. б/131712640
- Исправлена ошибка, из-за которой InvalidationTracker вызывал сбой при параллельном выполнении нескольких проверок недействительности. б/133457594
Версия 2.1.0-бета01
7 мая 2019 г.
androidx.room 2.1.0-beta01
выпущен без изменений по сравнению с 2.1.0-alpha07. Коммиты, включенные в эту версию, можно найти здесь .
Версия 2.1.0-альфа07
25 апреля 2019 г.
API/изменения поведения
- Функция расширения
RoomDatabase.withTransaction
была изменена, чтобы больше не использовать функциональный блок сCoroutineScope
в качестве получателя. Это предотвращает пропуск дополнительной оболочкиcoroutineScope { }
необходимой для одновременного запуска элементов в блоке транзакции.
Исправления ошибок
- Исправлена ошибка, из-за которой Room не мог сопоставить TypeConverter для функции Kotlin DAO, содержащей параметр типа Collection. б/122066791
Версия 2.1.0-альфа06
22 марта 2019 г.
API/изменения поведения
- Запросы асинхронных транзакций теперь сериализованы, поэтому Room не будет использовать более одного потока для выполнения транзакций базы данных.
RoomDatabase.Builder.setTransactionExecutor(Executor)
был добавлен, чтобы позволить настроить исполнителя, который будет использоваться для транзакций. -
RoomDatabase.runInTransaction(Callable)
больше не переносит проверенные исключения в RuntimeExceptions. б/128623748
Исправления ошибок
- Исправлена ошибка, из-за которой средство отслеживания недействительности прекращало наблюдение за таблицей контента, если были добавлены наблюдатели как для таблицы контента, так и для внешней таблицы FTS контента. б/128508917
- Обновлена грамматика SQLite Room, чтобы соответствовать SQLite 3.24.0. б/110883668
Версия 2.1.0-альфа05
13 марта 2019 г.
Новые возможности
- Функция расширения
RoomDatabase.withTransaction
позволяет безопасно выполнять транзакции базы данных внутри сопрограммы. Функции расширения комнат вместе с поддержкой сопрограмм доступны в артефактеroom-ktx
. - Неабстрактные методы DAO, аннотированные
@Transaction
теперь могут быть функциями приостановки. б/120241587
API/изменения поведения
- Артефактная
room-coroutines
была переименована вroom-ktx
следуя тем же названиям, что и другие артефакты AndroidX. -
beginTransaction
,setTransactionSuccessful
иendTransaction
вRoomDatabase
устарели в пользуrunInTransaction
и функции расширенияroom-ktx
withTransaction
.
Исправления ошибок
- Исправлена ошибка, из-за которой аргументы токенизатора отбрасывались, если используемый токенизатор был SIMPLE. б/125427014
- Исправлена ошибка, из-за которой Room не мог правильно идентифицировать приостанавливающие функции с параметрами, тип которых был внутренним классом. б/123767877
- Исправлена ошибка, из-за которой отложенный метод
@Query
DAO с инструкциямиINSERT
,UPDATE
илиDELETE
активно готовил запрос в основном потоке. б/123695593 - Исправлены различные ошибки, из-за которых Room генерировал неверный код для некоторых функций приостановки. б/123466702 и б/123457323
- Исправлена ошибка, из-за которой устаревшее использование методов не подавлялось должным образом в сгенерированном коде. б/117602586
- Обновлена зависимость Androidx.sqlite от Room до версии 1.0.2, которая содержит исправления для правильной обработки поврежденных баз данных. б/124476912
Известные проблемы
- Комната 2.1.0-alpha05 зависит от артефакта
kotlinx-metadata-jvm
, который в настоящее время недоступен в Maven Central ( KT-27991 ). Эту зависимость можно устранить, добавивmaven { url "https://kotlin.bintray.com/kotlinx/" }
в репозитории вашего проекта.
Версия 2.1.0-альфа04
25 января 2019 г.
Новые возможности
- Методы DAO, аннотированные
@Query
, содержащие инструкцииINSERT
,UPDATE
илиDELETE
теперь могут возвращать асинхронные типыSingle
,Mayble
,Completable
иListenableFuture
. Кроме того, они также могут быть функциями приостановки. б/120227284
API/изменения поведения
- Room теперь будет выдавать ошибку, если неабстрактный метод DAO, аннотированный
@Transaction
возвращает асинхронный тип, напримерSingle
,Mayble
,Completable
,LiveData
илиListenableFuture
. Поскольку транзакции ограничены потоками, Room в настоящее время не может начинать и завершать транзакцию вокруг функции, которая может выполнять запросы в разных потоках. б/120109336 -
OnConflictStrategy.FAIL
иOnConflictStrategy.ROLLBACK
объявлены@Deprecated
, поскольку они не ведут себя должным образом с текущими привязками SQLite в Android. б/117266738
Исправления ошибок
- Исправлена ошибка, из-за которой Room неправильно использовал TypeConverter возвращаемого типа, если метод DAO был функцией приостановки. б/122988159
- Исправлена ошибка, из-за которой Room неправильно определяла унаследованные функции приостановки как не приостанавливающие. б/122902595
- Исправлена ошибка, из-за которой Room генерировал неверный код, если поле
@Embedded
находилось в родительском классе и использовалось в нескольких дочерних классах. б/121099048 - Исправлена проблема, из-за которой база данных блокировалась при вызове функций приостановки DAO между
beginTransaction()
иendTransaction()
. б/120854786
Версия 2.1.0-альфа03
4 декабря 2018 г.
Изменения API
-
tokenizer
FTS в@Fts3
/@Fts4
теперь принимает строку вместо Enum. Это позволяет Room использовать собственные токенизаторы. Встроенные токенизаторы по-прежнему определяются вFtsOptions
как строковые константы. б/119234881
Новые возможности
- Курутины : методы DAO теперь могут быть приостанавливаемыми функциями. Для поддержки функций приостановки в Room был выпущен новый артефакт —
room-coroutines
. б/69474692 - Методы DAO, аннотированные
@Insert
,@Delete
или@Update
теперь поддерживаютListenableFuture
в качестве возвращаемого типа. б/119418331
Исправления ошибок
- Исправлена ошибка, из-за которой Room неправильно пыталась найти конструктор со столбцами в свойстве
ignoredColumns
@Entity
. б/119830714 - Исправлена ошибка, из-за которой Room не помечала параметры метода DAO как окончательные в их сгенерированной реализации. б/118015483
- Исправлена ошибка, из-за которой процессор Room аварийно завершал работу при сообщении об ошибке в запросе со специальными символами. б/119520136
- Исправлена ошибка, из-за которой Room отклоняла другие различные реализации
Collection
в качестве аргументов выраженияIN
. б/119884035 - Исправлена ошибка, из-за которой LiveData, возвращаемая из комнаты, собирала мусор при постоянном наблюдении, из-за чего она больше не выдавала новые данные. б/74477406
- Обновлена блокировка закрытия
RoomDatabase
, чтобы уменьшить конфликты блокировок. б/117900450
Версия 2.1.0-альфа02
30 октября 2018 г.
Новые возможности
- Добавлена поддержка ссылки на
@DatabaseView
в@Relation
. б/117680932
Исправления ошибок
- Исправлена ошибка, из-за которой Room выполнял дисковый ввод-вывод в основном потоке при подписке и удалении из возвращаемого типа Rx. б/117201279
- Исправлена ошибка, из-за которой Room не мог найти подходящий преобразователь типов для поля в классе сущностей Kotlin. б/111404868
- Исправлена ошибка, из-за которой Room генерировал неправильный код для реализации интерфейса
DAO
содержащий метод Kotlin по умолчанию, не имеющий аргументов. б/117527454 - Обновлен анализатор грамматики SQLite в Room, исправлена проблема с производительностью, приводившая к длительному времени сборки. б/117401230
Версия 2.1.0-альфа01
8 октября 2018 г.
Новые возможности
- FTS : комната теперь поддерживает объекты с таблицей сопоставления FTS3 или FTS4 . Классы, помеченные
@Entity
, теперь можно дополнительно пометить@Fts3
или@Fts4
чтобы объявить класс с сопоставлением таблицы полнотекстового поиска. Опции FTS для дальнейшей настройки доступны через методы аннотации. б/62356416 - Представления : Room теперь поддерживает объявление класса как хранимого запроса, также известного как представление, с использованием аннотации @DatabaseView. б/67033276
- Auto Value : Room теперь поддерживает объявление аннотированных классов AutoValue как сущностей и POJO. Аннотации Room
@PrimaryKey
,@ColumnInfo
,@Embedded
и@Relation
теперь могут быть объявлены в абстрактных методах класса с аннотациями автоматического значения. Обратите внимание, что эти аннотации также должны сопровождаться@CopyAnnotations
, чтобы Room правильно их понимала. б/62408420 - Поддержка дополнительных типов возврата Rx : методы DAO, аннотированные
@Insert
,@Delete
или@Update
, теперь поддерживают типы возврата RxCompletable
,Single<T>
иMaybe<T>
. б/63317956 - Неизменяемые типы с
@Relation
: ранее Room требовал, чтобы поля с аннотациями@Relation
были устанавливаемыми, но теперь они могут быть параметрами конструктора. -
enableMultiInstanceInvalidation
: новый API вRoomDatabase.Builder
, позволяющий сделать недействительными несколько экземпляров RoomDatabase с использованием одного и того же файла базы данных. Этот механизм аннулирования нескольких экземпляров также работает в нескольких процессах. б/62334005 -
fallbackToDestructiveMigrationOnDowngrade
: новый API вRoomDatabase.Builder
для автоматического повторного создания базы данных в случае перехода на более раннюю версию. б/110416954 -
ignoredColumns
: новый API в аннотации@Entity
, который можно использовать для перечисления игнорируемых полей по имени. Полезно для игнорирования унаследованных полей сущности. б/63522075
API/изменения поведения
-
mCallback
иmDatabase
вRoomDatabase
теперь@Deprecated
и будут удалены в следующей основной версии Room. б/76109329
Исправления ошибок
- Исправлены две проблемы, из-за которых Room не мог должным образом восстановиться после поврежденной базы данных или неправильной миграции во время инициализации. б/111504749 и б/111519144
- Room теперь будет правильно использовать основной конструктор Kotlin в классах данных, избегая необходимости объявлять поля как
vars
. б/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-бета01
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-бета3
19 апреля 2018 г.
Исправления ошибок
- Исправлена ошибка компиляции, когда POJO Kotlin ссылается на объект отношения, который был определен в Java b/78199923.
Версия 1.1.0-бета2
5 апреля 2018 г.
Исправления ошибок
Исправлена критическая ошибка в реализациях Rx
Single
иMaybe
от Room, из-за которой запрос заранее перерабатывался, вызывая проблемы, если вы добавляете более 1 наблюдателя к возвращенным экземплярамSingle
илиMaybe
. б/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] не будет
VACUUM
базу данных, если она вызывается внутри транзакции. б/77235565
Версия 1.1.0-бета1
21 марта 2018 г.
Изменения API
- Судя по отзывам API Review,
@RawQuery
больше не принимает передачуString
в качестве параметра запроса. Вам необходимо использовать [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (см. [SimpleSQLiteQuery][ref-SimpleSQLiteQuery], чтобы легко создать экземпляр [SupportSQLiteQuery][ref-SupportSQLiteQuery] с поддержкой аргументов). - Метод RoomDatabase.Builder [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] теперь принимает
vararg int
вместоvararg Integer
.
Исправления ошибок
- [RoomDatabase.clearAllTables][ref-clearAllTables] теперь пытается вернуть пространство обратно операционной системе, устанавливая контрольную точку WAL и выполняя
VACUUM
базы данных. - [
@RawQuery
][ref-RawQuery] теперь принимает любой Pojo для свойстваobservedEntities
, если Pojo ссылается на один или несколько объектов через своиEmbedded
поля илиRelation
. б/74041772 - Пейджинг: реализация DataSource в Room теперь правильно обрабатывает многотабличные зависимости (такие как отношения и соединения). Раньше они не могли вызвать новые результаты или не могли скомпилироваться. б/74128314
Версия 1.1.0-альфа1
22 января 2018 г.
Новые возможности
-
RawQuery
: этот новый API позволяет методам@Dao
получать SQL в качестве параметра запроса b/62103290 , b/71458963. -
fallBackToDestructiveMigrationsFrom
: этот новый API вRoomDatabase.Builder
обеспечивает более детальный контроль над тем, из каких стартовых версий схемы разрешены деструктивные миграции (по сравнению с FallbackToDestructiveMigration) b/64989640 - Room теперь поддерживает только новые API-интерфейсы подкачки (альфа-4+), а поддержка устаревшего
LivePagedListProvider
прекращена. Чтобы использовать новую альфа-версию Room, вам потребуется использовать пейджинговуюalpha-4
или более позднюю версию и переключиться сLivePagedListProvider
наLivePagedListBuilder
, если вы еще этого не сделали.
Исправления ошибок
- Улучшена поддержка типов Kotlin Kapt. б/69164099
- Порядок полей больше не делает схему недействительной. б/64290754