ห้อง
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
11 ธันวาคม 2024 | 2.6.1 | - | - | 2.7.0-alpha12 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Room คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
ไลบรารีที่ต้องพึ่งพาสําหรับ 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 (เช่น โมดูล Gradle ของ Java หรือ Kotlin เท่านั้น) คุณสามารถใช้ androidx.room:room-common
เพื่อใช้คำอธิบายประกอบ Room ได้ (ไม่บังคับ)
การกำหนดค่าตัวเลือกคอมไพเลอร์
Room มีตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบดังต่อไปนี้
room.schemaLocation |
directory
เปิดใช้การส่งออกสคีมาฐานข้อมูลไปยังไฟล์ JSON ในไดเรกทอรีที่ระบุ ดูข้อมูลเพิ่มเติมได้ที่การย้ายข้อมูลห้องพัก |
room.incremental |
boolean
เปิดใช้โปรแกรมประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle ค่าเริ่มต้นคือ true
|
room.generateKotlin |
boolean
สร้างไฟล์ต้นทาง Kotlin แทน Java ต้องใช้ KSP ค่าเริ่มต้นคือ false
ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุเวอร์ชัน 2.6.0
|
ใช้ปลั๊กอิน Gradle ของ Room
เมื่อใช้ Room เวอร์ชัน 2.6.0 ขึ้นไป คุณจะใช้ปลั๊กอิน Gradle ของ Room เพื่อกำหนดค่าตัวเลือกสำหรับคอมไพเลอร์ 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") } }
ต้องตั้งค่า schemaDirectory
เมื่อใช้ปลั๊กอิน Gradle ของ Room ซึ่งจะกําหนดค่าคอมไพเลอร์ Room และงานคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรูปแบบ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json
คุณควรตรวจสอบไฟล์เหล่านี้ในที่เก็บเพื่อใช้ตรวจสอบและการย้ายข้อมูลอัตโนมัติ
ตัวเลือกบางอย่างไม่สามารถกำหนดค่าได้ในปลั๊กอิน Gradle ของ Room บางเวอร์ชัน แม้ว่าคอมไพเลอร์ Room จะรองรับก็ตาม ตารางด้านล่างแสดงตัวเลือกแต่ละรายการและเวอร์ชันของปลั๊กอิน Gradle ของ Room ที่เพิ่มการรองรับการกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย room
หากใช้เวอร์ชันที่ต่ำกว่าหรือระบบยังไม่รองรับตัวเลือกนี้ คุณสามารถใช้ตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบแทน
ตัวเลือก | ตั้งแต่เวอร์ชัน |
---|---|
room.schemaLocation (ต้องระบุ) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
ใช้ตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ
หากคุณไม่ได้ใช้ปลั๊กอิน Gradle ของ Room หรือปลั๊กอินเวอร์ชันของคุณไม่รองรับตัวเลือกที่ต้องการ คุณก็สามารถกำหนดค่า 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-alpha12
11 ธันวาคม 2024
androidx.room:room-*:2.7.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha12 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API เวอร์ชันทดลอง
RoomDatabase.Builder.setInMemoryTrackingMode()
เพื่อกำหนดค่าว่า Room จะใช้ตารางในหน่วยความจำหรือไม่สำหรับการติดตามการลบล้าง (I2a9b2, b/185414040)
การแก้ไขข้อบกพร่อง
- ตอนนี้การย้ายข้อมูลแบบทำลายล้างจะทิ้งมุมมองเพื่อให้ระบบสร้างมุมมองขึ้นมาใหม่ โดยปรับให้ลักษณะการทำงานเมื่อ allowDestructiveMigrationForAllTables
เปิดอยู่ (ค่าเริ่มต้นของ KMP) สอดคล้องกับลักษณะการทำงานที่มีอยู่เมื่อปิดอยู่ (0a3e83, b/381518941)
เวอร์ชัน 2.7.0-alpha11
30 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha11
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha11 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- กลับไปดูลายเซ็นเมธอด
convertRows()
ที่เพิ่มใหม่ให้เป็นฟังก์ชันการระงับที่ได้รับRawRoomQuery
สําหรับการแบ่งหน้าห้อง (Ie57b5, b/369136627)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการจัดเรียงหน้าของห้องซึ่งระบบจะสร้างโค้ดที่ไม่ถูกต้องเมื่อใช้
@Relation
ร่วมกับPagingSource
เวอร์ชัน 2.7.0-alpha10
16 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha10
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha10 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- สร้างคลาส
ByteArrayWrapper
ภายในเพื่อรองรับความสัมพันธ์กับByteBuffer
ในแพลตฟอร์มที่ไม่ใช่ Android และไม่ใช่ JVM (I75543, b/367205685) - เพิ่ม
SQLiteStatement.getColumnType()
พร้อมกับค่าคงที่ผลลัพธ์SQLITE_DATA_*
ต่างๆ เพื่อเปิดใช้การดึงข้อมูลประเภทของคอลัมน์ (I1985c, b/369636251)
เวอร์ชัน 2.7.0-alpha09
2 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha09
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha09 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการติดตั้งใช้งาน
room-paging
ของ KMP ซึ่งจะทำให้เกิดError code: 8, message: attempt to write a readonly database
เนื่องจากการเริ่มธุรกรรมการเขียนในการเชื่อมต่อการอ่าน (b/368380988)
เวอร์ชัน 2.7.0-alpha08
18 กันยายน 2024
androidx.room:room-*:2.7.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha08 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ย้ายข้อมูลอาร์ติแฟกต์
room-paging
เพื่อให้เข้ากันได้กับ KMP แล้ว (Ib8756, b/339934824) - API
invalidationTrackerFlow()
ได้กลายเป็น API ของบุคคลที่หนึ่งอย่างInvalidationTracker.createFlow()
และพร้อมใช้งานสำหรับชุดแหล่งที่มาที่ไม่ใช่ Android ในโปรเจ็กต์ KMP แล้ว (I1fbfa, (I8fb29), b/329291639, b/329315924)
การเปลี่ยนแปลง API
- เราได้นําคําเตือนและข้อความแสดงข้อผิดพลาดทั้งหมดใน Room ที่ใช้คําว่า
Cursor
ออกหรือแทนที่ด้วยคําอื่นแล้ว เนื่องจากCursor
ไม่ใช่คําทั่วไปที่ถูกต้องสําหรับใช้ใน Room เวอร์ชัน KMP อีกต่อไป (Id8cd9, b/334087492)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room KMP จะพยายามแสดงโค้ดโดยใช้
UUID
สำหรับแพลตฟอร์มที่ไม่ใช่ JVM (b/362994709) - แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่ทำให้เกิดข้อผิดพลาด เช่น "เปลี่ยนแอตทริบิวต์ของการกำหนดค่าไม่ได้ … หลังจากที่มีการล็อกเพื่อการเปลี่ยนแปลง" เมื่อใช้ในโปรเจ็กต์ KMP ที่มี Compose Multiplatform (b/343408758)
เวอร์ชัน 2.7.0-alpha07
21 สิงหาคม 2024
androidx.room:room-*:2.7.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha07 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของ Room จะเพิ่มสคีมาแบบส่งออกลงในแหล่งข้อมูลการทดสอบเครื่องมือวัดประสิทธิภาพของ Android โดยอัตโนมัติเพื่อให้
MigrationTestHelper
นำไปใช้ได้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ
RoomDatabaseConstructor
ที่ไม่มีตัวแก้ไข "จริง" ในฟังก์ชันinitialize
หากมีการลบล้างฟังก์ชันดังกล่าวในการประกาศ "คาดหวัง" ด้วย (359631627) - แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ
RoomDatabaseConstructor
ไม่ตรงกับระดับการเข้าถึงของประกาศ "คาดหวัง" (358138953)
เวอร์ชัน 2.7.0-alpha06
7 สิงหาคม 2024
androidx.room:room-*:2.7.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนการตั้งค่าการสร้างอินสแตนซ์สําหรับ
RoomDatabase
ในโปรเจ็กต์ KMP
กลยุทธ์การอ้างอิงฟังก์ชันที่กำลังจะสร้างขึ้นซึ่งมีชื่อว่า instantiateImpl()
จะใช้ไม่ได้อีกต่อไปเนื่องจากรูปแบบการคอมไพล์ของ Kotlin 2.0 เราได้เปิดตัว 2 รายการ API ใหม่ ได้แก่ @ConstructedBy
และ RoomDatabaseConstructor
ซึ่งมาแทนที่กลยุทธ์ instantiateImpl()
กลยุทธ์ใหม่มีดังนี้
กําหนดออบเจ็กต์การคาดหวังที่ใช้
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
ลิงก์ออบเจ็กต์กับประกาศ
@Database
โดยใช้@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
สร้างอินสแตนซ์ฐานข้อมูลใหม่โดยไม่ส่งอาร์กิวเมนต์ของ Factory
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
แก้ไข b/316978491, b/338446862 และ b/342905180
- การรองรับ
@RawQuery
ใน Room KMP ด้วยการเพิ่ม API ใหม่ชื่อRoomRawQuery
ซึ่งคล้ายกับSupportSQLiteQuery
ในแง่ของการเก็บสตริง SQL ดิบไว้และฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์เข้ากับคำสั่ง ตอนนี้ฟังก์ชันที่มีคำอธิบายประกอบ@RawQuery
ยอมรับRoomRawQuery
เป็นพารามิเตอร์เดียวได้แล้ว (Iea844, b/330586815) - เพิ่มการโอเวอร์โหลดของ
setQueryCallback()
ที่ยอมรับCoroutineContext
(Id66ff, b/309996304) - เพิ่มการรองรับ
linuxArm64
เป้าหมายแบบหลายแพลตฟอร์มของ Kotlin (I139d3, b/338268719)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะสร้างการเรียก
recursiveFetchArrayMap
ในเป้าหมายที่ไม่ใช่ Android อย่างไม่ถูกต้อง (710c36, b/352482325) - แก้ไขปัญหาที่บางครั้ง Room จะแสดงข้อยกเว้นเกี่ยวกับ "หมดเวลาขณะพยายามเชื่อมต่อ" ในโปรเจ็กต์ KMP (fa72d0, b/347737870)
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติที่จะตรวจสอบคีย์นอกเร็วเกินไปก่อนที่ตารางอื่นๆ จะเปลี่ยนสคีมาให้สอดคล้องกับคีย์นอกใหม่ (7672c0, b/352085724)
เวอร์ชัน 2.7.0-alpha05
10 กรกฎาคม 2024
androidx.room:room-*:2.7.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
SQLiteKt
เป็นSQLite
และBundledSQLiteKt
เป็นBundledSQLite
(I8b501)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่
RoomDatabase
จะหยุดทำงานชั่วคราวหรือแสดงข้อผิดพลาดเนื่องจากการเชื่อมต่อหมดเวลาเมื่อใช้AndroidSQLiteDriver
เวอร์ชัน 2.7.0-alpha04
12 มิถุนายน 2024
androidx.room:room-*:2.7.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha04 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ที่จะสร้างโค้ด KMP ที่เข้ากันไม่ได้เมื่อมีการกําหนดประเภทผลลัพธ์แบบหลายแผนที่ DAO (b/340983093)
- แก้ไขปัญหาที่ Room ไม่พบการใช้งานฐานข้อมูลที่สร้างขึ้นหากคลาสที่มีคำอธิบายประกอบ
@Database
ไม่มีแพ็กเกจ (b/342097292) - แก้ไขปัญหาที่บางครั้งการเปิดใช้การปิดอัตโนมัติและการทำให้อินสแตนซ์หลายรายการใช้งานไม่ได้จะทำให้เกิด
ConcurrentModificationException
เมื่อฐานข้อมูลปิดโดยอัตโนมัติเนื่องจากไม่มีการใช้งาน
เวอร์ชัน 2.7.0-alpha03
29 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาต่างๆ เกี่ยวกับ Kotlin 2.0 และ KSP 2.0 โปรดทราบว่า Kotlin 2.0 ที่รองรับ KSP 2 ยังไม่สมบูรณ์และทีมกําลังทํางานเกี่ยวกับ API และการเปลี่ยนแปลงลักษณะการทํางานต่างๆ ในคอมไพเลอร์ใหม่ (b/314151707)
เวอร์ชัน 2.7.0-alpha02
14 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหา KSP ต่างๆ
เวอร์ชัน 2.7.0-alpha01
1 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ Room ได้รับการรีแฟกทอริงให้กลายเป็นไลบรารี Kotlin Multiplatform (KMP) แม้ว่าจะยังต้องดำเนินการบางอย่าง แต่รุ่นนี้เป็นการเปิดตัว Room เวอร์ชันใหม่ที่ฟังก์ชันการทำงานส่วนใหญ่ได้รับการ "ทำให้เป็นเวอร์ชันทั่วไป" (ทำให้ใช้งานได้หลายแพลตฟอร์ม) แพลตฟอร์มที่รองรับในปัจจุบัน ได้แก่ Android, iOS, JVM (เดสก์ท็อป), Mac เวอร์ชันเดิม และ Linux เวอร์ชันเดิม ฟังก์ชันการทำงานที่ขาดหายไปในแพลตฟอร์มที่รองรับใหม่จะกลายเป็น "ฟีเจอร์ครบถ้วน" ในรุ่น Room ที่กำลังจะมาถึง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ
- ระบบจะเปิดการสร้างโค้ด Kotlin ใน KSP ไว้โดยค่าเริ่มต้นหากการประมวลผลดำเนินการผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างซอร์สโค้ด Java
การเปลี่ยนแปลง API
- เราได้เพิ่ม
Room.databaseBuilder()
แบบโอเวอร์โหลดซึ่งใช้พารามิเตอร์ Lambda ที่มีไว้เพื่อใช้กับฟังก์ชันที่ Room สร้างขึ้นเพื่อหลีกเลี่ยงการใช้การสะท้อนเมื่อสร้างอินสแตนซ์การใช้งานRoomDatabase
ที่สร้างขึ้น ตัวอย่างการใช้งานมีดังนี้
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- เราได้เพิ่ม API สําหรับการกําหนดค่าห้องที่มี
CoroutineContext
ลงในโปรแกรมสร้างRoomDatabase.Builder.setQueryCoroutineContext
โปรดทราบว่าRoomDatabase
จะกำหนดค่าได้โดยใช้ตัวดำเนินการที่ใช้setQueryExecutor
หรือบริบท Coroutine เท่านั้น แต่จะใช้ทั้ง 2 อย่างไม่ได้ - เพิ่ม API สำหรับการกำหนดค่า Room ด้วยไดรเวอร์
SQLite
แล้ว:RoomDatabase.Builder.setDriver()
ดูข้อมูลเพิ่มเติมเกี่ยวกับSQLite
Driver API ได้ที่เอกสารประกอบ SQLite KMP - เราได้เพิ่ม API สำหรับการเข้าถึง
SQLiteConnection
ที่อยู่เบื้องหลังจาก API ของไดรเวอร์แล้ว ได้แก่RoomDatabase.useReaderConnection
และRoomDatabase.useWriterConnection
- ตอนนี้การเรียกกลับที่เกี่ยวข้องกับ Room หลายรายการมีเวอร์ชันที่รับ
SQLiteConnection
แทนSupportSQLiteDatabase
แล้ว การตั้งค่าเหล่านี้มีไว้สำหรับการลบล้างเมื่อย้ายข้อมูลไปยังโปรเจ็กต์ KMP ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลการใช้งาน Room ในแอป Android ไปยังโมดูล KMP ทั่วไปได้ที่คำแนะนำในการย้ายข้อมูล การโทรกลับมีดังนี้Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- อาร์ติแฟกต์ KTX
androidx.room:room-ktx
ผสานรวมกับandroidx.room:room-runtime
พร้อมกับ API ทั้งหมดแล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนําออกจากรายการทรัพยากร Dependency
เวอร์ชัน 2.6
เวอร์ชัน 2.6.1
29 พฤศจิกายน 2023
androidx.room:room-*:2.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในโค้ดที่สร้างขึ้นซึ่งระบบตั้งค่าเริ่มต้นของคอลัมน์ Double ใน
EntityCursorConverter
เป็น 0 แทน 0.0 นอกจากนี้ เรายังได้รวมการแก้ไขที่เป็นไปได้สำหรับกรณีขอบที่คล้ายกันสำหรับคอลัมน์ประเภท Float ไว้ด้วย (Id75f5, b/304584179) - ตอนนี้ข้อยกเว้นที่โยนออกมาจากการโหลด
PagingSource
จะนำไปเผยแพร่เป็นLoadStateUpdate
ของLoadResult.Error
ที่มี Throwable สถานะข้อผิดพลาดนี้สามารถดูได้ผ่านPagingDataAdapter.loadStateFlow(Views)
หรือLazyPagingItems.loadState(Compose)
โปรดทราบว่าการดำเนินการนี้เป็นการทําการเปลี่ยนแปลงลักษณะการทํางาน ซึ่งที่ผ่านมาข้อผิดพลาดในการโหลดจะแสดงเป็นข้อยกเว้นที่เมธอด dao ที่ทริกเกอร์การโหลดแสดง (I93887, b/302708983)
เวอร์ชัน 2.6.0
18 ตุลาคม 2023
androidx.room:room-*:2.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.5.0
- ตัวเลือกในการเปิดใช้การสร้างโค้ด Kotlin (หรือ "Kotlin CodeGen") พร้อมใช้งานใน Room KSP แล้ว (4297ec0) หากต้องการเปิด Kotlin CodeGen ใน Room ให้เพิ่มชื่อตัวเลือก
room.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกเครื่องประมวลผลสำหรับ KSP ได้ในเอกสารประกอบ KSP
หมายเหตุ: เมื่อใช้ Kotlin CodeGen โปรดทราบว่ามีข้อจํากัดเพิ่มเติม ระบบไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin CodeGen และควรเขียนใหม่เป็นฟังก์ชันแทน เพื่อหลีกเลี่ยงความเข้าใจผิดที่ว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่เก็บไว้แบบคงที่ ข้อจำกัดอีกอย่างหนึ่งที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทผลลัพธ์ที่เป็นคอลเล็กชันแบบ Nullable ใน Room สำหรับ CodeGen ของ Kotlin อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ ในขณะที่ใน Java ส่วนใหญ่จะละเว้น ตัวอย่างเช่น สมมติว่าคุณมีประเภทผลลัพธ์เป็น `Flow<foo\>` และตารางว่างเปล่า ใน CodeGen ของ Java การดำเนินการนี้จะไม่ก่อให้เกิดปัญหาใดๆ แต่คุณจะได้รับข้อผิดพลาดใน CodeGen ของ Kotlin หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` โดยสมมติว่าระบบจะแสดงผล Null </foo?\></foo\>
- เราได้เพิ่มอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ที่มีรหัส
androidx.room
ลงใน Room ซึ่งจะช่วยแก้ปัญหาต่างๆ ที่มีอยู่เกี่ยวกับอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ Gradle ดูรายละเอียดเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Room เวอร์ชัน 2.6.0-alpha02 - ตอนนี้ KSP รองรับคลาสค่าในเอนทิตีห้องแล้ว (4194095)
- ตอนนี้ Room รองรับประเภทผลลัพธ์แผนที่ที่ฝังอยู่ในฟังก์ชัน DAO แล้ว (I13f48, 203008711)
เวอร์ชัน 2.6.0-rc01
20 กันยายน 2023
androidx.room:room-*:2.6.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.6.0-beta01
23 สิงหาคม 2023
androidx.room:room-*:2.6.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การจัดการข้อยกเว้น
SQLite
กรณีพิเศษระหว่างการอัปเดต พบเมื่อมีการยกข้อยกเว้น2067 SQLITE_CONSTRAINT_UNIQUE
ระหว่างการอัปเดต การอัปเดตควรทำการอัปเดต (If2849, b/243039555)
เวอร์ชัน 2.6.0-alpha03
9 สิงหาคม 2023
androidx.room:room-*:2.6.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การเปลี่ยนแปลง API
- เราได้สร้างคำอธิบายประกอบประเภทใหม่ชื่อ
@MapColumn
ขึ้นมาเพื่อแทนที่@MapInfo
ซึ่งตอนนี้เลิกใช้งานแล้ว สําหรับชื่อคอลัมน์แต่ละชื่อ (keyColumnName
,valueColumnName
หรือทั้ง 2 อย่าง) ที่ระบุไว้ในคําอธิบายประกอบ@MapInfo
คุณจะต้องประกาศคําอธิบายประกอบ@MapColumn
ด้วยcolumnName
เท่านั้น และใช้คําอธิบายประกอบกับอาร์กิวเมนต์ประเภทที่เฉพาะเจาะจงซึ่งมีการอ้างอิง (คีย์หรือค่าของ Map) ในประเภทผลลัพธ์ของฟังก์ชัน DAO เนื่องจากใช้คำอธิบายประกอบ@MapColumn
กับอาร์กิวเมนต์ประเภทภายในประเภทผลลัพธ์ของฟังก์ชัน DAO โดยตรงแทนที่จะใช้กับฟังก์ชันเอง เช่น@MapInfo
โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบของ@MapColumn
(Ib0305, b/203008711) - อัปเดตไฟล์ API เพื่อกำกับเนื้อหาการระงับความเข้ากันได้ (I8e87a, b/287516207)
- เราได้อัปเดต API ของปลั๊กอิน Gradle ของ Room เพื่อไม่ให้ต้องมีการกำหนดค่าสำหรับแต่ละตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินจะยอมรับตำแหน่งส่วนกลางสำหรับตัวแปรทั้งหมดได้โดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ซึ่งช่วยให้การย้ายข้อมูลราบรื่นขึ้น แต่ก็มีความยืดหยุ่นพอที่จะกำหนดค่า Flavor หรือสคีมาประเภทบิลด์ด้วยตนเองได้ ขณะเดียวกันก็ยังคงได้รับประโยชน์จากปลั๊กอิน (บิลด์ที่ทําซ้ำได้และแคชได้) (I09d6f, b/278266663)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาช่องโหว่หน่วยความจํารั่วไหลที่อาจเกิดขึ้นใน
QueryInterceptorStatement
(I193d1) - แก้ไขลักษณะการทำงานที่ไม่ถูกต้องในฟังก์ชัน
QueryInterceptorDatabase execSQL()
(Iefdc8)
เวอร์ชัน 2.6.0-alpha02
21 มิถุนายน 2023
androidx.room:room-*:2.6.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha02 มีการคอมมิตเหล่านี้
ปลั๊กอิน Gradle ของ Room
รุ่นใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ที่มีรหัส androidx.room
ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่เกี่ยวกับอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Gradle ของ Room จะกำหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้างซึ่งใช้สำหรับการย้ายข้อมูลอัตโนมัติและเอาต์พุตของงานคอมไพล์ได้รับการกำหนดค่าอย่างถูกต้องเพื่อให้มีบิลด์ที่ซ้ำได้และแคชได้ ปลั๊กอินมี DSL เพื่อกําหนดค่าตําแหน่งสคีมาพื้นฐาน ดังนี้
room {
schemaDirectory("$projectDir/schemas/")
}
จากนั้นปลั๊กอินจะกำหนดค่าคอมไพเลอร์ Room และงานคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรูปแบบต่างๆ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json
ตามปกติแล้ว ระบบจะตรวจสอบไฟล์เหล่านี้ในรีโพซิทอรี่เพื่อใช้ตรวจสอบและย้ายข้อมูลอัตโนมัติ เมื่อย้ายข้อมูลไปใช้ปลั๊กอินแทนตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ คุณต้องคัดลอกไฟล์สคีมาที่มีอยู่ไปยังไดเรกทอรี Flavor ที่สร้างขึ้นโดยปลั๊กอิน ซึ่งการดำเนินการย้ายข้อมูลแบบครั้งเดียวนี้ต้องทำด้วยตนเอง เอกสารประกอบสคีมาใน developers.android.com จะได้รับการอัปเดตในอนาคตเมื่อความคิดเห็นได้รับการแก้ไขและปลั๊กอินทำงานได้อย่างเสถียรแล้ว โปรดลองใช้
การเปลี่ยนแปลง API
RoomDatabase.QueryCallback
ได้รับการกําหนดให้เป็นอินเทอร์เฟซที่ใช้งานได้เพื่ออนุญาตให้ใช้ Conversion ของ SAM (Iab8ea, b/281008549)
การแก้ไขข้อบกพร่อง
- การแก้ปัญหาที่เกิดขึ้นเมื่อสร้างอินสแตนซ์ฐานข้อมูลใน Robolectric หลังจากย้ายข้อมูลแหล่งที่มาของ Room จาก Java ไปยัง Kotlin (Ic053c, b/274924903)
เวอร์ชัน 2.6.0-alpha01
22 มีนาคม 2023
androidx.room:room-*:2.6.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- คลาสค่าที่รองรับใน Room สำหรับ KSP ตอนนี้ Room รองรับคลาสค่าในเอนทิตีแล้ว (4194095)
- ตอนนี้คุณเปิดใช้การสร้างโค้ด Kotlin(หรือ "Kotlin CodeGen") ใน Room (4297ec0) ได้แล้ว หากต้องการเปิด Kotlin CodeGen ใน Room ให้เพิ่มชื่อตัวเลือก
room.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกเครื่องประมวลผลสำหรับ KSP ได้ในเอกสารประกอบ KSP
หมายเหตุ: เมื่อใช้ Kotlin CodeGen โปรดทราบว่ามีข้อจํากัดเพิ่มเติม ระบบไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin CodeGen และควรเขียนใหม่เป็นฟังก์ชันแทน เพื่อหลีกเลี่ยงความเข้าใจผิดที่ว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่เก็บไว้แบบคงที่ ข้อจำกัดอีกอย่างหนึ่งที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทผลลัพธ์ที่เป็นคอลเล็กชันแบบ Nullable ใน Room สำหรับ CodeGen ของ Kotlin อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ ในขณะที่ใน Java ส่วนใหญ่จะละเว้น ตัวอย่างเช่น สมมติว่าคุณมีประเภทผลลัพธ์เป็น `Flow<foo\>` และตารางว่างเปล่า ใน CodeGen ของ Java การดำเนินการนี้จะไม่ก่อให้เกิดปัญหาใดๆ แต่คุณจะได้รับข้อผิดพลาดใน CodeGen ของ Kotlin หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` โดยสมมติว่าระบบจะแสดงผล Null </foo?\></foo\>
การเปลี่ยนแปลง API
- ป้องกันการใช้คอลเล็กชันที่อนุญาตค่า Null ในประเภทผลลัพธ์ของเมธอด DAO ที่ไม่มีความหมาย (I777dc, b/253271782, b/259426907)
- เพิ่ม API สำหรับการสร้างโฟลว์ที่ส่งการเปลี่ยนแปลงเครื่องมือติดตามการลบล้าง API นี้มีประโยชน์ในการสร้างสตรีมที่ต้องตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูล (I8c790, b/252899305)
การแก้ไขข้อบกพร่อง
- ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin codegen แต่ควรเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความเข้าใจผิดว่าค่าพร็อพเพอร์ตี้เป็นแบบคงที่และมีผลลัพธ์ที่เก็บไว้แบบคงที่ (If6a13, b/127483380, b/257967987)
เวอร์ชัน 2.5.2
เวอร์ชัน 2.5.2
21 มิถุนายน 2023
androidx.room:room-*:2.5.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาความเข้ากันไม่ได้กับ kotlinx-metadata-jvm (386d5c)
- แก้ไขปัญหาที่ทำให้ Room แสดงข้อผิดพลาดเมื่อใช้ในการทดสอบ Robolectric (f79bea, b/274924903)
เวอร์ชัน 2.5.1
เวอร์ชัน 2.5.1
22 มีนาคม 2023
androidx.room:room-*:2.5.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- หลีกเลี่ยงการตรวจสอบไดเรกทอรีหลักของฐานข้อมูลใน
FrameworkSQLiteHelper
หากฐานข้อมูลเปิดอยู่ (5de86b8) - ใช้เครื่องหมายถูก
isOpenInternal
เมื่อตรวจสอบว่าฐานข้อมูลเปิดอยู่หรือไม่ (e91fb35) - การจัดการกรณีที่เข้ามาใหม่ใน
acquireTransactionThread()
ของ Room มีประสิทธิภาพมากขึ้นแล้ว (219f98b) ในระหว่างธุรกรรมที่หยุดชั่วคราว Room จะใช้เธรดจากโปรแกรมดำเนินการธุรกรรม เริ่มลูปเหตุการณ์ในเธรดนั้น และส่งการดำเนินการฐานข้อมูลที่หยุดชั่วคราวไปยังเธรดดังกล่าวเพื่อให้การดำเนินการทั้งหมดรวมอยู่ในโคโริวทีนของธุรกรรม โดยปกติแล้ว เทรดเธรดจะแตกต่างจากเทรดเธรดที่เริ่มธุรกรรม แต่บางกรณีก็อาจเหมือนกัน เพื่อจัดการกับกรณีที่มีการเรียกซ้ำดังกล่าว เราได้ปรับโครงสร้างwithTransaction()
เพื่อไม่ให้ใช้งานควบคุมอีกต่อไป และจะเรียกใช้บล็อกธุรกรรมที่ระงับจากภายในrunBlocking
ในชุดข้อความธุรกรรมแทน
เวอร์ชัน 2.5.0
เวอร์ชัน 2.5.0
22 กุมภาพันธ์ 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
และ androidx.room:room-paging-rxjava3:2.5.0
เผยแพร่แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
เวอร์ชัน 2.5.0
11 มกราคม 2023
androidx.room:room-*:2.5.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0
- แหล่งที่มา
room-runtime
ทั้งหมดได้รับการแปลงจาก Java เป็น Kotlin แล้ว โปรดทราบว่าคุณอาจพบปัญหาเกี่ยวกับแหล่งที่มาที่เข้ากันไม่ได้หากโค้ดเป็น Kotlin เนื่องจากการแปลงไลบรารีเป็น Kotlin ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้ของแหล่งที่มาคือในInvalidationTracker
ตอนนี้คุณจะต้องประกาศonInvalidate()
ในObserver
เพื่อให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
นอกจากนี้ ยังมีการเปลี่ยนเมธอด getter บางรายการเป็นพร็อพเพอร์ตี้ที่ต้องใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ในไฟล์ Kotlin โปรดรายงานข้อบกพร่องหากพบปัญหาการไม่เข้ากันได้ที่สำคัญ - เพิ่มคำอธิบายประกอบทางลัดใหม่
@Upsert
ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353) - เราได้เพิ่มรายการใหม่สำหรับการจัดเรียงห้อง
room-paging-rxjava2
,room-paging-rxjava3
และroom-paging-guava
เพื่อรองรับการจัดเรียงห้อง - เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อคลายความกำกวมใน
@MapInfo
(Icc4b5)
เวอร์ชัน 2.5.0-rc01
7 ธันวาคม 2022
androidx.room:room-*:2.5.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-rc01 มีการคอมมิตเหล่านี้
- รุ่นนี้เหมือนกับ
2.5.0-beta02
เวอร์ชัน 2.5.0-beta02
9 พฤศจิกายน 2022
androidx.room:room-*:2.5.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไข API ต่างๆ ที่ใช้อาร์กิวเมนต์การค้นหาจากแบบคงที่ (
Array<Any?>
) เป็นแบบผันแปร (Array<out Any?>
) เพื่อให้ตรงกับลักษณะการทำงานของอาร์เรย์ของ Java (b/253531073)
เวอร์ชัน 2.5.0-beta01
5 ตุลาคม 2022
androidx.room:room-*:2.5.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- จำกัดเวอร์ชันขั้นต่ำที่รองรับ
@Upsert
เป็น API 16 เนื่องจากไม่สามารถระบุข้อจำกัดของคีย์หลักที่ขัดแย้งกันใน API เวอร์ชันเก่า (I5f67f, b/243039555)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ตารางเงาส่งออกไปยังไฟล์สคีมา
.json
อย่างไม่ถูกต้อง ทำให้ไฟล์เสียหาย (I4f83b, b/246751839)
เวอร์ชัน 2.5.0-alpha03
24 สิงหาคม 2022
androidx.room:room-*:2.5.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มคำอธิบายประกอบทางลัดใหม่
@Upsert
ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Room จะแสดง
SQLiteConstraintException
แทนIllegalStateException
ในระหว่างการตรวจสอบข้อจำกัดของคีย์ต่างประเทศในการย้ายข้อมูลอัตโนมัติ (I328dd) - แก้ไขการเปลี่ยนแปลงที่ไม่เข้ากันได้ของแหล่งที่มา Kotlin สำหรับ getter / พร็อพเพอร์ตี้ของ
getOpenHelper
,getQueryExecutor
และgetTransactionExecutor
(Iad0ac)
เวอร์ชัน 2.5.0-alpha02
1 มิถุนายน 2022
androidx.room:room-*:2.5.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- มีการเพิ่มรายการใหม่ใน
room-paging
Artifactroom-paging-rxjava2
,room-paging-rxjava3
และroom-paging-guava
เพื่อรองรับการเรียกห้อง (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
ตอนนี้คุณจะต้องประกาศonInvalidate()
ในObserver
เพื่อให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
- เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อคลายความกำกวมใน
@MapInfo
(Icc4b5) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้
@Ignore
ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (Ifc2fb)
การแก้ไขข้อบกพร่อง
- อัลกอริทึมการแก้ปัญหาคอลัมน์ที่ซ้ำกัน ตอนนี้ Room จะพยายามแก้ไขคอลัมน์ที่คลุมเครือในการค้นหาแบบหลายแผนที่ ซึ่งช่วยให้การรวมกับตารางที่มีตารางชื่อเดียวกันได้รับการแมปกับออบเจ็กต์ข้อมูลผลลัพธ์อย่างถูกต้อง (I4b444, b/201306012, b/212279118)
เวอร์ชัน 2.5.0-alpha01
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.5.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไขปัญหาที่ไม่มีการบังคับใช้การใช้งาน
@IntDef
ของ Room ในแหล่งที่มาของ Kotlin (I75f41, b/217951311) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้
@Query
ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (I0a09b) - แปลง room-common จาก Java เป็น Kotlin (I69c48, b/206858235)
หมายเหตุ: คุณอาจพบปัญหาความเข้ากันไม่ได้ของแหล่งที่มาเนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์ที่ใช้ร่วมกันระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณเขียนด้วย Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องมีส่วนต่อท้าย ".Companion" เมื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้
- แปลงการย้ายข้อมูลห้องจาก Java เป็น Kotlin (I2724b, b/206858622)
- แปลงไฟล์ที่เกี่ยวข้องกับ
paging
ในroom-runtime
จาก Java เป็น Kotlin แล้ว (I82fc8, b/206859668) - เพิ่ม API สําหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลที่ดำเนินการครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)
การแก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในซอร์สโค้ด Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อฟังก์ชันต้นทางขณะจับคู่กับพร็อพเพอร์ตี้เป็น getter/setter (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างจากฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากคุณใช้แอตทริบิวต์
@JvmName
ที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่ากับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการอัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.3
เวอร์ชัน 2.4.3
27 กรกฎาคม 2022
androidx.room:room-*:2.4.3
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ Room ไม่รู้จักฟังก์ชันที่ระงับการทำงานใน Kotlin 1.7 (b/236612358)
เวอร์ชัน 2.4.2
เวอร์ชัน 2.4.2
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.4.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชัน
@Transaction
suspend ของ Dao ที่มีบอดี้ซึ่งสร้างเมธอดอินเทอร์เฟซเริ่มต้นเนื่องจากการคอมไพล์ด้วย-Xjvm-default=all
หรือเทียบเท่า (Ia4ce5) - การแก้ไขข้อบกพร่องที่ Room สร้างขึ้นโค้ดสําหรับเมธอดการค้นหาประเภทผลลัพธ์
Array<ByteArray>
(If086e, b/213789489)
เวอร์ชัน 2.4.1
เวอร์ชัน 2.4.1
12 มกราคม 2022
androidx.room:room-*:2.4.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในซอร์สโค้ด Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อฟังก์ชันต้นทางขณะจับคู่กับพร็อพเพอร์ตี้เป็น getter/setter (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างจากฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากคุณใช้แอตทริบิวต์
@JvmName
ที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่ากับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการอัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
15 ธันวาคม 2021
androidx.room:room-*:2.4.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- การย้ายข้อมูลอัตโนมัติ: ตอนนี้ Room มี API สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ Room ทราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ ให้ใช้พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลจากและไปยังเวอร์ชันใหม่โดยอัตโนมัติ เมื่อ Room ต้องการข้อมูลเพิ่มเติมเกี่ยวกับตารางและการลบหรือเปลี่ยนชื่อคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ@AutoMigration
- Dependency Injection ในการย้ายข้อมูลอัตโนมัติ:
@ProvidedAutoMigrationSpec
เป็น API ใหม่ที่ประกาศว่าจะมีAutoMigrationSpec
ให้ใช้งานขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งช่วยให้เฟรมเวิร์กการฉีดข้อมูล Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องการ Dependency ที่ซับซ้อน - การรองรับตัวช่วยการทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ:
MigrationTestHelper
ของ Room ได้รับการอัปเดตให้รองรับการย้ายข้อมูลอัตโนมัติด้วยการสร้าง API ตัวสร้างคอนสตรัคเตอร์ใหม่ที่รับคลาสฐานข้อมูลที่อยู่ระหว่างการทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติด้วยวิธีเดียวกันโดยอัตโนมัติในระหว่างrunMigrationsAndValidate
- การรองรับการแบ่งหน้าของ Room:
androidx.room:room-paging
เปิดตัวแล้ว ซึ่งรองรับการแบ่งหน้า 3.0 ในตัวสําหรับการค้นหา Room ที่แสดงผลandroidx.paging.PagingSource
- เมธอดการค้นหาเชิงสัมพันธ์: ตอนนี้ Room รองรับเมธอด
@Dao
ประเภทผลลัพธ์แบบ Multimap ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับ ได้แก่Map
,SparseArray
,LongSparseArray
รวมถึงImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guava
เวอร์ชัน 2.4.0-rc01
1 ธันวาคม 2021
androidx.room:room-*:2.4.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-rc01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดต Dependency ของ Room ใน KSP เป็น
1.6.0-1.0.1
เพื่อรองรับ Kotlin 1.6
เวอร์ชัน 2.4.0-beta02
17 พฤศจิกายน 2021
androidx.room:room-*:2.4.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-beta02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เราได้เพิ่มการรองรับ SparseArray และ LongSparseArray ใน @MapInfo (Ic91a2b/138910317)
การแก้ไขข้อบกพร่อง
- เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่พิจารณาข้อมูลเกี่ยวกับความสามารถในการเป็น Null ในประเภท เนื่องจากข้อมูลนี้พร้อมใช้งานใน KSP เท่านั้น ระบบจึงจะเปิดใช้โดยค่าเริ่มต้นใน KSP เท่านั้น หากการวิเคราะห์นี้ทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่งค่า annotate.useNullAwareTypeAnalysis=false ไปยังโปรแกรมประมวลผลคำอธิบายประกอบ หากเป็นเช่นนั้น โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำการแจ้งว่าไม่เหมาะสมนี้ออกในอนาคต เมื่อใช้เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้ เราขอแนะนำให้ระบุเฉพาะ TypeConverter ฝั่งที่รับซึ่งไม่ใช่ค่า Null เนื่องจากเครื่องมือวิเคราะห์ใหม่สามารถรวม TypeConverter เหล่านี้เข้าด้วยกันด้วยการตรวจสอบค่า Null โปรดทราบว่าการดำเนินการนี้จะไม่ส่งผลต่อผู้ใช้ที่ใช้ KAPT หรือ Java เป็นโปรแกรมประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ซึ่งไม่มีข้อมูลเกี่ยวกับความสามารถในการเป็น Null ของประเภท (Ia88f9, b/193437407)
- แก้ไขข้อบกพร่องที่ทำให้ Room คอมไพล์ไม่สำเร็จพร้อมข้อผิดพลาด SQL เมื่อเอนทิตี FTS ประกาศให้ใช้ตัวแยกวิเคราะห์ ICU (I00db9, b/201753224)
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับคอลัมน์ใหม่ที่เพิ่มลงในเอนทิตีที่ฝังระหว่างเวอร์ชัน (I5fcb1b/193798291)
- เราได้แก้ไขปัญหาเกี่ยวกับประเภทผลลัพธ์ของเมธอดการค้นหาเชิงสัมพันธ์ในการค้นหา LEFT JOIN แล้ว การเปลี่ยนแปลงเหล่านี้จะทำให้ในกรณีที่มีการแมปแบบ 1:หลายรายการ คอลเล็กชันที่แสดงผลสำหรับคีย์จะไม่รวมออบเจ็กต์ค่าที่ไม่ถูกต้องหากไม่พบในเคอร์เซอร์ หากไม่พบค่าที่ถูกต้อง ระบบจะแมปคีย์กับคอลเล็กชันว่าง (Id5552b/201946438)
- แก้ปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่สามารถหลีกคีย์เวิร์ด SQLite ในชื่อคอลัมน์ (Idbed4b/197133152)
เวอร์ชัน 2.4.0-beta01
13 ตุลาคม 2021
androidx.room:room-*:2.4.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่เพิ่มคอลัมน์ใหม่เมื่อตารางอื่นในการย้ายข้อมูลอัตโนมัติเดียวกันมีคอลัมน์ใหม่ที่มีชื่อเดียวกันด้วย (Ia5db5, b/200818663)
- การใช้งาน PagingSource ที่สร้างขึ้นโดย room-paging ตอนนี้ใช้
queryExecutor
ที่ส่งผ่านRoomDatabase.Builder
เพื่อให้สามารถลบล้างได้แทนDispatchers.IO
ก่อนหน้านี้ (Iae259)
เวอร์ชัน 2.4.0-alpha05
29 กันยายน 2021
androidx.room:room-*:2.4.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มเครื่องมือแปลงประเภทในตัวสําหรับ UUID (I671e8, b/73132006)
การเปลี่ยนแปลง API
เพิ่มพร็อพเพอร์ตี้ใหม่ลงในคําอธิบายประกอบ TypeConverters เพื่อให้นักพัฒนาซอฟต์แวร์ปิดใช้เครื่องมือแปลง Enum และ UUID ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณสามารถปิดใช้ตัวแปลงสำหรับขอบเขตหนึ่งๆ หรือทั้งฐานข้อมูลได้ ดูรายละเอียดได้ในเอกสารประกอบของ TypeConverter (36ae9e, b/195413406)
การรองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทผลลัพธ์ Multimap ใน DAO ผ่านแอตทริบิวต์
@MapInfo
(I4d704)
@MapInfo
จะจําเป็นเมื่อคอลัมน์คีย์หรือค่าของแผนที่มาจากคอลัมน์เดียว ดูตัวอย่างดังนี้
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- กำหนดให้
room-paging
เป็นอาร์ติแฟกต์ที่จำเป็นเมื่อใช้ Paging3 กับ Room (Ieaffe)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ผลการค้นหาของคําค้นหาแบบหลายแผนที่ไม่ได้จัดเรียงอย่างถูกต้องเมื่อคําค้นหามีคําสั่ง ORDER BY ของคอลัมน์จากคีย์ของแผนที่ (I6b887)
การมีส่วนร่วมจากภายนอก
- เพิ่ม API ใหม่เพื่อระบุลําดับดัชนีใน @Index ขอขอบคุณ Nikita Zhelonkin (I033fc)
เวอร์ชัน 2.4.0-alpha04
21 กรกฎาคม 2021
androidx.room:room-*:2.4.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room รองรับวิธีการ
@Dao
ประเภทผลลัพธ์แบบ Multimap ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับคือMap
พร้อมด้วยImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guavaตัวอย่างการค้นหา Multimap มีดังนี้
แผนที่ความสัมพันธ์แบบ 1:1
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
แผนที่ความสัมพันธ์แบบ 1: หลายรายการ (มัลติแมปมาตรฐาน)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
นอกจากนี้ คุณยังรวมผลลัพธ์ของมัลติแมปไว้ในประเภทผลลัพธ์แบบแอสซิงค์ที่รองรับ เช่น
LiveData
,Observable
ของ Rx หรือFlow
ของโคโริวทีนได้ด้วย
การเรียกบุคคลในห้องพัก
androidx.room:room-paging
เปิดตัวแล้ว โดยรองรับการแบ่งหน้า 3.0 ในตัวสําหรับการค้นหา Room ที่แสดงผลandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
อาร์ติแฟกต์นี้จะแทนที่การใช้งาน
androidx.paging.PagingSource
ที่ Room สร้างขึ้นด้วยการใช้งานที่สร้างขึ้นบน Paging 3.0 API การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์ต่างออกไป ดังนั้นคีย์ใดก็ตามที่ระบุให้กับ PagingSource ของ Room ด้วยตนเองจะต้องคำนึงถึงการเปลี่ยนแปลงลักษณะการทำงานนี้ด้วย ซึ่งรวมถึง initialKey ที่ส่งผ่านตัวสร้างของ Pager หน้าเว็บจะเริ่มโหลดจากKey
โดยที่Key
เป็นรายการแรกที่โหลด ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งถือว่าLoadParams.Refresh.Key
เป็นตําแหน่งการเลื่อนของผู้ใช้ และโหลดรายการทั้งก่อนและหลังคีย์คุณเลือกใช้รายการนี้หรือไม่ก็ได้ และการเลือกไม่ใช้จะกลับไปใช้การรองรับการเรียกเลขหมาย 3.0 ที่มีอยู่ซึ่งเปิดตัวใน Room 2.3 อย่างไรก็ตาม รายการนี้จะเป็นรายการที่ต้องระบุในรุ่นต่อๆ ไปสำหรับผู้ที่ใช้ Room ที่มีการแบ่งหน้า 3.0 หากต้องการเลือกใช้ ให้เพิ่มอาร์ติแฟกต์การแบ่งหน้าห้องใหม่ลงในคลาสพาธ หากใช้ Gradle ให้เพิ่มข้อมูลโค้ดต่อไปนี้ลงใน build.gradle
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับการละเมิดคีย์ต่างประเทศ (b/190113935)
เวอร์ชัน 2.4.0-alpha03
16 มิถุนายน 2021
androidx.room:room-*:2.4.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- อัปเดต
MigrationTestHelper
ของ Room ให้รองรับการย้ายข้อมูลอัตโนมัติโดยระบุ API ตัวสร้างใหม่ซึ่งรับคลาสฐานข้อมูลที่อยู่ระหว่างการทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติด้วยวิธีเดียวกันโดยอัตโนมัติในระหว่างrunMigrationsAndValidate
การแก้ไขข้อบกพร่อง
แก้ไขปัญหาเกี่ยวกับไลบรารี SQLite เนทีฟของ Room เพื่อรองรับชิป M1 ของ Apple (b/174695268
แก้ไขปัญหาที่ Room ไม่แสดงข้อผิดพลาดเมื่อประเภทผลลัพธ์ของฟังก์ชัน @Transaction เป็น Flow (I56ddd, b/190075899)
แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติเกี่ยวกับดัชนี b/177673291
การอัปเดตทรัพยากร Dependency
- ตอนนี้การรองรับ KSP ของ Room จะขึ้นอยู่กับ KSP
1.5.10-1.0.0-beta01
(1ecb11, b/160322705)
เวอร์ชัน 2.4.0-alpha02
5 พฤษภาคม 2021
androidx.room:room-*:2.4.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@ProvidedAutoMigrationSpec
เป็น API ใหม่ที่ประกาศว่าจะมีAutoMigrationSpec
ให้บริการขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งช่วยให้เฟรมเวิร์กการฉีดข้อมูล Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องการ Dependency ที่ซับซ้อน
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการย้ายข้อมูลอัตโนมัติที่ระบบไม่สร้าง
@DatabaseView
ขึ้นมาใหม่อย่างถูกต้อง
การมีส่วนร่วมจากภายนอก
- แก้ไขปัญหาใน
JournalMode.TRUNCATE
ของ Room ที่บางครั้งมีการเรียกใช้InvalidationTracker
Callback อย่างไม่ถูกต้อง สายเรียกเข้าล่าช้า หรือไม่เรียกให้แสดงเลย ขอขอบคุณUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
เวอร์ชัน 2.4.0-alpha01
21 เมษายน 2021
androidx.room:room-*:2.4.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การย้ายข้อมูลอัตโนมัติ: ตอนนี้ Room มี API สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ Room ทราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ ให้ใช้พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลจากและไปยังเวอร์ชันใหม่โดยอัตโนมัติ เมื่อ Room ต้องการข้อมูลเพิ่มเติมเกี่ยวกับตารางและการลบหรือเปลี่ยนชื่อคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ@AutoMigration
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
defaultValue
ที่มีวงเล็บปีกกาเกินได้รับการตรวจสอบอย่างไม่ถูกต้องโดยการตรวจสอบสคีมาของ Room b/182284899
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
21 เมษายน 2021
androidx.room:room-*:2.3.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การรองรับ Enum ในตัว: ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็นสตริงและในทางกลับกันโดยค่าเริ่มต้นหากไม่ได้ระบุไว้ หากตัวแปลงประเภทสำหรับ Enum มีอยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงประเภทนั้นมากกว่าตัวแปลงประเภทเริ่มต้น
- การเรียกกลับการค้นหา: ตอนนี้ Room มี API การเรียกกลับทั่วไป RoomDatabase.QueryCallback สำหรับเวลาที่การค้นหาใกล้จะดำเนินการ ซึ่งจะมีประโยชน์สำหรับการบันทึกในบิลด์แก้ไขข้อบกพร่อง คุณสามารถตั้งค่าการโทรกลับผ่าน
RoomDatabase.Builder#setQueryCallback()
- การปรับปรุงที่รวมไว้ล่วงหน้า: ตอนนี้ Room มี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่รวมไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะรองรับกรณีที่ฐานข้อมูลของแพ็กเกจล่วงหน้าเป็นไฟล์ GZIP
- ตัวแปลงประเภทที่ระบุ: ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของตัวแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นใช้งานได้ หากต้องการทําเครื่องหมายตัวแปลงประเภทที่จะส่งไปยัง Room ให้ใช้คําอธิบายประกอบใหม่ @ProvidedTypeConverter
- การรองรับ RxJava3: ตอนนี้ Room รองรับประเภท RxJava3 แล้ว คุณสามารถประกาศเมธอด DAO ที่มีประเภทผลลัพธ์เป็น Flowable, Single, Maybe และ Completable ได้เช่นเดียวกับ RxJava2 นอกจากนี้ ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่ให้ใช้งานเพื่อรองรับ RxJava3 - การรองรับการแบ่งหน้า 3.0: ตอนนี้ Room จะรองรับการสร้างการใช้งานสําหรับเมธอดที่มีคําอธิบายประกอบ
@Query
ซึ่งมีประเภทผลลัพธ์เป็นandroidx.paging.PagingSource
เวอร์ชัน 2.3.0-rc01
24 มีนาคม 2021
androidx.room:room-*:2.3.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ใช้การค้นหา Coroutine Flow ที่ Room สร้างขึ้นในบล็อก
withTransaction
ที่ระงับไม่ได้ (I797bf)
เวอร์ชัน 2.3.0-beta03
10 มีนาคม 2021
androidx.room:room-*:2.3.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับการคอมไพล์แบบเพิ่มทีละน้อยสำหรับ KSP (I031c1, b/176453350)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การสร้าง PagingSource ในเทรดหลักอาจทริกเกอร์ ANR (I42b74, b/181221318)
- แก้ไขระดับการแชร์ของ
@ExperimentalRoomApi
เป็นสาธารณะแทนที่จะเป็นแพ็กเกจส่วนตัว (b/181356119)
การมีส่วนร่วมจากภายนอก
- อนุญาตให้ Room ยอมรับประเภทผลลัพธ์ POJO ในเมธอด DAO ที่มีการกำกับหมายด้วย
@Query
เมื่อมีการกำกับหมายด้วย@SkipQueryVerification
ด้วย Room จะพยายามอย่างเต็มที่เพื่อแปลงผลลัพธ์ของการค้นหาเป็นประเภทผลลัพธ์ POJO ในลักษณะเดียวกับที่ดำเนินการกับ@RawQuery
เมธอด DAO ที่มีคำอธิบายประกอบ ขอขอบคุณ "Markus Riegel | hey@marcorei.com" (I45acb)
เวอร์ชัน 2.3.0-beta02
18 กุมภาพันธ์ 2021
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
27 มกราคม 2021
androidx.room:room-*:2.3.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ฐานข้อมูลที่ปิดอัตโนมัติ: ตอนนี้ Room สามารถปิดฐานข้อมูลที่ไม่มีการเข้าถึงหลังจากผ่านไปตามระยะเวลาที่กำหนด นี่เป็นฟีเจอร์ทดลองและสามารถเปิดใช้ได้โดยการเรียกใช้
RoomDatabase.Builder#setAutoCloseTimeout()
ฟีเจอร์นี้มีประโยชน์สําหรับแอปพลิเคชันที่มีฐานข้อมูลหลายแห่ง
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่เมธอด Dao ที่มีเมธอด
@Update
หรือ@Delete
หลายรายการที่มีกลยุทธ์การขัดแย้งกันจะสร้างโค้ดที่มีกลยุทธ์เพียงกลยุทธ์เดียว ซึ่งจะละเว้นกลยุทธ์ที่กําหนดไว้ (/I0b90d, b/176138543)
เวอร์ชัน 2.3.0-alpha04
16 ธันวาคม 2020
androidx.room:room-*:2.3.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Room มี API เรียกกลับทั่วไป
RoomDatabase.QueryCallback
สำหรับเวลาที่ระบบกำลังจะดำเนินการค้นหา ซึ่งอาจมีประโยชน์สำหรับการบันทึกในบิลด์แก้ไขข้อบกพร่อง คุณสามารถตั้งค่าการโทรกลับผ่านRoomDatabase.Builder#setQueryCallback()
(Iaa513, b/174478034, b/74877608) - ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็นสตริงและในทางกลับกันโดยค่าเริ่มต้นหากไม่ได้ระบุไว้ หากตัวแปลงประเภทสำหรับ Enum มีอยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงประเภทนั้นมากกว่าตัวแปลงประเภทเริ่มต้น (b/73132006)
ปัญหาที่ทราบ
- หากมีตัวแปลงประเภทแบบ 1 ทิศทางสําหรับการอ่านอยู่แล้วสําหรับ Enum นั้น Room อาจใช้ตัวแปลงสตริงเป็น Enum ในตัวโดยไม่ตั้งใจ ซึ่งอาจไม่ต้องการ นี่เป็นปัญหาที่ทราบอยู่แล้วและสามารถแก้ไขได้โดยการเปลี่ยนเป็นเครื่องมือแปลงแบบ 2 ทาง ดูที่ b/175707691
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)
- แก้ไขปัญหาเกี่ยวกับ Room ที่พบคลาสที่สร้างขึ้นเมื่อมีการใช้ตัวโหลดคลาสหลายรายการ ขอขอบคุณที่แก้ไข ‘Serendipity | 892449346@qq.com’ (b/170141113)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่อ
@Dao
ของ Kotlin มีคลาสพื้นฐานที่เป็นแบบทั่วไปใน JVM (b/160258066)
การมีส่วนร่วมจากภายนอก
- ตอนนี้ Room จะเริ่มต้นด้วยการใช้
beginTransactionNonExclusive
หากเปิดใช้โหมด WAL และ API เป็น 16 ขึ้นไป ขอขอบคุณ "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
เวอร์ชัน 2.3.0-alpha03
14 ตุลาคม 2020
androidx.room:room-*:2.3.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของเครื่องมือแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทําเครื่องหมายตัวแปลงประเภทที่จะส่งไปยัง Room ให้ใช้คำอธิบายประกอบใหม่
@ProvidedTypeConverter
ขอขอบคุณ "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210)ตอนนี้ Room มี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่แพ็กเกจไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะรองรับกรณีที่ฐานข้อมูลของแพ็กเกจล่วงหน้าเป็นไฟล์ GZIP ขอขอบคุณ ‘Ahmed El-Helw ahmedre@gmail.com’ (3e6792, b/146911060)
การเปลี่ยนแปลง API
เพิ่มเป้าหมายที่ขาดหายไปลงในคําอธิบายประกอบ
@ForeignKey
ซึ่งป้องกันไม่ให้มีการใช้เป้าหมายนั้นนอกคําอธิบายประกอบ@Entity
(Iced1e)ฟิลด์
mCallbacks
ในRoomDatabase.java
ซ่อนอยู่ (d576cb, b/76109329)
การแก้ไขข้อบกพร่อง
อัปเดตเอกสารประกอบ TypeConverters เพื่อชี้แจงว่า TypeConverters ใช้เพื่อแปลงคอลัมน์ / ฟิลด์เท่านั้น ไม่สามารถแปลงแถวได้ (I07c56, b/77307836)
อัปเดต DaoProcessor เพื่อแก้ไขข้อผิดพลาดเกี่ยวกับคอมไพเลอร์ใน Dao ที่มีซุปเปอร์ไทป์ทั่วไปที่มี "พรอมิเตอ" ของ Kotlin (Ice6bb, b/160258066)
อัปเดตเอกสารประกอบเกี่ยวกับเมธอดเพิ่ม/นำออบเซอร์เวอร์ออกเพื่อชี้แจงการแยกชุดข้อความ (Ifd1d9, b/153948821)
แก้ไขปัญหาที่ Room ตรวจสอบตาราง FTS ที่ประกาศคอลัมน์ rowid ไม่ถูกต้อง (d62ebc, b/145858914)
การมีส่วนร่วมจากภายนอก
แก้ไขปัญหาเกี่ยวกับภาษาตุรกี (5746e3) b/68159494
แทนที่
ConcurrentHashMap
ภายในRoomDatabase
ด้วยCollections.synchronizedMap()
เพื่อหลีกเลี่ยงปัญหาใน Android Lollipop (d1cfc7, b/162431855)เพิ่มการเรียกกลับ onOpenPrepackagedDatabase เมื่อคัดลอก DB ที่บรรจุไว้ล่วงหน้า (I1ba74, b/148934423)
เวอร์ชัน 2.3.0-alpha02
22 กรกฎาคม 2020
androidx.room:room-*:2.3.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การรองรับ RxJava3: ตอนนี้ Room รองรับประเภท RxJava3 แล้ว คุณสามารถประกาศเมธอด DAO ที่มีประเภทผลลัพธ์เป็น Flowable, Single, Maybe และ Completable ได้เช่นเดียวกับ RxJava2 นอกจากนี้ ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่ให้ใช้งานเพื่อรองรับ RxJava3 (b/152427884)
การเปลี่ยนแปลง API
- ขณะนี้ระบบรองรับการประกาศ
@TypeConverter
ในคลาสออบเจ็กต์ Kotlin แล้ว (b/151110764) - ตอนนี้ตัวเลือกการประมวลผลคำอธิบายประกอบแบบเพิ่มของห้องจะเปิดอยู่โดยค่าเริ่มต้น (b/112110217)
เวอร์ชัน 2.3.0-alpha01
10 มิถุนายน 2020
androidx.room:room-*:2.3.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การรองรับการแบ่งหน้า 3.0: ตอนนี้ Room จะรองรับการสร้างการใช้งานสำหรับ
@Query
เมธอดที่มีคำอธิบายประกอบซึ่งมีประเภทผลลัพธ์เป็นandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
การเปลี่ยนแปลง API
@RewriteQueriesToDropUnusedColumns
คือการกำกับเนื้อหาใหม่ที่สะดวกซึ่งทําให้ Room เขียนโปรเจ็กชัน "*" ใหม่ในการค้นหาเพื่อนำคอลัมน์ที่ไม่ได้ใช้ในผลลัพธ์ออก- ตัวเลือกโปรเซสเซอร์
room.expandProjection
เลิกใช้งานแล้ว ใช้@RewriteQueriesToDropUnusedColumns
แทนคำค้นหาสำหรับการเพิ่มประสิทธิภาพห้องด้วยการแสดงผลด้วยดาว โปรดทราบว่า@RewriteQueriesToDropUnusedColumns
ไม่ได้ใช้แทนวิธีแก้ปัญหาความขัดแย้งของคอลัมน์room.expandProjection
ที่เสนอสำหรับประเภทผลลัพธ์ที่มีฟิลด์@Embedded
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ตรวจหาเวอร์ชัน JDK ที่ใช้เพื่อเปิดใช้โปรแกรมประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการไม่ถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
- ตอนนี้ Room จะฝัง ANTLR ที่ต้องการใช้กับโปรแกรมประมวลผลคำอธิบายประกอบเพื่อหลีกเลี่ยงข้อขัดแย้งของเวอร์ชันกับโปรแกรมประมวลผลอื่นๆ ที่ใช้ ANTLR ด้วย (b/150106190)
เวอร์ชัน 2.2.6
เวอร์ชัน 2.2.6
16 ธันวาคม 2020
androidx.room:room-*:2.2.6
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)
เวอร์ชัน 2.2.5
เวอร์ชัน 2.2.5
18 มีนาคม 2020
androidx.room:room-*:2.2.5
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- กำหนดให้
MultiInstanceInvalidationService
เป็น directBootAware ขอขอบคุณ "Mygod contact-git@mygod.be" (b/148240967) - แก้ไขข้อบกพร่องที่ทําให้ระบบขัดข้องเมื่อเปิดใช้การลบล้างอินสแตนซ์หลายรายการและฐานข้อมูลมีเอนทิตี FTS (b/148969394)
- แก้ไขปัญหาเมื่อโหลดไลบรารีแบบเนทีฟของ SQLite ในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ซึ่งจะทำให้คอมไพเลอร์ขัดข้องเนื่องจากการคอมไพล์แบบขนาน (b/146217083)
เวอร์ชัน 2.2.4
เวอร์ชัน 2.2.4
19 กุมภาพันธ์ 2020
ปล่อย androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
และ androidx.room:room-testing:2.2.4
เวอร์ชัน 2.2.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการระงับธุรกรรมที่อาจเกิดข้อขัดข้องหากมีการยกเลิก coroutine อย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (b/148181325)
- แก้ปัญหาการใช้ @Generated อย่างไม่ถูกต้องเมื่อสร้างด้วย JDK 9 (b/146538330)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่ออินเทอร์เฟซ DAO ใน Kotlin มีฟังก์ชันที่เฉพาะเจาะจง (b/146825845)
เวอร์ชัน 2.2.3
เวอร์ชัน 2.2.3
18 ธันวาคม 2019
androidx.room:room-*:2.2.3
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ตรวจสอบฐานข้อมูลที่ไม่เคยมีการย้ายข้อมูลและมีแฮชเดิมที่มีดัชนีในสคีมาไม่สำเร็จ (b/139306173)
เวอร์ชัน 2.2.2
เวอร์ชัน 2.2.2
20 พฤศจิกายน 2019
androidx.room:room-*:2.2.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การเก็บรวบรวมความสัมพันธ์แบบ 1:1 ที่มีแถวมากกว่า 999 แถวจะทำให้ Room แสดงผลรายการที่เกี่ยวข้องเป็น Null (b/143105450)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
23 ตุลาคม 2019
androidx.room:room-*:2.2.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.1 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะเตือนอย่างไม่ถูกต้องเกี่ยวกับ
CURSOR_MISMATCH
เมื่อเปิดตัวเลือกคอมไพเลอร์expandProjection
(b/140759491) - เพิ่มกลไกการลองอีกครั้งเพื่อจัดการกับไลบรารีเนทีฟที่ขาดหายไปซึ่งใช้เพื่อยืนยันการค้นหาระหว่างเวลาคอมไพล์
เวอร์ชัน 2.2.0
เวอร์ชัน 2.2.0
9 ตุลาคม 2019
androidx.room:room-*:2.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0
- ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน
RoomDatabase.Builder
พร้อมใช้งานในการสร้างRoomDatabase
จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้วcreateFromAsset()
สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วนcreateFromFile()
สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นระบบจะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดอีกครั้ง b/62185732 - ค่าเริ่มต้นของสคีมา: ตอนนี้
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772 - ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคําอธิบายประกอบใหม่@Junction
ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917 - ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ต้องเป็นประเภทList
หรือSet
ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตบางส่วน b/127549506 - Coroutines Flow: ตอนนี้เมธอด
@Query
DAO จะเป็นประเภทผลลัพธ์Flow<T>
ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็นChannel<T>
เป็นข้อผิดพลาด Room แนะนำให้คุณใช้Flow
แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลงFlow
เป็นChannel
แทน b/130428884 - ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217 - การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้
room.expandProjection
ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")
ซึ่งแสดงผลลัพธ์ POJO ชื่อSongIdAndTitle
ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็นSELECT id, title FROM Song
เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCH
คำเตือนที่แสดงเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง
เวอร์ชัน 2.2.0-rc01
5 กันยายน 2019
androidx.room:room:2.2.0-rc01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ไม่มีการเปลี่ยนแปลงที่เผยแพร่ต่อสาธารณะนับตั้งแต่ห้อง 2.2.0-beta01
เวอร์ชัน 2.2.0-beta01
22 สิงหาคม 2019
androidx.room:room-*:2.2.0-beta01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การค้นหา Coroutine Flow จะหยุดส่งค่าใหม่อีกครั้งหลังจากผ่านไประยะหนึ่ง (b/139175786)
- แก้ไขข้อบกพร่องที่ Room ไม่ยอมรับรหัสแฮชสคีมาเดิมขณะเปิดฐานข้อมูลที่ไม่มีการย้ายข้อมูลตั้งแต่ Room 1.0 ซึ่งทําให้รันไทม์ขัดข้องเนื่องจากสคีมาไม่ถูกต้อง (b/139306173)
เวอร์ชัน 2.2.0-alpha02
7 สิงหาคม 2019
androidx.room:room-*:2.2.0-alpha02
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- Coroutines Flow: ตอนนี้เมธอด
@Query
DAO จะเป็นประเภทผลลัพธ์Flow<T>
ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็นChannel<T>
เป็นข้อผิดพลาด Room แนะนำให้คุณใช้Flow
แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลงFlow
เป็นChannel
แทน b/130428884 - การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้
room.expandProjection
ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")
ซึ่งแสดงผลลัพธ์ POJO ชื่อSongIdAndTitle
ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็นSELECT id, title FROM Song
เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCH
คำเตือนที่แสดงเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง onDestructiveMigrate
เป็น API การเรียกกลับใหม่ที่เพิ่มลงในRoomDatabase.Callback
สำหรับกรณีที่ Room ย้ายข้อมูลฐานข้อมูลอย่างทำลายล้าง b/79962330
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องโดยใช้เมธอดเป็นฟิลด์ b/136194628
- แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker แสดง NPE ในกระบวนการที่ 2 เมื่อเปิดใช้การลบล้างอินสแตนซ์หลายรายการและบริการการลบล้างถูกหยุดทำงาน b/137454915
- แก้ไขข้อบกพร่องที่ Room ระบุประเภทผลลัพธ์ของฟังก์ชันที่ระงับซึ่งรับช่วงมาและมีคำอธิบายประกอบด้วย
@RawQuery
ไม่ถูกต้อง b/137878827 - อัปเดตโค้ดที่สร้างขึ้นสำหรับ
@Relation
เมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB เพื่อใช้ByteBuffer
ที่เปรียบเทียบได้ b/137881998 - แก้ไขข้อบกพร่องที่ Room จะบ่นว่าไม่มีตัวตั้งค่าใน POJO ที่ใช้เป็นพารามิเตอร์เอนทิตีบางส่วนของ
@Insert
,@Update
และ@Delete
b/138664463 - แก้ไขข้อบกพร่องที่ Room จะบ่นว่าไม่มี getter และ setter สําหรับคอลัมน์ที่ละเว้นผ่าน
@Entity
เมื่อใช้คลาสเอนทิตีในเมธอด DAO บางรายการ b/138238182 - แก้ไขข้อบกพร่องที่ Room แปลงอาร์กิวเมนต์การเชื่อมโยงที่มีชื่อเป็นอาร์กิวเมนต์ตำแหน่งอย่างไม่ถูกต้อง ซึ่งทำให้เกิดข้อยกเว้นรันไทม์เมื่อดำเนินการค้นหาด้วยพารามิเตอร์ที่ใช้ซ้ำ b/137254857
เวอร์ชัน 2.2.0-alpha01
10 กรกฎาคม 2019
ฟีเจอร์ใหม่
- ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน
RoomDatabase.Builder
พร้อมใช้งานในการสร้างRoomDatabase
จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้วcreateFromAsset()
สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วนcreateFromFile()
สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นระบบจะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดอีกครั้ง b/62185732 - ค่าเริ่มต้นของสคีมา: ตอนนี้
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772หมายเหตุ: หากสคีมาฐานข้อมูลมีค่าเริ่มต้นอยู่แล้ว เช่น ค่าที่เพิ่มผ่าน
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
และคุณตัดสินใจที่จะกําหนดค่าเริ่มต้นผ่าน@ColumnInfo
ลงในคอลัมน์เดียวกัน คุณอาจต้องทำการย้ายข้อมูลเพื่อตรวจสอบค่าเริ่มต้นที่ไม่ได้พิจารณา ดูข้อมูลเพิ่มเติมได้ที่การย้ายข้อมูลห้องพัก - ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคําอธิบายประกอบใหม่@Junction
ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917 - ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ต้องเป็นประเภทList
หรือSet
ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตบางส่วน b/127549506 - ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217
การแก้ไขข้อบกพร่อง
- Room จะไม่ส่งต่อ
EmptySetResultException
ไปยังตัวแฮนเดิลข้อผิดพลาดส่วนกลางอีกต่อไปเมื่อสตรีม Rx ของคําค้นหาถูกทิ้งไปก่อนที่การค้นหาจะเสร็จสมบูรณ์ b/130257475 - แก้ไขข้อบกพร่องที่ Room จะแสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อฟังก์ชัน DAO แบบระงับที่มีคำอธิบายประกอบด้วย
@RawQuery
ไม่มีประเภทผลลัพธ์ b/134303897 - Room จะไม่สร้างอะแดปเตอร์ DAO ที่มีประเภทข้อมูลดิบอีกต่อไป b/135747255
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
13 มิถุนายน 2019
Room 2.1.0 เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.0.0
- FTS: ตอนนี้ Room รองรับเอนทิตีที่มีการแมปตาราง FTS3 หรือ FTS4 แล้ว ตอนนี้ชั้นเรียนที่มีคำอธิบายประกอบ
@Entity
สามารถใส่คำอธิบายประกอบเพิ่มเติมด้วย@Fts3
หรือ@Fts4
เพื่อประกาศชั้นเรียนที่มีตารางการค้นหาข้อความทั้งหมดที่มีการแมปได้แล้ว ตัวเลือก FTS สำหรับการปรับเปลี่ยนเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ - มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคําค้นหาที่เก็บไว้ หรือที่เรียกว่ามุมมอง โดยใช้การกำกับเนื้อหา
@DatabaseView
- Couroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันที่ระงับได้แล้ว ใส่
room-ktx
ไว้ใน Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ ktx ยังมีฟังก์ชันส่วนขยายRoomDatabase.withTransaction
สำหรับการดำเนินการธุรกรรมฐานข้อมูลภายในโคโริวทีนด้วย - ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคําอธิบายประกอบของ Room
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดนามธรรมของคลาสที่มีคําอธิบายประกอบค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้จะต้องมี@CopyAnnotations
ด้วยเพื่อให้ Room เข้าใจอย่างถูกต้อง - การรองรับการทำงานแบบแอ็กซิงทีมเพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รวมถึง@Query
ที่มีคำสั่งINSERT
,DELETE
หรือUPDATE
รองรับประเภทผลลัพธ์ RxCompletable
,Single
,Maybe
และประเภทผลลัพธ์ListenableFuture
ของ Guava นอกจากนี้ยังเป็นฟังก์ชันที่ระงับได้อีกด้วย enableMultiInstanceInvalidation
เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อเปิดใช้การทำให้โมฆะในอินสแตนซ์ RoomDatabase หลายรายการที่ใช้ไฟล์ฐานข้อมูลเดียวกันfallbackToDestructiveMigrationOnDowngrade
เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อสร้างฐานข้อมูลใหม่โดยอัตโนมัติหากมีการดาวน์เกรดignoredColumns
เป็น API ใหม่ในคำอธิบายประกอบ@Entity
ที่ใช้แสดงรายการช่องที่ละเว้นตามชื่อได้- ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin อย่างถูกต้องในคลาสข้อมูล ซึ่งทำให้ไม่ต้องประกาศพร็อพเพอร์ตี้เป็น
vars
เวอร์ชัน 2.1.0-rc01
29 พฤษภาคม 2019
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการเริ่มต้น Room ที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า temp_store ที่ตั้งค่าไว้แล้ว b/132602198
- แก้ไขคำเตือนเกี่ยวกับการใช้เครื่องหมายคำพูดคู่สำหรับผู้ใช้ที่มี SQLite 3.27.0 ขึ้นไป b/131712640
- แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker ขัดข้องเมื่อการตรวจสอบการลบล้างหลายรายการเกิดขึ้นพร้อมกัน b/133457594
เวอร์ชัน 2.1.0-beta01
7 พฤษภาคม 2019
androidx.room 2.1.0-beta01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha07 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
เวอร์ชัน 2.1.0-alpha07
25 เมษายน 2019
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ฟังก์ชันส่วนขยาย
RoomDatabase.withTransaction
มีการเปลี่ยนแปลงเพื่อไม่ให้รับบล็อกฟังก์ชันที่มีCoroutineScope
เป็นผู้รับอีกต่อไป ซึ่งจะช่วยป้องกันไม่ให้ข้ามcoroutineScope { }
wrapper เพิ่มเติมที่จําเป็นต่อการดําเนินการในบล็อกธุรกรรมพร้อมกัน
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จับคู่ TypeConverter สำหรับฟังก์ชัน DAO ของ Kotlin ที่มีพารามิเตอร์ประเภท Collection ไม่ได้ b/122066791
เวอร์ชัน 2.1.0-alpha06
22 มีนาคม 2019
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ตอนนี้การค้นหาธุรกรรมแบบไม่พร้อมกันได้รับการจัดรูปแบบให้เป็นอนุกรมเพื่อให้ Room ไม่ได้ใช้เธรดมากกว่า 1 เธรดในการดำเนินการธุรกรรมฐานข้อมูล
เพิ่ม
RoomDatabase.Builder.setTransactionExecutor(Executor)
เพื่ออนุญาตให้กําหนดค่าผู้ดำเนินการเพื่อใช้กับธุรกรรม RoomDatabase.runInTransaction(Callable)
จะไม่รวมข้อยกเว้นที่ตรวจสอบแล้วไว้ใน RuntimeException อีกต่อไป b/128623748
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่เครื่องมือติดตามการลบล้างจะหยุดสังเกตตารางเนื้อหาหากเพิ่มเครื่องมือสังเกตการณ์สําหรับทั้งตารางเนื้อหาและตาราง FTS ของเนื้อหาภายนอก b/128508917
- อัปเดตไวยากรณ์ SQLite ของ Room ให้ตรงกับ SQLite 3.24.0 b/110883668
เวอร์ชัน 2.1.0-alpha05
13 มีนาคม 2019
ฟีเจอร์ใหม่
- ฟังก์ชันส่วนขยาย
RoomDatabase.withTransaction
ช่วยให้คุณทำธุรกรรมฐานข้อมูลภายในโคโริวทีนได้อย่างปลอดภัย ฟังก์ชันของส่วนขยายของ Room พร้อมการรองรับ coroutines มีอยู่ในอาร์ติแฟกต์room-ktx
- ตอนนี้เมธอด DAO ที่ไม่เป็นแบบนามธรรมซึ่งมีคำอธิบายประกอบด้วย
@Transaction
จะเป็นฟังก์ชันที่ระงับได้ b/120241587
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- เปลี่ยนชื่ออาร์ติแฟกต์
room-coroutines
เป็นroom-ktx
ตามการตั้งชื่อเดียวกับอาร์ติแฟกต์ androidx อื่นๆ - เราได้เลิกใช้งาน
beginTransaction
,setTransactionSuccessful
และendTransaction
ในRoomDatabase
แล้วเพื่อหันมาใช้runInTransaction
และฟังก์ชันส่วนขยายroom-ktx
withTransaction
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ระบบจะทิ้งอาร์กิวเมนต์ตัวแยกวิเคราะห์หากตัวแยกวิเคราะห์ที่ใช้คือ SIMPLE b/125427014
- แก้ไขข้อบกพร่องที่ Room ไม่สามารถระบุฟังก์ชันที่ระงับไว้อย่างถูกต้องซึ่งมีพารามิเตอร์ที่เป็นคลาสภายใน b/123767877
- แก้ไขข้อบกพร่องที่เมธอด
@Query
DAO ที่เลื่อนเวลาไว้ซึ่งมีคำสั่งINSERT
,UPDATE
หรือDELETE
เตรียมการค้นหาในเธรดหลักอย่างกระตือรือร้น b/123695593 - แก้ไขข้อบกพร่องต่างๆ ที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับฟังก์ชันการระงับบางอย่าง b/123466702 และ b/123457323
- แก้ไขข้อบกพร่องที่การระงับการใช้เมธอดที่เลิกใช้งานในโค้ดที่สร้างขึ้นไม่ถูกต้อง b/117602586
- อัปเดตการพึ่งพา Room ของ androidx.sqlite เป็น 1.0.2 ซึ่งมีวิธีแก้ไขการจัดการฐานข้อมูลที่เสียหายอย่างถูกต้อง b/124476912
ปัญหาที่ทราบ
- Room 2.1.0-alpha05 ขึ้นอยู่กับอาร์ติแฟกต์
kotlinx-metadata-jvm
ซึ่งขณะนี้ไม่พร้อมใช้งานใน Maven Central (KT-27991) Dependency นี้แก้ไขได้โดยการเพิ่มmaven { url "https://kotlin.bintray.com/kotlinx/" }
ไปยังที่เก็บโปรเจ็กต์
เวอร์ชัน 2.1.0-alpha04
25 มกราคม 2019
ฟีเจอร์ใหม่
- ตอนนี้เมธอด DAO ที่มีการกำกับเนื้อหาด้วย
@Query
ซึ่งมีคำสั่งINSERT
,UPDATE
หรือDELETE
จะแสดงผลประเภทแบบ asyncSingle
,Mayble
,Completable
และListenableFuture
ได้แล้ว นอกจากนี้ ยังสามารถระงับฟังก์ชันการทำงานได้ด้วย b/120227284
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ตอนนี้ Room จะแสดงข้อผิดพลาดหากเมธอด DAO ที่ไม่เป็นแบบนามธรรมซึ่งมีคำอธิบายประกอบด้วย
@Transaction
แสดงผลประเภทแบบแอ็กซิง เช่นSingle
,Mayble
,Completable
,LiveData
หรือListenableFuture
เนื่องจากธุรกรรมถูกจำกัดอยู่ในชุดข้อความ ปัจจุบัน Room จึงไม่สามารถเริ่มและสิ้นสุดธุรกรรมเกี่ยวกับฟังก์ชันที่อาจทำการค้นหาในชุดข้อความอื่นได้ b/120109336 OnConflictStrategy.FAIL
และOnConflictStrategy.ROLLBACK
ได้รับการ@Deprecated
เนื่องจากไม่ทํางานตามที่ตั้งใจไว้กับการเชื่อมโยง SQLite ปัจจุบันของ Android b/117266738
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ไม่ได้ใช้ TypeConverter ของประเภทผลลัพธ์อย่างถูกต้องหากเมธอด DAO เป็นฟังก์ชันที่ระงับ b/122988159
- แก้ไขข้อบกพร่องที่ Room จะระบุฟังก์ชันการระงับที่รับช่วงมาอย่างไม่ถูกต้องว่าไม่มีการระงับ b/122902595
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่อช่อง
@Embedded
อยู่ในคลาสหลักและใช้ในคลาสย่อยหลายคลาส b/121099048 - แก้ไขปัญหาที่ฐานข้อมูลจะหยุดทำงานเมื่อเรียกใช้ฟังก์ชัน DAO suspend ระหว่าง
beginTransaction()
กับendTransaction()
b/120854786
เวอร์ชัน 2.1.0-alpha03
4 ธันวาคม 2018
การเปลี่ยนแปลง API
- ตอนนี้ FTS
tokenizer
ใน@Fts3
/@Fts4
ใช้สตริงแทน Enum แล้ว ซึ่งจะช่วยให้ Room ใช้ตัวแยกวิเคราะห์ที่กำหนดเองได้ ตัวแยกวิเคราะห์ในตัวจะยังคงได้รับการกำหนดในFtsOptions
เป็นสตริงคงที่ b/119234881
ฟีเจอร์ใหม่
- Couroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันที่ระงับได้แล้ว เราได้เปิดตัวอาร์ติแฟกต์ใหม่
room-coroutines
เพื่อรองรับฟังก์ชันการระงับใน Room b/69474692 - ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับListenableFuture
เป็นประเภทผลลัพธ์แล้ว b/119418331
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะพยายามค้นหาตัวสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้
ignoredColumns
ของ@Entity
อย่างไม่ถูกต้อง b/119830714 - แก้ไขข้อบกพร่องที่ Room จะไม่ทําเครื่องหมายพารามิเตอร์ของเมธอด DAO เป็น "สุดท้าย" ในการใช้งานที่สร้างขึ้น b/118015483
- แก้ไขข้อบกพร่องที่ตัวประมวลผลของ Room จะขัดข้องเมื่อรายงานข้อผิดพลาดในการค้นหาที่มีสัญลักษณ์พิเศษ b/119520136
- แก้ไขข้อบกพร่องที่ Room ปฏิเสธการใช้งาน
Collection
อื่นๆ เป็นอาร์กิวเมนต์ของนิพจน์IN
b/119884035 - แก้ไขข้อบกพร่องที่ LiveData ที่แสดงผลจาก Room จะได้รับการเก็บขยะเมื่อสังเกตการณ์ตลอด ทำให้ไม่แสดงข้อมูลใหม่อีกต่อไป b/74477406
- อัปเดตการล็อกปิดของ
RoomDatabase
เพื่อลดการช่วงชิงล็อก b/117900450
เวอร์ชัน 2.1.0-alpha02
30 ตุลาคม 2018
ฟีเจอร์ใหม่
- เพิ่มการรองรับการอ้างอิง
@DatabaseView
ใน@Relation
b/117680932
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะดำเนินการ I/O ของดิสก์ในเธรดหลักเมื่อสมัครใช้บริการและทิ้งจากประเภทผลลัพธ์ Rx b/117201279
- แก้ไขข้อบกพร่องที่ Room ไม่พบตัวแปลงประเภทที่เหมาะสมสำหรับช่องในคลาสเอนทิตี Kotlin b/111404868
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสําหรับการใช้งานอินเทอร์เฟซ
DAO
ที่มีเมธอดเริ่มต้นของ Kotlin ที่ไม่มีอาร์กิวเมนต์ b/117527454 - อัปเดตโปรแกรมวิเคราะห์ไวยากรณ์ SQLite ของ Room เพื่อแก้ไขปัญหาด้านประสิทธิภาพที่อาจทำให้ใช้เวลาสร้างนาน b/117401230
เวอร์ชัน 2.1.0-alpha01
8 ตุลาคม 2018
ฟีเจอร์ใหม่
- FTS: ตอนนี้ Room รองรับเอนทิตีที่มีตารางการแมป FTS3 หรือ FTS4 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติม
@Fts3
หรือ@Fts4
ลงในชั้นเรียนที่มีคำอธิบายประกอบ@Entity
เพื่อประกาศชั้นเรียนที่มีการแมปตารางการค้นหาแบบข้อความทั้งหมดได้แล้ว ตัวเลือก FTS สำหรับการปรับเปลี่ยนเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416 - มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคําค้นหาที่เก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้คําอธิบายประกอบ @DatabaseView แล้ว b/67033276
- ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบ Room
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี@CopyAnnotations
ด้วยเพื่อให้ Room เข้าใจอย่างถูกต้อง b/62408420 - การรองรับประเภทผลลัพธ์ Rx เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับประเภทผลลัพธ์ RxCompletable
,Single<T>
และMaybe<T>
แล้ว b/63317956 - ประเภทแบบคงที่ที่มี
@Relation
: ก่อนหน้านี้ Room กำหนดให้ต้องตั้งค่าช่องที่มีคำอธิบายประกอบ@Relation
ได้ แต่ตอนนี้ช่องดังกล่าวสามารถเป็นพารามิเตอร์คอนสตรัคเตอร์ได้ enableMultiInstanceInvalidation
: เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อเปิดใช้การทำให้โมฆะในอินสแตนซ์ RoomDatabase หลายรายการที่ใช้ไฟล์ฐานข้อมูลเดียวกัน กลไกการทำให้โมฆะแบบหลายอินสแตนซ์นี้ยังทำงานในหลายกระบวนการด้วย b/62334005fallbackToDestructiveMigrationOnDowngrade
: เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อสร้างฐานข้อมูลอีกครั้งโดยอัตโนมัติหากมีการดาวน์เกรด b/110416954ignoredColumns
: เป็น API ใหม่ในคำอธิบายประกอบ@Entity
ที่ใช้แสดงรายการช่องที่ละเว้นตามชื่อได้ มีประโยชน์สำหรับการละเว้นฟิลด์ที่รับค่ามาบนเอนทิตี b/63522075
การเปลี่ยนแปลง API / ลักษณะการทํางาน
mCallback
และmDatabase
ในRoomDatabase
เปลี่ยนเป็น@Deprecated
แล้ว และจะนําออกใน Room เวอร์ชันหลักถัดไป b/76109329
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหา 2 ข้อที่ Room กู้คืนจากฐานข้อมูลที่เสียหายหรือการย้ายข้อมูลที่ไม่ถูกต้องในระหว่างการเริ่มต้นใช้งานอย่างไม่ถูกต้อง b/111504749 และ b/111519144
- ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin อย่างถูกต้องในคลาสข้อมูล ซึ่งทำให้คุณไม่ต้องประกาศฟิลด์เป็น
vars
b/105769985
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
1 ตุลาคม 2018
androidx.room 2.0.0
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc01
เวอร์ชัน 2.0.0-rc01
20 กันยายน 2018
androidx.room 2.0.0-rc01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-beta01
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- เพิ่ม
RoomDatabase.Builder.setQueryExecutor()
เพื่ออนุญาตให้ปรับแต่งตำแหน่งที่จะเรียกใช้การค้นหา - เพิ่มการรองรับ RxJava2
Observable
- การติดตั้งใช้งาน DAO และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว
การแก้ไขข้อบกพร่อง
- ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบตัวรับค่าสำหรับฟิลด์" b/73334503
- แก้ไข RoomOpenHelper ให้ใช้งานร่วมกับ Room เวอร์ชันเก่าได้ b/110197391
ไลบรารีที่ใช้ก่อน 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
19 มิถุนายน 2018
ห้อง 1.1.1
เหมือนกับห้อง 1.1.1-rc1
เวอร์ชัน 1.1.1-rc1
16 พฤษภาคม 2018
เราขอแนะนําอย่างยิ่งให้ใช้ Room 1.1.1-rc1
แทน 1.1.0
หากคุณใช้การย้ายข้อมูล
แก้ไขข้อบกพร่องที่ Room ไม่จัดการการเริ่มต้นหลังจากการย้ายข้อมูลอย่างถูกต้อง b/79362399
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0-beta3
19 เมษายน 2018
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ POJO ของ Kotlin อ้างอิงเอนทิตีความสัมพันธ์ที่กําหนดไว้ใน Java b/78199923
เวอร์ชัน 1.1.0-beta2
5 เมษายน 2018
การแก้ไขข้อบกพร่อง
แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน Rx
Single
และMaybe
ของ Room ซึ่งจะรีไซเคิลการค้นหาก่อนเวลาอันควร ซึ่งทำให้เกิดปัญหาหากคุณเพิ่มผู้สังเกตการณ์มากกว่า 1 รายในอินสแตนซ์Single
หรือMaybe
ที่แสดงผล b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่
VACUUM
ฐานข้อมูลหากเรียกใช้ภายในธุรกรรม b/77235565
เวอร์ชัน 1.1.0-beta1
21 มีนาคม 2018
การเปลี่ยนแปลง API
- จากความคิดเห็นในการตรวจสอบ API
@RawQuery
ไม่ยอมรับการส่งString
เป็นพารามิเตอร์การค้นหาอีกต่อไป คุณต้องใช้ [SupportSQLiteQuery][ref-SupportSQLiteQuery] (ดู [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] เพื่อสร้างอินสแตนซ์ของ [SupportSQLiteQuery][ref-SupportSQLiteQuery] ที่รองรับอาร์กิวเมนต์ได้อย่างง่ายดาย) - ตอนนี้เมธอด [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] ของ RoomDatabase.Builder ยอมรับ
vararg int
แทนvararg Integer
แล้ว
การแก้ไขข้อบกพร่อง
- ตอนนี้ [RoomDatabase.clearAllTables][ref-clearAllTables] จะพยายามคืนพื้นที่ให้กับระบบปฏิบัติการโดยการตั้งจุดตรวจสอบ WAL และ
VACUUM
ฐานข้อมูล - [
@RawQuery
][ref-RawQuery] ตอนนี้ยอมรับ Pojo สำหรับพร็อพเพอร์ตี้observedEntities
ทั้งหมด ตราบใดที่ Pojo อ้างอิงถึงเอนทิตีอย่างน้อย 1 รายการผ่านช่องEmbedded
หรือRelation
b/74041772 - การแบ่งหน้า: ตอนนี้การใช้งาน DataSource ของ Room จัดการกับความสัมพันธ์แบบหลายตาราง (เช่น ความสัมพันธ์และการรวม) อย่างถูกต้องแล้ว ก่อนหน้านี้ เหตุการณ์เหล่านี้จะทริกเกอร์ผลลัพธ์ใหม่ไม่สำเร็จหรือคอมไพล์ไม่สำเร็จ b/74128314
เวอร์ชัน 1.1.0-alpha1
22 มกราคม 2018
ฟีเจอร์ใหม่
RawQuery
: API ใหม่นี้ช่วยให้เมธอด@Dao
รับ SQL เป็นพารามิเตอร์การค้นหาได้ b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: API ใหม่นี้ในRoomDatabase.Builder
ช่วยให้คุณควบคุมระดับรายละเอียดของเวอร์ชันสคีมาเริ่มต้นที่อนุญาตให้มีการย้ายข้อมูลแบบทำลายได้ละเอียดยิ่งขึ้น (เมื่อเทียบกับ fallbackToDestructiveMigration) b/64989640- ตอนนี้ Room รองรับเฉพาะ Paging API เวอร์ชันใหม่ (alpha-4 ขึ้นไป) เท่านั้น และจะเลิกรองรับ Paging API ที่เลิกใช้งานแล้ว
LivePagedListProvider
หากต้องการใช้ Room เวอร์ชันอัลฟ่าใหม่ คุณต้องใช้การแบ่งหน้าalpha-4
ขึ้นไป และเปลี่ยนจากLivePagedListProvider
เป็นLivePagedListBuilder
หากยังไม่ได้ดำเนินการ
การแก้ไขข้อบกพร่อง
- ปรับปรุงการรองรับประเภท Kapt ของ Kotlin b/69164099
- ลำดับของช่องจะไม่ทำให้สคีมาไม่ถูกต้องอีกต่อไป b/64290754