Room

Room 持久性库在 SQLite 上提供了一个抽象层,以允许更强大的数据库访问,同时利用 SQLite 的全部功能。
最新更新 稳定版 候选版本 Beta 版 Alpha 版
2024 年 10 月 30 日 2.6.1 - - 2.7.0-alpha11

声明依赖项

要添加对 Room 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。

Room 的依赖项包括测试 Room 迁移Room RxJava

在应用或模块的 build.gradle 文件中添加所需构件的依赖项

Kotlin

dependencies {
    val room_version = "2.6.1"

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

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.6.1"

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

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

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

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

有关使用 KAPT 插件的信息,请参阅KAPT 文档

有关使用 KSP 插件的信息,请参阅KSP 快速入门文档

有关使用 Kotlin 扩展的信息,请参阅ktx 文档

有关依赖项的更多信息,请参阅添加构建依赖项

可选地,对于非 Android 库(即仅 Java 或 Kotlin 的 Gradle 模块),您可以依赖 androidx.room:room-common 来使用 Room 注解。

配置编译器选项

Room 具有以下注释处理器选项。

room.schemaLocation 目录
启用将数据库模式导出到给定目录中的 JSON 文件中。有关更多信息,请参阅Room 迁移
room.incremental 布尔值
启用 Gradle 增量注释处理器。默认值为 true
room.generateKotlin 布尔值
生成 Kotlin 源文件而不是 Java。需要 KSP。默认值为 false。有关更多详细信息,请参阅版本 2.6.0说明。

使用 Room Gradle 插件

使用 Room 2.6.0 及更高版本,您可以使用 Room Gradle 插件配置 Room 编译器的选项。该插件配置项目,以便生成的模式(编译任务的输出,用于自动迁移)正确配置为具有可重现和可缓存的构建。

要添加插件,请在顶级 Gradle 构建文件中定义插件及其版本。

Groovy

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

Kotlin

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

在模块级 Gradle 构建文件中,应用插件并使用 room 扩展。

Groovy

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

使用 Room Gradle 插件时,需要设置 schemaDirectory。这将配置 Room 编译器和各种编译任务及其后端 (javac、KAPT、KSP),以便将模式文件输出到带风味的文件夹中,例如 schemas/flavorOneDebug/com.package.MyDatabase/1.json。应将这些文件检入存储库,以用于验证和自动迁移。

即使某些选项受 Room 编译器支持,也无法在所有版本的 Room Gradle 插件中配置它们。下表列出了每个选项,并显示了使用 room 扩展添加对配置该选项的支持的 Room Gradle 插件版本。如果您的版本较低,或者该选项尚不受支持,则可以使用 注释处理器选项

选项 自版本
room.schemaLocation(必需) 2.6.0
room.incremental -
room.generateKotlin -

使用注释处理器选项

如果您未使用 Room Gradle 插件,或者您的插件版本不支持所需的选项,则可以使用注释处理器选项配置 Room,如 添加构建依赖项 中所述。如何指定注释选项取决于您是使用 KSP 还是 KAPT 用于 Room。

Groovy

// 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...
                    ]
            }
        }
    }
}

Kotlin

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

版本 2.7.0-alpha11

2024 年 10 月 30 日

androidx.room:room-*:2.7.0-alpha11 已发布。版本 2.7.0-alpha11 包含 这些提交

API 更改

  • 重新审视新添加的 convertRows() 方法签名,使其成为一个挂起函数,该函数接收 RawRoomQuery 用于 room-paging。(Ie57b5b/369136627

错误修复

  • 修复了 room-paging 中的一个问题,该问题在将 @RelationPagingSource 结合使用时会生成无效代码。

版本 2.7.0-alpha10

2024 年 10 月 16 日

androidx.room:room-*:2.7.0-alpha10 已发布。版本 2.7.0-alpha10 包含 这些提交

API 更改

  • 创建内部 ByteArrayWrapper 类以支持在非 Android 和非 JVM 平台上使用 ByteBuffer 的关系。(I75543b/367205685
  • 添加 SQLiteStatement.getColumnType() 以及各种 SQLITE_DATA_* 结果常量以启用检索列的数据类型。(I1985cb/369636251

版本 2.7.0-alpha09

2024 年 10 月 2 日

androidx.room:room-*:2.7.0-alpha09 已发布。版本 2.7.0-alpha09 包含 这些提交

错误修复

  • 修复了 room-paging 的 KMP 实现中的一个问题,该问题会导致 错误代码:8,消息:尝试写入只读数据库,因为在读取连接上启动了写入事务。(b/368380988

版本 2.7.0-alpha08

2024 年 9 月 18 日

androidx.room:room-*:2.7.0-alpha08 已发布。版本 2.7.0-alpha08 包含 这些提交

新功能

  • room-paging 工件已迁移为与 KMP 兼容。(Ib8756b/339934824
  • API invalidationTrackerFlow() 已作为一等公民 API 标准化为 InvalidationTracker.createFlow(),现在可在 KMP 项目中的非 Android 源集上使用。(I1fbfa,(I8fb29),b/329291639b/329315924

API 更改

  • 已删除或替换 Room 中使用“Cursor”一词的所有警告和错误消息,因为“Cursor”不再是用于 Room 的 KMP 版本的准确通用术语。(Id8cd9b/334087492

错误修复

  • 修复了 Room KMP 会尝试使用 UUID 为非 JVM 平台发出代码的问题。(b/362994709
  • 修复了 Room Gradle 插件中的一个问题,该问题在与 Compose Multiplatform 一起用于 KMP 项目时会导致出现“无法在已锁定以进行变异后更改配置…的属性”之类的错误。(b/343408758

版本 2.7.0-alpha07

2024 年 8 月 21 日

androidx.room:room-*:2.7.0-alpha07 已发布。版本 2.7.0-alpha07 包含 这些提交

新功能

  • Room Gradle 插件现在将自动将导出的模式添加到 Android Instrumentation Test 资源源中,以便 MigrationTestHelper 可以使用它们。

错误修复

  • 修复了 RoomDatabaseConstructor 的生成的“actual”在“expect”声明中也覆盖了“initialize”函数时缺少“actual”修饰符的问题。(359631627
  • 修复了 RoomDatabaseConstructor 的生成的“actual”与“expect”声明的可见性不匹配的问题。(358138953

版本 2.7.0-alpha06

2024 年 8 月 7 日

androidx.room:room-*:2.7.0-alpha06 已发布。版本 2.7.0-alpha06 包含 这些提交

API 更改

  • 更改 KMP 项目中 RoomDatabase 的实例化设置。

由于 Kotlin 2.0 编译模型,引用名为 instantiateImpl() 的待生成函数的策略不再可行。引入了两个新的 API,@ConstructedByRoomDatabaseConstructor,它们取代了 instantiateImpl() 策略。新策略如下

  1. 定义一个实现 RoomDatabaseConstructor 的 expect 对象

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. 使用 @ConstructedBy 将对象与 @Database 声明链接

      @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/316978491b/338446862b/342905180

  • 通过添加一个名为 RoomRawQuery 的新 API 支持 Room KMP 中的 @RawQuery,该 API 在保存原始 SQL 字符串和将参数绑定到语句方面类似于 SupportSQLiteQuery@RawQuery 注释的函数现在可以接受 RoomRawQuery 作为其唯一的参数。(Iea844b/330586815
  • 添加了 setQueryCallback() 的一个重载,它接受 CoroutineContext。(Id66ffb/309996304
  • 添加了对 linuxArm64 Kotlin 多平台目标的支持(I139d3b/338268719

错误修复

  • 修复了 Room 在非 Android 目标中错误地生成对 recursiveFetchArrayMap 的调用的问题。(710c36b/352482325
  • 修复了 Room 有时会在 KMP 项目中抛出关于“连接尝试超时”的异常的问题。(fa72d0b/347737870
  • 修复了自动迁移中的一个问题,该问题在其他表更改其模式以符合新的外键之前过早地检查了外键。(7672c0b/352085724

版本 2.7.0-alpha05

2024 年 7 月 10 日

androidx.room:room-*:2.7.0-alpha05 已发布。版本 2.7.0-alpha05 包含 这些提交

API 更改

  • SQLiteKt 重命名为 SQLite,并将 BundledSQLiteKt 重命名为 BundledSQLite。(I8b501

错误修复

  • 修复了当使用 AndroidSQLiteDriverRoomDatabase 会死锁或出现连接超时错误的问题。

版本 2.7.0-alpha04

2024 年 6 月 12 日

androidx.room:room-*:2.7.0-alpha04 已发布。版本 2.7.0-alpha04 包含这些提交

错误修复

  • 修复了 Room 的注解处理器在 DAO 中定义多映射返回值类型时会生成不兼容的 KMP 代码的问题。(b/340983093
  • 修复了如果使用 @Database 注解的类没有包,Room 将无法找到生成的数据库实现的问题。(b/342097292
  • 修复了启用自动关闭和多实例失效有时会导致数据库因空闲而自动关闭时出现 ConcurrentModificationException 的问题。

版本 2.7.0-alpha03

2024年5月29日

androidx.room:room-*:2.7.0-alpha03 已发布。版本 2.7.0-alpha03 包含这些提交

错误修复

  • 修复了与 Kotlin 2.0 和 KSP 2.0 相关的各种问题。请注意,使用 KSP 2 支持的 Kotlin 2.0 尚未完成,团队正在处理新编译器中的各种 API 和行为更改。(b/314151707

版本 2.7.0-alpha02

2024年5月14日

androidx.room:room-*:2.7.0-alpha02 已发布。版本 2.7.0-alpha02 包含这些提交

错误修复

  • 修复了各种 KSP 问题。

版本 2.7.0-alpha01

2024年5月1日

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() 的重载版本,该版本接受一个 lambda 参数,该参数旨在与 Room 生成的函数一起使用,以避免在实例化生成的 RoomDatabase 实现时使用反射。示例用法如下:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • 已向构建器添加了一个用于使用 CoroutineContext 配置 Room 的 API:RoomDatabase.Builder.setQueryCoroutineContext。请注意,一个 RoomDatabase 只能使用 setQueryExecutor 配置执行器或使用协程上下文,但不能同时使用两者。
  • 已添加一个用于使用 SQLite 驱动程序配置 Room 的 API:RoomDatabase.Builder.setDriver()。有关 SQLite 驱动程序 API 的更多信息,请参阅SQLite KMP 文档
  • 已添加用于从驱动程序 API 访问底层 SQLiteConnection 的 API:RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection
  • 现在,各种与 Room 相关的回调都有一个重载版本,它接收 SQLiteConnection 而不是 SupportSQLiteDatabase。这些旨在在迁移到 KMP 项目时被覆盖。有关将 Android 应用中的 Room 用法迁移到通用 KMP 模块的更多信息,请参阅迁移指南。回调如下:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • KTX 工件 androidx.room:room-ktx 已与所有 API 合并到 androidx.room:room-runtime 中,该工件现在为空。请将其从您的依赖项列表中删除。

版本 2.6

版本 2.6.1

2023年11月29日

androidx.room:room-*:2.6.1 已发布。版本 2.6.1 包含这些提交。

错误修复

  • 解决了生成代码中的问题,其中 EntityCursorConverter 中 Double 列的默认值设置为 0 而不是 0.0。还包含了针对 Float 类型列的类似边缘情况的潜在修复。(Id75f5b/304584179
  • PagingSource 加载中抛出的异常现在将作为 LoadStateUpdateLoadResult.Error 传播,其中包含 Throwable。可以通过 PagingDataAdapter.loadStateFlow(Views)LazyPagingItems.loadState(Compose) 观察此错误状态。请注意,这标志着行为的改变,在过去,加载错误将作为由触发加载的 dao 方法抛出的异常冒泡。(I93887b/302708983

版本 2.6.0

2023年10月18日

androidx.room:room-*:2.6.0 已发布。版本 2.6.0 包含这些提交。

自 2.5.0 以来重要更改

  • 现在可以在 Room KSP 中使用启用 Kotlin 代码生成(或“Kotlin 代码生成”)的选项。(4297ec0)。要在 Room 中打开 Kotlin 代码生成,请将 room.generateKotlin 选项名称添加到 KSP 的处理器选项中。有关如何为 KSP 传递处理器选项的更多详细信息,请参阅KSP 文档

注意:使用 Kotlin 代码生成时,请注意已添加的其他限制。在 Kotlin 代码生成中,不允许将抽象属性作为 DAO 获取器或 DAO 查询,而是应将其重写为函数,以避免错误地认为属性值是不可变的并且具有固定的存储结果。已添加的另一个限制是,在 Room 中,Kotlin 代码生成不再允许使用可为空的集合返回值类型。

警告:您可能会发现,在使用 Kotlin 代码生成时,项目在空值性方面更加严格。在 Kotlin 代码生成中,类型参数的空值性很重要,而在 Java 中,这大多被忽略。例如,假设您有一个 `Flow` 返回类型,并且表为空。在 Java 代码生成中,这不会导致任何问题,但在 Kotlin 代码生成中,您将收到错误。要避免这种情况,您需要使用 `Flow`,假设发出空值。

  • Room Gradle 插件的新工件已添加到 Room 中,其 ID 为 androidx.room,它解决了 Room 中关于通过 Gradle 注解处理器选项输入和输出模式的各种现有问题。有关更多详细信息,请参阅Room 版本 2.6.0-alpha02 发行说明
  • Room 实体中的值类现在受 KSP 支持。(4194095
  • DAO 函数中的嵌套 Map 返回类型现在受 Room 支持。(I13f48203008711

版本 2.6.0-rc01

2023年9月20日

androidx.room:room-*:2.6.0-rc01 已发布。版本 2.6.0-rc01 包含这些提交。

版本 2.6.0-beta01

2023年8月23日

androidx.room:room-*:2.6.0-beta01 已发布。版本 2.6.0-beta01 包含这些提交。

错误修复

  • 处理在 upsert 期间遇到 SQLite 特殊情况异常,当在 upsert 期间抛出 2067 SQLITE_CONSTRAINT_UNIQUE 异常时,upsert 应执行更新。(If2849b/243039555

版本 2.6.0-alpha03

2023年8月9日

androidx.room:room-*:2.6.0-alpha03 已发布。版本 2.6.0-alpha03 包含这些提交。

新功能

  • DAO 函数中的嵌套 Map 返回类型现在受 Room 支持。(I13f48203008711

API 更改

  • 已创建名为 @MapColumn 的新类型注释以替换 @MapInfo,后者现已弃用。对于在 @MapInfo 注释中提供的每个列名(keyColumnNamevalueColumnName 或两者),您都需要声明一个仅包含 columnName@MapColumn 注释,并在 DAO 函数返回值类型中引用的特定类型参数(Map 的键或值)上使用该注释。这是因为 @MapColumn 注释直接用于 DAO 函数返回值类型中的类型参数,而不是像 @MapInfo 那样用于函数本身。有关更多信息,请参阅 @MapColumn 文档。(Ib0305b/203008711
  • 更新了 API 文件以注释兼容性抑制。(I8e87ab/287516207
  • Room Gradle 插件 API 已更新,不再始终需要每个变体的配置。这意味着插件可以接受所有变体的全局位置,而无需创建多个目录,从而实现更流畅的迁移,但也足够灵活,可以手动配置风格或构建类型模式,同时仍然保留插件的优势(可重复且可缓存的构建)。(I09d6fb/278266663

错误修复

  • 修复了 QueryInterceptorStatement 中潜在的内存泄漏漏洞。(I193d1
  • 修复了 QueryInterceptorDatabase execSQL() 函数中的不正确行为。(Iefdc8

版本 2.6.0-alpha02

2023年6月21日

androidx.room:room-*:2.6.0-alpha02 已发布。版本 2.6.0-alpha02 包含这些提交。

Room Gradle 插件

此新版本包含一个新的 Room Gradle 插件工件,其 ID 为 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 转换用法。(Iab8eab/281008549

错误修复

  • 解决在将 Room 源代码从 Java 迁移到 Kotlin 后,在 Robolectric 中实例化数据库时出现的问题。(Ic053cb/274924903

版本 2.6.0-alpha01

2023年3月22日

androidx.room:room-*:2.6.0-alpha01 已发布。版本 2.6.0-alpha01 包含这些提交。

新功能

  • 在 Room 中为 KSP 支持值类。Room 现在能够在实体中支持值类。(4194095
  • 现在可以在 Room 中启用 Kotlin 代码生成(或“Kotlin CodeGen”)(4297ec0)。要在 Room 中打开 Kotlin CodeGen,请将 room.generateKotlin 选项名称添加到 KSP 的处理器选项中。有关如何为 KSP 传递处理器选项的更多详细信息,请参阅KSP 文档

注意:使用 Kotlin 代码生成时,请注意已添加的其他限制。在 Kotlin 代码生成中,不允许将抽象属性作为 DAO 获取器或 DAO 查询,而是应将其重写为函数,以避免错误地认为属性值是不可变的并且具有固定的存储结果。已添加的另一个限制是,在 Room 中,Kotlin 代码生成不再允许使用可为空的集合返回值类型。

警告:您可能会发现,在使用 Kotlin 代码生成时,项目在空值性方面更加严格。在 Kotlin 代码生成中,类型参数的空值性很重要,而在 Java 中,这大多被忽略。例如,假设您有一个 `Flow` 返回类型,并且表为空。在 Java 代码生成中,这不会导致任何问题,但在 Kotlin 代码生成中,您将收到错误。要避免这种情况,您需要使用 `Flow`,假设发出空值。

API 更改

  • 防止在 DAO 方法返回类型中无意义地使用可空集合。(I777dcb/253271782b/259426907
  • 添加了一个用于创建发出失效跟踪器更改的 Flow 的 API。此 API 可用于创建需要对数据库更改做出反应的流。(I8c790b/252899305

错误修复

  • 在 Kotlin 代码生成中不允许抽象属性作为 DAO getter 或 DAO 查询,而应将其重写为函数,以避免属性值是不可变的并且具有固定存储结果的错误概念。(If6a13b/127483380b/257967987

版本 2.5.2

版本 2.5.2

2023年6月21日

androidx.room:room-*:2.5.2 已发布。版本 2.5.2 包含这些提交。

错误修复

  • 修复了与 kotlinx-metadata-jvm 的不兼容性问题。(386d5c
  • 修复了在 Robolectric 测试中使用 Room 时导致 Room 抛出错误的问题。(f79beab/274924903

版本 2.5.1

版本 2.5.1

2023年3月22日

androidx.room:room-*:2.5.1 已发布。版本 2.5.1 包含这些提交。

错误修复

  • 如果数据库已打开,则避免在 FrameworkSQLiteHelper 中检查数据库父目录。(5de86b8
  • 在检查数据库是否已打开时使用 isOpenInternal 检查。(e91fb35
  • 现在可以使用 Room 的 acquireTransactionThread() 中的重入情况的更好处理。(219f98b)。在挂起事务期间,Room 使用事务执行程序中的一个线程,在其中启动事件循环并将挂起数据库操作分派到它,以便它们都封装在事务协程中。通常预计事务线程与启动事务的线程不同,但在某些情况下它们是相同的。为了处理这种重入情况,withTransaction() 已重构为不再依赖于控制作业,而是它将在事务线程中的 runBlocking 中执行挂起事务块。

版本 2.5.0

版本 2.5.0

2023年2月22日

androidx.room:room-paging-guava:2.5.0androidx.room:room-paging-rxjava2:2.5.0androidx.room:room-paging-rxjava3:2.5.0 已发布。版本 2.5.0 包含这些提交。

版本 2.5.0

2023年1月11日

androidx.room:room-*:2.5.0 已发布。版本 2.5.0 包含这些提交。

自 2.4.0 以来重要更改

  • 所有 room-runtime 源代码都已从 Java 转换为 Kotlin。请注意,如果您的代码是用 Kotlin 编写的,则可能会遇到源代码不兼容性问题,因为库已转换为 Kotlin。例如,一个已知的源代码不兼容更改是,在 InvalidationTracker 中,您现在需要在 Observer 中声明 onInvalidate() 以具有类型为 Set 而不是 MutableSet 的参数。此外,某些 getter 方法已转换为属性,需要在 Kotlin 文件上使用属性访问语法。如果存在任何重大不兼容性,请提交错误报告。
  • 添加了一个新的快捷注释 @Upsert,它在没有唯一性冲突时尝试插入实体,或者在有冲突时更新实体。(I7aaabb/241964353
  • 已添加新的 room-paging 工件 room-paging-rxjava2room-paging-rxjava3room-paging-guava 以在 Room Paging 中提供支持。
  • 添加了 API 用于提供键和值表名称,以便在 @MapInfo 中消除歧义(Icc4b5

版本 2.5.0-rc01

2022年12月7日

androidx.room:room-*:2.5.0-rc01 已发布。版本 2.5.0-rc01 包含这些提交。

  • 此版本与 2.5.0-beta02 相同。

版本 2.5.0-beta02

2022年11月9日

androidx.room:room-*:2.5.0-beta02 已发布。版本 2.5.0-beta02 包含这些提交。

API 更改

  • 修复了从不变 (Array<Any?>) 到逆变 (Array<out Any?>) 获取查询参数的各种 API,以匹配 Java 的数组行为。(b/253531073

版本 2.5.0-beta01

2022年10月5日

androidx.room:room-*:2.5.0-beta01 已发布。版本 2.5.0-beta01 包含这些提交。

API 更改

  • 将支持 @Upsert 的最低版本限制为 API 16。这是由于无法在较旧的 API 中识别主键约束冲突。(I5f67fb/243039555

错误修复

  • 修复了影子表错误地导出到模式 .json 文件,导致文件损坏的问题。(I4f83bb/246751839

版本 2.5.0-alpha03

2022年8月24日

androidx.room:room-*:2.5.0-alpha03 已发布。版本 2.5.0-alpha03 包含这些提交。

新功能

  • 添加了一个新的快捷注释 @Upsert,它在没有唯一性冲突时尝试插入实体,或者在有冲突时更新实体。(I7aaabb/241964353

错误修复

  • Room 现在将在自动迁移外键约束检查期间抛出 SQLiteConstraintException 而不是 IllegalStateException。(I328dd
  • 修复了 getOpenHelpergetQueryExecutorgetTransactionExecutor 的 getter/属性的 Kotlin 源代码不兼容更改。(Iad0ac

版本 2.5.0-alpha02

2022年6月1日

androidx.room:room-*:2.5.0-alpha02 已发布。版本 2.5.0-alpha02 包含这些提交。

新功能

API 更改

  • room-runtime 已完全从 Java 转换为 Kotlin。(If2069b/206859668),(Ie4b55b/206859668),(I697eeb/206859668),(I96c25b/206859668)

    注意:由于库转换为 Kotlin,您可能会遇到源代码不兼容问题。如果您的代码是 Kotlin 并调用旧版本的 Room,则新版本需要处理这些情况。例如,一个已知的源代码不兼容更改是在 InvalidationTracker 中,您现在需要在 Observer 中声明 onInvalidate(),其参数类型为 Set,而不是 MutableSet

  • 添加了 API 用于提供键和值表名称,以便在 @MapInfo 中消除歧义(Icc4b5
  • 修复了一个源代码兼容性问题,以重新允许在属性 getter 中使用 @Ignore。(Ifc2fb)

错误修复

  • 重复列解析启发式算法。Room 现在将尝试解析多映射查询中的歧义列。这允许将包含相同名称表的表与 JOIN 正确映射到结果数据对象。(I4b444b/201306012b/212279118)

版本 2.5.0-alpha01

2022 年 2 月 23 日

androidx.room:room-*:2.5.0-alpha01 已发布。版本 2.5.0-alpha01 包含这些提交。

API 更改

  • 修复了 Kotlin 源代码中 Room @IntDef 用法未被强制执行的问题。(I75f41b/217951311)
  • 修复了一个源代码兼容性问题,以重新允许在属性 getter 中使用 @Query。(I0a09b)
  • 将 room-common 从 Java 转换为 Kotlin。(I69c48b/206858235)

    注意:由于某些属性在库转换为 Kotlin 期间已移动到伴随对象中,因此您可能会遇到源代码不兼容问题。如果您的代码是 Kotlin 并调用旧版本的 Room,则在访问这些属性时需要“.Companion”后缀。

  • 将 room-migration 从 Java 转换为 Kotlin。(I2724bb/206858622)
  • room-runtime 中与 paging 相关的文件从 Java 转换为 Kotlin。(I82fc8b/206859668)
  • 添加了用于多进程锁并在 FrameworkSQLite* 级别使用的 API,以保护多进程首次数据库创建和迁移。(Ied267b/193182592)

错误修复

  • 添加了对 Kotlin 源代码中内部属性的支持。这是一个轻微的 Room 行为更改,它将在将函数与属性匹配为 getter/setter 时使用函数的源名称(以前,它使用函数的 JVM 名称,该名称对于内部函数/属性是不同的)。如果您使用自定义 @JvmName 注解将 getter/setter 与私有属性匹配,请在更新后仔细检查生成的代码 (If6531b/205289020)

版本 2.4.3

版本 2.4.3

2022 年 7 月 27 日

androidx.room:room-*:2.4.3 已发布。版本 2.4.3 包含这些提交。

错误修复

  • 修复了一个问题,该问题会导致 Room 在 Kotlin 1.7 中无法识别挂起函数 (b/236612358)

版本 2.4.2

版本 2.4.2

2022 年 2 月 23 日

androidx.room:room-*:2.4.2 已发布。版本 2.4.2 包含这些提交。

错误修复

  • 修复了一个问题,该问题是在使用 -Xjvm-default=all 或等效项进行编译时,为具有生成默认接口方法的主体的 Dao @Transaction 挂起函数生成代码。(Ia4ce5)
  • 解决了一个错误,该错误是 Room 为 Array<ByteArray> 返回类型查询方法生成代码。(If086eb/213789489)

版本 2.4.1

版本 2.4.1

2022 年 1 月 12 日

androidx.room:room-*:2.4.1 已发布。版本 2.4.1 包含这些提交。

错误修复

  • 添加了对 Kotlin 源代码中内部属性的支持。这是一个轻微的 Room 行为更改,它将在将函数与属性匹配为 getter/setter 时使用函数的源名称(以前,它使用函数的 JVM 名称,该名称对于内部函数/属性是不同的)。如果您使用自定义 @JvmName 注解将 getter/setter 与私有属性匹配,请在更新后仔细检查生成的代码 (If6531b/205289020)

版本 2.4.0

版本 2.4.0

2021 年 12 月 15 日

androidx.room:room-*:2.4.0 已发布。版本 2.4.0 包含这些提交。

自 2.3.0 以来的重要更改

  • 自动迁移:只要导出模式,Room 现在提供了一个自动生成迁移的 API。要让 Room 知道它应该生成自动迁移,可以使用新的属性 @Database#autoMigrations 来声明要从中和到自动迁移的版本。当 Room 需要有关表和列重命名或删除的更多信息时,则 @AutoMigration 注解可以声明一个包含此类输入的规范类。有关更多详细信息,请参阅 @AutoMigration 文档。
  • 自动迁移中的依赖注入@ProvidedAutoMigrationSpec 是一个用于声明 AutoMigrationSpec 将通过 RoomDatabase.Builder#addAutoMigrationSpec() 在运行时提供的新的 API。这允许依赖注入框架在需要复杂依赖项时提供此类规范。
  • 自动迁移的迁移测试助手支持:Room 的 MigrationTestHelper 已更新为支持自动迁移,方法是提供一个接收被测数据库类的新的构造函数 API。这允许助手在 runMigrationsAndValidate 期间以相同的方式自动添加自动迁移。
  • Room-Paging 支持androidx.room:room-paging 已发布,为返回 androidx.paging.PagingSource 的 Room 查询提供原生 Paging 3.0 支持。
  • 关系查询方法:Room 现在支持多映射返回类型 @Dao 方法,这对 JOIN 语句很有用。支持的多映射类型为 MapSparseArrayLongSparseArray,以及 Guava 的 ImmutableMapImmutableSetMultimapImmutableListMultimap

版本 2.4.0-rc01

2021 年 12 月 1 日

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-beta02

2021 年 11 月 17 日

androidx.room:room-*:2.4.0-beta02 已发布。版本 2.4.0-beta02 包含这些提交。

新功能

  • 我们已在 @MapInfo 中添加了对 SparseArray 和 LongSparseArray 的支持。(Ic91a2b/138910317)

错误修复

  • 我们添加了一个新的 TypeConverter 分析器,该分析器会考虑类型中的可空性信息。由于此信息仅在 KSP 中可用,因此默认情况下仅在 KSP 中启用。如果它导致任何问题,您可以通过将 room.useNullAwareTypeAnalysis=false 传递给注释处理器来将其关闭。如果发生这种情况,请提交错误报告,因为此标志将在将来删除。使用此新的 TypeConverter 分析器,建议仅提供非空接收 TypeConverter,因为新的分析器能够用空检查包装它们。请注意,这不会影响使用 KAPT 或 Java 作为注释处理器(与 KSP 不同)的用户,因为它们在类型中没有可空性信息。(Ia88f9b/193437407)
  • 修复了一个错误,该错误会导致 Room 在 FTS 实体声明使用 ICU 分词器时无法编译并出现 SQL 错误。(I00db9b/201753224)
  • 解决了自动迁移中关于在版本之间添加到嵌入式实体的新列的问题。(I5fcb1b/193798291)
  • 我们解决了 LEFT JOIN 查询中关系查询方法返回类型的问题。通过这些更改,在存在 1-多映射的情况下,如果在游标中找不到无效的值对象,则键返回的集合将不包含该对象。如果未找到有效值,则键将映射到空集合。(Id5552b/201946438)
  • 解决了自动迁移问题,其中 SQLite 关键字在列名中未被转义。(Idbed4b/197133152)

版本 2.4.0-beta01

2021 年 10 月 13 日

androidx.room:room-*:2.4.0-beta01 已发布。版本 2.4.0-beta01 包含这些提交。

错误修复

  • 修复了一个问题,该问题会导致自动迁移在同一自动迁移中的另一个表也具有相同名称的新列时不添加新列。(Ia5db5b/200818663)

  • Room-paging 生成的 PagingSource 实现现在使用通过 RoomDatabase.Builder 传递的 queryExecutor,因此可以覆盖它,而不是之前的 Dispatchers.IO。(Iae259

版本 2.4.0-alpha05

2021 年 9 月 29 日

androidx.room:room-*:2.4.0-alpha05 已发布。版本 2.4.0-alpha05 包含以下提交。

新功能

API 更改

  • 在 TypeConverters 注解中添加了一个新属性,允许开发者禁用内置的 Enum 和 UUID 转换器。默认情况下,这些转换器是开启的,但您可以为特定范围或整个数据库禁用它们。有关详细信息,请参阅 TypeConverters 文档。(36ae9eb/195413406

  • 通过 @MapInfo 注解支持 DAO 中 Multimap 返回类型的非 POJO 键/值。(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>
  • 在将 Paging3 与 Room 一起使用时,使 room-paging 成为必需的构件。(Ieaffe

错误修复

  • 修复了一个问题,即当查询包含映射键中列的 ORDER BY 子句时,多映射查询结果未正确排序。(I6b887

外部贡献

  • 在 @Index 中添加了新的 API 来指定索引顺序。感谢 Nikita Zhelonkin。(I033fc

版本 2.4.0-alpha04

2021 年 7 月 21 日

androidx.room:room-*:2.4.0-alpha04 已发布。版本 2.4.0-alpha04 包含以下提交。

新功能

  • Room 现在支持多映射返回类型 @Dao 方法,这对于 JOIN 语句很有用。支持的多映射类型包括 Map 以及 Guava 的 ImmutableMapImmutableSetMultimapImmutableListMultimap

    以下是多映射查询的示例

    一对一关系映射

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

    一对多关系映射(标准多映射)

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

    多映射结果也可以包装在支持的异步返回类型中,例如 LiveData、Rx 的 Observable 或协程 Flow

Room-Paging

  • androidx.room:room-paging 已发布,为返回 androidx.paging.PagingSource 的 Room 查询提供原生 Paging 3.0 支持。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • 此构件用基于 Paging 3.0 API 构建的构件替换了 Room 生成的 androidx.paging.PagingSource 实现。新的 PagingSource 实现以不同的方式解析键,因此手动提供给 Room 的 PagingSource 的任何键都需要考虑此行为更改,包括通过 Pager 的构造函数传递的 initialKey。页面将从 Key 开始加载,其中 Key 是第一个加载的项目。这与现有行为不同,在现有行为中,LoadParams.Refresh.Key 被视为用户的滚动位置,并且在键之前和之后都加载项目。

  • 此构件是可选的,选择退出将回退到 Room 2.3 中引入的对 Paging 3.0 的现有支持。但是,对于那些将 Room 与 Paging 3.0 一起使用的用户,此构件将在将来的版本中变得不可选。要选择加入,请将新的 room-paging 构件添加到您的类路径中。如果您使用的是 Gradle,则可以将以下代码段添加到您的 build.gradle 中

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

错误修复

  • 修复了自动迁移中处理外键违规的问题。(b/190113935

版本 2.4.0-alpha03

2021 年 6 月 16 日

androidx.room:room-*:2.4.0-alpha03 已发布。版本 2.4.0-alpha03 包含以下提交。

API 更改

  • 更新 Room 的 MigrationTestHelper 以支持自动迁移,提供一个接收被测数据库类的新构造函数 API。这允许助手在 runMigrationsAndValidate 期间以相同的方式自动添加自动迁移。

错误修复

  • 修复了 Room 的 SQLite 本地库以支持 Apple 的 M1 芯片的问题。(b/174695268

  • 修复了一个问题,即当 @Transaction 函数的返回类型为 Flow 时,Room 不会出错(I56dddb/190075899

  • 修复了自动迁移中关于索引的问题。b/177673291

依赖项更新

  • Room 的 KSP 支持现在依赖于 KSP 1.5.10-1.0.0-beta01。(1ecb11b/160322705

版本 2.4.0-alpha02

2021 年 5 月 5 日

androidx.room:room-*:2.4.0-alpha02 已发布。版本 2.4.0-alpha02 包含以下提交。

API 更改

  • @ProvidedAutoMigrationSpec 是一个用于声明 AutoMigrationSpec 将在运行时通过 RoomDatabase.Builder#addAutoMigrationSpec() 提供的新 API。这允许依赖注入框架在需要复杂依赖项时提供此类规范。

错误修复

  • 修复了自动迁移中的一个问题,其中 @DatabaseView 未正确重新创建。

外部贡献

  • 修复了 Room 的 JournalMode.TRUNCATE 中的一个问题,其中 InvalidationTracker 回调有时会被无效地、过晚地或根本不会调用。感谢 Uli Bubenheimer | [email protected]b/154040286

版本 2.4.0-alpha01

2021 年 4 月 21 日

androidx.room:room-*:2.4.0-alpha01 已发布。版本 2.4.0-alpha01 包含以下提交。

新功能

  • 自动迁移:只要导出模式,Room 现在提供了一个自动生成迁移的 API。为了让 Room 知道它应该生成自动迁移,可以使用一个新的属性 @Database#autoMigrations 来声明要自动迁移的版本范围。当 Room 需要有关表和列重命名或删除的更多信息时,@AutoMigration 注解可以声明一个包含此类输入的规范类。有关更多详细信息,请参阅 @AutoMigration 文档。

错误修复

  • 修复了一个问题,即带有额外括号的 defaultValue 被 Room 的模式验证错误地验证了。b/182284899

版本 2.3.0

版本 2.3.0

2021 年 4 月 21 日

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。这允许在预打包数据库被 gzip 压缩等情况下使用。
  • 提供的类型转换器:Room 现在具有用于提供类型转换器实例的 API,以便应用程序可以控制它们的初始化。要标记将提供给 Room 的类型转换器,请使用新的注解 @ProvidedTypeConverter。
  • RxJava3 支持:Room 现在支持 RxJava3 类型。与 RxJava2 类似,您可以声明 DAO 方法,其返回类型为 Flowable、Single、Maybe 和 Completable。此外,新的构件 androidx.room:room-rxjava3 可用于支持 RxJava3。
  • Paging 3.0 支持:Room 现在将支持为返回类型为 androidx.paging.PagingSource@Query 注解方法生成实现。

版本 2.3.0-rc01

2021 年 3 月 24 日

androidx.room:room-*:2.3.0-rc01 已发布。版本 2.3.0-rc01 包含以下提交。

错误修复

  • 修复了一个问题,该问题阻止了由 Room 创建的协程 Flow 查询在挂起的 withTransaction 块中被使用。(I797bf

版本 2.3.0-beta03

2021 年 3 月 10 日

androidx.room:room-*:2.3.0-beta03 已发布。版本 2.3.0-beta03 包含以下提交。

新功能

错误修复

  • 修复了在主线程上创建 PagingSource 可能触发 ANR 的错误。(I42b74b/181221318
  • @ExperimentalRoomApi 的可见性从包私有改为公开。(b/181356119

外部贡献

  • 允许 Room 在使用@SkipQueryVerification 注解的@Query 注解的 DAO 方法中接受 POJO 返回类型。Room 将尽力将查询结果转换为 POJO 返回类型,方式与@RawQuery 注解的 DAO 方法相同。感谢‘Markus Riegel | [email protected]’。(I45acb

版本 2.3.0-beta02

2021 年 2 月 18 日

androidx.room:room-*:2.3.0-beta02 已发布。版本 2.3.0-beta02 包含以下提交。

新功能

  • Room 现在对 Kotlin 符号处理 KSP 提供实验性支持。

    KSP 是 KAPT 的替代方案,用于在 Kotlin 编译器本机运行注解处理器,从而显著减少构建时间。

    要将 Room 与 KSP 一起使用,您可以应用 KSP Gradle 插件,并用ksp 替换构建文件中的kapt 配置。例如,不要使用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

2021 年 1 月 27 日

androidx.room:room-*:2.3.0-beta01 已发布。版本 2.3.0-beta01 包含以下提交。

新功能

  • 自动关闭数据库:Room 现在能够关闭在给定时间段内未访问的数据库。这是一项实验性功能,可以通过调用RoomDatabase.Builder#setAutoCloseTimeout() 来启用。此功能适用于具有多个数据库的应用程序。

错误修复

  • 修复了一个问题,即具有多个@Update@Delete 方法且冲突策略不同的 Dao 方法将生成仅包含其中一种策略的代码,从而有效地忽略了定义的策略。(/I0b90db/176138543

版本 2.3.0-alpha04

2020 年 12 月 16 日

androidx.room:room-*:2.3.0-alpha04 已发布。版本 2.3.0-alpha04 包含以下提交。

新功能

  • Room 现在提供了一个通用回调 API RoomDatabase.QueryCallback,用于在查询即将执行时使用,这对于在调试版本中进行日志记录很有用。可以通过RoomDatabase.Builder#setQueryCallback() 设置回调。(Iaa513b/174478034b/74877608
  • Room 现在将默认使用枚举到字符串和反之亦然的类型转换器(如果未提供)。如果枚举的类型转换器已经存在,Room 将优先使用它而不是默认类型转换器。(b/73132006

已知问题

  • 如果枚举的读取已经存在单向类型转换器,Room 可能会意外地使用内置的字符串到枚举转换器,这可能不是期望的结果。这是一个已知问题,可以通过将其更改为双向转换器来解决。请参阅:b/175707691

错误修复

  • 修复了 Room 在较新的 JDK 版本中错误地禁用增量注解处理的问题。(b/171387388
  • 修复了 Room 在使用多个类加载器时查找生成的类的问题。感谢‘Serendipity | [email protected]’的修复!(b/170141113)
  • 修复了 Room 在 Kotlin@Dao 具有其泛型在 JVM 中为基本类型的基类时生成错误代码的问题。(b/160258066

外部贡献

  • 如果启用了 WAL 模式且 API 为 16 或更高版本,Room 现在将默认使用beginTransactionNonExclusive。感谢‘Ahmed I. Khalil | [email protected]’!(b/126258791

版本 2.3.0-alpha03

2020 年 10 月 14 日

androidx.room:room-*:2.3.0-alpha03 已发布。版本 2.3.0-alpha03 包含以下提交。

新功能

  • Room 现在具有用于提供类型转换器实例的 API,以便应用程序可以控制其初始化。要标记将提供给 Room 的类型转换器,请使用新的注解@ProvidedTypeConverter。感谢‘mzgreen [email protected]’。(Ie4fa5b/121067210

  • Room 现在具有用于使用从输入流读取的预打包数据库创建数据库的 API。这允许在预打包数据库被 gzip 压缩等情况下使用。感谢‘Ahmed El-Helw [email protected]’(3e6792b/146911060

API 更改

  • @ForeignKey 注解中添加了缺少的目标,以防止其在@Entity 注解之外使用。(Iced1e

  • RoomDatabase.java 中的字段mCallbacks 现在已隐藏。(d576cbb/76109329

错误修复

  • 更新类型转换器文档以阐明类型转换器只能用于转换列/字段,而不是行。(I07c56b/77307836

  • 更新 DaoProcessor 以修复 Dao 具有带有 Kotlin“基本类型”的泛型超类型时的编译器错误。(Ice6bbb/160258066

  • 更新添加/删除观察者方法文档以阐明线程。(Ifd1d9b/153948821

  • 修复了 Room 错误地验证声明其 rowid 列的 FTS 表的问题。(d62ebcb/145858914

外部贡献

  • 修复与土耳其语相关的区分大小写的语言环境问题(5746e3),b/68159494

  • RoomDatabase 内部的ConcurrentHashMap 替换为Collections.synchronizedMap(),以避免在 Android Lollipop 上出现问题(d1cfc7b/162431855

  • 添加了一个 onOpenPrepackagedDatabase 回调,用于复制预打包的数据库时。(I1ba74b/148934423

版本 2.3.0-alpha02

2020 年 7 月 22 日

androidx.room:room-*:2.3.0-alpha02 已发布。版本 2.3.0-alpha02 包含以下提交。

新功能

  • RxJava3 支持:Room 现在支持 RxJava3 类型。与 RxJava2 类似,您可以声明其返回类型为 Flowable、Single、Maybe 和 Completable 的 DAO 方法。此外,新的工件androidx.room:room-rxjava3 可用于支持 RxJava3。(b/152427884

API 更改

  • 现在支持在 Kotlin 对象类中声明@TypeConverter。(b/151110764
  • Room 的增量注解处理选项现在默认处于开启状态。(b/112110217

版本 2.3.0-alpha01

2020 年 6 月 10 日

androidx.room:room-*:2.3.0-alpha01 已发布。版本 2.3.0-alpha01 包含以下提交。

新功能

  • Paging 3.0 支持:Room 现在支持为返回类型为androidx.paging.PagingSource@Query 注解方法生成实现。

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

API 更改

  • @RewriteQueriesToDropUnusedColumns 是一个新的便捷注解,它使 Room 可以重写查询中的“*”投影,以便删除结果中未使用的列。
  • 处理器选项room.expandProjection 现已弃用。使用@RewriteQueriesToDropUnusedColumns 替换 Room 优化使用星号投影的查询。请注意,@RewriteQueriesToDropUnusedColumns 不会替换room.expandProjection 提供的关于包含@Embedded 字段的返回类型的列冲突解决方案。

错误修复

  • 修复了 Room 无法正确检测用于启用增量注解处理器的 JDK 版本的错误。感谢 Blaz Solar ([email protected]) (b/155215201)
  • Room 现在将它的 ANTLR 依赖项与注解处理器一起嵌入,以避免与也使用 ANTLR 的其他处理器发生版本冲突。(b/150106190

版本 2.2.6

版本 2.2.6

2020 年 12 月 16 日

androidx.room:room-*:2.2.6 已发布。版本 2.2.6 包含以下提交。

错误修复

  • 修复了 Room 在较新的 JDK 版本中错误地禁用增量注解处理的问题。(b/171387388

版本 2.2.5

版本 2.2.5

2020 年 3 月 18 日

androidx.room:room-*:2.2.5 已发布。版本 2.2.5 包含以下提交。

错误修复

  • 使MultiInstanceInvalidationService 成为 Direct Boot Aware。感谢‘Mygod [email protected]’(b/148240967
  • 修复了启用多实例失效且数据库包含 FTS 实体时会导致崩溃的错误。(b/148969394
  • 修复了在 Room 注解处理器中加载 SQLite 本地库时出现的问题,该问题会导致编译器由于并行编译而崩溃。(b/146217083

版本 2.2.4

版本 2.2.4

2020 年 2 月 19 日

androidx.room:room-common:2.2.4androidx.room:room-compiler:2.2.4androidx.room:room-guava:2.2.4androidx.room:room-ktx:2.2.4androidx.room:room-migration:2.2.4androidx.room:room-runtime:2.2.4androidx.room:room-rxjava2:2.2.4androidx.room:room-testing:2.2.4 已发布。版本 2.2.4 包含以下提交。

错误修复

  • 修复了挂起事务时出现的问题,如果协程在事务实际开始之前很快被取消,则会导致死锁。(b/148181325
  • 修复了使用 JDK 9 构建时 @Generated 错误使用的问题。(b/146538330
  • 修复了 Room 在 Kotlin 中的 DAO 接口具有具体函数时会生成错误代码的问题。(b/146825845

版本 2.2.3

版本 2.2.3

2019 年 12 月 18 日

androidx.room:room-*:2.2.3 已发布。 版本 2.2.3 包含这些提交

错误修复

  • 修复了一个错误,即 Room 无法验证未经过任何迁移并且其模式中包含具有索引的旧版哈希的数据库。(b/139306173

版本 2.2.2

版本 2.2.2

2019 年 11 月 20 日

androidx.room:room-*:2.2.2 已发布。 版本 2.2.2 包含这些提交

错误修复

  • 修复了一个错误,即使用超过 999 行的一对一关系进行收集会导致 Room 返回 null 关联项。(b/143105450

版本 2.2.1

版本 2.2.1

2019 年 10 月 23 日

androidx.room:room-*:2.2.1 已发布。 版本 2.2.1 包含这些提交

错误修复

  • 修复了一个错误,即 Room 在编译器选项 expandProjection 打开时会错误地警告 CURSOR_MISMATCH。(b/140759491
  • 添加了一种重试机制,用于处理在编译时用于验证查询的缺少的本机库。

版本 2.2.0

版本 2.2.0

2019 年 10 月 9 日

androidx.room:room-*:2.2.0 已发布。 版本 2.2.0 包含这些提交

自版本 2.1.0 以来重要的更改

  • 预打包数据库RoomDatabase.Builder 中现在提供了两个新的 API,用于根据已填充的数据库文件创建 RoomDatabasecreateFromAsset() 用于预填充的数据库文件位于 APK 的 assets 文件夹中时,而 createFromFile() 用于文件位于任意位置时。这些 API 的用法会更改破坏性迁移的行为,以便在回退迁移期间,Room 会尝试重新复制可用的预填充数据库,否则它将回退到仅删除并重新创建所有表。 b/62185732
  • 模式默认值@ColumnInfo 现在具有一个新的属性 defaultValue,可用于指定列的默认值。默认值是数据库模式的一部分,如果指定,将在迁移期间进行验证。 b/64088772
  • 多对多关系@Relation 现在具有一个新的属性 associateBy,它接收一个新的注释 @Junction,用于声明需要通过连接表(也称为联接表)满足的关系。 b/69201917
  • 一对一关系:已取消对使用 @Relation 注释的 POJO 字段必须为 ListSet 类型的限制,从而有效地允许表示单值关系。 b/62905145
  • 目标实体:DAO 注释 @Insert@Update@Delete 现在具有一个新的属性 targetEntity,允许指定 DAO 方法打算对其执行操作的目标表。这允许这些 DAO 方法的参数为任意 POJO,这些 POJO 将被解释为部分实体。在实践中,这允许部分插入、删除和更新。 b/127549506
  • 协程流@Query DAO 方法现在可以是返回类型 Flow<T>。如果查询中观察到的表失效,则返回的 Flow 将重新发出新的一组值。声明具有 Channel<T> 返回类型的 DAO 函数是一个错误,Room 而是鼓励您使用 Flow,然后使用相邻函数将 Flow 转换为 Channelb/130428884
  • Gradle 增量注释处理器:Room 现在是 Gradle 隔离注释处理器,可以通过处理器选项 room.incremental 启用增量功能。有关更多信息,请参阅 Room 编译器选项。如果您遇到任何问题,请在此处提交错误 此处。我们计划在未来的稳定版本中默认启用增量功能。 b/112110217
  • 扩展投影:添加了一个新的实验性编译器选项 room.expandProjection,它会导致 Room 将具有星号投影的查询重写为仅包含返回类型 POJO 中的列。例如,对于返回名为 SongIdAndTitle 且仅有两个字段的 POJO 的 DAO 方法,其 @Query("SELECT * FROM Song")。然后 Room 会将查询重写为 SELECT id, title FROM Song,以便获取满足返回类型所需的最小列集。这实际上消除了当查询返回与返回 POJO 类型中的任何字段不匹配的额外列时出现的 CURSOR_MISMATCH 警告。

版本 2.2.0-rc01

2019 年 9 月 5 日

androidx.room:room:2.2.0-rc01 已发布。此版本中包含的提交可以在这里找到 这里

自 Room 2.2.0-beta01 以来没有公开更改。

版本 2.2.0-beta01

2019 年 8 月 22 日

androidx.room:room-*:2.2.0-beta01 已发布。此版本中包含的提交可以在这里找到 这里

错误修复

  • 修复了一个错误,即协程流查询在一段时间后会停止重新发出新值。(b/139175786
  • 修复了一个错误,即 Room 在打开自 Room 1.0 以来未进行过迁移的数据库时不会接受旧版模式哈希码,从而导致由于模式无效而导致运行时崩溃。(b/139306173

版本 2.2.0-alpha02

2019 年 8 月 7 日

androidx.room:room-*:2.2.0-alpha02 已发布。此版本中包含的提交可以在这里找到 这里

新功能

  • 协程流@Query DAO 方法现在可以是返回类型 Flow<T>。如果查询中观察到的表失效,则返回的 Flow 将重新发出新的一组值。声明具有 Channel<T> 返回类型的 DAO 函数是一个错误,Room 而是鼓励您使用 Flow,然后使用相邻函数将 Flow 转换为 Channelb/130428884
  • 扩展投影:添加了一个新的实验性编译器选项 room.expandProjection,它会导致 Room 将具有星号投影的查询重写为仅包含返回类型 POJO 中的列。例如,对于返回名为 SongIdAndTitle 且仅有两个字段的 POJO 的 DAO 方法,其 @Query("SELECT * FROM Song")。然后 Room 会将查询重写为 SELECT id, title FROM Song,以便获取满足返回类型所需的最小列集。这实际上消除了当查询返回与返回 POJO 类型中的任何字段不匹配的额外列时出现的 CURSOR_MISMATCH 警告。
  • onDestructiveMigrate 是添加到 RoomDatabase.Callback 中的一个新的回调 API,用于 Room 破坏性地迁移数据库时。 b/79962330

错误修复

  • 修复了一个错误,即 Room 在字段受保护时会使用方法作为字段设置器生成错误代码。(b/136194628
  • 修复了一个错误,该错误会导致 InvalidationTracker 在启用多实例失效且失效服务被终止时在第二个进程中抛出 NPE。(b/137454915
  • 修复了一个错误,即 Room 无法正确识别使用 @RawQuery 注释的继承挂起函数的返回类型。(b/137878827
  • 更新了当关联键为 BLOB 类型时 @Relation 的生成代码,以使用可比较的 ByteBuffer。(b/137881998
  • 修复了一个错误,即 Room 会抱怨缺少用作 @Insert@Update@Delete 的部分实体参数的 POJO 上的设置器。(b/138664463
  • 修复了一个错误,即当在某些 DAO 方法中使用实体类时,Room 会抱怨通过 @Entity 忽略的列缺少 getter 和 setter。(b/138238182
  • 修复了一个错误,即 Room 无法正确将命名绑定参数转换为位置参数,从而导致在执行具有重复使用参数的查询时出现运行时异常。(b/137254857

版本 2.2.0-alpha01

2019 年 7 月 10 日

新功能

  • 预打包数据库RoomDatabase.Builder 中现在提供了两个新的 API,用于根据已填充的数据库文件创建 RoomDatabasecreateFromAsset() 用于预填充的数据库文件位于 APK 的 assets 文件夹中时,而 createFromFile() 用于文件位于任意位置时。这些 API 的用法会更改破坏性迁移的行为,以便在回退迁移期间,Room 会尝试重新复制可用的预填充数据库,否则它将回退到仅删除并重新创建所有表。 b/62185732
  • 模式默认值@ColumnInfo 现在具有一个新的属性 defaultValue,可用于指定列的默认值。默认值是数据库模式的一部分,如果指定,将在迁移期间进行验证。 b/64088772

    注意:如果您的数据库模式已具有默认值,例如通过 ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z 添加的默认值,并且您决定通过 @ColumnInfo 为同一列定义默认值,则您可能需要提供迁移来验证未计算的默认值。有关更多信息,请参阅 Room 迁移

  • 多对多关系@Relation 现在具有一个新的属性 associateBy,它接收一个新的注释 @Junction,用于声明需要通过连接表(也称为联接表)满足的关系。 b/69201917
  • 一对一关系:已取消对使用 @Relation 注释的 POJO 字段必须为 ListSet 类型的限制,从而有效地允许表示单值关系。 b/62905145
  • 目标实体:DAO 注释 @Insert@Update@Delete 现在具有一个新的属性 targetEntity,允许指定 DAO 方法打算对其执行操作的目标表。这允许这些 DAO 方法的参数为任意 POJO,这些 POJO 将被解释为部分实体。在实践中,这允许部分插入、删除和更新。 b/127549506
  • Gradle 增量注释处理器:Room 现在是 Gradle 隔离注释处理器,可以通过处理器选项 room.incremental 启用增量功能。有关更多信息,请参阅 Room 编译器选项。如果您遇到任何问题,请在此处提交错误 此处。我们计划在未来的稳定版本中默认启用增量功能。 b/112110217

错误修复

  • 当查询的 Rx 流在查询完成之前已释放时,Room 将不再将 EmptySetResultException 传播到全局错误处理程序。 b/130257475
  • 修复了一个错误,即当使用 @RawQuery 注释的挂起 DAO 函数没有返回类型时,Room 会显示错误的错误消息。(b/134303897
  • Room 将不再生成具有原始类型的 DAO 适配器。 b/135747255

版本 2.1.0

版本 2.1.0

2019 年 6 月 13 日

Room 2.1.0 已发布,与 2.1.0-rc01 没有变化。此版本中包含的提交可以在这里找到 这里

自 2.0.0 以来重要的更改

  • FTS:Room 现在支持具有映射 FTS3 或 FTS4 表的实体。使用 @Entity 注释的类现在还可以使用 @Fts3@Fts4 注释来声明具有映射全文搜索表的类。可以通过注释的方法使用 FTS 选项进行进一步自定义。
  • 视图 (Views):Room 现在支持将类声明为存储查询,也称为视图,使用 @DatabaseView 注解。
  • 协程 (Couroutines):DAO 方法现在可以是挂起函数。在你的依赖项中包含 room-ktx 以利用此功能。ktx 工件还提供了扩展函数 RoomDatabase.withTransaction,用于在协程内执行数据库事务。
  • Auto Value:Room 现在支持将使用 AutoValue 注解的类声明为实体和 POJO。Room 注解 @PrimaryKey@ColumnInfo@Embedded@Relation 现在可以在使用 auto value 注解的类的抽象方法中声明。请注意,这些注解还必须与 @CopyAnnotations 结合使用,以便 Room 正确理解它们。
  • 其他异步支持 (Additional Async Support):使用 @Insert@Delete@Update 注解的 DAO 方法,以及包含 INSERTDELETEUPDATE 语句的 @Query,现在支持 Rx 返回类型 CompletableSingleMaybe 和 Guava 的返回类型 ListenableFuture,并且它们也可以是挂起函数。
  • enableMultiInstanceInvalidationRoomDatabase.Builder 中的一个新 API,用于使用相同的数据库文件在多个 RoomDatabase 实例之间启用失效。
  • fallbackToDestructiveMigrationOnDowngradeRoomDatabase.Builder 中的一个新 API,用于在发生降级时自动重新创建数据库。
  • ignoredColumns@Entity 注解中的一个新 API,可用于列出按名称忽略的字段。
  • Room 现在将在数据类中正确使用 Kotlin 的主构造函数,避免需要将属性声明为 vars

版本 2.1.0-rc01

2019 年 5 月 29 日

错误修复

  • 修复了由于已设置的 temp_store 配置可能导致的 Room 初始化错误。b/132602198
  • 修复了对于 SQLite 3.27.0 及更高版本的用户的双引号使用警告。b/131712640
  • 修复了当多个失效检查并行发生时,InvalidationTracker 会导致崩溃的错误。b/133457594

版本 2.1.0-beta01

2019 年 5 月 7 日

androidx.room 2.1.0-beta01 发布,与 2.1.0-alpha07 没有变化。此版本中包含的提交可以在 此处 找到。

版本 2.1.0-alpha07

2019 年 4 月 25 日

API/行为变更 (API / Behavior Changes)

  • 扩展函数 RoomDatabase.withTransaction 已更改,不再接收带有 CoroutineScope 作为接收者的函数块。这防止跳过在事务块中并发运行事物所需的额外 coroutineScope { } 包装器。

错误修复

  • 修复了 Room 无法为包含 Collection 类型参数的 Kotlin DAO 函数匹配 TypeConverter 的错误。b/122066791

版本 2.1.0-alpha06

2019 年 3 月 22 日

API/行为变更 (API / Behavior Changes)

  • 异步事务查询现在已序列化,因此 Room 不会使用超过一个线程来执行数据库事务。添加了 RoomDatabase.Builder.setTransactionExecutor(Executor) 以允许配置用于事务的执行程序。
  • RoomDatabase.runInTransaction(Callable) 将不再将检查异常包装到 RuntimeExceptions 中。b/128623748

错误修复

  • 修复了如果同时添加了内容表和外部内容 FTS 表的观察者,失效跟踪器将停止观察内容表的错误。b/128508917
  • 将 Room 的 SQLite 语法更新为匹配 SQLite 3.24.0。b/110883668

版本 2.1.0-alpha05

2019 年 3 月 13 日

新功能

  • 扩展函数 RoomDatabase.withTransaction 允许你在协程中安全地执行数据库事务。Room 扩展函数以及协程支持在 room-ktx 工件中可用。
  • 使用 @Transaction 注解的非抽象 DAO 方法现在可以是挂起函数。b/120241587

API/行为变更 (API / Behavior Changes)

  • 工件 room-coroutines 已重命名为 room-ktx,与其他 androidx 工件的命名方式相同。
  • beginTransactionsetTransactionSuccessfulendTransactionRoomDatabase 中已被弃用,取而代之的是 runInTransactionroom-ktx 扩展函数 withTransaction

错误修复

  • 修复了如果使用的标记器是 SIMPLE,则标记器参数会被丢弃的错误。b/125427014
  • 修复了 Room 无法正确识别其类型为内部类的参数的挂起函数的错误。b/123767877
  • 修复了使用 INSERTUPDATEDELETE 语句的延迟 @Query DAO 方法在主线程中急切地准备查询的错误。b/123695593
  • 修复了 Room 为某些挂起函数生成不正确代码的各种错误。b/123466702b/123457323
  • 修复了在生成的代码中未正确抑制方法的已弃用用法的错误。b/117602586
  • 将 androidx.sqlite 的 Room 依赖项更新到 1.0.2,其中包含用于正确处理损坏数据库的修复程序。b/124476912

已知问题 (Known Issues)

  • Room 2.1.0-alpha05 依赖于 kotlinx-metadata-jvm 工件,该工件当前在 Maven Central 中不可用 (KT-27991)。可以通过将 maven { url "https://kotlin.bintray.com/kotlinx/" } 添加到你的项目存储库来解决此依赖项。

版本 2.1.0-alpha04

2019 年 1 月 25 日

新功能

  • 使用 @Query 注解并包含 INSERTUPDATEDELETE 语句的 DAO 方法现在可以返回异步类型 SingleMaybleCompletableListenableFuture。此外,它们也可以是挂起函数。b/120227284

API/行为变更 (API / Behavior Changes)

  • 如果使用 @Transaction 注解的非抽象 DAO 方法返回异步类型(例如 SingleMaybleCompletableLiveDataListenableFuture),Room 现在将抛出错误。由于事务是线程限定的,因此 Room 目前无法在可能在不同线程中执行查询的函数周围开始和结束事务。b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK 已被 @Deprecated,因为它们的行为与 Android 当前的 SQLite 绑定不符。b/117266738

错误修复

  • 修复了如果 DAO 方法是挂起函数,Room 不会正确使用返回类型的 TypeConverter 的错误。b/122988159
  • 修复了 Room 会错误地将继承的挂起函数识别为非挂起函数的错误。b/122902595
  • 修复了当 @Embedded 字段位于父类中并在多个子类中使用时,Room 会生成不正确代码的错误。b/121099048
  • 修复了在 beginTransaction()endTransaction() 之间调用 DAO 挂起函数时,数据库会死锁的问题。b/120854786

版本 2.1.0-alpha03

2018 年 12 月 4 日

API 更改

  • @Fts3/@Fts4 中的 FTS tokenizer 现在采用 String 而不是 Enum。这允许 Room 使用自定义标记器。内置标记器仍以字符串常量的形式定义在 FtsOptions 中。b/119234881

新功能

  • 协程 (Couroutines):DAO 方法现在可以是挂起函数。为了支持 Room 中的挂起函数,已发布了一个新的工件 room-coroutinesb/69474692
  • 使用 @Insert@Delete@Update 注解的 DAO 方法现在支持 ListenableFuture 作为返回类型。b/119418331

错误修复

  • 修复了 Room 会错误地尝试在 @EntityignoredColumns 属性中找到具有列的构造函数的错误。b/119830714
  • 修复了 Room 不会在其生成的实现中将 DAO 方法参数标记为 final 的错误。b/118015483
  • 修复了 Room 的处理器在报告带有特殊符号的查询错误时崩溃的错误。b/119520136
  • 修复了 Room 会拒绝其他各种 Collection 实现作为 IN 表达式的参数的错误。b/119884035

  • 修复了一个问题,即从 Room 返回的 LiveData 在永远被观察时会被垃圾回收,导致它不再发出新数据。 b/74477406
  • 更新了 RoomDatabase 的关闭锁以减少锁争用。 b/117900450

版本 2.1.0-alpha02

2018 年 10 月 30 日

新功能

  • 添加了对在 @Relation 中引用 @DatabaseView 的支持。 b/117680932

错误修复

  • 修复了一个问题,即当订阅和释放 Rx 返回类型时,Room 会在主线程中执行磁盘 I/O。 b/117201279
  • 修复了一个问题,即 Room 无法为 Kotlin 实体类中的字段找到合适的类型转换器。 b/111404868
  • 修复了一个问题,即 Room 为包含没有参数的 Kotlin 默认方法的 DAO 接口实现生成了错误的代码。 b/117527454
  • 更新了 Room 的 SQLite 语法解析器,修复了导致构建时间过长性能问题。 b/117401230

版本 2.1.0-alpha01

2018 年 10 月 8 日

新功能

  • FTS:Room 现在支持具有映射 FTS3 或 FTS4 表的实体。使用 @Entity 注释的类现在还可以使用 @Fts3@Fts4 注释来声明具有映射全文搜索表的类。可以通过注释的方法获得用于进一步自定义的 FTS 选项。 b/62356416
  • 视图:Room 现在支持使用 @DatabaseView 注释将类声明为存储查询,也称为 视图b/67033276
  • Auto Value:Room 现在支持将使用 AutoValue 注释的类声明为实体和 POJO。Room 注释 @PrimaryKey@ColumnInfo@Embedded@Relation 现在可以在自动值注释类的抽象方法中声明。请注意,这些注释还必须与 @CopyAnnotations 结合使用,以便 Room 正确理解它们。 b/62408420
  • 其他 Rx 返回类型支持:使用 @Insert@Delete@Update 注释的 DAO 方法现在支持 Rx 返回类型 CompletableSingle<T>Maybe<T>b/63317956
  • 使用 @Relation 的不可变类型:Room 之前要求使用 @Relation 注释的字段是可设置的,但现在它们可以是构造函数参数。
  • enableMultiInstanceInvalidation:是 RoomDatabase.Builder 中的一个新 API,用于在使用相同数据库文件的多个 RoomDatabase 实例之间启用失效。这种多实例失效机制也适用于多个进程。 b/62334005
  • fallbackToDestructiveMigrationOnDowngrade:是 RoomDatabase.Builder 中的一个新 API,用于在发生降级时自动重新创建数据库。 b/110416954
  • ignoredColumns:是 @Entity 注释中的一个新 API,可用于按名称列出忽略的字段。对于忽略实体上的继承字段很有用。 b/63522075

API/行为变更 (API / Behavior Changes)

  • mCallbackmDatabaseRoomDatabase 中现在已 @Deprecated,并将在下个主要版本的 Room 中删除。 b/76109329

错误修复

  • 修复了两个问题,即 Room 在初始化期间无法从损坏的数据库或错误的迁移中正确恢复。 b/111504749b/111519144
  • Room 现在将正确使用 Kotlin 中的数据类的主构造函数,避免需要将字段声明为 varsb/105769985

版本 2.0.0

版本 2.0.0

2018 年 10 月 1 日

androidx.room 2.0.0 发布,与 2.0.0-rc01 没有变化。

版本 2.0.0-rc01

2018 年 9 月 20 日

androidx.room 2.0.0-rc01 发布,与 2.0.0-beta01 没有变化。

版本 2.0.0-beta01

2018 年 7 月 2 日

API/行为变更 (API / Behavior Changes)

  • 添加了 RoomDatabase.Builder.setQueryExecutor() 以允许自定义查询运行的位置
  • 添加了 RxJava2 Observable 支持
  • 生成的 DAO 和数据库实现现在是最终的

错误修复

  • 在“找不到字段的 getter”错误中指定类/字段名称 b/73334503
  • 修复了 RoomOpenHelper 与旧版本 Room 的向后兼容性 b/110197391

AndroidX 之前的依赖项

对于 Room 的 AndroidX 之前的版本,请包含这些依赖项

dependencies {
    def room_version = "1.1.1"

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

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

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

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

版本 1.1.1

版本 1.1.1

2018 年 6 月 19 日

Room 1.1.1 与 Room 1.1.1-rc1 相同。

版本 1.1.1-rc1

2018 年 5 月 16 日 我们强烈建议您使用 Room 1.1.1-rc1 而不是 1.1.0(如果您使用迁移)。

修复了一个问题,即 Room 无法正确处理迁移后的初始化 b/79362399

版本 1.1.0

版本 1.1.0-beta3

2018 年 4 月 19 日

错误修复

  • 修复了当 Kotlin POJO 引用在 Java 中定义的关系实体时发生的编译错误 b/78199923

版本 1.1.0-beta2

2018 年 4 月 5 日

错误修复

  • 修复了 Room 的 Rx SingleMaybe 实现中的一个严重错误,该错误会在提前回收查询,如果向返回的 SingleMaybe 实例添加多个观察者,则会导致问题。 b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] 如果在事务内调用,则不会 VACUUM 数据库。 b/77235565

版本 1.1.0-beta1

2018 年 3 月 21 日

API 更改

  • 根据 API 审查反馈,@RawQuery 不再接受将 String 作为查询参数传递。您需要使用 [SupportSQLiteQuery][ref-SupportSQLiteQuery]。(请参阅 [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] 以轻松创建 [SupportSQLiteQuery][ref-SupportSQLiteQuery] 的实例,并支持参数)。
  • RoomDatabase.Builder 的 [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] 方法现在接受 vararg int 而不是 vararg Integer

错误修复

  • [RoomDatabase.clearAllTables][ref-clearAllTables] 现在尝试通过设置 WAL 检查点和 VACUUM 数据库来将空间返回给操作系统。
  • [@RawQuery][ref-RawQuery] 现在接受任何 Pojo 作为 observedEntities 属性,只要 Pojo 通过其 Embedded 字段或 Relation 引用一个或多个实体即可。 b/74041772
  • 分页:Room 的 DataSource 实现现在可以正确处理多表依赖项(例如关系和联接)。以前,这些操作会导致无法触发新结果,或者可能无法编译。 b/74128314

版本 1.1.0-alpha1

2018 年 1 月 22 日

新功能

  • RawQuery:此新 API 允许 @Dao 方法接收 SQL 作为查询参数 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFromRoomDatabase.Builder 中的此新 API 允许更细粒度地控制允许破坏性迁移的起始架构版本(与 fallbackToDestructiveMigration 相比) b/64989640
  • Room 现在仅支持较新的分页 API(alpha-4+),放弃对已弃用的 LivePagedListProvider 的支持。要使用新的 Room alpha,您需要使用 paging alpha-4 或更高版本,并且如果尚未切换,则需要从 LivePagedListProvider 切换到 LivePagedListBuilder

错误修复

  • 改进了对 Kotlin Kapt 类型的支持。 b/69164099
  • 字段的顺序不再使架构失效。 b/64290754