Комната

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

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

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

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

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

классный

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "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"
}

Котлин

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")
    // To use Kotlin Symbol Processing (KSP)
    ksp("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")
}

Информацию об использовании плагина KAPT смотрите в документации KAPT .

Информацию об использовании плагина KSP см. в документации по быстрому запуску KSP .

Информацию об использовании расширений Kotlin смотрите в документации ktx .

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

При желании для библиотек, отличных от Android (например, модулей Gradle только для Java или Kotlin), вы можете использовать androidx.room:room-common для использования аннотаций Room.

Настройка параметров компилятора

Room имеет следующие параметры обработчика аннотаций.

room.schemaLocation directory
Позволяет экспортировать схемы базы данных в файлы JSON в указанном каталоге. Дополнительную информацию см. в разделе «Миграция помещений» .
room.incremental boolean
Включает процессор инкрементных аннотаций Gradle. Значение по умолчанию — true .
room.generateKotlin boolean
Генерируйте исходные файлы Kotlin вместо Java. Требуется КСП. Значение по умолчанию — false . Дополнительные сведения см. в примечаниях к версии 2.6.0 .

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

В версии Room 2.6.0 и выше вы можете использовать плагин Room Gradle для настройки параметров компилятора Room. Плагин настраивает проект таким образом, чтобы сгенерированные схемы (которые являются результатом задач компиляции и используются для автоматической миграции) были правильно настроены для создания воспроизводимых и кэшируемых сборок.

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

классный

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

Котлин

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

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

классный

plugins {
    id 'androidx.room'
}

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

Котлин

plugins {
    id("androidx.room")
}

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

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

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

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

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

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

классный

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

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

Котлин

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

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Поскольку room.schemaLocation — это каталог, а не примитивный тип, при добавлении этой опции необходимо использовать CommandLineArgumentsProvider , чтобы Gradle знал об этом каталоге при проведении обновленных проверок. В разделе «Миграция базы данных комнаты» показана полная реализация CommandLineArgumentsProvider , которая предоставляет расположение схемы.

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

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

Создать новую задачу

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

Версия 2.7

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

21 августа 2024 г.

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

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

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

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

  • Исправлена ​​проблема, из-за которой в сгенерированном «фактическом» конструкторе RoomDatabaseConstructor отсутствовал модификатор «фактический» в функции initialize , если такая функция также переопределена в объявлении «ожидаемый». ( 359631627 )
  • Исправлена ​​проблема, из-за которой сгенерированное «фактическое» значение RoomDatabaseConstructor не соответствовало видимости объявления «ожидаемое». ( 358138953 )

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

7 августа 2024 г.

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

Изменения API

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

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

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

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

  • Исправлена ​​проблема, из-за которой Room неправильно генерировал вызов recursiveFetchArrayMap в целях, отличных от Android. ( 710c36 , б/352482325 )
  • Исправлена ​​проблема, из-за которой иногда Room выдавала исключение «Истекло время попытки подключения» в проекте KMP. ( fa72d0 , b/347737870 )
  • Исправлена ​​проблема при автоматической миграции, из-за которой внешние ключи проверялись слишком рано, прежде чем другие таблицы изменили свои схемы в соответствии с новыми внешними ключами. ( 7672c0 , б/352085724 )

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

10 июля 2024 г.

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

Изменения API

  • SQLiteKt переименован в SQLite , а BundledSQLiteKt — в BundledSQLite . ( I8b501 )

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

  • Исправлена ​​ошибка, из-за которой RoomDatabase блокировалась или выходила из строя из-за тайм-аута соединения при использовании AndroidSQLiteDriver .

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

12 июня 2024 г.

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

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

  • Исправлена ​​ошибка, из-за которой процессор аннотаций Room генерировал несовместимый код KMP, когда в DAO был определен тип возвращаемого значения с несколькими картами. ( б / 340983093 )
  • Исправлена ​​проблема, из-за которой Room не мог найти сгенерированную реализацию базы данных, если у аннотированного класса @Database не было пакета. ( б/342097292 )
  • Исправлена ​​проблема, из-за которой включение автоматического закрытия и аннулирования нескольких экземпляров иногда вызывало исключение ConcurrentModificationException , когда база данных автоматически закрывалась из-за простоя.

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

29 мая 2024 г.

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

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

  • Исправьте различные проблемы, связанные с Kotlin 2.0 и KSP 2.0. Обратите внимание, что Kotlin 2.0 с поддержкой KSP 2 не является завершенным, и команда работает над различными API и изменениями поведения в новом компиляторе. ( б / 314151707 )

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

14 мая 2024 г.

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

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

  • Исправлены различные проблемы KSP.

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

1 мая 2024 г.

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

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

  • Поддержка многоплатформенности Kotlin (KMP) . В этом выпуске Room была реорганизована и стала многоплатформенной библиотекой Kotlin (KMP). Хотя еще предстоит проделать некоторую работу, в этом выпуске представлена ​​новая версия Room, в которой большая часть функциональности была «унифицирована» (сделана мультиплатформенной). В настоящее время поддерживаются платформы Android, iOS, JVM (настольный компьютер), собственный Mac и собственный Linux. Любая недостающая функциональность новых поддерживаемых платформ будет дополнена в будущих выпусках Room.

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

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

Изменения API

  • Была добавлена ​​перегрузка Room.databaseBuilder() , которая принимает лямбда-параметр, предназначенный для использования с функцией, сгенерированной Room, чтобы избежать использования отражения при создании экземпляра сгенерированной реализации RoomDatabase . Пример использования:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • В конструктор добавлен API для настройки комнаты с CoroutineContext : RoomDatabase.Builder.setQueryCoroutineContext . Обратите внимание, что RoomDatabase можно настроить только с исполнителями, использующими setQueryExecutor , или с контекстом Coroutine, но не с обоими обоими.
  • Добавлен API для настройки Room с помощью драйвера SQLite : RoomDatabase.Builder.setDriver() . Дополнительную информацию об API драйвера SQLite см. в документации SQLite KMP.
  • Были добавлены API-интерфейсы для доступа к базовому SQLiteConnection из API-интерфейсов драйвера: RoomDatabase.useReaderConnection и RoomDatabase.useWriterConnection .
  • Обратные вызовы, связанные с Varios Room, теперь имеют перегруженную версию, которая получает SQLiteConnection вместо SupportSQLiteDatabase . Они предназначены для переопределения при переходе на проект KMP. Дополнительную информацию о переносе использования комнаты в приложении Android в общий модуль KMP см. в руководстве по миграции . Обратные вызовы:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • Артефакт KTX androidx.room:room-ktx был объединен с androidx.room:room-runtime вместе со всеми его API, теперь артефакт пуст. Пожалуйста, удалите его из списка зависимостей.

Версия 2.6

Версия 2.6.1

29 ноября 2023 г.

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

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

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

Версия 2.6.0

18 октября 2023 г.

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

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

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

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

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

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

Версия 2.6.0-rc01

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

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

Версия 2.6.0-бета01

23 августа 2023 г.

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

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

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

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

9 августа 2023 г.

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

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

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

Изменения API

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

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

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

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

21 июня 2023 г.

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

Плагин Room Gradle

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

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

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

Изменения API

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

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

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

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

22 марта 2023 г.

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

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

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

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

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

Изменения API

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

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

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

Версия 2.5.2

Версия 2.5.2

21 июня 2023 г.

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

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

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

Версия 2.5.1

Версия 2.5.1

22 марта 2023 г.

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

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

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

Версия 2.5.0

Версия 2.5.0

22 февраля 2023 г.

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

Версия 2.5.0

11 января 2023 г.

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

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

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

Версия 2.5.0-rc01

7 декабря 2022 г.

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

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

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

9 ноября 2022 г.

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

Изменения API

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

Версия 2.5.0-бета01

5 октября 2022 г.

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

Изменения API

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

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

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

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

24 августа 2022 г.

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

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

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

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

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

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

1 июня 2022 г.

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

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

Изменения API

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

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

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

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

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

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

23 февраля 2022 г.

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

Изменения API

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

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

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

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

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

Версия 2.4.3

Версия 2.4.3

27 июля 2022 г.

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

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

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

Версия 2.4.2

Версия 2.4.2

23 февраля 2022 г.

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

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

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

Версия 2.4.1

Версия 2.4.1

12 января 2022 г.

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

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

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

Версия 2.4.0

Версия 2.4.0

15 декабря 2021 г.

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

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

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

Версия 2.4.0-rc01

1 декабря 2021 г.

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

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

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

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

17 ноября 2021 г.

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

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

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

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

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

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

13 октября 2021 г.

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

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

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

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

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

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

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

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

Изменения API

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

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

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

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

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

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

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

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

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

21 июля 2021 г.

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

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

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

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

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

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

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

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

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

Расположение в комнате

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

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

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

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

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

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

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

16 июня 2021 г.

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

Изменения API

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

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

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

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

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

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

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

Версия 2.4.0-Alpha02

5 мая 2021 года

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

Изменения API

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

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

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

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

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

Версия 2.4.0-Alpha01

21 апреля 2021 г.

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

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

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

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

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

Версия 2.3.0

Версия 2.3.0

21 апреля 2021 г.

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

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

  • Встроенная поддержка Enum : теперь комната будет по умолчанию использовать перечисление в строку и наоборот, конвертер типа, если их не будет предоставлено. Если преобразователь типа для перечисления уже существует, комната будет расставлять приоритеты, используя его по умолчанию.
  • Обратный вызов запроса : Комната теперь предлагает общий обратный вызов API Poomdatabase.queryCallback, поскольку когда запросы собираются выполнить, что может быть полезно для регистрации в сборках отладки. Обратный вызов может быть установлен через RoomDatabase.Builder#setQueryCallback() .
  • Предварительно упакованное улучшение : в комнате теперь есть API для создания базы данных с использованием предварительно упакованной считываемой базы данных из входного потока. Это допускает такие случаи, как, когда база данных предварительной упаковки GZEPID.
  • Предоставленные конвертеры типа : в комнате теперь есть API для предоставления экземпляров конвертеров типа, чтобы приложение могло контролировать свою инициализацию. Чтобы отметить конвертер типа, который будет предоставлен в комнате, используйте новую аннотацию @providtypeconverter.
  • Поддержка Rxjava3 : комната теперь поддерживает типы Rxjava3. Подобно rxjava2, вы можете объявить методы DAO, тип возврата, тип возврата, является протекаемым, единственным, возможно, и завершенным. Кроме того, новый Artifact androidx.room:room-rxjava3 rxjava3 доступен для поддержки Rxjava3.
  • Поддержка Paging 3.0 : теперь комната будет поддерживать создание реализаций для аннотированных методов @Query , тип возврата которого androidx.paging.PagingSource .

Версия 2.3.0-rc01

24 марта 2021 г.

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

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

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

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

10 марта 2021 г.

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

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

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

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

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

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

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

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

18 февраля 2021 г.

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

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

  • Комната теперь имеет экспериментальную поддержку для обработки символов Kotlin KSP .

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

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

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

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

27 января 2021 года

androidx.room:room-*:2.3.0-beta01 *:2.3.0-BETA01 выпускается. Версия 2.3.0-бета01 содержит эти коммиты.

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

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

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

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

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

16 декабря 2020 г.

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

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

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

Известный вопрос

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

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

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

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

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

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

14 октября 2020 г.

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

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

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

  • В комнате теперь есть API для создания базы данных с использованием предварительно упакованной считываемой базы данных из входного потока. Это допускает такие случаи, как, когда база данных предварительной упаковки GZEPID. Спасибо «Ахмед Эль- Хелв Ахмедре »

Изменения API

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

  • Field mCallbacks в RoomDatabase.java теперь скрыт. ( D576CB , B/76109329 )

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

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

  • Обновите Daoprocessor, чтобы исправить ошибку компилятора на DAO с общим супер -типом с Kotlin "примитивами". ( ICE6BB , B/160258066 )

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

  • Исправьте проблему с номером неправильной проверкой таблиц FTS, которые объявили их колонку Rowid. ( D62EBC , B/145858914 )

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

  • Исправлена ​​проблемы с верхним/нижним регионом, связанные с турецкой ( 5746E3 ), B/68159494

  • Замените ConcurrentHashMap внутри RoomDatabase на Collections.synchronizedMap() .

  • Добавьте обратный вызов OnoPenPrepackagedDatabase, когда копируется расфасованный DB. ( I1ba74 , b/1489344423 )

Версия 2.3.0-Alpha02

22 июля 2020 г.

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

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

  • Поддержка Rxjava3 : комната теперь поддерживает типы Rxjava3. Подобно rxjava2, вы можете объявить методы DAO, тип возврата, тип возврата, является протекаемым, единственным, возможно, и завершенным. Кроме того, новый Artifact androidx.room:room-rxjava3 rxjava3 доступен для поддержки Rxjava3. ( B/152427884 )

Изменения API

  • Объявление @TypeConverter в классе объекта Kotlin теперь поддерживается. ( B/151110764 )
  • Параметр «Инкрементная обработка аннотации комнаты» теперь включена по умолчанию. ( B/112110217 )

Версия 2.3.0-Alpha01

10 июня 2020 г.

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

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

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

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

Изменения API

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

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

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

Версия 2.2.6

Версия 2.2.6

16 декабря 2020 г.

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

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

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

Версия 2.2.5

Версия 2.2.5

18 марта 2020 г.

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

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

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

Версия 2.2.4

Версия 2.2.4

19 февраля 2020 г.

androidx.room:room-common:2.2.4 : Room-Common:2.2.4, androidx.room:room-compiler:2.2.4 : Room-Compiler:2.2.4, androidx.room:room-guava:2.2.4 : room-guava:2.2.4, androidx.room:room-ktx:2.2.4 , androidx.room:room-migration:2.2.4 , androidx.room:room-runtime:2.2.4 : Room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 : Room-Rxjava2:2.2.4, и androidx.room:room-testing:2.2.4 -Testing:2.2.4. Версия 2.2.4 содержит эти коммиты.

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

  • Исправлена ​​проблема с приостановкой транзакций, в которых они будут тупиться, если коратика была быстро отменена до того, как транзакция фактически началась. ( B/148181325 )
  • Исправлена ​​проблема с тем, что @GenerTed использовался при строительстве с JDK 9. ( B/146538330 )
  • Исправлена ​​проблема, в которой комната генерирует неправильный код, когда интерфейс DAO в Котлине имел конкретную функцию. ( B/146825845 )

Версия 2.2.3

Версия 2.2.3

18 декабря 2019 г.

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

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

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

Версия 2.2.2

Версия 2.2.2

20 ноября 2019 г.

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

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

  • Исправлена ​​ошибка, при которой сборы отношений один к одному с более чем 999 строк приведут место для возврата нулевых связующих предметов. ( B/143105450 )

Версия 2.2.1

Версия 2.2.1

23 октября 2019 г.

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

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

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

Версия 2.2.0

Версия 2.2.0

9 октября 2019 г.

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

Важные изменения с момента версии 2.1.0

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

Версия 2.2.0-RC01

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

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

Нет общественных изменений, так как комната 2.2.0-beta01 .

Версия 2.2.0-бета01

22 августа 2019 г.

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

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

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

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

7 августа 2019 г.

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

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

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

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

  • Исправлена ​​ошибка, в которой комната генерирует неправильный код, используя метод в качестве поля, когда поле защищено. B/136194628
  • Исправлена ​​ошибка, которая привела к тому, что InvalidationTracker бросил NPE во втором процессе, когда была включена межответствующая недействительность, а служба недействительной была убита. B/137454915
  • Исправлена ​​ошибка, в которой комната не будет правильно идентифицировать тип возврата унаследованной функции подвески, аннотированной с @RawQuery . B/137878827
  • Обновлено сгенерированный код для @Relation , когда клавиша относительного типа имеет Blob для использования ByteBuffer , который сопоставим. B/137881998
  • Исправлена ​​ошибка, где комната жаловалась бы на отсутствующие сеттеры на pojos, используемых в качестве параметров частичной сущности @Insert , @Update и @Delete . B/138664463
  • Исправлена ​​ошибка, в которой комната жаловалась бы на отсутствие Getters & Setters для игнорируемой столбцы через @Entity , когда класс объектов использовался в определенных методах DAO. B/138238182
  • Исправлена ​​ошибка, в которой комната не была бы правильно преобразовать с именованные привязки Args в позиционные ARG, вызывая исключение времени выполнения при выполнении запроса с повторными параметрами. B/137254857

Версия 2.2.0-Alpha01

10 июля 2019 г.

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

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

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

  • Отношения с многими ко многим : @Relation теперь имеет новую собственность associateBy , которая принимает новую аннотацию @Junction , используемой для объявления отношения, которое необходимо удовлетворить с помощью таблицы соединения (также известного как таблица соединения). B/69201917
  • Отношения один на один : ограничение в полях POJO аннотированное с @Relation , чтобы быть из List или Set типа, было снято, что эффективно позволяет представлять отношения с одним значением. B/62905145
  • Целевая сущность : Dao Annnotations @Insert , @Update и @Delete теперь имеют новую targetEntity , что позволяет указать целевую таблицу, на которой метод DAO предназначен для действия. Это позволяет параметрам этих методов DAO быть произвольными pojos, которые будут интерпретироваться как частичные объекты. На практике это позволяет частичные вставки, удаляет и обновляются. б/127549506
  • Процессор инкрементной аннотации Gradle : комната теперь является изолирующим процессором аннотации Gradle, и увеличение может быть включена через room.incremental для процессора. Смотрите варианты компилятора номера для получения дополнительной информации. Если вы столкнетесь с какими -либо проблемами, пожалуйста, подайте здесь ошибку. Мы планируем включить повышение по умолчанию в будущей стабильной версии. B/112110217

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

  • Комната больше не будет распространять EmptySetResultException в Глобальном обработчике ошибок, когда RX -поток запроса был устранен до завершения запроса. B/130257475
  • Исправлена ​​ошибка, в которой комната покажет неверное сообщение об ошибке, когда функция приостановки DAO, аннотированная с @RawQuery не имела возврата. B/134303897
  • Комната больше не будет генерировать адаптеры DAO с необработанными типами. B/135747255

Версия 2.1.0

Версия 2.1.0

13 июня 2019 г.

Комната 2.1.0 выпускается без изменений с 2.1.0-rc01 . Коммуты, включенные в версию, можно найти здесь .

Важные изменения с 2,0,0

  • FTS : комната теперь поддерживает объекты с таблицей сопоставления FTS3 или FTS4 . Классы, аннотированные @Entity теперь можно дополнительно аннотировать @Fts3 или @Fts4 чтобы объявить класс с сопоставлением таблицы полнотекстового поиска. Опции FTS для дальнейшей настройки доступны через методы аннотации.
  • Вид : Комната теперь поддерживает объявление класса в качестве хранимого запроса, также известного как вид , используя аннотацию @DatabaseView .
  • Курутины : методы DAO теперь могут быть приостанавливаемыми функциями. Включите в свои зависимости room-ktx чтобы воспользоваться этой функциональностью. Артефакт KTX также обеспечивает функцию расширения RoomDatabase.withTransaction для выполнения транзакций базы данных в коратике.
  • Auto Value : Room теперь поддерживает объявление аннотированных классов AutoValue как сущностей и POJO. Комнатные аннотации @PrimaryKey , @ColumnInfo , @Embedded и @Relation теперь могут быть объявлены в абстрактных методах Annotated Class, аннотированного класса. Обратите внимание, что эти аннотации также должны сопровождаться @CopyAnnotations , чтобы Room правильно их понимала.
  • Дополнительная асинхронная поддержка : методы DAO, аннотированные с помощью @Insert , @Delete или @Update , а также @Query , содержащий INSERT , DELETE или UPDATE , теперь поддерживают типы возврата RX, Completable , Single , Maybe ListenableFuture и тип возврата Guava, и они также могут быть приостановленными функциями.
  • enableMultiInstanceInvalidation - это новый API в RoomDatabase.Builder , чтобы обеспечить недействительность в разных экземплярах PoomDatabase с использованием одного и того же файла базы данных.
  • fallbackToDestructiveMigrationOnDowngrade -это новый API в RoomDatabase.Builder для автоматического воссоздания базы данных, если произойдет понижение.
  • ignoredColumns - это новый API в аннотации @Entity , который можно использовать для перечисления поля игнорируемых по имени.
  • Комната теперь будет правильно использовать основной конструктор Kotlin в классах данных, избегая необходимости объявлять свойства как vars .

Версия 2.1.0-RC01

29 мая 2019 г.

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

  • Исправлена ​​ошибка инициализации комнаты, которая может произойти из -за уже настроенной конфигурации temp_store. B/132602198
  • Исправлено предупреждение об использовании двойной цитаты для пользователей с SQLite 3.27.0 и выше. B/131712640
  • Исправлена ​​ошибка, в которой невидимый обработок будет вызвать сбой, когда параллельно будет проходить многочисленные проверки на недействительную. B/133457594

Версия 2.1.0-beta01

7 мая 2019 г.

androidx.room 2.1.0-beta01 выпускается без изменений с 2.1.0-ALPHA07. Коммуты, включенные в эту версию, можно найти здесь .

Версия 2.1.0-Alpha07

25 апреля 2019 г.

API/изменения поведения

  • Функция расширения RoomDatabase.withTransaction НЕ МОЖЕТ БУДЕТ НЕ ПРИНЯТЬ функциональный блок с CoroutineScope в качестве приемника. Это предотвращает пропуск дополнительной обертки coroutineScope { } необходимой для одновременного запуска вещей в блоке транзакций.

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

  • Исправлена ​​ошибка, в которой комната не может соответствовать типовочному конвертеру для функции Kotlin DAO, содержащей параметр типа сбора. б/122066791

Версия 2.1.0-Alpha06

22 марта 2019 г.

API/изменения поведения

  • Асинхронные запросы транзакции теперь сериализуются так, что комната не будет использовать более одного потока для выполнения транзакций базы данных. RoomDatabase.Builder.setTransactionExecutor(Executor) был добавлен, чтобы позволить настройку исполнителя для использования для транзакций.
  • RoomDatabase.runInTransaction(Callable) больше не будет завершенным завершением исключений в Runtimeexceptions. B/128623748

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

  • Исправлена ​​ошибка, в которой трекер недействительной прекратила бы наблюдать за таблицей контента, если были добавлены наблюдатели как для таблицы контента, так и таблицы внешнего контента FTS. B/128508917
  • Обновленная грамматика SQLite в комнате в соответствии с SQLite 3.24.0. B/110883668

Версия 2.1.0-Alpha05

13 марта 2019 г.

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

  • Функция расширения RoomDatabase.withTransaction позволяет безопасно выполнять транзакции базы данных в коратике. Функции расширений комнаты вместе с поддержкой Coroutines доступны в артефакте room-ktx .
  • Неабстрактные методы DAO, аннотированные с помощью @Transaction теперь могут быть функциями приостановки. B/120241587

API/изменения поведения

  • Артефакт room-coroutines были переименованы в room-ktx после того же именования, что и другие артефакты Androidx.
  • beginTransaction , setTransactionSuccessful и endTransaction в RoomDatabase были устарели в пользу runInTransaction и функции расширения room-ktx withTransaction .

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

  • Исправлена ​​ошибка, где аргументы токенизатора отбрасывались, если используемый токенизатор был прост. B/125427014
  • Исправлена ​​ошибка, в которой комната не сможет правильно идентифицировать подвесные функции с параметрами, которые типа были внутренним классом. б/123767877
  • Исправлена ​​ошибка, в которой метод отложенного @Query DAO с INSERT , UPDATE или DELETE с нетерпением подготовила запрос в основном потоке. B/123695593
  • Исправлены различные ошибки, где комната генерирует неправильный код для определенных функций приостановки. B/123466702 и B/123457323
  • Исправлена ​​ошибка, в которой устаревшее использование методов неправильно подавлялось в сгенерированном коде. B/117602586
  • Обновленная зависимость комнаты Androidx.sqlite до 1.0.2, которая содержит исправления для правильной обработки поврежденных баз данных. б/124476912

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

  • Комната 2.1.0-Alpha05 зависит от артефакта kotlinx-metadata-jvm , который в настоящее время не доступен в Maven Central ( KT-27991 ). Эта зависимость может быть разрешена путем добавления maven { url "https://kotlin.bintray.com/kotlinx/" } в репозитории вашего проекта.

Версия 2.1.0-Alpha04

25 января 2019 г.

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

  • Методы DAO, аннотированные с помощью @Query , содержащих INSERT , UPDATE или DELETE операторов, теперь могут возвращать асинхронные типы Single , Mayble , Completable и ListenableFuture . Кроме того, они также могут быть приостановлены функции. B/120227284

API/изменения поведения

  • Комната теперь вынесет ошибку, если метод DAO не Abstract, аннотированный с @Transaction , возвращает асинхронный тип, такой как Single , Mayble , Completable , LiveData или ListenableFuture Поскольку транзакции ограничены нитью, в настоящее время невозможно начать и заканчивать транзакцию вокруг функции, которая может заправлять запросы в разных потоках. B/120109336
  • OnConflictStrategy.FAIL и OnConflictStrategy.ROLLBACK были @Deprecated поскольку они не ведут себя в соответствии с предназначенными с текущими привязками SQLite Android. B/117266738

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

  • Исправлена ​​ошибка, в которой комната неправильно использовала бы тип типа TypeConverter, если бы метод DAO был функцией приостановки. B/122988159
  • Исправлена ​​ошибка, в которой комната неправильно идентифицирует наследственные функции подвески как не подвижные. б/122902595
  • Исправлена ​​ошибка, в которой комната генерирует неправильный код, когда поле @Embedded находилось в родительском классе и использовалось в нескольких классах ребенка. б/121099048
  • Исправлена ​​проблема, в которой база данных будет тупиться при выборе DAO приостановить функции между beginTransaction() и endTransaction() . B/120854786

Версия 2.1.0-Alpha03

4 декабря 2018 г.

Изменения API

  • tokenizer FTS в @Fts3 / @Fts4 теперь принимает строку вместо Enum. Это позволяет Room использовать собственные токенизаторы. Встроенные токенизаторы по-прежнему определяются в FtsOptions как строковые константы. б/119234881

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

  • Курутины : методы DAO теперь могут быть приостанавливаемыми функциями. Для поддержки функций приостановки в Room был выпущен новый артефакт — room-coroutines . б/69474692
  • Методы DAO, аннотированные @Insert , @Delete или @Update теперь поддерживают ListenableFuture в качестве возвращаемого типа. б/119418331

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

  • Исправлена ​​ошибка, из-за которой Room неправильно пыталась найти конструктор со столбцами в свойстве ignoredColumns @Entity . б/119830714
  • Исправлена ​​ошибка, из-за которой Room не помечала параметры метода DAO как окончательные в их сгенерированной реализации. б/118015483
  • Исправлена ​​ошибка, из-за которой процессор Room аварийно завершал работу при сообщении об ошибке в запросе со специальными символами. б/119520136
  • Исправлена ​​ошибка, из-за которой Room отклоняла другие различные реализации Collection в качестве аргументов выражения IN . б/119884035
  • Исправлена ​​ошибка, из-за которой LiveData, возвращаемая из комнаты, собирала мусор при постоянном наблюдении, из-за чего она больше не выдавала новые данные. б/74477406
  • Обновлена ​​блокировка закрытия RoomDatabase , чтобы уменьшить конфликты блокировок. б/117900450

Версия 2.1.0-Alpha02

30 октября 2018 г.

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

  • Добавлена ​​поддержка ссылки на @DatabaseView в @Relation . б/117680932

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

  • Исправлена ​​ошибка, из-за которой Room выполнял дисковый ввод-вывод в основном потоке при подписке и удалении из возвращаемого типа Rx. б/117201279
  • Исправлена ​​ошибка, из-за которой Room не мог найти подходящий преобразователь типов для поля в классе сущностей Kotlin. б/111404868
  • Исправлена ​​ошибка, из-за которой Room генерировал неправильный код для реализации интерфейса DAO , содержащий метод Kotlin по умолчанию, не имеющий аргументов. б/117527454
  • Обновлен анализатор грамматики SQLite в Room, исправлена ​​проблема с производительностью, приводившая к длительному времени сборки. б/117401230

Версия 2.1.0-Alpha01

8 октября 2018 г.

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

  • FTS : комната теперь поддерживает объекты с таблицей сопоставления FTS3 или FTS4 . Классы, аннотированные @Entity теперь можно дополнительно аннотировать @Fts3 или @Fts4 чтобы объявить класс с сопоставлением таблицы полнотекстового поиска. Опции FTS для дальнейшей настройки доступны через методы аннотации. б/62356416
  • Представления : Room теперь поддерживает объявление класса как хранимого запроса, также известного как представление , с использованием аннотации @DatabaseView. б/67033276
  • Auto Value : Room теперь поддерживает объявление аннотированных классов AutoValue как сущностей и POJO. Аннотации Room @PrimaryKey , @ColumnInfo , @Embedded и @Relation теперь могут быть объявлены в абстрактных методах класса с аннотациями автоматического значения. Обратите внимание, что эти аннотации также должны сопровождаться @CopyAnnotations , чтобы Room правильно их понимала. б/62408420
  • Поддержка дополнительных типов возврата Rx : методы DAO, аннотированные @Insert , @Delete или @Update теперь поддерживают типы возврата Rx Completable , Single<T> и Maybe<T> . б/63317956
  • Неизменяемые типы с @Relation : ранее Room требовал, чтобы поля с аннотациями @Relation были устанавливаемыми, но теперь они могут быть параметрами конструктора.
  • enableMultiInstanceInvalidation : новый API в RoomDatabase.Builder , позволяющий сделать недействительными несколько экземпляров RoomDatabase с использованием одного и того же файла базы данных. Этот механизм аннулирования нескольких экземпляров также работает в нескольких процессах. б/62334005
  • fallbackToDestructiveMigrationOnDowngrade : новый API в RoomDatabase.Builder для автоматического повторного создания базы данных в случае перехода на более раннюю версию. б/110416954
  • ignoredColumns : новый API в аннотации @Entity , который можно использовать для перечисления игнорируемых полей по имени. Полезно для игнорирования унаследованных полей сущности. б/63522075

API/изменения поведения

  • mCallback и mDatabase в RoomDatabase теперь @Deprecated и будут удалены в следующей основной версии Room. б/76109329

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

  • Исправлены две проблемы, из-за которых Room не мог должным образом восстановиться после поврежденной базы данных или неправильной миграции во время инициализации. б/111504749 и б/111519144
  • Room теперь будет правильно использовать основной конструктор Kotlin в классах данных, избегая необходимости объявлять поля как vars . б/105769985

Версия 2.0.0

Версия 2.0.0

1 октября 2018 г.

androidx.room 2.0.0 выпускается без изменений с 2.0.0-RC01.

Версия 2.0.0-RC01

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

androidx.room 2.0.0-rc01 выпускается без изменений с 2.0.0-BETA01.

Версия 2.0.0-BETA01

2 июля 2018 г.

API/изменения поведения

  • Добавлен RoomDatabase.Builder.setQueryExecutor() позволяющий настраивать место выполнения запросов.
  • Добавлена ​​поддержка RxJava2 Observable
  • Сгенерированные реализации DAO и базы данных теперь являются окончательными.

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

  • Укажите имя класса/поля в ошибке «невозможно найти метод получения поля» b/73334503
  • Исправлена ​​обратная совместимость RoomOpenHelper со старыми версиями Room b/110197391.

Зависимости до антирода

Для предварительных версий комнаты включают эти зависимости:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Версия 1.1.1

Версия 1.1.1

19 июня 2018 г.

Комната 1.1.1 идентична комнате 1.1.1-rc1 .

Версия 1.1.1-RC1

16 мая 2018 г. Мы настоятельно рекомендуем использовать комнату 1.1.1-rc1 вместо 1.1.0 , если вы используете миграции.

Исправлена ​​ошибка, из-за которой Room не обрабатывала правильно инициализацию после миграции b/79362399.

Версия 1.1.0

Версия 1.1.0-бета3

19 апреля 2018 г.

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

  • Исправлена ​​ошибка компиляции, когда POJO Kotlin ссылается на объект отношения, определенный в Java b/78199923.

Версия 1.1.0-бета2

5 апреля 2018 г.

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

  • Исправлена ​​критическая ошибка в реализациях Rx Single и Maybe от Room, из-за которой запрос заранее перерабатывался, вызывая проблемы, если вы добавляете более 1 наблюдателя к возвращенным экземплярам Single или Maybe . б/76031240

  • [Poomdatabase.clearalltables] [ref-clearalltables] не будет VACUUM базу данных, если она будет вызвана внутри транзакции. б/77235565

Версия 1.1.0-бета1

21 марта 2018 г.

Изменения API

  • Судя по отзывам API Review, @RawQuery больше не принимает передачу String в качестве параметра запроса. Вам нужно использовать [Supportsqlitequery] [ref-supportsqlitequery]. (См. [simplesqlitequery] [ref-simplesqlitequery], чтобы легко создать экземпляр [Поддержка sclitequery] [ref-supportsqlitequery] с поддержкой аргументации).
  • SubtDatabase.Builder [SwarkbackTodestructivemigrationfrom] Метод [ref-fallbacktodestructivemigrationfrom] теперь принимает vararg int вместо vararg Integer .

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

  • [Poomdatabase.clearalltables] [ref-clearalltables] теперь пытается вернуть место обратно в операционную систему, установив контрольную точку Wal и VACUUM базу данных.
  • [ @RawQuery ] [Ref-Rawquery] теперь принимает любое POJO для собственности observedEntities , пока POJO ссылается на одно или несколько сущностей через свои Embedded поля или Relation . б/74041772
  • Пейджинг: реализация DataSource в Room теперь правильно обрабатывает многотабличные зависимости (такие как отношения и соединения). Раньше они не могли вызвать новые результаты или не могли скомпилироваться. б/74128314

Версия 1.1.0-Alpha1

22 января 2018 г.

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

  • RawQuery : этот новый API позволяет методам @Dao получать SQL в качестве параметра запроса b/62103290 , b/71458963.
  • fallBackToDestructiveMigrationsFrom : этот новый API в RoomDatabase.Builder обеспечивает более детальный контроль над тем, из каких стартовых версий схемы разрешены деструктивные миграции (по сравнению с FallbackToDestructiveMigration) b/64989640
  • Room теперь поддерживает только новые API-интерфейсы подкачки (альфа-4+), а поддержка устаревшего LivePagedListProvider прекращена. Чтобы использовать новую альфа-версию Room, вам потребуется использовать пейджинговую alpha-4 или более позднюю версию и переключиться с LivePagedListProvider на LivePagedListBuilder , если вы еще этого не сделали.

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

  • Улучшена поддержка типов Kotlin Kapt. б/69164099
  • Порядок полей больше не делает схему недействительной. б/64290754