Room
最新更新 | 稳定版 | 候选版本 | 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。(Ie57b5,b/369136627)
错误修复
- 修复了 room-paging 中的一个问题,该问题在将
@Relation
与PagingSource
结合使用时会生成无效代码。
版本 2.7.0-alpha10
2024 年 10 月 16 日
androidx.room:room-*:2.7.0-alpha10
已发布。版本 2.7.0-alpha10 包含 这些提交。
API 更改
- 创建内部
ByteArrayWrapper
类以支持在非 Android 和非 JVM 平台上使用ByteBuffer
的关系。(I75543,b/367205685) - 添加
SQLiteStatement.getColumnType()
以及各种SQLITE_DATA_*
结果常量以启用检索列的数据类型。(I1985c,b/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 兼容。(Ib8756,b/339934824)- API
invalidationTrackerFlow()
已作为一等公民 API 标准化为InvalidationTracker.createFlow()
,现在可在 KMP 项目中的非 Android 源集上使用。(I1fbfa,(I8fb29),b/329291639,b/329315924)
API 更改
- 已删除或替换 Room 中使用“Cursor”一词的所有警告和错误消息,因为“Cursor”不再是用于 Room 的 KMP 版本的准确通用术语。(Id8cd9,b/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,@ConstructedBy
和 RoomDatabaseConstructor
,它们取代了 instantiateImpl()
策略。新策略如下
定义一个实现
RoomDatabaseConstructor
的 expect 对象expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
使用
@ConstructedBy
将对象与@Database
声明链接@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
创建一个新的数据库实例,但不传递工厂参数
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
修复了 b/316978491、b/338446862 和 b/342905180
- 通过添加一个名为
RoomRawQuery
的新 API 支持 Room KMP 中的@RawQuery
,该 API 在保存原始 SQL 字符串和将参数绑定到语句方面类似于SupportSQLiteQuery
。@RawQuery
注释的函数现在可以接受RoomRawQuery
作为其唯一的参数。(Iea844,b/330586815) - 添加了
setQueryCallback()
的一个重载,它接受CoroutineContext
。(Id66ff,b/309996304) - 添加了对
linuxArm64
Kotlin 多平台目标的支持(I139d3,b/338268719)
错误修复
- 修复了 Room 在非 Android 目标中错误地生成对
recursiveFetchArrayMap
的调用的问题。(710c36,b/352482325) - 修复了 Room 有时会在 KMP 项目中抛出关于“连接尝试超时”的异常的问题。(fa72d0,b/347737870)
- 修复了自动迁移中的一个问题,该问题在其他表更改其模式以符合新的外键之前过早地检查了外键。(7672c0,b/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 相关的各种问题。请注意,使用 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.useReaderConnection
和RoomDatabase.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
加载中抛出的异常现在将作为LoadStateUpdate
的LoadResult.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 代码生成”)的选项。(4297ec0)。要在 Room 中打开 Kotlin 代码生成,请将
room.generateKotlin
选项名称添加到 KSP 的处理器选项中。有关如何为 KSP 传递处理器选项的更多详细信息,请参阅KSP 文档。
注意:使用 Kotlin 代码生成时,请注意已添加的其他限制。在 Kotlin 代码生成中,不允许将抽象属性作为 DAO 获取器或 DAO 查询,而是应将其重写为函数,以避免错误地认为属性值是不可变的并且具有固定的存储结果。已添加的另一个限制是,在 Room 中,Kotlin 代码生成不再允许使用可为空的集合返回值类型。
警告:您可能会发现,在使用 Kotlin 代码生成时,项目在空值性方面更加严格。在 Kotlin 代码生成中,类型参数的空值性很重要,而在 Java 中,这大多被忽略。例如,假设您有一个 `Flow
- 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 包含这些提交。
错误修复
- 处理在 upsert 期间遇到
SQLite
特殊情况异常,当在 upsert 期间抛出2067 SQLITE_CONSTRAINT_UNIQUE
异常时,upsert 应执行更新。(If2849,b/243039555)
版本 2.6.0-alpha03
2023年8月9日
androidx.room:room-*:2.6.0-alpha03
已发布。版本 2.6.0-alpha03 包含这些提交。
新功能
API 更改
- 已创建名为
@MapColumn
的新类型注释以替换@MapInfo
,后者现已弃用。对于在@MapInfo
注释中提供的每个列名(keyColumnName
、valueColumnName
或两者),您都需要声明一个仅包含columnName
的@MapColumn
注释,并在 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 代码生成时,请注意已添加的其他限制。在 Kotlin 代码生成中,不允许将抽象属性作为 DAO 获取器或 DAO 查询,而是应将其重写为函数,以避免错误地认为属性值是不可变的并且具有固定的存储结果。已添加的另一个限制是,在 Room 中,Kotlin 代码生成不再允许使用可为空的集合返回值类型。
警告:您可能会发现,在使用 Kotlin 代码生成时,项目在空值性方面更加严格。在 Kotlin 代码生成中,类型参数的空值性很重要,而在 Java 中,这大多被忽略。例如,假设您有一个 `Flow
API 更改
- 防止在 DAO 方法返回类型中无意义地使用可空集合。(I777dc,b/253271782,b/259426907)
- 添加了一个用于创建发出失效跟踪器更改的 Flow 的 API。此 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)
- 修复了在 Robolectric 测试中使用 Room 时导致 Room 抛出错误的问题。(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.0
、androidx.room:room-paging-rxjava2:2.5.0
和 androidx.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
,它在没有唯一性冲突时尝试插入实体,或者在有冲突时更新实体。(I7aaab,b/241964353) - 已添加新的 room-paging 工件
room-paging-rxjava2
、room-paging-rxjava3
和room-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 中识别主键约束冲突。(I5f67f,b/243039555)
错误修复
- 修复了影子表错误地导出到模式
.json
文件,导致文件损坏的问题。(I4f83b,b/246751839)
版本 2.5.0-alpha03
2022年8月24日
androidx.room:room-*:2.5.0-alpha03
已发布。版本 2.5.0-alpha03 包含这些提交。
新功能
- 添加了一个新的快捷注释
@Upsert
,它在没有唯一性冲突时尝试插入实体,或者在有冲突时更新实体。(I7aaab,b/241964353)
错误修复
- Room 现在将在自动迁移外键约束检查期间抛出
SQLiteConstraintException
而不是IllegalStateException
。(I328dd) - 修复了
getOpenHelper
、getQueryExecutor
和getTransactionExecutor
的 getter/属性的 Kotlin 源代码不兼容更改。(Iad0ac)
版本 2.5.0-alpha02
2022年6月1日
androidx.room:room-*:2.5.0-alpha02
已发布。版本 2.5.0-alpha02 包含这些提交。
新功能
- 已添加新的
room-paging
工件room-paging-rxjava2
、room-paging-rxjava3
和room-paging-guava
以在 Room Paging 中提供支持。(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
API 更改
room-runtime
已完全从 Java 转换为 Kotlin。(If2069,b/206859668),(Ie4b55,b/206859668),(I697ee,b/206859668),(I96c25,b/206859668)注意:由于库转换为 Kotlin,您可能会遇到源代码不兼容问题。如果您的代码是 Kotlin 并调用旧版本的 Room,则新版本需要处理这些情况。例如,一个已知的源代码不兼容更改是在
InvalidationTracker
中,您现在需要在Observer
中声明onInvalidate()
,其参数类型为Set
,而不是MutableSet
。- 添加了 API 用于提供键和值表名称,以便在
@MapInfo
中消除歧义(Icc4b5) - 修复了一个源代码兼容性问题,以重新允许在属性 getter 中使用
@Ignore
。(Ifc2fb)
错误修复
- 重复列解析启发式算法。Room 现在将尝试解析多映射查询中的歧义列。这允许将包含相同名称表的表与 JOIN 正确映射到结果数据对象。(I4b444,b/201306012,b/212279118)
版本 2.5.0-alpha01
2022 年 2 月 23 日
androidx.room:room-*:2.5.0-alpha01
已发布。版本 2.5.0-alpha01 包含这些提交。
API 更改
- 修复了 Kotlin 源代码中 Room
@IntDef
用法未被强制执行的问题。(I75f41,b/217951311) - 修复了一个源代码兼容性问题,以重新允许在属性 getter 中使用
@Query
。(I0a09b) - 将 room-common 从 Java 转换为 Kotlin。(I69c48,b/206858235)
注意:由于某些属性在库转换为 Kotlin 期间已移动到伴随对象中,因此您可能会遇到源代码不兼容问题。如果您的代码是 Kotlin 并调用旧版本的 Room,则在访问这些属性时需要“.Companion”后缀。
- 将 room-migration 从 Java 转换为 Kotlin。(I2724b,b/206858622)
- 将
room-runtime
中与paging
相关的文件从 Java 转换为 Kotlin。(I82fc8,b/206859668) - 添加了用于多进程锁并在 FrameworkSQLite* 级别使用的 API,以保护多进程首次数据库创建和迁移。(Ied267,b/193182592)
错误修复
- 添加了对 Kotlin 源代码中内部属性的支持。这是一个轻微的 Room 行为更改,它将在将函数与属性匹配为 getter/setter 时使用函数的源名称(以前,它使用函数的 JVM 名称,该名称对于内部函数/属性是不同的)。如果您使用自定义
@JvmName
注解将 getter/setter 与私有属性匹配,请在更新后仔细检查生成的代码 (If6531,b/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>
返回类型查询方法生成代码。(If086e,b/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 与私有属性匹配,请在更新后仔细检查生成的代码 (If6531,b/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 语句很有用。支持的多映射类型为Map
、SparseArray
、LongSparseArray
,以及 Guava 的ImmutableMap
、ImmutableSetMultimap
和ImmutableListMultimap
。
版本 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 包含以下提交。
新功能
- 添加了 UUID 的内置类型转换器。(I671e8,b/73132006)
API 更改
在 TypeConverters 注解中添加了一个新属性,允许开发者禁用内置的 Enum 和 UUID 转换器。默认情况下,这些转换器是开启的,但您可以为特定范围或整个数据库禁用它们。有关详细信息,请参阅 TypeConverters 文档。(36ae9e,b/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 的ImmutableMap
、ImmutableSetMultimap
和ImmutableListMultimap
。以下是多映射查询的示例
一对一关系映射
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
一对多关系映射(标准多映射)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
多映射结果也可以包装在支持的异步返回类型中,例如
LiveData
、Rx 的Observable
或协程Flow
。
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 不会出错(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
是一个用于声明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 包含以下提交。
新功能
- 为 KSP 添加了增量编译支持。(I031c1,b/176453350)
错误修复
- 修复了在主线程上创建 PagingSource 可能触发 ANR 的错误。(I42b74,b/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 方法将生成仅包含其中一种策略的代码,从而有效地忽略了定义的策略。(/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)
外部贡献
- 如果启用了 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]’。(Ie4fa5,b/121067210)Room 现在具有用于使用从输入流读取的预打包数据库创建数据库的 API。这允许在预打包数据库被 gzip 压缩等情况下使用。感谢‘Ahmed El-Helw [email protected]’(3e6792,b/146911060)
API 更改
在
@ForeignKey
注解中添加了缺少的目标,以防止其在@Entity
注解之外使用。(Iced1e)RoomDatabase.java
中的字段mCallbacks
现在已隐藏。(d576cb,b/76109329)
错误修复
更新类型转换器文档以阐明类型转换器只能用于转换列/字段,而不是行。(I07c56,b/77307836)
更新 DaoProcessor 以修复 Dao 具有带有 Kotlin“基本类型”的泛型超类型时的编译器错误。(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 回调,用于复制预打包的数据库时。(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 的增量注解处理选项现在默认处于开启状态。(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.4
、androidx.room:room-compiler:2.2.4
、androidx.room:room-guava:2.2.4
、androidx.room:room-ktx:2.2.4
、androidx.room:room-migration:2.2.4
、androidx.room:room-runtime:2.2.4
、androidx.room:room-rxjava2:2.2.4
和androidx.room:room-testing:2.2.4
已发布。版本 2.2.4 包含以下提交。
错误修复
- 修复了挂起事务时出现的问题,如果协程在事务实际开始之前很快被取消,则会导致死锁。(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,用于根据已填充的数据库文件创建RoomDatabase
。createFromAsset()
用于预填充的数据库文件位于 APK 的 assets 文件夹中时,而createFromFile()
用于文件位于任意位置时。这些 API 的用法会更改破坏性迁移的行为,以便在回退迁移期间,Room 会尝试重新复制可用的预填充数据库,否则它将回退到仅删除并重新创建所有表。 b/62185732 - 模式默认值:
@ColumnInfo
现在具有一个新的属性defaultValue
,可用于指定列的默认值。默认值是数据库模式的一部分,如果指定,将在迁移期间进行验证。 b/64088772 - 多对多关系:
@Relation
现在具有一个新的属性associateBy
,它接收一个新的注释@Junction
,用于声明需要通过连接表(也称为联接表)满足的关系。 b/69201917 - 一对一关系:已取消对使用
@Relation
注释的 POJO 字段必须为List
或Set
类型的限制,从而有效地允许表示单值关系。 b/62905145 - 目标实体:DAO 注释
@Insert
、@Update
和@Delete
现在具有一个新的属性targetEntity
,允许指定 DAO 方法打算对其执行操作的目标表。这允许这些 DAO 方法的参数为任意 POJO,这些 POJO 将被解释为部分实体。在实践中,这允许部分插入、删除和更新。 b/127549506 - 协程流:
@Query
DAO 方法现在可以是返回类型Flow<T>
。如果查询中观察到的表失效,则返回的 Flow 将重新发出新的一组值。声明具有Channel<T>
返回类型的 DAO 函数是一个错误,Room 而是鼓励您使用Flow
,然后使用相邻函数将Flow
转换为Channel
。 b/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
转换为Channel
。 b/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,用于根据已填充的数据库文件创建RoomDatabase
。createFromAsset()
用于预填充的数据库文件位于 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 字段必须为List
或Set
类型的限制,从而有效地允许表示单值关系。 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 方法,以及包含INSERT
、DELETE
或UPDATE
语句的@Query
,现在支持 Rx 返回类型Completable
、Single
、Maybe
和 Guava 的返回类型ListenableFuture
,并且它们也可以是挂起函数。 enableMultiInstanceInvalidation
是RoomDatabase.Builder
中的一个新 API,用于使用相同的数据库文件在多个 RoomDatabase 实例之间启用失效。fallbackToDestructiveMigrationOnDowngrade
是RoomDatabase.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 工件的命名方式相同。 beginTransaction
、setTransactionSuccessful
和endTransaction
在RoomDatabase
中已被弃用,取而代之的是runInTransaction
和room-ktx
扩展函数withTransaction
。
错误修复
- 修复了如果使用的标记器是 SIMPLE,则标记器参数会被丢弃的错误。b/125427014
- 修复了 Room 无法正确识别其类型为内部类的参数的挂起函数的错误。b/123767877
- 修复了使用
INSERT
、UPDATE
或DELETE
语句的延迟@Query
DAO 方法在主线程中急切地准备查询的错误。b/123695593 - 修复了 Room 为某些挂起函数生成不正确代码的各种错误。b/123466702 和 b/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
注解并包含INSERT
、UPDATE
或DELETE
语句的 DAO 方法现在可以返回异步类型Single
、Mayble
、Completable
和ListenableFuture
。此外,它们也可以是挂起函数。b/120227284
API/行为变更 (API / Behavior Changes)
- 如果使用
@Transaction
注解的非抽象 DAO 方法返回异步类型(例如Single
、Mayble
、Completable
、LiveData
或ListenableFuture
),Room 现在将抛出错误。由于事务是线程限定的,因此 Room 目前无法在可能在不同线程中执行查询的函数周围开始和结束事务。b/120109336 OnConflictStrategy.FAIL
和OnConflictStrategy.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
中的 FTStokenizer
现在采用 String 而不是 Enum。这允许 Room 使用自定义标记器。内置标记器仍以字符串常量的形式定义在FtsOptions
中。b/119234881
新功能
- 协程 (Couroutines):DAO 方法现在可以是挂起函数。为了支持 Room 中的挂起函数,已发布了一个新的工件
room-coroutines
。b/69474692 - 使用
@Insert
、@Delete
或@Update
注解的 DAO 方法现在支持ListenableFuture
作为返回类型。b/119418331
错误修复
- 修复了 Room 会错误地尝试在
@Entity
的ignoredColumns
属性中找到具有列的构造函数的错误。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 返回类型Completable
、Single<T>
和Maybe<T>
。 b/63317956 - 使用
@Relation
的不可变类型:Room 之前要求使用@Relation
注释的字段是可设置的,但现在它们可以是构造函数参数。 enableMultiInstanceInvalidation
:是RoomDatabase.Builder
中的一个新 API,用于在使用相同数据库文件的多个 RoomDatabase 实例之间启用失效。这种多实例失效机制也适用于多个进程。 b/62334005fallbackToDestructiveMigrationOnDowngrade
:是RoomDatabase.Builder
中的一个新 API,用于在发生降级时自动重新创建数据库。 b/110416954ignoredColumns
:是@Entity
注释中的一个新 API,可用于按名称列出忽略的字段。对于忽略实体上的继承字段很有用。 b/63522075
API/行为变更 (API / Behavior Changes)
mCallback
和mDatabase
在RoomDatabase
中现在已@Deprecated
,并将在下个主要版本的 Room 中删除。 b/76109329
错误修复
- 修复了两个问题,即 Room 在初始化期间无法从损坏的数据库或错误的迁移中正确恢复。 b/111504749 和 b/111519144
- Room 现在将正确使用 Kotlin 中的数据类的主构造函数,避免需要将字段声明为
vars
。 b/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
Single
和Maybe
实现中的一个严重错误,该错误会在提前回收查询,如果向返回的Single
或Maybe
实例添加多个观察者,则会导致问题。 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/62103290、b/71458963fallBackToDestructiveMigrationsFrom
:RoomDatabase.Builder
中的此新 API 允许更细粒度地控制允许破坏性迁移的起始架构版本(与 fallbackToDestructiveMigration 相比) b/64989640- Room 现在仅支持较新的分页 API(alpha-4+),放弃对已弃用的
LivePagedListProvider
的支持。要使用新的 Room alpha,您需要使用 pagingalpha-4
或更高版本,并且如果尚未切换,则需要从LivePagedListProvider
切换到LivePagedListBuilder
。
错误修复
- 改进了对 Kotlin Kapt 类型的支持。 b/69164099
- 字段的顺序不再使架构失效。 b/64290754