Комната

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

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

Чтобы добавить зависимость от 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 для настройки параметров компилятора Room. Плагин настраивает проект таким образом, чтобы сгенерированные схемы (которые являются результатом задач компиляции и используются для автоматической миграции) были правильно настроены для создания воспроизводимых и кэшируемых сборок.

Чтобы добавить плагин, в файле сборки Gradle верхнего уровня определите плагин и его версию.

Круто

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Котлин

plugins {
    id("androidx.room") version "$room_version" apply false
}

В файле сборки Gradle на уровне модуля примените плагин и используйте расширение room .

Круто

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Котлин

plugins {
    id("androidx.room")
}

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

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

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

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

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

Если вы не используете плагин Room Gradle или нужная вам опция не поддерживается вашей версией плагина, вы можете настроить Room с помощью параметров обработчика аннотаций, как описано в разделе Добавление зависимостей сборки . Способ указания параметров аннотаций зависит от того, используете ли вы KSP или KAPT для 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 знал об этом каталоге при проведении проверок актуальности. В разделе «Миграция базы данных Room» представлена ​​полная реализация CommandLineArgumentsProvider , которая указывает местоположение схемы.

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

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

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

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

Версия 2.8

Версия 2.8.0-rc02

27 августа 2025 г.

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

Изменения API

  • Обновление minSDK с API 21 до API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )
  • Обновите минимальную версию Android Gradle Plugin (AGP), совместимую с Room Gradle Plugin, с 8.1 до 8.4. ( Ia0d28 )

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

  • Исправлена ​​проблема, из-за которой выполнялась деструктивная миграция, даже если путь миграции был доступен для предварительно упакованной базы данных ( b/432634197 ).

Версия 2.8.0-rc01

13 августа 2025 г.

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

Изменения API

  • Удаление устаревших аннотаций @RequiresApi(21) ( Ic4792 , I9103b )

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

  • Исправлена ​​ошибка, из-за которой Room Flows не выдавал последний результат запроса в ситуации асинхронного множественного запроса/записи. ( Ic9a3c )

Версия 2.8.0-beta01

1 августа 2025 г.

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

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

  • Имена таблиц и представлений теперь корректно экранируются во время деструктивных миграций. ( 9e55f8 , b/427095319 )

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

16 июля 2025 г.

Выпущена версия androidx.room:room-*:2.8.0-alpha01 . Версия 2.8.0-alpha01 содержит следующие коммиты .

Новые функции

  • Добавлен новый артефакт androidx.room:room-sqlite-wrapper , содержащий API для получения обёртки SupportSQLiteDatabase для RoomDatabase с настроенным SQLiteDriver . Для получения обёртки используйте новую функцию расширения RoomDatabase.getSupportWrapper() . Это артефакт совместимости, позволяющий поддерживать использование SupportSQLiteDatabase , обычно получаемого из RoomDatabase.openHelper.writableDatabase , даже если база данных Room настроена с SQLiteDriver . Эта обёртка полезна для инкрементальной миграции кодовых баз, которые хотят внедрить SQLiteDriver , но при этом активно используют API SupportSQLite , но при этом хотят использовать BundledSQLiteDriver . ( Icf6ac )
  • Добавить цели KMP для Watch OS и TV OS ( I228f6 , b/394238801 )

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

  • Исправлена ​​взаимоблокировка, которая иногда могла возникать при использовании приостановленных транзакций и AndroidSQLiteDriver . ( b/415006268 )

Версия 2.7

Версия 2.7.2

18 июня 2025 г.

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

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

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

Версия 2.7.1

23 апреля 2025 г.

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

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

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

Версия 2.7.0

9 апреля 2025 г.

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

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

  • Поддержка Kotlin Multiplatform (KMP): В этом выпуске библиотека Room была переработана и стала библиотекой Kotlin Multiplatform (KMP). В настоящее время поддерживаются следующие платформы: Android, iOS, JVM (для настольных компьютеров), Mac и Linux. Подробнее о начале работы с Room KMP см. в официальной документации по Room KMP . В рамках поддержки KMP Room также можно настроить с помощью SQLiteDriver . Подробнее о миграции существующего приложения на API драйверов и в Room KMP см. в документации по миграции .
  • Генерация кода Kotlin в KSP включена по умолчанию, если обработка выполняется через KSP. Для проектов KAPT или Java Room по-прежнему будет генерировать исходный код Java.
  • Kotlin 2.0 и KSP2: Room теперь ориентирован на язык программирования Kotlin 2.0 и потребует компиляции проектов на Kotlin 2.0 и эквивалентной или более поздней версии. Также добавлена ​​поддержка KSP2, которая рекомендуется при использовании Room с 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 )
  • Исправлена ​​проблема, из-за которой сгенерированное «фактическое» значение RoomDatabaseConstructor не соответствовало видимости объявления «ожидаемое». ( 358138953 )

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

7 августа 2024 г.

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

Изменения API

  • Измените настройку создания экземпляра RoomDatabase в проекте KMP.

Благодаря модели компиляции Kotlin 2.0 стратегия ссылки на сгенерированную функцию с именем instantiateImpl() больше не актуальна. Представлены два новых API, @ConstructedBy и RoomDatabaseConstructor , которые заменяют стратегию instantiateImpl() . Новая стратегия выглядит следующим образом:

  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 (для настольных компьютеров), Mac и Linux. Любые отсутствующие функции в новых поддерживаемых платформах будут полностью реализованы в следующих выпусках Room.

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

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

Изменения API

  • Добавлена ​​перегрузка Room.databaseBuilder() , принимающая лямбда-параметр, предназначенный для использования с генерируемой функцией Room, чтобы избежать использования рефлексии при создании экземпляра сгенерированной реализации RoomDatabase . Пример использования:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • В конструктор добавлен API для настройки 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, запрещены. Вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о неизменяемости значения свойства и наличии фиксированного сохранённого результата. Ещё одно добавленное ограничение заключается в том, что в Room for Kotlin CodeGen больше не допускаются возвращаемые типы коллекций, допускающие значение Null.

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

  • В Room добавлен новый артефакт для плагина Room Gradle с идентификатором androidx.room , который решает ряд существующих проблем Room, связанных с доступом к входным и выходным данным схем через параметры процессора аннотаций Gradle. Подробнее см. в примечаниях к выпуску Room версии 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 во время обновления и вставки, возникающего, когда во время обновления и вставки возникает исключение 2067 SQLITE_CONSTRAINT_UNIQUE , обновление должно быть выполнено. ( 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 с идентификатором androidx.room , который решает различные существующие проблемы Room, связанные с доступом к входным и выходным данным схем через параметры процессора аннотаций Gradle. Плагин Room Gradle настраивает проект таким образом, чтобы сгенерированные схемы, используемые для автоматической миграции и являющиеся выходными данными задач компиляции, были правильно настроены для создания воспроизводимых и кэшируемых сборок. Плагин предоставляет DSL для настройки расположения базовой схемы:

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

Затем плагин настроит компилятор Room, различные задачи компиляции и его бэкенды (javac, KAPT, KSP) для вывода файлов схемы в папки с разметкой, например, schemas/flavorOneDebug/com.package.MyDatabase/1.json . Как обычно, эти файлы регистрируются в репозитории для проверки и автоматической миграции. При переходе на использование плагина вместо обработчика аннотаций существующие файлы схемы необходимо скопировать в сгенерированные плагином каталоги разметки. Это однократная операция миграции, которую необходимо выполнить вручную. Документация по схеме на сайте developer.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, запрещены. Вместо этого ожидается, что они будут переписаны как функции, чтобы избежать ложного представления о неизменяемости значения свойства и наличии фиксированного сохранённого результата. Ещё одно добавленное ограничение заключается в том, что в Room for Kotlin CodeGen больше не допускаются возвращаемые типы коллекций, допускающие значение Null.

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

Изменения API

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

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

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

Версия 2.5.2

Версия 2.5.2

21 июня 2023 г.

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

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

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

Версия 2.5.1

Версия 2.5.1

22 марта 2023 г.

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

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

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

Версия 2.5.0

Версия 2.5.0

22 февраля 2023 г.

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

Версия 2.5.0

11 января 2023 г.

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

Важные изменения с версии 2.4.0

  • Все исходные коды room-runtime были преобразованы с Java в Kotlin. Обратите внимание, что вы можете столкнуться с проблемами несовместимости исходного кода, если ваш код написан на Kotlin из-за преобразования библиотеки в Kotlin. Например, известное изменение, связанное с несовместимостью исходного кода, заключается в том, что в InvalidationTracker теперь необходимо объявить onInvalidate() в Observer с параметром типа Set , а не MutableSet . Более того, некоторые методы-геттеры были преобразованы в свойства, требующие синтаксиса доступа к свойствам в файлах Kotlin. Пожалуйста, сообщите об ошибке, если обнаружите какие-либо существенные несовместимости.
  • Добавлена ​​новая аннотация @Upsert , которая пытается вставить сущность, если нет конфликта уникальности, или обновить сущность, если есть конфликт. ( I7aaab , b/241964353 )
  • Для поддержки Room Paging были добавлены новые артефакты 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 содержит эти коммиты.

Новые функции

  • Новые артефакты room-paging room room-paging-rxjava2 , room-paging-rxjava3 и room - room-paging-guava были добавлены для поддержки в Room Paging .

Изменения API

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

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

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

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

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

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

23 февраля 2022 г.

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

Изменения API

  • Исправлена проблема, из-за которой использование Room @IntDef не применялось в источниках Kotlin. ( I75f41 , б/217951311 )
  • Исправлена проблема совместимости исходного кода, позволяющая повторно разрешить @Query в методах получения свойств. ( I0a09b )
  • Коммун конвертирован из Java в Kotlin. ( I69c48 , б / 206858235 )

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

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

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

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

Версия 2.4.3

Версия 2.4.3

27 июля 2022 г.

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

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

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

Версия 2.4.2

Версия 2.4.2

23 февраля 2022 г.

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

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

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

Версия 2.4.1

Версия 2.4.1

12 января 2022 г.

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

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

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

Версия 2.4.0

Версия 2.4.0

15 декабря 2021 г.

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

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

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

Версия 2.4.0-rc01

1 декабря 2021 г.

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

Новые функции

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

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

17 ноября 2021 г.

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

Новые функции

  • Мы добавили поддержку SparseArray и LongSparseArray в @MapInfo. ( Ic91a2 б/138910317 )

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

  • Мы добавили новый анализатор TypeConverter, который учитывает информацию об отсутствии значений в типах. Поскольку эта информация доступна только в KSP, по умолчанию она включена только в KSP. Если это вызывает какие-либо проблемы, вы можете отключить его, передав room.useNullAwareTypeAnalysis=false обработчику аннотаций. Если это произойдет, сообщите об ошибке в файле, поскольку в будущем этот флаг будет удален. В этом новом анализаторе TypeConverter предлагается предоставлять только ненулевые принимающие TypeConverter, поскольку новый анализатор имеет возможность обертывать их проверкой на null. Обратите внимание, что это не влияет на пользователей, использующих KAPT или Java в качестве обработчиков аннотаций (в отличие от KSP), поскольку в типах нет информации о допустимости значений NULL. ( Ia88f9 , б/193437407 )
  • Исправлена ошибка, из-за которой Room не удалось скомпилировать с ошибкой SQL, когда объект FTS объявил об использовании токенизатора ICU. ( I00db9 , б/201753224 )
  • Решена проблема автоматической миграции нового столбца, добавленного во встроенный объект между версиями. ( I5fcb1 б/193798291 )
  • Мы решили проблему, связанную с типами возвращаемых значений реляционного метода запроса в запросах LEFT JOIN. Благодаря этим изменениям в случае присутствия отображения «1-множество» коллекция, возвращаемая для ключа, не будет включать объект недопустимого значения, если он не найден в курсоре. Если допустимые значения не найдены, ключ будет сопоставлен с пустой коллекцией. ( Id5552 б / 201946438 )
  • Решена проблема автоматической миграции, из-за которой ключевые слова SQLite не могли быть экранированы в именах столбцов. ( Idbed4 b/197133152 )

Версия 2.4.0-beta01

13 октября 2021 г.

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

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

  • Исправлена проблема, из-за которой при автоматической миграции не добавлялись новые столбцы, когда в другой таблице в той же автоматической миграции также был новый столбец с тем же именем. ( Ia5db5 , б/200818663 )
  • Реализация PagingSource, созданная с помощью Room-Paging, теперь использует queryExecutor , передаваемый через RoomDatabase.Builder , поэтому его можно переопределить вместо Dispatchers.IO ранее. ( Iae259 )

Версия 2.4.0-альфа05

29 сентября 2021 г.

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

Новые функции

  • Добавлен встроенный преобразователь типов для UUID . ( I671e8 , б/73132006 )

Изменения API

  • В аннотацию TypeConverters добавлено новое свойство, позволяющее разработчикам отключать встроенные преобразователи Enum и UUID. По умолчанию эти преобразователи включены, но вы можете отключить их для определенной области или для всей базы данных. Подробности см. в документации TypeConverters. ( 36ae9e , б/195413406 )

  • Поддержка ключей/значений, отличных от POJO, для возвращаемых типов Multimap в DAO через аннотацию @MapInfo . ( I4d704 )

@MapInfo потребуется, если столбец ключей или значений карты взят из одного столбца. См. пример:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Сделайте room-paging обязательным артефактом при использовании Paging3 с Room. ( Иаффе )

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

  • Исправлена проблема, из-за которой результаты запросов с несколькими картами не были правильно упорядочены, если запрос содержал предложение ORDER BY столбца из ключа карты. ( I6b887 )

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

  • Добавлен новый API для указания порядка индекса в @Index. Спасибо Никите Желонкину. ( I033fc )

Версия 2.4.0-альфа04

21 июля 2021 г.

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

Новые функции

  • Room теперь поддерживает методы @Dao возвращаемых типов мультикарт, что полезно для операторов JOIN. Поддерживаемые типы мультикарт — это Map , а также ImmutableMap Guava, ImmutableSetMultimap и ImmutableListMultimap .

    Ниже приведены примеры запросов с несколькими картами:

    Карта отношений «один к одному»

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Карта отношений «один ко многим» (стандартная мультикарта)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Результат мультиотображения также можно обернуть в поддерживаемые типы асинхронного возврата, такие как LiveData , Observable Rx или сопрограммы Flow .

Комнатный пейджинг

  • Выпущен androidx.room:room-paging , обеспечивающий встроенную поддержку Paging 3.0 для запросов Room, возвращающих androidx.paging.PagingSource .

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Этот артефакт заменяет реализацию androidx.paging.PagingSource , созданную Room, на реализацию, созданную на основе API-интерфейсов Paging 3.0. Новая реализация PagingSource анализирует ключи по-другому, поэтому любой ключ, вручную передаваемый в PagingSource Room, должен будет учитывать это изменение поведения, включая InitialKey, передаваемый через конструктор Pager. Страницы начнут загружаться с Key , причем Key будет первым загруженным элементом. Это отличается от существующего поведения, когда LoadParams.Refresh.Key рассматривается как позиция прокрутки пользователя, а элементы загружаются как до, так и после клавиши.

  • Артефакт является необязательным, и отказ от него приведет к возврату к существующей поддержке пейджинга 3.0, которая была представлена в комнате 2.3. Однако в будущем этот артефакт станет необязательным для тех, кто использует Room with Paging 3.0. Чтобы принять участие, добавьте новый артефакт подкачки комнат в свой путь к классам. Если вы используете Gradle, вы можете добавить следующий фрагмент в свой build.gradle:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

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

  • Исправлена проблема при автоматической миграции, связанная с обработкой нарушений внешнего ключа. ( б / 190113935 )

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

16 июня 2021 г.

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

Изменения API

  • Обновите MigrationTestHelper комнаты для поддержки автоматической миграции, предоставив новый API-конструктор, который получает тестируемый класс базы данных. Это позволяет помощнику автоматически добавлять автоматические миграции таким же образом во время runMigrationsAndValidate .

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

  • Исправлена проблема с встроенной библиотекой SQLite Room для поддержки чипов Apple M1. ( б/174695268

  • Исправлена ​​проблема, из-за которой Room не выдавала ошибку, если тип возвращаемого значения функции @Transaction был Flow ( I56ddd , b/190075899 ).

  • Исправлена проблема с автоматической миграцией индексов. б/177673291

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

  • Поддержка KSP в комнате теперь зависит от KSP 1.5.10-1.0.0-beta01 . ( 1ecb11 , б/160322705 )

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

5 мая 2021 г.

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

Изменения API

  • @ProvidedAutoMigrationSpec — это новый API для объявления того, что AutoMigrationSpec будет предоставлен во время выполнения через RoomDatabase.Builder#addAutoMigrationSpec() . Это позволяет платформе внедрения зависимостей предоставлять такие спецификации, когда им нужны сложные зависимости.

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

  • Исправлена ​​проблема с автоматической миграцией, при которой @DatabaseView не пересоздавался должным образом.

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

  • Исправлена проблема в JournalMode.TRUNCATE комнаты, из-за которой обратный вызов InvalidationTracker иногда вызывался некорректно, слишком поздно или вообще не вызывался. Спасибо Uli Bubenheimer | bubenheimer@users.noreply.github.com ( b/154040286 )

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

21 апреля 2021 г.

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

Новые функции

  • Автоматические миграции : Room теперь предлагает API для автоматического создания миграций при условии экспорта схем. Чтобы сообщить Room, что он должен сгенерировать автоматическую миграцию, можно использовать новое свойство @Database#autoMigrations для объявления версий, из которых и в которые будет выполняться автоматическая миграция. Когда Room требуется дополнительная информация о переименовании или удалении таблиц и столбцов, аннотация @AutoMigration может объявить класс спецификации, содержащий такие входные данные. Дополнительные сведения см. в документации @AutoMigration .

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

  • Исправлена проблема, из-за которой defaultValue с дополнительной скобкой неправильно проверялось проверкой схемы комнаты. б/182284899

Версия 2.3.0

Версия 2.3.0

21 апреля 2021 г.

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

Важные изменения с версии 2.2.0

  • Встроенная поддержка Enum : Room теперь по умолчанию будет использовать преобразователь типов Enum в String и наоборот, если он не указан. Если преобразователь типов для перечисления уже существует, Room будет отдавать предпочтение его использованию перед преобразователем по умолчанию.
  • Обратный вызов запроса : Room теперь предлагает общий API обратного вызова RoomDatabase.QueryCallback для случаев, когда запросы собираются выполняться, что может быть полезно для входа в отладочные сборки. Обратный вызов можно установить с помощью RoomDatabase.Builder#setQueryCallback() .
  • Предварительно упакованное улучшение : Room теперь имеет API для создания базы данных с использованием предварительно упакованной базы данных, считываемой из входного потока. Это учитывает такие случаи, как, например, когда база данных предварительной упаковки заархивирована.
  • Предоставленные преобразователи типов . В Room теперь есть API-интерфейсы для предоставления экземпляров преобразователей типов, чтобы приложение могло контролировать их инициализацию. Чтобы отметить преобразователь типов, который будет предоставлен Room, используйте новую аннотацию @ProvidedTypeConverter.
  • Поддержка RxJava3 : Room теперь поддерживает типы RxJava3. Подобно RxJava2, вы можете объявлять методы DAO, возвращаемые типы которых — Flowable, Single, Maybe и Completable. Кроме того, доступен новый артефакт androidx.room:room-rxjava3 для поддержки RxJava3.
  • Поддержка Paging 3.0 : Room теперь будет поддерживать создание реализаций для аннотированных методов @Query , тип возвращаемого значения которых — androidx.paging.PagingSource .

Версия 2.3.0-rc01

24 марта 2021 г.

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

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

  • Исправлена проблема, из-за которой запросы Coroutine Flow, созданные Room, не могли использоваться в блоке приостановки withTransaction . ( I797bf )

Версия 2.3.0-бета03

10 марта 2021 г.

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

Новые функции

  • Добавлена поддержка инкрементной компиляции для KSP. ( I031c1 , б/176453350 )

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

  • Исправлена ошибка, из-за которой создание PagingSource в основном потоке могло вызвать ошибку ANR. ( I42b74 , б/181221318 )
  • Исправлена ошибка, из-за которой видимость @ExperimentalRoomApi была общедоступной, а не частной. ( б / 181356119 )

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

  • Разрешить Room принимать тип возвращаемого значения POJO в методе DAO с аннотацией @Query , если он также аннотирован с помощью @SkipQueryVerification . Room приложит все усилия, чтобы преобразовать результат запроса в возвращаемый тип POJO так же, как это делается для аннотированного метода DAO @RawQuery . Спасибо Маркусу Ригелю | эй@marcorei.com'. ( I45acb )

Версия 2.3.0-beta02

18 февраля 2021 г.

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

Новые функции

  • В Room теперь есть экспериментальная поддержка Kotlin Symbol Processing KSP .

    KSP — это замена KAPT для запуска обработчиков аннотаций непосредственно на компиляторе Kotlin, что значительно сокращает время сборки.

    Чтобы использовать Room с KSP, вы можете применить плагин KSP Gradle и заменить конфигурацию kapt в файле сборки на ksp . Например, вместо kapt 'androidx.room:room-compiler:2.3.0-beta02' используйте ksp 'androidx.room:room-compiler:2.3.0-beta02' . Дополнительные сведения см. в документации KSP .

    Обратите внимание: поскольку KSP является экспериментальным, для рабочего кода по-прежнему рекомендуется использовать KAPT. Сокращение времени сборки применимо только в том случае, если нет других процессоров, использующих KAPT. См. b/160322705 для получения информации об известных проблемах.

Версия 2.3.0-beta01

27 января 2021 г.

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

Новые функции

  • Автоматически закрывающиеся базы данных : в комнате теперь есть возможность закрывать базы данных, к которым нет доступа по истечении определенного периода времени. Это экспериментальная функция, которую можно включить, вызвав RoomDatabase.Builder#setAutoCloseTimeout() . Эта функция полезна для приложений с несколькими базами данных.

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

  • Исправлена проблема, из-за которой методы Dao с несколькими методами @Update или @Delete с разными стратегиями конфликтов создавали код только с одной из стратегий, фактически игнорируя определенную. ( /I0b90d , b/176138543 )

Версия 2.3.0-альфа04

16 декабря 2020 г.

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

Новые функции

  • Room теперь предлагает общий API обратного вызова RoomDatabase.QueryCallback для случаев, когда запросы собираются выполняться, что может быть полезно для входа в отладочные сборки. Обратный вызов можно установить с помощью RoomDatabase.Builder#setQueryCallback() . ( Iaa513 , б / 174478034 , б / 74877608 )
  • Room теперь по умолчанию будет использовать преобразователь типов Enum в String и наоборот, если он не указан. Если преобразователь типов для перечисления уже существует, Room будет отдавать предпочтение его использованию перед преобразователем по умолчанию. ( б / 73132006 )

Известная проблема

  • Если для Enum уже существует односторонний преобразователь типов для чтения, Room может случайно использовать встроенный преобразователь строк в Enum, что может быть нежелательно. Это известная проблема, и ее можно исправить, установив двусторонний преобразователь. См.: б/175707691.

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

  • Исправлена проблема, из-за которой Room неправильно отключала инкрементальную обработку аннотаций в новых версиях JDK. ( б / 171387388 )
  • Исправлена проблема, из-за которой Room находила сгенерированный класс при использовании нескольких загрузчиков классов. Спасибо за исправление «Serendipity | 892449346@qq.com! ( б / 170141113 )
  • Исправлена проблема, из-за которой Room генерировал неверный код, если у Kotlin @Dao был базовый класс, дженерики которого являются примитивами в JVM. ( б / 160258066 )

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

  • Room теперь по умолчанию будет использовать beginTransactionNonExclusive , если включен режим WAL и API равен 16 или более. Спасибо Ахмеду Халилу | ahmedibrahimkhali@gmail.com'! ( б / 126258791 )

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

14 октября 2020 г.

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

Новые функции

  • В Room теперь есть API-интерфейсы для предоставления экземпляров преобразователей типов, чтобы приложение могло контролировать их инициализацию. Чтобы отметить преобразователь типов, который будет предоставлен Room, используйте новую аннотацию @ProvidedTypeConverter . Спасибо mzgreen yairobbe@gmail.com . ( Ie4fa5 , б/121067210 )

  • В Room теперь есть API для создания базы данных с использованием предварительно упакованной базы данных, считываемой из входного потока. Это учитывает такие случаи, как, например, когда база данных предварительной упаковки заархивирована. Спасибо «Ахмеду Эль-Хельву ahmedre@gmail.com » ( 3e6792 , b/146911060 )

Изменения API

  • В аннотацию @ForeignKey добавлена отсутствующая цель, предотвращающая ее использование за пределами аннотации @Entity . ( Iced1e )

  • Поле mCallbacks в RoomDatabase.java теперь скрыто. ( d576cb , b/76109329 )

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

  • Обновите документацию TypeConverters, чтобы уточнить, что TypeConverters можно использовать только для преобразования столбцов/полей, а не строк. ( I07c56 , б/77307836 )

  • Обновите DaoProcessor, чтобы исправить ошибку компилятора Dao с помощью универсального супертипа с «примитивами» Kotlin. ( Ice6bb , б/160258066 )

  • Обновите документацию по добавлению/удалению методов наблюдателя, чтобы уточнить потоки ( Ifd1d9 , b/153948821 ).

  • Исправлена проблема, из-за которой Room неправильно проверял таблицы FTS, в которых был объявлен столбец rowid. ( d62ebc , b/145858914 )

Внешние взносы

  • Исправление проблем с языковыми стандартами верхнего и нижнего регистра, связанных с турецким языком ( 5746e3 ), b/68159494.

  • Замените ConcurrentHashMap внутри RoomDatabase на Collections.synchronizedMap() , чтобы избежать проблем в Android Lollipop ( d1cfc7 , b/162431855 ).

  • Добавьте обратный вызов onOpenPrepackagedDatabase при копировании предварительно упакованной базы данных. ( I1ba74 , б/148934423 )

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

22 июля 2020 г.

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

Новые функции

  • Поддержка RxJava3 : Room теперь поддерживает типы RxJava3. Подобно RxJava2, вы можете объявлять методы DAO, возвращаемые типы которых — Flowable, Single, Maybe и Completable. Кроме того, доступен новый артефакт androidx.room:room-rxjava3 для поддержки RxJava3. ( б / 152427884 )

Изменения API

  • Теперь поддерживается объявление @TypeConverter в классе объектов Kotlin. ( б / 151110764 )
  • Опция дополнительной обработки аннотаций Room теперь включена по умолчанию. ( б / 112110217 )

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

10 июня 2020 г.

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

Новые функции

  • Поддержка Paging 3.0 : Room теперь будет поддерживать создание реализаций для аннотированных методов @Query , тип возвращаемого значения которых — androidx.paging.PagingSource .

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Изменения API

  • @RewriteQueriesToDropUnusedColumns — это новая удобная аннотация, которая позволяет Room перезаписать проекцию '*' в запросе таким образом, чтобы неиспользуемые столбцы в результате были удалены.
  • Опция процессора room.expandProjection устарела. Используйте @RewriteQueriesToDropUnusedColumns в качестве замены запросов оптимизации помещений с помощью звездных проекций. Обратите внимание, что @RewriteQueriesToDropUnusedColumns не заменяет решение конфликта столбцов room.expandProjection , предлагаемое в отношении типов возвращаемых данных, содержащих поля @Embedded .

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

  • Исправлена ошибка, из-за которой Room не мог правильно определить версию JDK, используемую для включения процессора инкрементных аннотаций. Спасибо Blaz Solar (me@blaz.solar) ( b/155215201 )
  • Room теперь встраивает свою зависимость ANTLR в процессор аннотаций, чтобы избежать конфликтов версий с другими процессорами, которые также используют ANTLR. ( б / 150106190 )

Версия 2.2.6

Версия 2.2.6

16 декабря 2020 г.

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

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

  • Исправлена проблема, из-за которой Room неправильно отключала инкрементальную обработку аннотаций в новых версиях JDK. ( б / 171387388 )

Версия 2.2.5

Версия 2.2.5

18 марта 2020 г.

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

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

  • Сделайте MultiInstanceInvalidationService DirectBootAware. Спасибо Mygod contact-git@mygod.be ( b/148240967 )
  • Исправлена ошибка, приводившая к сбою, если была включена недействительность нескольких экземпляров, а база данных содержала объект FTS. ( б / 148969394 )
  • Исправлена проблема при загрузке собственных библиотек SQLite в обработчик аннотаций Room, которая приводила к сбою компилятора из-за параллельных компиляций. ( б / 146217083 )

Версия 2.2.4

Версия 2.2.4

19 февраля 2020 г.

androidx.room:room-common:2.2.4 , androidx.room:room-compiler:2.2.4 , androidx.room:room-guava:2.2.4 , androidx.room:room-ktx:2.2.4 , androidx.room:room-migration:2.2.4 , androidx.room:room-runtime:2.2.4 , androidx.room:room-rxjava2:2.2.4 и androidx.room:room-testing:2.2.4 выпущены. Версия 2.2.4 содержит эти коммиты.

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

  • Исправлена проблема с приостановкой транзакций, из-за которой они блокировались, если сопрограмма была быстро отменена до фактического запуска транзакции. ( б / 148181325 )
  • Исправлена ​​ошибка, из-за которой @Generated неправильно использовался при сборке с помощью JDK 9. ( b/146538330 ).
  • Исправлена проблема, из-за которой Room генерировал неправильный код, когда интерфейс DAO в Kotlin имел конкретную функцию. ( б / 146825845 )

Версия 2.2.3

Версия 2.2.3

18 декабря 2019 г.

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

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

  • Исправлена ошибка, из-за которой Room не мог проверить базу данных, которая не прошла никакой миграции и содержала устаревший хэш с индексами в своей схеме. ( б / 139306173 )

Версия 2.2.2

Версия 2.2.2

20 ноября 2019 г.

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

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

  • Исправлена ошибка, из-за которой при сборе отношений «один к одному» с более чем 999 строками Room возвращала нулевые связанные элементы. ( б / 143105450 )

Версия 2.2.1

Версия 2.2.1

23 октября 2019 г.

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

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

  • Исправлена ошибка, из-за которой Room неправильно предупреждала о CURSOR_MISMATCH при включенной опции expandProjection . ( б / 140759491 )
  • Добавлен механизм повтора для обработки отсутствующей встроенной библиотеки, используемой для проверки запросов во время компиляции.

Версия 2.2.0

Версия 2.2.0

9 октября 2019 г.

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

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

  • Предварительно упакованная база данных : теперь доступны два новых API в RoomDatabase.Builder для создания RoomDatabase с использованием уже заполненного файла базы данных. createFromAsset() предназначен для случаев, когда предварительно заполненный файл базы данных находится в папке ресурсов APK, а createFromFile() — для случаев, когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивной миграции, так что во время резервной миграции Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна, в противном случае он просто откажется от удаления и повторного создания всех таблиц. б/62185732
  • Значения схемы по умолчанию : @ColumnInfo теперь имеет новое свойство defaultValue , которое можно использовать для указания значения по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время миграции, если они указаны. б/64088772
  • Отношения «многие-ко-многим» : у @Relation теперь есть новое свойство associateBy , которое принимает новую аннотацию @Junction , используемую для объявления отношения, которое должно быть удовлетворено через соединительную таблицу (также известную как таблица соединений). б/69201917
  • Отношения «один к одному» . Ограничение в полях POJO, аннотированных с помощью @Relation , иметь тип List или Set , было снято, что позволяет эффективно представлять однозначные отношения. б/62905145
  • Target Entity : аннотации DAO @Insert , @Update и @Delete теперь имеют новое свойство targetEntity , которое позволяет указать целевую таблицу, над которой должен действовать метод DAO. Это позволяет параметрам этих методов DAO быть произвольными POJO, которые будут интерпретироваться как частичные сущности. На практике это позволяет осуществлять частичную вставку, удаление и обновление. б/127549506
  • Coroutines Flow : методы @Query DAO теперь могут иметь возвращаемый тип Flow<T> . Возвращенный поток повторно отправит новый набор значений, если таблицы наблюдения в запросе станут недействительными. Объявление функции DAO с возвращаемым типом Channel<T> является ошибкой. Вместо этого Room рекомендует использовать Flow , а затем использовать соседние функции для преобразования Flow в Channel . б/130428884
  • Процессор инкрементных аннотаций Gradle . Room теперь является процессором изолирующих аннотаций Gradle, а возможность приращения можно включить с помощью опции процессора room.incremental . Дополнительные сведения см. в разделе «Параметры компилятора помещений» . Если у вас возникнут какие-либо проблемы, пожалуйста, сообщите об ошибке здесь . Мы планируем включить инкрементируемость по умолчанию в будущей стабильной версии. б/112110217
  • Расширяющиеся проекции : был добавлен новый экспериментальный параметр компилятора room.expandProjection , который заставляет Room переписывать запрос со звездообразной проекцией, чтобы он содержал только столбцы возвращаемого типа POJO. Например, для метода DAO с @Query("SELECT * FROM Song") , который возвращает POJO с именем SongIdAndTitle только с двумя полями. Затем Room перепишет запрос на SELECT id, title FROM Song так, чтобы был выбран минимальный набор столбцов, соответствующий типу возвращаемого значения. Это по существу устраняет предупреждение CURSOR_MISMATCH , которое отображается, когда запрос возвращает дополнительные столбцы, которые не соответствуют ни одному полю в возвращаемом типе POJO.

Версия 2.2.0-rc01

5 сентября 2019 г.

androidx.room:room:2.2.0-rc01 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

Никаких публичных изменений с момента выпуска Room 2.2.0-beta01 .

Версия 2.2.0-beta01

22 августа 2019 г.

androidx.room:room-*:2.2.0-beta01 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

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

  • Исправлена ошибка, из-за которой запрос Coroutine Flow переставал повторно выдавать новые значения через определенное время. ( б / 139175786 )
  • Исправлена ошибка, из-за которой Room не принимал хеш-код устаревшей схемы при открытии базы данных, которая не подвергалась миграции со времен Room 1.0, что приводило к сбою во время выполнения из-за недопустимой схемы. ( б / 139306173 )

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

7 августа 2019 г.

androidx.room:room-*:2.2.0-alpha02 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

Новые функции

  • Coroutines Flow : методы @Query DAO теперь могут иметь возвращаемый тип Flow<T> . Возвращенный поток повторно отправит новый набор значений, если таблицы наблюдения в запросе станут недействительными. Объявление функции DAO с возвращаемым типом Channel<T> является ошибкой. Вместо этого Room рекомендует использовать Flow , а затем использовать соседние функции для преобразования Flow в Channel . б/130428884
  • Расширяющиеся проекции : был добавлен новый экспериментальный параметр компилятора room.expandProjection , который заставляет Room переписывать запрос со звездообразной проекцией, чтобы он содержал только столбцы возвращаемого типа POJO. Например, для метода DAO с @Query("SELECT * FROM Song") , который возвращает POJO с именем SongIdAndTitle только с двумя полями. Затем Room перепишет запрос на SELECT id, title FROM Song так, чтобы был выбран минимальный набор столбцов, соответствующий типу возвращаемого значения. Это по существу устраняет предупреждение CURSOR_MISMATCH , которое отображается, когда запрос возвращает дополнительные столбцы, которые не соответствуют ни одному полю в возвращаемом типе POJO.
  • onDestructiveMigrate — это новый API обратного вызова, добавленный в RoomDatabase.Callback на случай, когда Room деструктивно переносит базу данных. б/79962330

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

  • Исправлена ошибка, из-за которой Room генерировал неверный код, используя метод установки поля, когда поле защищено. б/136194628
  • Исправлена ошибка, из-за которой InvalidationTracker выдавал NPE во втором процессе, когда была включена многоэкземплярная недействительность и служба недействительности была отключена. б/137454915
  • Исправлена ошибка, из-за которой Room не мог правильно определить тип возвращаемого значения унаследованной функции приостановки, помеченной @RawQuery . б/137878827
  • Обновлен сгенерированный код для @Relation , когда связанный ключ имеет тип BLOB, чтобы использовать сравнимый ByteBuffer . б/137881998
  • Исправлена ошибка, из-за которой Room жаловался на отсутствие установщиков в POJO, используемых в качестве частичных параметров сущности @Insert , @Update и @Delete . б/138664463
  • Исправлена ошибка, из-за которой Room жаловался на отсутствие геттеров и сеттеров для игнорируемого столбца через @Entity , когда класс сущности использовался в определенных методах DAO. б/138238182
  • Исправлена ошибка, из-за которой Room некорректно преобразовывал именованные аргументы привязки в позиционные аргументы, вызывая исключение во время выполнения при выполнении запроса с повторно используемыми параметрами. б/137254857

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

10 июля 2019 г.

Новые функции

  • Предварительно упакованная база данных : теперь доступны два новых API в RoomDatabase.Builder для создания RoomDatabase с использованием уже заполненного файла базы данных. createFromAsset() предназначен для случаев, когда предварительно заполненный файл базы данных находится в папке ресурсов APK, а createFromFile() — для случаев, когда файл находится в произвольном месте. Использование этих API меняет поведение деструктивной миграции, так что во время резервной миграции Room попытается повторно скопировать предварительно заполненную базу данных, если она доступна, в противном случае он просто откажется от удаления и повторного создания всех таблиц. б/62185732
  • Значения схемы по умолчанию : @ColumnInfo теперь имеет новое свойство defaultValue , которое можно использовать для указания значения по умолчанию для столбца. Значения по умолчанию являются частью схемы базы данных и будут проверяться во время миграции, если они указаны. б/64088772

    Примечание. Если в вашей схеме базы данных уже есть значения по умолчанию, например добавленные с помощью ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z , и вы решили определить значения по умолчанию с помощью @ColumnInfo для тех же столбцов, то вам может потребоваться выполнить миграцию для проверки неучтенных значений по умолчанию. Дополнительную информацию см. в разделе «Миграция помещений» .

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

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

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

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

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

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

  • 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

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

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

1 октября 2018 г.

androidx.room 2.0.0 is released with no changes from 2.0.0-rc01.

Version 2.0.0-rc01

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

androidx.room 2.0.0-rc01 is released with no changes from 2.0.0-beta01.

Version 2.0.0-beta01

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

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

21 марта 2018 г.

Изменения API

  • 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