Комната

Библиотека сохранения данных Room обеспечивает уровень абстракции поверх SQLite, что позволяет обеспечить более надежный доступ к базе данных и при этом использовать всю мощь SQLite.
Последнее обновление Стабильный релиз Кандидат на релиз Бета-релиз Альфа-релиз
18 июня 2025 г. 2.7.2 - - -

Объявление зависимостей

Чтобы добавить зависимость от Room, необходимо добавить репозиторий Google Maven в свой проект. Прочтите репозиторий Google Maven для получения дополнительной информации.

Зависимости для Room включают в себя тестирование миграций Room и Room RxJava.

Добавьте зависимости для необходимых артефактов в файл build.gradle для вашего приложения или модуля:

Котлин

dependencies {
    val room_version = "2.7.2"

    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.7.2"

    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. Требуется KSP. Значение по умолчанию true с версии 2.7.0 . См. примечания к версии 2.6.0 , когда она была представлена, для получения более подробной информации.

Используйте плагин Room Gradle

С Room версии 2.6.0 и выше вы можете использовать Room Gradle Plugin для настройки параметров компилятора 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")
    }
}

Настройка schemaDirectory требуется при использовании Room Gradle Plugin. Это настроит компилятор Room и различные задачи компиляции и его бэкэнды (javac, KAPT, KSP) для вывода файлов схемы в ароматизированные папки, например schemas/flavorOneDebug/com.package.MyDatabase/1.json . Эти файлы должны быть проверены в репозитории для использования при проверке и автоматической миграции.

Некоторые параметры не могут быть настроены во всех версиях Room Gradle Plugin, хотя они поддерживаются компилятором Room. В таблице ниже перечислены все параметры и показана версия Room Gradle Plugin, в которой добавлена ​​поддержка настройки этого параметра с использованием расширения room . Если ваша версия ниже или параметр еще не поддерживается, вы можете использовать параметры процессора аннотаций .

Вариант Начиная с версии
room.schemaLocation (обязательно) 2.6.0
room.incremental -
room.generateKotlin -

Использовать параметры процессора аннотаций

Если вы не используете Room Gradle Plugin или если нужная вам опция не поддерживается вашей версией плагина, вы можете настроить Room с помощью опций процессора аннотаций, как описано в разделе Добавление зависимостей сборки . То, как вы указываете опции аннотаций, зависит от того, используете ли вы KSP или KAPT для Room.

Круто

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Котлин

// 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 знал об этом каталоге при проведении актуальных проверок. Migrate your Room database показывает полную реализацию CommandLineArgumentsProvider , которая предоставляет местоположение схемы.

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новый выпуск

Более подробную информацию смотрите в документации Issue Tracker .

Версия 2.7

Версия 2.7.2

18 июня 2025 г.

Выпущен androidx.room:room-*:2.7.2 . Версия 2.7.2 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​ошибка, из-за которой значения аннотаций неправильно считывались при обработке собственных источников с помощью KSP, иногда отсутствовал экспорт схемы. ( b/416549580 )
  • Исправлена ​​ошибка, из-за которой начальные комментарии в SQL-запросе приводили к выполнению операторов так, как если бы они были нечитаемыми запросами. ( b/413061402 )
  • Исправлена ​​ошибка, из-за которой плагин Gradle от Room не настраивался из-за пустого каталога схемы. ( b/417823384 )
  • Больше не выбрасывается SQLiteException , если получение соединения занимает слишком много времени, вместо этого библиотека отправляет сообщение журнала. Журналирование вместо выбрасывания работает в обход циклеров приостановки iOS, заставляя Room неправильно интерпретировать тайм-аут, который происходит в сопрограмме Kotlin, получающей соединение, и, таким образом, предотвращая выбрасывание исключения, когда приложение iOS переходит в фоновый режим и позже возобновляется в середине операции с базой данных. ( b/422448815 )

Версия 2.7.1

23 апреля 2025 г.

Выпущен androidx.room:room-*:2.7.1 . Версия 2.7.1 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​ошибка IndexOutOfBoundsException во время проверки предоставленного преобразователя типов. ( b/409804755 ).
  • Поддержка RoomDatabase.runInTransaction() , когда SQLiteDriver настроен с Room. ( b/408364828 ).

Версия 2.7.0

9 апреля 2025 г.

Выпущен androidx.room:room-*:2.7.0 . Версия 2.7.0 содержит эти коммиты .

Важные изменения по сравнению с версией 2.6.0

  • Поддержка Kotlin Multiplatform (KMP): В этом выпуске Room был рефакторингован и стал библиотекой Kotlin Multiplatform (KMP). Текущие поддерживаемые платформы: Android, iOS, JVM (Desktop), собственный Mac и собственный Linux. Для получения дополнительной информации о том, как начать использовать Room KMP, обратитесь к официальной документации Room KMP . В рамках поддержки KMP Room также можно настроить с помощью SQLiteDriver , для получения информации о том, как перенести существующее приложение в API драйвера и в Room KMP, см. документацию по миграции .
  • Генерация кода Kotlin на KSP включена по умолчанию, если обработка выполняется через KSP. Для проектов KAPT или Java only Room по-прежнему будет генерировать исходники Java.
  • Kotlin 2.0 и KSP2: Room теперь нацелен на язык Kotlin 2.0 и потребует, чтобы проекты также компилировались с Kotlin 2.0 и эквивалентной или более поздней языковой версией. Поддержка KSP2 также добавлена ​​и рекомендуется при использовании Room с Kotlin 2.0 или более поздней версией.

Версия 2.7.0-rc03

26 марта 2025 г.

Выпущен androidx.room:room-*:2.7.0-rc03 . Версия 2.7.0-rc03 содержит эти коммиты .

Исправление ошибок

  • Больше не выдается исключение InterruptedException , если поток прерывается во время выполнения API блокировки Room, включая функции блокировки DAO ( b/400584611 ).
  • Повторно реализовать пул соединений Room, чтобы попытаться устранить SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection. и аналогичные проблемы ( b/380088809 ).

Версия 2.7.0-rc02

12 марта 2025 г.

Выпущен androidx.room:room-*:2.7.0-rc02 . Версия 2.7.0-rc02 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​ошибка автоматической миграции, из-за которой некорректно обрабатывался новый столбец в таблице FTS. ( b/348227770 , Ic53f3 )
  • Исправлен сбой компилятора комнат из-за исключения NullPointerException при обработке не-JVM-источников через KSP. ( b/396607230 , I693c9 )
  • Исправлена ​​ошибка, из-за которой Room не делал таблицы недействительными в конце использования соединения для записи. ( b/340606803 , I73ef6 )

Версия 2.7.0-rc01

26 февраля 2025 г.

Выпущен androidx.room:room-*:2.7.0-rc01 . Версия 2.7.0-rc01 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​ошибка, из-за которой Room не устанавливал busy_timeout в начальном подключении к базе данных, что приводило к возникновению SQLException: Error code: 5, message: database is locked ( I93208 , b/380088809 ).
  • Исправлена ​​ошибка в компиляторе Room, которая могла приводить к сбою процессора KSP при обработке собственных исходных наборов (например, iOS) на Kotlin 2.1.x и KSP1 ( I883b8 , b/396607230 ).

Версия 2.7.0-beta01

12 февраля 2025 г.

Выпущен androidx.room:room-*:2.7.0-beta01 . Версия 2.7.0-beta01 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​проблема с RoomDatabase.inTransaction() открывающим закрытую базу данных, когда это нецелесообразно, и которая должна быстро возвращать false, если база данных закрыта ( b/325432967 ).
  • Исправлен сбой ( IllegalArgumentException: not a valid name ) в компиляторе Room при обработке функций DAO с использованием встроенных классов/классов значений Kotlin ( b/388299754 ).
  • Включите правила Proguard в артефакт JVM среды room-runtime чтобы конструктор по умолчанию сгенерированной реализации базы данных не удалялся, поскольку он используется инициализацией Room по умолчанию, которая использует отражение ( b/392657750 ).

Версия 2.7.0-альфа13

29 января 2025 г.

Выпущен androidx.room:room-*:2.7.0-alpha13 . Версия 2.7.0-alpha13 содержит эти коммиты .

Изменения API

  • Room теперь ориентирован на язык Kotlin 2.0 и потребует компиляции проектов с использованием языка Kotlin 2.0 и эквивалентной или более высокой версии языка. ( I8efb0 , b/315461431 , b/384600605 )

Исправление ошибок

  • Исправлена ​​ошибка в конструкторе баз данных Room KMP, когда в Android использовалось простое имя вместо пути, а разрешенный путь к файлу базы данных не находился в каталоге данных приложения. ( I83315 , b/377830104 )
  • Исправлена ​​ошибка с плагином Room Gradle, из-за которой настройка входов и выходов схемы вызывала проблему в проектах Android: property 'inputDirectory' is final and cannot be changed any further. ( 1dbb4c , b/376071291 )
  • Добавлена ​​поддержка KSP2 в плагин Room Gradle, что устраняет проблему, при которой плагин некорректно настраивал каталог схемы. ( Iec3c4 , b/379159770 )

Внешний вклад

  • Исправлена ​​проблема с интеграцией страниц Room , вызывающая скачки пользовательского интерфейса, когда начальная клавиша обновления находится слишком близко к концу списка. Спасибо Eva! ( I2abbe , b/389729367 )

Версия 2.7.0-альфа12

11 декабря 2024 г.

Выпущен androidx.room:room-*:2.7.0-alpha12 . Версия 2.7.0-alpha12 содержит эти коммиты .

Изменения API

  • Добавьте экспериментальный API RoomDatabase.Builder.setInMemoryTrackingMode() для настройки того, будет ли Room использовать таблицу в памяти для отслеживания недействительности. ( I2a9b2 , b/185414040 )

Исправление ошибок

  • Деструктивные миграции теперь удаляют представления, чтобы гарантировать их повторное создание, согласуя поведение, когда allowDestructiveMigrationForAllTables включен (значение по умолчанию KMP), с существующим поведением, когда он выключен. ( 0a3e83 , b/381518941 )

Версия 2.7.0-альфа11

30 октября 2024 г.

Выпущен androidx.room:room-*:2.7.0-alpha11 . Версия 2.7.0-alpha11 содержит эти коммиты .

Изменения API

  • Пересмотрите недавно добавленную сигнатуру метода convertRows() , чтобы она стала функцией приостановки, которая получает RawRoomQuery для разбиения по комнатам. ( Ie57b5 , b/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 , b/367205685 )
  • Добавьте SQLiteStatement.getColumnType() вместе с различными константами результата SQLITE_DATA_* , чтобы включить извлечение типа данных столбца. ( I1985c , b/369636251 )

Версия 2.7.0-альфа09

2 октября 2024 г.

Выпущен androidx.room:room-*:2.7.0-alpha09 . Версия 2.7.0-alpha09 содержит эти коммиты .

Исправление ошибок

  • Исправлена ​​проблема с реализацией KMP room-paging , которая могла привести к Error code: 8, message: attempt to write a readonly database из-за запуска транзакции записи в подключении для чтения. ( b/368380988 )

Версия 2.7.0-альфа08

18 сентября 2024 г.

Выпущен androidx.room:room-*:2.7.0-alpha08 . Версия 2.7.0-alpha08 содержит эти коммиты .

Новые возможности

  • Артефакты room-paging были перенесены для совместимости с KMP. ( Ib8756 , b/339934824 )
  • API invalidationTrackerFlow() был распространен как API первой стороны как InvalidationTracker.createFlow() и теперь доступен для исходных наборов, отличных от Android, в проектах KMP. ( I1fbfa , ( I8fb29 ), b/329291639 , b/329315924 )

Изменения API

  • Все предупреждения и сообщения об ошибках в Room, в которых используется слово Cursor , были удалены или заменены, поскольку Cursor больше не является точным общим термином для использования в версии Room для KMP. ( Id8cd9 , b/334087492 )

Исправление ошибок

  • Исправлена ​​ошибка, из-за которой Room KMP пытался выдать код с использованием UUID для платформ, отличных от JVM. ( b/362994709 )
  • Исправлена ​​проблема с плагином Room Gradle, которая могла вызывать ошибку типа «Невозможно изменить атрибуты конфигурации… после того, как она была заблокирована для мутации» при использовании в проекте KMP с Compose Multiplatform. ( b/343408758 )

Версия 2.7.0-альфа07

21 августа 2024 г.

Выпущен androidx.room:room-*:2.7.0-alpha07 . Версия 2.7.0-alpha07 содержит эти коммиты .

Новые возможности

  • Плагин Room Gradle теперь автоматически добавляет экспортированные схемы в источники ресурсов Android Instrumentation Test, чтобы их мог использовать MigrationTestHelper .

Исправление ошибок

  • Исправлена ​​проблема с сгенерированным «actual» RoomDatabaseConstructor , в котором отсутствовал модификатор «actual» в функции initialize если такая функция также переопределена в объявлении «expect». ( 359631627 )
  • Исправлена ​​проблема, из-за которой сгенерированное значение «actual» RoomDatabaseConstructor не соответствовало видимости объявления «expect». ( 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() . Новая стратегия выглядит следующим образом:

  1. Определите ожидаемый объект, реализующий RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Свяжите объект с объявлением @Database , используя @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Создать новый экземпляр базы данных, но без передачи аргумента фабрики

      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 , b/330586815 )
  • Добавьте перегрузку setQueryCallback() , которая принимает CoroutineContext . ( Id66ff , b/309996304 )
  • Добавлена ​​поддержка для целей linuxArm64 Kotlin Multiplatform ( I139d3 , b/338268719 )

Исправление ошибок

  • Исправлена ​​ошибка, из-за которой Room неправильно генерировал вызов recursiveFetchArrayMap в целевых устройствах, отличных от Android. ( 710c36 , b/352482325 )
  • Исправлена ​​ошибка, из-за которой иногда Room выдавал исключение «Истекло время ожидания при попытке подключения» в проекте KMP. ( fa72d0 , b/347737870 )
  • Исправлена ​​ошибка в автоматических миграциях, из-за которой проверка внешних ключей выполнялась слишком рано, до того, как другие таблицы изменяли свои схемы для соответствия новым внешним ключам. ( 7672c0 , b/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 был определен тип возвращаемого значения с несколькими картами. ( b/340983093 )
  • Исправлена ​​ошибка, из-за которой Room не мог найти сгенерированную реализацию базы данных, если аннотированный класс @Database не имел пакета. ( b/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 и изменениями поведения в новом компиляторе. ( b/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 Multiplatform (KMP) : в этом выпуске Room был рефакторингован, чтобы стать библиотекой Kotlin Multiplatform (KMP). Хотя еще предстоит проделать некоторую работу, в этом выпуске представлена ​​новая версия Room, в которой большая часть функциональности была «общепринята» (сделана многоплатформенной). Текущие поддерживаемые платформы: Android, iOS, JVM (Desktop), собственный Mac и собственный Linux. Любая отсутствующая функциональность в новых поддерживаемых платформах будет сделана «полноценной» в будущих выпусках Room.

Более подробную информацию о том, как начать использовать Room KMP, можно найти в официальной документации Room KMP .

  • Генерация кода Kotlin на KSP включена по умолчанию, если обработка выполняется через KSP. Для проектов KAPT или Java only Room по-прежнему будет генерировать исходники Java.

Изменения API

  • Добавлена ​​перегрузка Room.databaseBuilder() , которая принимает параметр лямбда, который должен использоваться с функцией, сгенерированной Room, чтобы избежать использования отражения при создании экземпляра сгенерированной реализации RoomDatabase . Пример использования:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • API для настройки Room с 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. Для получения дополнительной информации о миграции использования Room в приложении Android в общий модуль KMP обратитесь к руководству по миграции . Обратные вызовы:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • Артефакт KTX androidx.room:room-ktx был объединен с androidx.room:room-runtime вместе со всеми его API, артефакт теперь пустой. Пожалуйста, удалите его из списка зависимостей.

Версия 2.6

Версия 2.6.1

29 ноября 2023 г.

Выпущен androidx.room:room-*:2.6.1 . Версия 2.6.1 содержит эти коммиты.

Исправление ошибок

  • Решена проблема в сгенерированном коде, где значение по умолчанию для столбцов Double в EntityCursorConverter устанавливалось на 0 вместо 0.0. Также включено потенциальное исправление для аналогичного граничного случая для столбцов типа Float. ( Id75f5 , b/304584179 )
  • Исключения, выброшенные из загрузок PagingSource теперь будут распространяться как LoadStateUpdate LoadResult.Error , содержащий Throwable. Это состояние ошибки можно наблюдать через PagingDataAdapter.loadStateFlow(Views) или LazyPagingItems.loadState(Compose) . Обратите внимание, что это знаменует собой изменение поведения, когда в прошлом ошибки загрузки всплывали как исключение, выброшенное методом dao, который инициировал загрузку. ( I93887 , b/302708983 )

Версия 2.6.0

18 октября 2023 г.

Выпущен androidx.room:room-*:2.6.0 . Версия 2.6.0 содержит эти коммиты.

Важные изменения по сравнению с версией 2.5.0

  • Возможность включить генерацию кода Kotlin (или «Kotlin CodeGen») теперь доступна в Room KSP. ( 4297ec0 ). Чтобы включить Kotlin CodeGen в Room, добавьте имя параметра room.generateKotlin к параметрам процессора для KSP. Более подробную информацию о том, как передать параметры процессора для KSP, см. в документации KSP .

Примечание: При использовании Kotlin CodeGen важно отметить, что были добавлены дополнительные ограничения. Абстрактные свойства как геттеры DAO или запросы DAO в Kotlin CodeGen запрещены, и вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о том, что значение свойства является неизменяемым и имеет фиксированный сохраненный результат. Еще одно добавленное ограничение заключается в том, что возвращаемые типы коллекций Nullable больше не разрешены в Room for Kotlin CodeGen.

Предупреждение: Вы можете обнаружить, что ваши проекты более строги в отношении допустимости значений NULL при использовании Kotlin CodeGen. В Kotlin CodeGen допустимость значений NULL аргументов типа важна, тогда как в Java это в основном игнорируется. Например, предположим, что у вас есть `Flow ` возвращаемый тип, а таблица пуста. В Java CodeGen это не вызовет никаких проблем, но в Kotlin CodeGen вы получите ошибку. Чтобы этого избежать, вам нужно будет использовать `Flow `, предполагая, что выдается ноль.

  • Новый артефакт для Room Gradle Plugin был добавлен в Room с идентификатором androidx.room , который решает различные существующие проблемы в Room относительно наличия входов и выходов схем через параметры процессора аннотаций Gradle. Для получения более подробной информации см. заметки о выпуске Room Version 2.6.0-alpha02 .
  • Классы значений в сущностях комнат теперь поддерживаются для KSP. ( 4194095 )
  • В Room теперь поддерживаются возвращаемые типы вложенных карт в функциях DAO. ( I13f48 , 203008711 )

Версия 2.6.0-rc01

20 сентября 2023 г.

Выпущен androidx.room:room-*:2.6.0-rc01 . Версия 2.6.0-rc01 содержит эти коммиты.

Версия 2.6.0-beta01

23 августа 2023 г.

Выпущен androidx.room:room-*:2.6.0-beta01 . Версия 2.6.0-beta01 содержит эти коммиты.

Исправление ошибок

  • Обработка особого случая исключения SQLite во время upsert, возникающего при возникновении исключения 2067 SQLITE_CONSTRAINT_UNIQUE во время upsert, upsert должен выполнить обновление. ( If2849 , b/243039555 )

Версия 2.6.0-альфа03

9 августа 2023 г.

Выпущен androidx.room:room-*:2.6.0-alpha03 . Версия 2.6.0-alpha03 содержит эти коммиты.

Новые возможности

  • В Room теперь поддерживаются возвращаемые типы вложенных карт в функциях DAO. ( I13f48 , 203008711 )

Изменения API

  • Была создана новая аннотация типа @MapColumn для замены @MapInfo , которая теперь устарела. Для каждого имени столбца ( keyColumnName , valueColumnName или обоих), указанного в аннотации @MapInfo , вам нужно будет объявить аннотацию @MapColumn только с columnName и использовать аннотацию для конкретного аргумента типа, на который ссылаются (ключ или значение Map) в возвращаемом типе функции DAO. Это связано с тем, что аннотация @MapColumn используется непосредственно для аргумента типа в возвращаемом типе функции DAO, а не для самой функции, как @MapInfo . Для получения дополнительной информации обратитесь к документации @MapColumn . ( Ib0305 , b/203008711 )
  • Обновлены файлы API для аннотации подавления совместимости ( I8e87a , b/287516207 )
  • API плагина Room Gradle были обновлены, чтобы не всегда требовать конфигураций для каждого варианта. Это означает, что плагин может принимать глобальное местоположение для всех вариантов без создания нескольких каталогов, что обеспечивает более плавные миграции, но при этом достаточно гибкие для ручной настройки вкусов или схем типов сборки, сохраняя при этом преимущества плагина (воспроизводимые и кэшируемые сборки). ( I09d6f , b/278266663 )

Исправление ошибок

  • Исправлена ​​потенциальная уязвимость утечки памяти в QueryInterceptorStatement . ( I193d1 )
  • Исправлено некорректное поведение функции QueryInterceptorDatabase execSQL() . ( Iefdc8 )

Версия 2.6.0-альфа02

21 июня 2023 г.

Выпущен androidx.room:room-*:2.6.0-alpha02 . Версия 2.6.0-alpha02 содержит эти коммиты.

Плагин Room Gradle

Этот новый релиз содержит новый артефакт для Room Gradle Plugin с идентификатором androidx.room , который решает различные существующие проблемы в Room, касающиеся наличия входов и выходов схем через параметры процессора аннотаций Gradle. Room Gradle Plugin настраивает проект таким образом, что сгенерированные схемы, которые используются для автомиграций и являются выходом задач компиляции, правильно настраиваются для воспроизводимых и кэшируемых сборок. Плагин предлагает DSL для настройки расположения базовой схемы:

room {
    schemaDirectory("$projectDir/schemas/")
}

Затем плагин настроит компилятор Room и различные задачи компиляции и его бэкэнды (javac, KAPT, KSP) для вывода файлов схемы в папки flavor, например schemas/flavorOneDebug/com.package.MyDatabase/1.json . Как обычно, эти файлы проверяются в репозитории для использования при проверке и автоматической миграции. При переходе на использование плагина вместо параметров процессора аннотаций существующие файлы схемы должны быть скопированы в сгенерированные каталоги flavor, созданные плагином, это одноразовая операция миграции, которую необходимо выполнить вручную. Документация по схеме на сайте developers.android.com будет обновлена ​​в будущем, как только будут рассмотрены отзывы и плагин станет стабильным, поэтому, пожалуйста, попробуйте.

Изменения API

  • RoomDatabase.QueryCallback был определен как функциональный интерфейс, позволяющий использовать преобразование SAM. ( Iab8ea , b/281008549 )

Исправление ошибок

  • Устранение проблемы, возникающей при создании экземпляра базы данных в Robolectric после миграции источников Room с Java на Kotlin. ( Ic053c , b/274924903 )

Версия 2.6.0-альфа01

22 марта 2023 г.

Выпущен androidx.room:room-*:2.6.0-alpha01 . Версия 2.6.0-alpha01 содержит эти коммиты.

Новые возможности

  • Поддержка классов значений в Room для KSP. Room теперь может поддерживать классы значений в Entities. ( 4194095 )
  • Генерацию кода Kotlin (или «Kotlin CodeGen») теперь можно включить в Room ( 4297ec0 ). Чтобы включить Kotlin CodeGen в Room, добавьте имя параметра room.generateKotlin к параметрам процессора для KSP. Более подробную информацию о том, как передать параметры процессора для KSP, см. в документации KSP .

Примечание: При использовании Kotlin CodeGen важно отметить, что были добавлены дополнительные ограничения. Абстрактные свойства как геттеры DAO или запросы DAO в Kotlin CodeGen запрещены, и вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о том, что значение свойства является неизменяемым и имеет фиксированный сохраненный результат. Еще одно добавленное ограничение заключается в том, что возвращаемые типы коллекций Nullable больше не разрешены в Room for Kotlin CodeGen.

Предупреждение: Вы можете обнаружить, что ваши проекты более строги в отношении допустимости значений NULL при использовании Kotlin CodeGen. В Kotlin CodeGen допустимость значений NULL аргументов типа важна, тогда как в Java это в основном игнорируется. Например, предположим, что у вас есть `Flow ` возвращаемый тип, а таблица пуста. В Java CodeGen это не вызовет никаких проблем, но в Kotlin CodeGen вы получите ошибку. Чтобы этого избежать, вам нужно будет использовать `Flow `, предполагая, что выдается ноль.

Изменения API

  • Защита от бессмысленного использования коллекций, допускающих значение NULL, в возвращаемых типах методов DAO. ( I777dc , b/253271782 , b/259426907 )
  • Добавить API для создания потока, который выдает изменения трекера недействительности. API полезен для создания потоков, которые должны реагировать на изменения базы данных. ( I8c790 , b/252899305 )

Исправление ошибок

  • Запретить абстрактные свойства как геттеры DAO или запросы DAO в коде Kotlin. Вместо этого их следует переписать как функции, чтобы избежать ложного представления о том, что значение свойства является неизменным и имеет фиксированный сохраненный результат. ( If6a13 , b/127483380 , b/257967987 )

Версия 2.5.2

Версия 2.5.2

21 июня 2023 г.

Выпущен androidx.room:room-*:2.5.2 . Версия 2.5.2 содержит эти коммиты.

Исправление ошибок

  • Исправлена ​​проблема несовместимости с kotlinx-metadata-jvm. ( 386d5c )
  • Исправлена ​​ошибка, из-за которой Room выдавал ошибку при использовании в тесте Robolectric. ( f79bea , b/274924903 )

Версия 2.5.1

Версия 2.5.1

22 марта 2023 г.

Выпущен androidx.room:room-*:2.5.1 . Версия 2.5.1 содержит эти коммиты.

Исправление ошибок

  • Избегайте проверки родительского каталога базы данных в FrameworkSQLiteHelper , если база данных уже открыта. ( 5de86b8 )
  • Используйте проверку isOpenInternal при проверке того, открыта ли уже база данных. ( e91fb35 )
  • Теперь доступна улучшенная обработка случая повторного входа в acquireTransactionThread() из Room . ( 219f98b ). Во время приостанавливающей транзакции Room использует поток из исполнителя транзакции, запускает в нем цикл событий и отправляет ему приостанавливающие операции базы данных, чтобы они все были инкапсулированы в сопрограмме транзакции. Обычно ожидается, что поток транзакции отличается от того, который запускает транзакцию, но в некоторых случаях они одинаковы. Для обработки таких случаев повторного входа withTransaction() был рефакторингован, чтобы больше не полагаться на задание управления, и вместо этого он будет выполнять блок приостанавливающей транзакции из runBlocking в потоке транзакции.

Версия 2.5.0

Версия 2.5.0

22 февраля 2023 г.

Выпущены androidx.room:room-paging-guava:2.5.0 , androidx.room:room-paging-rxjava2:2.5.0 и androidx.room:room-paging-rxjava3:2.5.0 . Версия 2.5.0 содержит эти коммиты.

Версия 2.5.0

11 января 2023 г.

Выпущен androidx.room:room-*:2.5.0 . Версия 2.5.0 содержит эти коммиты.

Важные изменения по сравнению с версией 2.4.0

  • Все источники room-runtime были преобразованы из Java в Kotlin. Обратите внимание, что вы можете столкнуться с проблемами несовместимости исходного кода, если ваш код написан на Kotlin из-за преобразования библиотеки в Kotlin. Например, известное изменение несовместимости исходного кода заключается в том, что в InvalidationTracker теперь вам нужно будет объявить onInvalidate() в Observer , чтобы иметь параметр типа Set , а не MutableSet . Более того, некоторые методы getter были преобразованы в свойства, требующие синтаксиса доступа к свойствам в файлах Kotlin. Пожалуйста, сообщите об ошибке, если есть какие-либо существенные несовместимости.
  • Добавлена ​​новая аннотация быстрого доступа @Upsert , которая пытается вставить сущность, если нет конфликта уникальности, или обновить сущность, если есть конфликт. ( I7aaab , b/241964353 )
  • Для поддержки Room Paging были добавлены новые артефакты room-paging-rxjava2 , room-paging-rxjava3 и room-paging-guava .
  • Добавлены API для предоставления имен таблиц ключей и значений для устранения неоднозначности в @MapInfo ( Icc4b5 )

Версия 2.5.0-rc01

7 декабря 2022 г.

Выпущен androidx.room:room-*:2.5.0-rc01 . Версия 2.5.0-rc01 содержит эти коммиты.

  • Этот выпуск идентичен 2.5.0-beta02 .

Версия 2.5.0-beta02

9 ноября 2022 г.

Выпущен androidx.room:room-*:2.5.0-beta02 . Версия 2.5.0-beta02 содержит эти коммиты.

Изменения API

  • Исправлены различные API, которые переводят аргументы запроса из инвариантных ( Array<Any?> ) в контравариантные ( Array<out Any?> ), чтобы соответствовать поведению массивов Java. ( b/253531073 )

Версия 2.5.0-beta01

5 октября 2022 г.

Выпущен androidx.room:room-*:2.5.0-beta01 . Версия 2.5.0-beta01 содержит эти коммиты.

Изменения API

  • Ограничить минимальную версию, поддерживающую @Upsert , API 16. Это связано с невозможностью идентифицировать конфликт ограничений первичного ключа в старых API. ( I5f67f , b/243039555 )

Исправление ошибок

  • Исправлена ​​ошибка, из-за которой теневые таблицы неправильно экспортировались в файлы схемы .json , что приводило к их повреждению. ( I4f83b , b/246751839 )

Версия 2.5.0-альфа03

24 августа 2022 г.

Выпущен androidx.room:room-*:2.5.0-alpha03 . Версия 2.5.0-alpha03 содержит эти коммиты.

Новые возможности

  • Добавлена ​​новая аннотация быстрого доступа @Upsert , которая пытается вставить сущность, если нет конфликта уникальности, или обновить сущность, если есть конфликт. ( I7aaab , b/241964353 )

Исправление ошибок

  • Room теперь будет выдавать исключение SQLiteConstraintException вместо IllegalStateException во время проверки ограничения внешнего ключа при автоматической миграции. ( I328dd )
  • Исправлено несовместимое изменение исходного кода Kotlin для геттера/свойств getOpenHelper , getQueryExecutor и getTransactionExecutor . ( Iad0ac )

Версия 2.5.0-альфа02

1 июня 2022 г.

Выпущен androidx.room:room-*:2.5.0-alpha02 . Версия 2.5.0-alpha02 содержит эти коммиты.

Новые возможности

Изменения API

  • Все room-runtime были преобразованы из Java в Kotlin. ( If2069 , b/206859668 ),( Ie4b55 , b/206859668 ), ( I697ee , b/206859668 ), ( I96c25 , b/206859668 )

    Примечание. Вы можете столкнуться с проблемами несовместимости источника из -за преобразования библиотеки в Котлин. Если ваш код был в Котлине и вызывает старую версию комнаты, новая версия должна будет обратиться к этим случаям. Например, известное несовместимое изменение - это то, что в InvalidationTracker вам теперь нужно будет объявить onInvalidate() в Observer , чтобы иметь парамет Set типов, а не MutableSet .

  • Добавлены API для предоставления имен таблиц ключей и значений для устранения неоднозначности в @MapInfo ( ICC4B5 )
  • Исправьте проблему совместимости источника, чтобы повторно пропустить @Ignore в Getters. ( Ifc2fb )

Исправление ошибок

  • Дубликат эвристический алгоритм разрешения столбцов. Комната теперь попытается разрешить неоднозначные колонны в многомапентном запросе. Это позволяет правильно сопоставить соединения с таблицами, содержащими таблицы одинакового имени, с объектом данных результата. ( I4B444 , B/201306012 , B/212279118 )

Версия 2.5.0-Alpha01

23 февраля 2022 г.

androidx.room:room-*:2.5.0-alpha01 выпускается. Версия 2.5.0-Alpha01 содержит эти коммиты.

API меняется

  • Исправлена проблема, в которой использование комнаты @IntDef не применялось в источниках Котлина. ( I75f41 , b/217951311 )
  • Исправлена проблема совместимости источника, чтобы повторно пропустить @Query в Getters. ( I0A09B )
  • Преобразованная комната Коммон от Java в Котлин. ( I69C48 , B/206858235 )

    Примечание. Вы можете столкнуться с проблемами несовместимости источника, так как некоторые свойства были перемещены в сопутствующие объекты во время преобразования библиотеки в Котлин. Если ваш код был в Котлине и вызывает старую версию комнаты, новой версии потребуется суффикс «.companion» при доступе к этим свойствам.

  • Переданная миграция комнаты из Явы в Котлин. ( I2724b , b/206858622 )
  • Конвертированные файлы, связанные с paging в room-runtime от Java в Kotlin. ( I82fc8 , b/206859668 )
  • Добавлен API для многопроцессового блокировки и использования на уровне FrameworksQlite*, чтобы защитить многопроцессные 1-е время создания и миграции базы данных. ( IED267 , B/193182592 )

Исправление ошибок

  • Добавлена поддержка внутренних свойств в источниках Котлина. Это небольшое изменение поведения в комнате, где она будет использовать имя источника функций, соответствуя их свойствам в качестве геттеров/сеттеров (ранее он использовал имя JVM функции, которая отличается для внутренних функций/свойств). Если вы используете пользовательские аннотации @JvmName , чтобы соответствовать getters/setters с частными свойствами, пожалуйста, дважды проверьте сгенерированный код после обновления ( if6531 , b/205289020 )

Версия 2.4.3

Версия 2.4.3

27 июля 2022 г.

androidx.room:room-*:2.4.3 выпущен. Версия 2.4.3 содержит эти коммиты.

Исправление ошибок

  • Исправлена ​​проблема, из -за которой место не распознает функции приостановки в Kotlin 1.7 ( B/236612358 )

Версия 2.4.2

Версия 2.4.2

23 февраля 2022 г.

androidx.room:room-*:2.4.2 выпущен. Версия 2.4.2 содержит эти коммиты.

Исправление ошибок

  • Исправьте проблему, генерирующую код для функции DAO @Transaction Survend с помощью корпуса, который генерирует метод интерфейса по умолчанию из -за компиляции с -Xjvm-default=all или эквивалент. ( IA4CE5 )
  • Устранение ошибки, в которой комната генерирует код для Array<ByteArray> метода запроса типа возврата. ( If086e , b/213789489 )

Версия 2.4.1

Версия 2.4.1

12 января 2022 года

androidx.room:room-*:2.4.1 выпущен. Версия 2.4.1 содержит эти коммиты.

Исправление ошибок

  • Добавлена поддержка внутренних свойств в источниках Котлина. Это небольшое изменение поведения в комнате, где она будет использовать имя источника функций, соответствуя их свойствам в качестве геттеров/сеттеров (ранее он использовал имя JVM функции, которая отличается для внутренних функций/свойств). Если вы используете пользовательские аннотации @JvmName , чтобы соответствовать getters/setters с частными свойствами, пожалуйста, дважды проверьте сгенерированный код после обновления ( if6531 , b/205289020 )

Версия 2.4.0

Версия 2.4.0

15 декабря 2021 г.

androidx.room:room-*:2.4.0 выпущен. Версия 2.4.0 содержит эти коммиты.

Важные изменения с 2.3.0

  • Авто Миграция : Комната теперь предлагает API для автоматического генерирования миграций, если схемы экспортируются. Чтобы комната знала, что он должен генерировать автоматическую миграцию, новая собственность @Database#autoMigrations может использоваться для объявления версий для автоматической миграции из и. Когда комната нуждается в дополнительной информации о таблицах и переиме на столбцах или удалениях, тогда аннотация @AutoMigration может объявить спецификационный класс, содержащий такие входы. Смотрите документацию @AutoMigration для получения более подробной информации.
  • Инъекция зависимости в авто миграциях : @ProvidedAutoMigrationSpec - это новый API для объявления, что AutoMigrationSpec будет предоставлен во время выполнения через RoomDatabase.Builder#addAutoMigrationSpec() . Это позволяет рамке впрыска в зависимости, чтобы обеспечить такие характеристики, когда им нужны сложные зависимости.
  • Поддержка вспомогательной миграции для автоматических миграций : MigrationTestHelper в комнате была обновлена для поддержки автоматических миграций путем предоставления нового API конструктора, который получает тест на класс базы данных. Это позволяет помощнику автоматически добавлять автоматические миграции таким же образом во время runMigrationsAndValidate .
  • Поддержка в комнате : androidx.room:room-paging : Proome Priseparing, обеспечивающая поддержку Paging 3.0 для комнатных запросов, возвращающих androidx.paging.PagingSource .
  • Методы реляционного запроса : комната теперь поддерживает типы возврата мультимапа @Dao Методы, полезные для операторов соединения. Поддерживаемыми типами мультимапа являются Map , SparseArray , LongSparseArray , наряду с ImmutableMap Guava, ImmutableSetMultimap и ImmutableListMultimap .

Версия 2.4.0-RC01

1 декабря 2021 г.

androidx.room:room-*:2.4.0-rc01 : room-*:2.4.0-RC01 выпускается. Версия 2.4.0-RC01 содержит эти коммиты.

Новые возможности

  • Обновите зависимость комнаты от KSP до 1.6.0-1.0.1 для поддержки Kotlin 1.6

Версия 2.4.0-бета02

17 ноября 2021 г.

androidx.room:room-*:2.4.0-beta02 : Room -*:2.4.0-BETA02 выпущен. Версия 2.4.0-бета02 содержит эти коммиты.

Новые возможности

  • Мы добавили поддержку Sparsearray и Longsparsearray в @mapinfo. ( IC91A2 B/138910317 )

Исправление ошибок

  • Мы добавили новый Analyzer 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 : room-*: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 : Room -*: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 : Room -*: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 : Room -*: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 : room-*: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 )
  • Опция по обработке постепенных аннотаций Room теперь включена по умолчанию. ( 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 в качестве замены для оптимизации комнат с помощью звездных проекций. Обратите внимание @Embedded что @RewriteQueriesToDropUnusedColumns не заменяет 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 : Room-Common:2.2.4, androidx.room:room-compiler:2.2.4 : androidx.room:room-runtime:2.2.4 androidx.room:room-guava:2.2.4 androidx.room:room-ktx:2.2.4 androidx.room:room-migration:2.2.4 Ktx:2.2 androidx.room:room-rxjava2:2.2.4 : androidx.room:room-testing:2.2.4 :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 в одни и те же столбцы, то вам, возможно, потребуется предоставить миграцию для проверки беспрепятственных значений по умолчанию. Смотрите миграцию номера для получения дополнительной информации.

  • Many-to-Many Relations : @Relation now has a new property associateBy , that takes in a new annotation @Junction , used to declare a relation that needs to be satisfied via a junction table (also known as a join table). b/69201917
  • One-to-One Relations : The restriction in POJO fields annotated with @Relation to be of type List or Set has been lifted, effectively allowing single-value relations to be represented. b/62905145
  • Target Entity : The DAO annnotations @Insert , @Update and @Delete now has a new property targetEntity , that allows specifying the target table the DAO method is meant to act on. This allows for the parameters of those DAO methods to be arbitrary POJOs which will be interpreted as partial entities. In practice, this allows partial inserts, deletes and updates. b/127549506
  • Gradle Incremental Annotation Processor : Room is now a Gradle isolating annotation processor and incrementability can be enabled via the processor option room.incremental . See Room Compiler Options for more information. If you encounter any issues please file a bug here . We plan to enable incrementability by default in a future, stable version. b/112110217

Исправление ошибок

  • Room will no longer propagate the EmptySetResultException to the global error handler when the Rx stream of a query has been disposed before the query is complete. b/130257475
  • Fixed a bug where Room would show an incorrect error message when a suspend DAO function annotated with @RawQuery didn't have a return type. b/134303897
  • Room will no longer generate DAO adapters with raw types. b/135747255

Версия 2.1.0

Версия 2.1.0

13 июня 2019 г.

Room 2.1.0 is released with no changes from 2.1.0-rc01 . The commits included in the version can be found here .

Important changes since 2.0.0

  • 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.
  • Views : Room now supports declaring a class as a stored query, also known as a view , using the @DatabaseView annotation.
  • Couroutines : DAO methods can now be suspend functions. Include room-ktx in your dependencies to take advantage of this functionality. The ktx artifact also provides the extension function RoomDatabase.withTransaction for performing database transactions within a coroutine.
  • 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's abstract methods. Note that these annotation must also be accompanied by @CopyAnnotations for Room to properly understand them.
  • Additional Async Support : DAO methods annotated with @Insert , @Delete or @Update , along with @Query containing INSERT , DELETE or UPDATE statements, now support Rx return types Completable , Single , Maybe , and Guava's return type ListenableFuture , and they can also be suspend functions.
  • enableMultiInstanceInvalidation is a new API in RoomDatabase.Builder to enable invalidation across multiple instances of RoomDatabase using the same database file.
  • fallbackToDestructiveMigrationOnDowngrade is a new API in RoomDatabase.Builder to automatically re-create the database if a downgrade happens.
  • ignoredColumns is a new API in the @Entity annotation that can be used to list ignored fields by name.
  • Room will now properly use Kotlin's primary constructor in data classes avoiding the need to declare the properties as vars .

Version 2.1.0-rc01

29 мая 2019 г.

Исправление ошибок

  • Fixed a Room initialization error that might occur due to an already setup temp_store configuration. b/132602198
  • Fixed a double quote usage warning for users with SQLite 3.27.0 and above. b/131712640
  • Fixed a bug where the InvalidationTracker would cause a crash when multiple invalidation checks would occur in parallel. b/133457594

Version 2.1.0-beta01

7 мая 2019 г.

androidx.room 2.1.0-beta01 is released with no changes from 2.1.0-alpha07. The commits included in this version can be found here .

Version 2.1.0-alpha07

April 25, 2019

API / Behavior Changes

  • The extension function RoomDatabase.withTransaction has been changed to no longer take a function block with a CoroutineScope as receiver. This prevents skipping the additional coroutineScope { } wrapper required to run things in the transaction block concurrently.

Исправление ошибок

  • Fixed a bug where Room would fail to match a TypeConverter for a Kotlin DAO function containing a parameter of Collection type. b/122066791

Version 2.1.0-alpha06

22 марта 2019 г.

API / Behavior Changes

  • Async transaction queries are now serialized such that Room will not use more than one thread for executing database transactions. RoomDatabase.Builder.setTransactionExecutor(Executor) was added to allow configuring the executor to be used for transactions.
  • RoomDatabase.runInTransaction(Callable) will no longer wrap checked exceptions into 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 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 the room-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 to room-ktx following the same naming as other androidx artifacts.
  • beginTransaction , setTransactionSuccessful and endTransaction in RoomDatabase have been deprecated in favor of runInTransaction and the room-ktx extension function withTransaction .

Исправление ошибок

  • 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 with INSERT , UPDATE or DELETE 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 adding maven { url "https://kotlin.bintray.com/kotlinx/" } to your project repositories.

Version 2.1.0-alpha04

January 25, 2019

Новые возможности

  • DAO methods annotated with @Query containing INSERT , UPDATE or DELETE statements can now return async types Single , Mayble , Completable and ListenableFuture . 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 as Single , Mayble , Completable , LiveData or ListenableFuture . 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 and OnConflictStrategy.ROLLBACK have been @Deprecated since they do not behave as intended with Android's current SQLite bindings. b/117266738

Исправление ошибок

  • 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() and endTransaction() . b/120854786

Version 2.1.0-alpha03

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 in FtsOptions 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 support ListenableFuture as return type. b/119418331

Исправление ошибок

  • 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 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 an IN 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

30 октября 2018 г.

Новые возможности

  • Added support for referencing a @DatabaseView in a @Relation . b/117680932

Исправление ошибок

  • 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 SQLite grammar parser, fixing a performance issue that would cause long build times. b/117401230

Version 2.1.0-alpha01

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 types Completable , Single<T> and Maybe<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 in RoomDatabase.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 in RoomDatabase.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 and mDatabase in RoomDatabase are now @Deprecated and will be removed in the next major version of Room. b/76109329

Исправление ошибок

  • 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

Версия 2.0.0

Версия 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

Исправление ошибок

  • 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"
}

Версия 1.1.1

Версия 1.1.1

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 г.

Исправление ошибок

  • 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

Исправление ошибок

  • Fixed a critical bug in Room Rx Single and Maybe implementations where it would recycle the query ahead of time, causing problems if you add more than 1 observer to the returned Single or Maybe instances. 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 a String 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 of vararg Integer .

Исправление ошибок

  • [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 the observedEntities property as long as the Pojo references to one or more entities via its Embedded fields or Relation 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

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 in RoomDatabase.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 paging alpha-4 or higher, and switch from LivePagedListProvider to LivePagedListBuilder if you haven't already.

Исправление ошибок

  • Improved support for Kotlin Kapt types. b/69164099
  • Order of fields do not invalidate schema anymore. b/64290754