Room

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

声明依赖项

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

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

在应用程序或模块的 build.gradle 文件中添加您需要的工件的依赖项

Groovy

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

Kotlin

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 库(即仅 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 Gradle 插件的所有版本中进行配置,即使它们受 Room 编译器支持。下表列出了每个选项,并显示了使用 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-alpha07

2024 年 8 月 21 日

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

新功能

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

错误修复

  • 修复了 RoomDatabaseConstructor 的生成的“实际”在 initialize 函数中缺少“实际”修饰符的问题,如果该函数在“预期”声明中也被重写。(359631627
  • 修复了 RoomDatabaseConstructor 的生成的“实际”与“预期”声明的可见性不匹配的问题。(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 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 与 SupportSQLiteQuery 类似,在保存原始 SQL 字符串和将参数绑定到语句方面。现在,@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

错误修复

  • 修复了在使用 AndroidSQLiteDriver 时,RoomDatabase 会死锁或因连接超时而出错的错误。

版本 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 相关的各种问题。请注意,Kotlin 2.0 与 KSP 2 支持尚未完成,团队正在努力完善新编译器中的各种 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 文档

  • 如果通过 KSP 进行处理,则Kotlin 代码在 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。请注意,只能使用 setQueryExecutor 使用执行器或使用协程上下文配置 RoomDatabase,但不能同时使用两者。
  • 已添加一个用于使用 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 类型列的类似边缘情况的潜在修复也已包含在内。 (Id75f5, b/304584179)
  • PagingSource 加载中抛出的异常现在将作为 LoadStateUpdateLoadResult.Error 进行传播,其中包含 Throwable。 此错误状态可以通过 PagingDataAdapter.loadStateFlow(Views)LazyPagingItems.loadState(Compose) 进行观察。 请注意,这标志着行为变化,过去加载错误将作为由触发加载的 dao 方法抛出的异常冒泡。 (I93887, b/302708983)

版本 2.6.0

2023 年 10 月 18 日

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

自 2.5.0 以来的重要更改

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

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

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

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

版本 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 包含这些提交。

错误修复

  • 在更新操作期间遇到 SQLite 异常的特殊情况 2067 SQLITE_CONSTRAINT_UNIQUE 异常时,应执行更新。 (If2849, b/243039555)

版本 2.6.0-alpha03

2023 年 8 月 9 日

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

新功能

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

API 更改

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

错误修复

  • 在将 Room 源代码从 Java 迁移到 Kotlin 后,在 Robolectric 中实例化数据库时,解决了出现的问题。 (Ic053c, b/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 CodeGen 时,重要的是要注意已添加的其他限制。 在 Kotlin CodeGen 中,不允许抽象属性作为 DAO getter 或 DAO 查询,而是应将其重写为函数,以避免属性值不可变且具有固定存储结果的错误观念。 已添加的另一个限制是,在 Room 中,Kotlin CodeGen 不再允许可空集合返回类型。

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

API 更改

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

错误修复

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

版本 2.5.2

版本 2.5.2

2023 年 6 月 21 日

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

错误修复

  • 修复了与 kotlinx-metadata-jvm 的不兼容问题。 (386d5c)
  • 修复了一个问题,该问题会导致 Room 在 Robolectric 测试中使用时抛出错误。 (f79bea, b/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 工件 room-paging-rxjava2room-paging-rxjava3room-paging-guava
  • @MapInfo 中添加了用于提供键和值表名称以消除歧义的 API。(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

  • @MapInfo 中添加了用于提供键和值表名称以消除歧义的 API。(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 更改

  • 修复了 Room @IntDef 用法在 Kotlin 源代码中未被强制执行的问题。(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 包含这些提交。

错误修复

  • 修复了为 Dao @Transaction 挂起函数生成代码的问题,该函数的主体使用 -Xjvm-default=all 或等效项进行编译时会生成默认接口方法。(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 是一个新的 API,用于声明 AutoMigrationSpec 将通过 RoomDatabase.Builder#addAutoMigrationSpec() 在运行时提供。这允许依赖注入框架在需要复杂依赖项时提供这些规范。
  • 迁移测试助手支持自动迁移:Room 的 MigrationTestHelper 已更新以支持自动迁移,提供了一个新的构造函数 API,该 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 不同)在类型中没有可空性信息。 (Ia88f9, b/193437407)
  • 修复了一个错误,该错误会导致 Room 在 FTS 实体声明使用 ICU 标记器时无法编译并出现 SQL 错误。 (I00db9, b/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 包含以下提交。

错误修复

  • 修复了自动迁移在另一个表在同一自动迁移中也具有相同名称的新列时,不会添加新列的问题。 (Ia5db5, b/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 文档。 (36ae9e, b/195413406)

  • 通过 @MapInfo 注释支持 DAO 中的多重映射返回值类型的非 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>
    }
    
  • 此工件将 Room 生成的 androidx.paging.PagingSource 实现替换为基于 Paging 3.0 API 的实现。新的 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,该 API 接收正在测试的数据库类。这使得助手可以在 runMigrationsAndValidate 期间以相同的方式自动添加自动迁移。

错误修复

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

  • 修复了当 @Transaction 函数的返回值类型为 Flow 时,Room 不会报错的问题。 (I56ddd, b/190075899)

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

依赖项更新

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

版本 2.4.0-alpha02

2021 年 5 月 5 日

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

API 更改

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

错误修复

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

外部贡献

  • 修复了 Room 的 JournalMode.TRUNCATEInvalidationTracker 回调有时会被无效地调用,太晚或根本不调用的问题。感谢 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 和反之的类型转换器,如果未提供。如果 Enum 的类型转换器已经存在,Room 将优先使用它而不是默认的类型转换器。
  • 查询回调:Room 现在提供了一个通用的回调 API RoomDatabase.QueryCallback,用于在查询即将执行时进行回调,这对于在调试版本中进行日志记录非常有用。回调可以通过 RoomDatabase.Builder#setQueryCallback() 设置。
  • 预打包改进:Room 现在拥有 API,可用于使用从输入流读取的预打包数据库来创建数据库。这允许处理诸如预打包数据库被压缩的情况。
  • 提供的类型转换器:Room 现在拥有 API,可用于提供类型转换器实例,以便应用程序可以控制它们的初始化。要标记将提供给 Room 的类型转换器,请使用新的注解 @ProvidedTypeConverter。
  • RxJava3 支持:Room 现在支持 RxJava3 类型。与 RxJava2 类似,您可以声明返回值类型为 Flowable、Single、Maybe 和 Completable 的 DAO 方法。此外,还提供了一个新的工件 androidx.room:room-rxjava3 来支持 RxJava3。
  • 分页 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 创建的协程流查询在挂起 withTransaction 块中使用的错误。(I797bf)

版本 2.3.0-beta03

2021 年 3 月 10 日

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

新功能

错误修复

  • 修复了在主线程上创建 PagingSource 可能会触发 ANR 的错误。(I42b74, b/181221318)
  • 修复了 @ExperimentalRoomApi 的可见性,使其为 public 而不是包私有。(b/181356119)

外部贡献

  • 允许 Room 在 DAO 方法被 @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 插件,并将构建文件中的 kapt 配置替换为 ksp。例如,使用 ksp 'androidx.room:room-compiler:2.3.0-beta02' 代替 kapt '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 方法会生成仅包含其中一个策略的代码,从而有效地忽略了定义的策略。(/I0b90d, b/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() 设置。(Iaa513, b/174478034, b/74877608)
  • Room 现在将在没有提供的情况下默认使用枚举到字符串和反之的类型转换器。如果枚举的类型转换器已经存在,Room 将优先使用它而不是默认类型转换器。(b/73132006)

已知问题

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

错误修复

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

外部贡献

  • Room 现在将在启用 WAL 模式且 API 为 16 或更高时默认使用 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]”。(Ie4fa5, b/121067210)

  • Room 现在拥有 API,可用于使用从输入流读取的预打包数据库来创建数据库。这允许处理诸如预打包数据库被压缩的情况。感谢“Ahmed El-Helw [email protected]” (3e6792, b/146911060)

API 更改

  • @ForeignKey 注解中添加了缺少的目标,从而阻止了它在 @Entity 注解之外使用。(Iced1e)

  • RoomDatabase.java 中的字段 mCallbacks 现在已隐藏。(d576cb, b/76109329)

错误修复

  • 更新了类型转换器的文档,以澄清类型转换器只能用于转换列/字段,不能用于转换行。(I07c56, b/77307836)

  • 更新了 DaoProcessor 以修复使用 Kotlin "primitives" 的泛型超类型时 Dao 中的编译器错误。(Ice6bb, b/160258066)

  • 更新了添加/删除观察者方法的文档,以澄清线程 (Ifd1d9, b/153948821)

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

外部贡献

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

  • RoomDatabase 中的 ConcurrentHashMap 替换为 Collections.synchronizedMap(),以避免 Android Lollipop 上的问题 (d1cfc7, b/162431855)

  • 添加了一个 onOpenPrepackagedDatabase 回调,用于复制预打包的 DB。(I1ba74, b/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 的增量注解处理选项现在默认情况下为 ON。(b/112110217)

版本 2.3.0-alpha01

2020 年 6 月 10 日

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

新功能

  • 分页 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不替换针对包含@Embedded字段的返回类型提供的列冲突解决方案room.expandProjection

错误修复

  • 修复了 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 感知。感谢 ‘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)
  • 修复了当 Kotlin 中的 DAO 接口具有具体函数时 Room 会生成不正确代码的问题。(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 返回空关系项的问题。(b/143105450)

版本 2.2.1

版本 2.2.1

2019 年 10 月 23 日

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

错误修复

  • 修复了当编译器选项 expandProjection 处于开启状态时 Room 会错误地发出有关 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 的资产文件夹中时,而 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
  • 协程 Flow@Query DAO 方法现在可以返回 Flow<T> 类型。如果查询中观察到的表失效,返回的 Flow 将重新发出新的值集。声明返回 Channel<T> 类型的 DAO 函数是错误的,Room 鼓励您改用 Flow,然后使用相邻函数将 Flow 转换为 Channelb/130428884
  • Gradle 增量注释处理器:Room 现在是一个 Gradle 隔离的注释处理器,可以通过处理器选项 room.incremental 启用增量功能。有关更多信息,请参见 Room 编译器选项。如果您遇到任何问题,请在此处提交错误报告 here。我们计划在未来的稳定版本中默认启用增量功能。 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 已发布。此版本中包含的提交可以在 here 找到。

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

版本 2.2.0-beta01

2019 年 8 月 22 日

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

错误修复

  • 修复了协程 Flow 查询在一段时间后停止重新发出新值的错误。(b/139175786)
  • 修复了 Room 无法接受旧版模式哈希码的问题,同时打开自 Room 1.0 以来未经过任何迁移的数据库,导致由于模式无效而出现运行时崩溃。(b/139306173)

版本 2.2.0-alpha02

2019 年 8 月 7 日

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

新功能

  • 协程 Flow@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
  • 修复了导致失效跟踪器在启用多实例失效且失效服务被杀死时在第二个进程中抛出 NPE 的错误。 b/137454915
  • 修复了 Room 无法正确识别用 @RawQuery 注释的继承挂起函数的返回类型的错误。 b/137878827
  • 更新了当关联键类型为 BLOB 时,@Relation 的生成代码,以使用可比较的 ByteBufferb/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 的资产文件夹中时,而 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 编译器选项。如果您遇到任何问题,请在此处提交错误报告 here。我们计划在未来的稳定版本中默认启用增量功能。 b/112110217

错误修复

  • 当查询的 Rx 流在查询完成之前被处置时,Room 将不再将 EmptySetResultException 传播到全局错误处理程序。 b/130257475
  • 修复了 Room 在用 @RawQuery 注释的挂起 DAO 函数没有返回值类型时显示错误错误消息的错误。 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 选项可以通过注释的方法进一步自定义。
  • 视图:Room 现在支持使用 @DatabaseView 注释将类声明为存储的查询(也称为 视图)。
  • 协程:DAO 方法现在可以是挂起函数。将 room-ktx 包含在您的依赖项中以利用此功能。ktx 工件还提供了用于在协程内执行数据库事务的扩展函数 RoomDatabase.withTransaction
  • Auto Value:Room 现在支持将 AutoValue 注释的类声明为实体和 POJO。Room 注释 @PrimaryKey@ColumnInfo@Embedded@Relation 现在可以在 auto value 注释的类的抽象方法中声明。注意,这些注释还必须伴随 @CopyAnnotations,以便 Room 正确理解它们。
  • 额外的异步支持:用 @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/行为更改

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

错误修复

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

版本 2.1.0-alpha06

2019 年 3 月 22 日

API/行为更改

  • 异步事务查询现在已序列化,因此 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/行为更改

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

错误修复

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

已知问题

  • 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 注释的 DAO 方法,其中包含 INSERTUPDATEDELETE 语句,现在可以返回异步类型 SingleMaybleCompletableListenableFuture。此外,它们也可以是挂起函数。 b/120227284

API/行为更改

  • 如果用 @Transaction 注释的非抽象 DAO 方法返回异步类型,例如 SingleMaybleCompletableLiveDataListenableFuture,Room 现在将抛出错误。由于事务是线程受限的,因此 Room 目前无法在可能在不同线程中执行查询的函数周围开始和结束事务。 b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK 自从它们的行为与 Android 当前的 SQLite 绑定不符以来一直 @Deprecatedb/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 现在接受字符串而不是枚举。这允许 Room 使用自定义标记器。内置标记器仍以字符串常量的形式定义在 FtsOptions 中。 b/119234881

新功能

  • 协程: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

错误修复

  • 修复了一个错误,该错误会导致 Room 在订阅和处置 Rx 返回类型时在主线程中执行磁盘 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 现在可以在 auto value 注释的类的抽象方法中声明。请注意,这些注释还必须伴随 @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/行为更改

  • 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/行为更改

  • 添加了 RoomDatabase.Builder.setQueryExecutor() 以允许自定义在何处运行查询
  • 添加了 RxJava2 Observable 支持
  • 生成的 DAO 和数据库实现现在为 final

错误修复

  • 在“无法为字段找到 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
  • fallBackToDestructiveMigrationsFrom: 此新 API 在 RoomDatabase.Builder 中,允许更精细地控制从哪个起始模式版本允许破坏性迁移(与 fallbackToDestructiveMigration 相比)b/64989640
  • Room 现在只支持更新的分页 API(alpha-4+),不再支持已弃用的 LivePagedListProvider。要使用新的 Room alpha,您需要使用分页 alpha-4 或更高版本,如果您尚未使用,请从 LivePagedListProvider 切换到 LivePagedListBuilder

错误修复

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