ห้อง
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
16 กรกฎาคม 2025 | 2.7.2 | - | - | 2.8.0-alpha01 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Room คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
การขึ้นต่อกันสำหรับ Room ได้แก่ การทดสอบการย้ายข้อมูล Room และ Room RxJava
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
Kotlin
dependencies { val room_version = "2.7.2" 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.7.2" 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 ค่าเริ่มต้นคือ true ตั้งแต่เวอร์ชัน 2.7.0
ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุของเวอร์ชัน 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
คุณควร
เช็คอินไฟล์เหล่านี้ในที่เก็บเพื่อใช้ในการตรวจสอบและการย้ายข้อมูลอัตโนมัติ
คุณไม่สามารถกําหนดค่าตัวเลือกบางอย่างใน Room Gradle Plugin บางเวอร์ชันได้
แม้ว่าคอมไพเลอร์ Room จะรองรับตัวเลือกเหล่านั้นก็ตาม ตารางด้านล่างแสดงรายการแต่ละ
ตัวเลือกและแสดงเวอร์ชันของปลั๊กอิน Room Gradle ที่เพิ่มการรองรับ
การกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย 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.8
เวอร์ชัน 2.8.0-alpha01
16 กรกฎาคม 2025
androidx.room:room-*:2.8.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มอาร์ติแฟกต์ใหม่
androidx.room:room-sqlite-wrapper
ซึ่งมี API สำหรับรับ WrapperSupportSQLiteDatabase
ของRoomDatabase
ที่มีการกำหนดค่าSQLiteDriver
หากต้องการรับ Wrapper ให้ใช้ฟังก์ชันส่วนขยายใหม่RoomDatabase.getSupportWrapper()
นี่คือสิ่งประดิษฐ์ที่ใช้ร่วมกันได้เพื่อรักษาการใช้งานSupportSQLiteDatabase
ซึ่งมักจะได้จากRoomDatabase.openHelper.writableDatabase
แม้ว่าจะมีการกำหนดค่าฐานข้อมูล Room ด้วยSQLiteDriver
ก็ตาม Wrapper นี้มีประโยชน์สำหรับการย้ายข้อมูลโค้ดเบสแบบเพิ่มทีละรายการสำหรับผู้ที่ต้องการใช้SQLiteDriver
แต่มีการใช้งาน API ของSupportSQLite
อย่างกว้างขวางและต้องการใช้ประโยชน์จากBundledSQLiteDriver
(Icf6ac) - เพิ่มเป้าหมาย KMP สำหรับ Watch OS และ TV OS (I228f6, b/394238801)
การแก้ไขข้อบกพร่อง
- แก้ไขภาวะหยุดชะงักที่อาจเกิดขึ้นเป็นครั้งคราวเมื่อใช้ธุรกรรมที่ถูกระงับและ
AndroidSQLiteDriver
(b/415006268)
เวอร์ชัน 2.7
เวอร์ชัน 2.7.2
18 มิถุนายน 2025
androidx.room:room-*:2.7.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.2 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบอ่านค่าคำอธิบายประกอบอย่างไม่ถูกต้องเมื่อประมวลผลแหล่งที่มาดั้งเดิมด้วย KSP และบางครั้งก็ไม่มีการส่งออกสคีมา (b/416549580)
- แก้ไขข้อบกพร่องที่ความคิดเห็นนำหน้าใน SQL ทำให้คำสั่งทำงานราวกับว่าเป็นคำค้นหาที่ยังไม่อ่าน (b/413061402)
- แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่กำหนดค่าไม่สำเร็จเนื่องจากไดเรกทอรีสคีมาว่างเปล่า (b/417823384)
- ไม่แสดงข้อผิดพลาด
SQLiteException
อีกต่อไปเมื่อใช้เวลานานเกินไปในการเชื่อมต่อ แต่จะส่งข้อความบันทึกโดยไลบรารีแทน การบันทึกแทนการส่งข้อยกเว้นจะช่วยหลีกเลี่ยงการวนลูปของ Looper ที่ถูกระงับใน iOS ซึ่งทำให้ Room ตีความการหมดเวลาที่เกิดขึ้นใน Kotlin Coroutine ที่ได้การเชื่อมต่อผิดไป และป้องกันไม่ให้มีการส่งข้อยกเว้นเมื่อแอป iOS ทำงานในเบื้องหลังและกลับมาทำงานต่อในภายหลังระหว่างการดำเนินการกับฐานข้อมูล (b/422448815)
เวอร์ชัน 2.7.1
23 เมษายน 2025
androidx.room:room-*:2.7.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.1 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่อง
IndexOutOfBoundsException
ระหว่างการตรวจสอบตัวแปลงประเภทที่ระบุ (b/409804755) - รองรับ
RoomDatabase.runInTransaction()
เมื่อกำหนดค่าSQLiteDriver
ด้วย Room (b/408364828)
เวอร์ชัน 2.7.0
9 เมษายน 2025
androidx.room:room-*:2.7.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.6.0
- การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ เราได้ปรับโครงสร้าง Room ใหม่ให้เป็นไลบรารี Kotlin Multiplatform (KMP) แพลตฟอร์มที่รองรับในปัจจุบันคือ Android, iOS, JVM (เดสก์ท็อป), Mac แบบเนทีฟ และ Linux แบบเนทีฟ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ นอกจากนี้ Room ยังกำหนดค่าด้วย
SQLiteDriver
ได้ด้วย ซึ่งเป็นส่วนหนึ่งของการรองรับ KMP ดูข้อมูลเกี่ยวกับวิธีย้ายข้อมูลแอปที่มีอยู่ไปยัง API ของไดรเวอร์และไปยัง Room KMP ได้ที่เอกสารประกอบการย้ายข้อมูล - การสร้างโค้ด Kotlin ใน KSP จะเปิดอยู่โดยค่าเริ่มต้นหากประมวลผลผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างแหล่งที่มาของ Java
- Kotlin 2.0 และ KSP2: ตอนนี้ Room จะกำหนดเป้าหมายเป็นภาษา Kotlin 2.0 และกำหนดให้โปรเจ็กต์คอมไพล์ด้วย Kotlin 2.0 และภาษาเวอร์ชันที่เทียบเท่าหรือสูงกว่า นอกจากนี้ยังมีการเพิ่มการรองรับ KSP2 และขอแนะนำให้ใช้เมื่อใช้ Room กับ Kotlin 2.0 ขึ้นไป
เวอร์ชัน 2.7.0-rc03
26 มีนาคม 2025
androidx.room:room-*:2.7.0-rc03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-rc03 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ไม่แสดงข้อผิดพลาด
InterruptedException
เมื่อมีการขัดจังหวะเธรดระหว่างการเรียกใช้ Room Blocking API ซึ่งรวมถึงฟังก์ชันการบล็อก DAO (b/400584611) - ใช้พูลการเชื่อมต่อของ Room อีกครั้งเพื่อพยายามลดปัญหา
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
และปัญหาที่คล้ายกัน (b/380088809)
เวอร์ชัน 2.7.0-rc02
12 มีนาคม 2025
androidx.room:room-*:2.7.0-rc02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการย้ายข้อมูลอัตโนมัติที่จัดการคอลัมน์ใหม่ในตาราง FTS อย่างไม่ถูกต้อง (b/348227770, Ic53f3)
- แก้ไขข้อขัดข้องของคอมไพเลอร์ Room เนื่องจาก
NullPointerException
เมื่อประมวลผลแหล่งที่มาที่ไม่ใช่ JVM ผ่าน KSP (b/396607230, I693c9) - แก้ไขปัญหาที่ Room ไม่ทำให้ตารางไม่ถูกต้องเมื่อสิ้นสุดการใช้การเชื่อมต่อ Writer (b/340606803, I73ef6)
เวอร์ชัน 2.7.0-rc01
26 กุมภาพันธ์ 2025
androidx.room:room-*:2.7.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room ไม่ได้ตั้งค่า
busy_timeout
ในการเชื่อมต่อฐานข้อมูลครั้งแรก ซึ่งจะทำให้เกิดปัญหาSQLException: Error code: 5, message: database is locked
(I93208, b/380088809) - แก้ไขปัญหาในคอมไพเลอร์ของ Room ที่ทำให้โปรเซสเซอร์ KSP ขัดข้องเมื่อประมวลผลชุดแหล่งข้อมูลดั้งเดิม (เช่น iOS) ใน Kotlin 2.1.x และ KSP1 (I883b8, b/396607230)
เวอร์ชัน 2.7.0-beta01
12 กุมภาพันธ์ 2025
androidx.room:room-*:2.7.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการ
RoomDatabase.inTransaction()
เปิดฐานข้อมูลที่ปิดไปแล้วในกรณีที่ไม่ควรเปิด และควรแสดงผลเป็นเท็จอย่างรวดเร็วหากฐานข้อมูลปิดอยู่ (b/325432967) - แก้ไขข้อขัดข้อง (
IllegalArgumentException: not a valid name
) ในคอมไพเลอร์ของ Room เมื่อประมวลผลฟังก์ชัน DAO ด้วยคลาสอินไลน์ / ค่าของ Kotlin (b/388299754) - รวมกฎ Proguard ไว้ในอาร์ติแฟกต์ JVM ของ
room-runtime
เพื่อไม่ให้นำตัวสร้างเริ่มต้นของการติดตั้งใช้งานฐานข้อมูลที่สร้างขึ้นออก เนื่องจาก Room ใช้การเริ่มต้นเริ่มต้นที่ใช้การสะท้อน (b/392657750)
เวอร์ชัน 2.7.0-alpha13
29 มกราคม 2025
androidx.room:room-*:2.7.0-alpha13
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-alpha13 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Room จะกำหนดเป้าหมายเป็นภาษา Kotlin 2.0 และกำหนดให้โปรเจ็กต์คอมไพล์ด้วย Kotlin 2.0 และภาษาเวอร์ชันที่เทียบเท่าหรือสูงกว่า (I8efb0, b/315461431, b/384600605)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในเครื่องมือสร้างฐานข้อมูล KMP ของ Room เมื่อใช้ชื่ออย่างง่ายแทนเส้นทางใน Android และจะไม่พบเส้นทางที่แก้ไขของไฟล์ฐานข้อมูลในไดเรกทอรีข้อมูลของแอป (I83315, b/377830104)
- แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Room Gradle ที่การกำหนดค่าอินพุตและเอาต์พุตของสคีมาทำให้เกิดปัญหาในโปรเจ็กต์ Android:
property 'inputDirectory' is final and cannot be changed any further.
(1dbb4c, b/376071291) - เพิ่มการรองรับ KSP2 ในปลั๊กอิน Gradle ของ Room เพื่อแก้ไขปัญหาที่ปลั๊กอินไม่ได้ตั้งค่าไดเรกทอรีสคีมาอย่างถูกต้อง (Iec3c4, b/379159770)
การมีส่วนร่วมภายนอก
- แก้ไขปัญหาเกี่ยวกับการผสานรวมการแบ่งหน้าของ
Room
ซึ่งทำให้ UI กระโดดเมื่อคีย์เริ่มต้นในการรีเฟรชอยู่ใกล้กับท้ายรายการมากเกินไป ขอขอบคุณ Eva (I2abbe, b/389729367)
เวอร์ชัน 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 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการติดตั้งใช้งาน KMP ของ
room-paging
ซึ่งจะทําให้เกิด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
เนื่องจากโมเดลการคอมไพล์ Kotlin 2.0 กลยุทธ์การอ้างอิงฟังก์ชันที่จะสร้างชื่อ instantiateImpl()
จึงไม่สามารถใช้งานได้อีกต่อไป เราได้เปิดตัว API ใหม่ 2 รายการ ได้แก่ @ConstructedBy
และ RoomDatabaseConstructor
ซึ่งจะมาแทนที่กลยุทธ์ instantiateImpl()
กลยุทธ์ใหม่มีดังนี้
กำหนดออบเจ็กต์ expect ที่ใช้
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
ลิงก์ออบเจ็กต์กับการประกาศ
@Database
โดยใช้@ConstructedBy
@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
- รองรับ
@RawQuery
ใน KMP ของ Room โดยการเพิ่ม API ใหม่ที่ชื่อRoomRawQuery
ซึ่งคล้ายกับSupportSQLiteQuery
ในแง่ของการเก็บสตริง SQL ดิบและฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์กับคำสั่ง@RawQuery
ตอนนี้ฟังก์ชันที่อธิบายประกอบสามารถรับRoomRawQuery
เป็นพารามิเตอร์เดียวได้แล้ว (Iea844, b/330586815) - เพิ่มฟังก์ชันโอเวอร์โหลดของ
setQueryCallback()
ที่ยอมรับCoroutineContext
(Id66ff, b/309996304) - เพิ่มการรองรับ
linuxArm64
เป้าหมาย Kotlin Multiplatform (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
หรือใช้บริบทของโครูทีนอย่างใดอย่างหนึ่ง แต่จะใช้ทั้ง 2 อย่างไม่ได้ - เพิ่ม API สำหรับกำหนดค่าห้องด้วยไดรเวอร์
SQLite
แล้ว:RoomDatabase.Builder.setDriver()
ดูข้อมูลเพิ่มเติมเกี่ยวกับSQLite
Driver API ได้ที่เอกสารประกอบ SQLite KMP - เราได้เพิ่ม API สำหรับเข้าถึง
SQLiteConnection
พื้นฐานจาก API ของไดรเวอร์แล้ว ได้แก่RoomDatabase.useReaderConnection
และRoomDatabase.useWriterConnection
- ตอนนี้การเรียกกลับที่เกี่ยวข้องกับ Varios 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 ทั้งหมดแล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนำออกจากการอ้างอิง
เวอร์ชัน 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 หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้เปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดค่าเป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณมีความเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเป็นค่าว่างของอาร์กิวเมนต์ประเภทมีความสำคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>
- เราได้เพิ่มอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ลงใน Room โดยมีรหัส
androidx.room
ซึ่งจะช่วยแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของเครื่องมือประมวลผลคำอธิบายประกอบ Gradle ดูรายละเอียดเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Room เวอร์ชัน 2.6.0-alpha02 - ตอนนี้ KSP รองรับคลาสค่าในเอนทิตี Room แล้ว (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 เพื่อไม่ให้ต้องมีการกำหนดค่าต่อตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินสามารถยอมรับตำแหน่งส่วนกลางสำหรับตัวแปรทั้งหมดได้โดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ทำให้การย้ายข้อมูลราบรื่นขึ้น แต่ก็มีความยืดหยุ่นเพียงพอที่จะกำหนดค่ารูปแบบหรือสคีมาประเภทบิลด์ด้วยตนเองได้ในขณะที่ยังคงได้รับประโยชน์จากปลั๊กอิน (บิลด์ที่ทำซ้ำได้และแคชได้) (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
การเปิดตัวเวอร์ชันใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Room Gradle ที่มีรหัส androidx.room
ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่แล้วใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของตัวประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Gradle ของ Room จะกำหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้างขึ้นซึ่งใช้สำหรับการย้ายข้อมูลอัตโนมัติและเป็นเอาต์พุตของงานคอมไพล์ได้รับการกำหนดค่าอย่างถูกต้องเพื่อให้มีการบิลด์ที่ทำซ้ำได้และแคชได้ ปลั๊กอินมี 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)
การแก้ไขข้อบกพร่อง
- การแก้ปัญหาที่เกิดขึ้นเมื่อสร้างอินสแตนซ์ของฐานข้อมูลใน 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 หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้เปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดค่าเป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณมีความเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเป็นค่าว่างของอาร์กิวเมนต์ประเภทมีความสำคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>
การเปลี่ยนแปลง API
- ป้องกันการใช้งานคอลเล็กชันที่อนุญาตให้มีค่า Null ในประเภทการคืนค่าของเมธอด DAO ที่ไม่มีความหมาย (I777dc, b/253271782, b/259426907)
- เพิ่ม API สำหรับสร้างโฟลว์ที่ปล่อยการเปลี่ยนแปลงเครื่องมือติดตามการลบล้าง API นี้มีประโยชน์ในการสร้างสตรีมที่ต้องตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูล (I8c790, b/252899305)
การแก้ไขข้อบกพร่อง
- ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้แบบนามธรรมเป็นตัวรับ DAO หรือการค้นหา DAO ใน 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 ต่างๆ ที่รับอาร์กิวเมนต์การค้นหาจาก Invariant (
Array<Any?>
) เป็น Contravariant (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
ใหม่room-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 จะพยายามแก้ไขคอลัมน์ที่ไม่ชัดเจนในการค้นหาแบบ Multimap ซึ่งจะช่วยให้ระบบแมป JOIN กับตารางที่มีตารางชื่อเดียวกันกับออบเจ็กต์ข้อมูลผลลัพธ์ได้อย่างถูกต้อง (I4b444, b/201306012, b/212279118)
เวอร์ชัน 2.5.0-alpha01
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.5.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไขปัญหาที่ไม่ได้บังคับใช้การใช้งาน Room
@IntDef
ในแหล่งที่มาของ Kotlin (I75f41, b/217951311) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้
@Query
ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (I0a09b) - แปลง room-common จาก Java เป็น Kotlin (I69c48, b/206858235)
หมายเหตุ: คุณอาจพบปัญหาความเข้ากันไม่ได้ของแหล่งที่มาเนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์คู่ในระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณอยู่ใน Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องมีคำต่อท้าย ".Companion" เมื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้
- แปลงการย้ายข้อมูล Room จาก Java เป็น Kotlin (I2724b, b/206858622)
- แปลงไฟล์ที่เกี่ยวข้องกับ
paging
ในroom-runtime
จาก Java เป็น Kotlin (I82fc8, b/206859668) - เพิ่ม API สำหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)
การแก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin
การเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า
(ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างกันสำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากคุณใช้
@JvmName
คำอธิบายประกอบที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่า กับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการ อัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.3
เวอร์ชัน 2.4.3
27 กรกฎาคม 2022
androidx.room:room-*:2.4.3
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ Room ไม่รู้จักฟังก์ชันระงับใน Kotlin 1.7 (b/236612358)
เวอร์ชัน 2.4.2
เวอร์ชัน 2.4.2
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.4.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชัน
@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 ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า
(ก่อนหน้านี้ใช้ชื่อ 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 ในการย้ายข้อมูลอัตโนมัติ:
@ProvidedAutoMigrationSpec
เป็น API ใหม่สำหรับการประกาศว่าAutoMigrationSpec
จะได้รับการจัดสรรที่รันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งจะช่วยให้เฟรมเวิร์กการแทรกการอ้างอิงระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการการอ้างอิงที่ซับซ้อน - การรองรับเครื่องมือช่วยทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ: เราได้อัปเดต
MigrationTestHelper
ของ Room เพื่อรองรับการย้ายข้อมูลอัตโนมัติโดยการจัดหา API ตัวสร้างใหม่ที่รับคลาสฐานข้อมูลภายใต้การทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้โดยอัตโนมัติในลักษณะเดียวกันในระหว่างrunMigrationsAndValidate
- การรองรับการแบ่งหน้าของ Room:
androidx.room:room-paging
ได้รับการเผยแพร่แล้ว ซึ่งให้การรองรับการแบ่งหน้า 3.0 ดั้งเดิมสำหรับการค้นหา Room ที่แสดงผลandroidx.paging.PagingSource
- วิธีการค้นหาเชิงสัมพันธ์: ตอนนี้ Room รองรับประเภทการคืนค่า multimap
@Dao
ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือMap
,SparseArray
,LongSparseArray
รวมถึงImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guava
เวอร์ชัน 2.4.0-rc01
1 ธันวาคม 2021
androidx.room:room-*:2.4.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- อัปเดตการขึ้นต่อกันของ Room กับ KSP เป็น
1.6.0-1.0.1
เพื่อรองรับ Kotlin 1.6
เวอร์ชัน 2.4.0-beta02
17 พฤศจิกายน 2021
androidx.room:room-*:2.4.0-beta02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-beta02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เราได้เพิ่มการรองรับ SparseArray และ LongSparseArray ใน @MapInfo (Ic91a2b/138910317)
การแก้ไขข้อบกพร่อง
- เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่พิจารณาข้อมูลการยอมรับค่าว่าง ในประเภทต่างๆ เนื่องจากข้อมูลนี้ใช้ได้เฉพาะใน KSP ระบบจึงเปิดใช้โดยค่าเริ่มต้นใน KSP เท่านั้น หากทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่ง room.useNullAwareTypeAnalysis=false ไปยังตัวประมวลผล คำอธิบายประกอบ หากเกิดกรณีดังกล่าว โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำฟีเจอร์นี้ออกในอนาคต เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้แนะนำให้ระบุเฉพาะ TypeConverter ที่รับค่าที่ไม่ใช่ Null เนื่องจากเครื่องมือวิเคราะห์ใหม่มีความสามารถในการห่อหุ้มด้วยการตรวจสอบ 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 จะใช้
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 ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณปิดใช้ตัวแปลงสำหรับขอบเขตหนึ่งๆ หรือสำหรับทั้งฐานข้อมูลได้ ดูรายละเอียดได้ที่เอกสารประกอบ TypeConverters (36ae9e, b/195413406)
รองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทการคืนค่า Multimap ใน DAO ผ่าน Annotation
@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
ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือMap
รวมถึงImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guavaตัวอย่างการค้นหาแบบหลายแผนที่
แผนที่ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
แผนที่ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (แผนที่หลายรายการมาตรฐาน)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
นอกจากนี้ คุณยังห่อหุ้มผลการค้นหาแบบหลายแผนที่ในประเภทการคืนค่าแบบอะซิงโครนัสที่รองรับได้ด้วย เช่น
LiveData
,Observable
ของ Rx หรือFlow
ของโครูทีน
การเรียกห้อง
androidx.room:room-paging
เปิดตัวแล้ว โดยรองรับ 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 สร้างขึ้นด้วยการใช้งานที่สร้างขึ้นบน API ของ Paging 3.0 การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์แตกต่างกัน ดังนั้นคีย์ที่ระบุด้วยตนเองใน PagingSource ของ Room จะต้องคำนึงถึงการเปลี่ยนแปลงลักษณะการทำงานนี้ รวมถึง initialKey ที่ส่งผ่านตัวสร้างของ Pager หน้าเว็บจะเริ่มโหลดจากKey
โดยKey
จะเป็นรายการแรกที่โหลด ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งถือว่าLoadParams.Refresh.Key
เป็นตำแหน่งการเลื่อนของผู้ใช้ และจะโหลดรายการทั้งก่อนและหลังคีย์โดยคุณจะเลือกใช้หรือไม่ใช้ก็ได้ และหากเลือกไม่ใช้ ระบบจะกลับไปใช้การรองรับ Paging 3.0 ที่มีอยู่ซึ่งเปิดตัวใน Room 2.3 อย่างไรก็ตาม อาร์ติแฟกต์นี้จะกลายเป็นอาร์ติแฟกต์ที่ต้องใช้ในรุ่นต่อๆ ไปสำหรับผู้ที่ใช้ Room กับ Paging 3.0 หากต้องการเลือกใช้ ให้เพิ่มอาร์ติแฟกต์การเรียกหน้าห้องใหม่ลงใน Classpath หากใช้ 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
- อัปเดต Room เป็นเวอร์ชัน
MigrationTestHelper
เพื่อรองรับการย้ายข้อมูลอัตโนมัติโดยการจัดหา API ตัวสร้างใหม่ที่รับคลาสฐานข้อมูลภายใต้การทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้โดยอัตโนมัติในลักษณะเดียวกันในระหว่างrunMigrationsAndValidate
การแก้ไขข้อบกพร่อง
แก้ไขปัญหาเกี่ยวกับไลบรารีเนทีฟ SQLite ของ Room เพื่อรองรับชิป M1 ของ Apple (b/174695268
แก้ไขปัญหาที่ Room จะไม่แสดงข้อผิดพลาดเมื่อประเภทการคืนค่าของฟังก์ชัน @Transaction เป็น Flow (I56ddd, b/190075899)
แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับดัชนี b/177673291
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การรองรับ 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()
ซึ่งจะช่วยให้เฟรมเวิร์กการแทรกการอ้างอิงระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการการอ้างอิงที่ซับซ้อน
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการย้ายข้อมูลอัตโนมัติที่ระบบสร้าง
@DatabaseView
ไม่ถูกต้อง
การมีส่วนร่วมภายนอก
- แก้ไขปัญหาใน
JournalMode.TRUNCATE
ของ Room ที่บางครั้งระบบเรียกใช้การเรียกกลับInvalidationTracker
อย่างไม่ถูกต้อง ช้าเกินไป หรือไม่เรียกใช้เลย ขอขอบคุณUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
เวอร์ชัน 2.4.0-alpha01
21 เมษายน 2021
androidx.room:room-*:2.4.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การย้ายข้อมูลอัตโนมัติ: ตอนนี้ 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 เป็น String และในทางกลับกันโดยค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ 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 - การรองรับ Paging 3.0: ตอนนี้ Room จะรองรับการสร้างการติดตั้งใช้งานสำหรับเมธอดที่ใส่คำอธิบายประกอบ
@Query
ซึ่งมีประเภทการคืนค่าเป็นandroidx.paging.PagingSource
แล้ว
เวอร์ชัน 2.3.0-rc01
24 มีนาคม 2021
androidx.room:room-*:2.3.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ Room สร้างคำค้นหา Coroutine Flow ไม่ได้เพื่อใช้ในบล็อก
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 ในลักษณะเดียวกับที่ทำสำหรับเมธอด DAO ที่มีคำอธิบายประกอบ@RawQuery
ขอขอบคุณ "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 Symbol Processing 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 เป็น String และในทางกลับกันเป็นค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ Enum อยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงนั้นมากกว่าตัวแปลงเริ่มต้น (b/73132006)
ปัญหาที่ทราบ
- หากมีตัวแปลงประเภททางเดียวสำหรับการอ่าน Enum อยู่แล้ว Room อาจใช้ตัวแปลง String เป็น Enum ในตัวโดยไม่ตั้งใจ ซึ่งอาจไม่เป็นที่ต้องการ นี่เป็นปัญหาที่ทราบอยู่แล้ว และแก้ไขได้โดยการทำให้เป็นตัวแปลงแบบ 2 ทาง ดู b/175707691
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room ปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการอย่างไม่ถูกต้องใน JDK เวอร์ชันใหม่กว่า (b/171387388)
- แก้ไขปัญหาเกี่ยวกับ Room ที่ค้นหาคลาสที่สร้างขึ้นเมื่อใช้ตัวโหลดคลาสหลายตัว ขอขอบคุณสำหรับการแก้ไข "Serendipity | 892449346@qq.com" (b/170141113)
- แก้ไขปัญหาที่ Room สร้างโค้ดไม่ถูกต้องเมื่อ
@Dao
ของ Kotlin มีคลาสฐานซึ่ง Generics เป็น Primitive ใน 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 ที่มีประเภทซูเปอร์ไทป์ทั่วไปด้วย "Primitive" ของ 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) Room
ตอนนี้ตัวเลือกการประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการจะเปิดอยู่โดยค่าเริ่มต้น (b/112110217)
เวอร์ชัน 2.3.0-alpha01
10 มิถุนายน 2020
androidx.room:room-*:2.3.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
การรองรับ Paging 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 ไว้กับ Annotation Processor เพื่อหลีกเลี่ยงความขัดแย้งด้านเวอร์ชันกับโปรเซสเซอร์อื่นๆ ที่ใช้ 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
ตระหนักถึง Direct Boot ขอขอบคุณ "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 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการระงับธุรกรรมที่อาจทำให้เกิดการหยุดชะงักหากมีการยกเลิกโครูทีนอย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การรวบรวมความสัมพันธ์แบบหนึ่งต่อหนึ่งที่มีมากกว่า 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()
ใช้ในกรณีที่ไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ในโฟลเดอร์ชิ้นงานของ APK ส่วนcreateFromFile()
ใช้ในกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของการย้ายข้อมูลแบบทำลายล้างเพื่อให้ Room พยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมีในระหว่างการย้ายข้อมูลแบบย้อนกลับ ไม่เช่นนั้น Room จะย้อนกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่b/62185732 - ค่าเริ่มต้นของสคีมา:
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ซึ่งใช้ระบุค่าเริ่มต้นของคอลัมน์ได้แล้ว ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากมีการระบุ b/64088772 - ความสัมพันธ์แบบหลายต่อหลาย:
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคำอธิบายประกอบใหม่@Junction
ที่ใช้ในการประกาศความสัมพันธ์ที่ ต้องเป็นไปตามตารางเชื่อม (หรือที่เรียกว่าตารางรวม) ด้วย b/69201917 - ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: เราได้ยกเลิกข้อจำกัดในฟิลด์ POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ให้เป็นประเภทList
หรือSet
แล้ว ซึ่งจะช่วยให้ แสดงความสัมพันธ์แบบค่าเดียวได้ b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่ เมธอด DAO มีไว้เพื่อดำเนินการได้ ซึ่งจะช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งจะได้รับการตีความเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตให้แทรก ลบ และอัปเดตบางส่วนได้ b/127549506 - Coroutines Flow:
@Query
ตอนนี้เมธอด DAO สามารถมีประเภทการคืนค่าเป็นFlow<T>
ได้แล้ว Flow ที่แสดงผลจะปล่อยค่าชุดใหม่ซ้ำอีกครั้งหากตารางที่สังเกตใน การค้นหาไม่ถูกต้อง การประกาศฟังก์ชัน DAO ที่มีประเภทการคืนค่าChannel<T>
เป็นข้อผิดพลาด แต่ Room ขอแนะนำให้คุณใช้Flow
แทน แล้วใช้ฟังก์ชันที่อยู่ข้างเคียงเพื่อแปลงFlow
เป็นChannel
b/130428884 - ตัวประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคำอธิบายประกอบที่แยก Gradle
และเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การวัดผลแบบเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต 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>
ได้แล้ว Flow ที่แสดงผลจะปล่อยค่าชุดใหม่ซ้ำอีกครั้งหากตารางที่สังเกตใน การค้นหาไม่ถูกต้อง การประกาศฟังก์ชัน 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 เมื่อเปิดใช้การลบล้างหลายอินสแตนซ์และระบบปิด InvalidationService 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()
ใช้ในกรณีที่ไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ในโฟลเดอร์ชิ้นงานของ APK ส่วนcreateFromFile()
ใช้ในกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของการย้ายข้อมูลแบบทำลายล้างเพื่อให้ Room พยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมีในระหว่างการย้ายข้อมูลแบบย้อนกลับ ไม่เช่นนั้น Room จะย้อนกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่b/62185732 - ค่าเริ่มต้นของสคีมา:
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ซึ่งใช้ระบุค่าเริ่มต้นของคอลัมน์ได้แล้ว ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากมีการระบุ b/64088772หมายเหตุ: หากสคีมาฐานข้อมูลมีค่าเริ่มต้นอยู่แล้ว เช่น ค่าที่เพิ่มผ่าน
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
และคุณตัดสินใจที่จะกำหนดค่าเริ่มต้นผ่าน@ColumnInfo
ให้กับคอลัมน์เดียวกัน คุณอาจต้องระบุการย้ายข้อมูลเพื่อตรวจสอบค่าเริ่มต้นที่ไม่ได้ระบุ ดูข้อมูลเพิ่มเติมได้ที่ การย้ายข้อมูลห้อง - ความสัมพันธ์แบบหลายต่อหลาย:
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคำอธิบายประกอบใหม่@Junction
ที่ใช้ในการประกาศความสัมพันธ์ที่ ต้องเป็นไปตามตารางเชื่อม (หรือที่เรียกว่าตารางรวม) ด้วย b/69201917 - ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: เราได้ยกเลิกข้อจำกัดในฟิลด์ POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ให้เป็นประเภทList
หรือSet
แล้ว ซึ่งจะช่วยให้ แสดงความสัมพันธ์แบบค่าเดียวได้ b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่ เมธอด DAO มีไว้เพื่อดำเนินการได้ ซึ่งจะช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งจะได้รับการตีความเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตให้แทรก ลบ และอัปเดตบางส่วนได้ b/127549506 - ตัวประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคำอธิบายประกอบที่แยก Gradle
และเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การวัดผลแบบเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต 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
- Coroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว รวม
room-ktx
ไว้ในทรัพยากร Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ KTX ยังมีฟังก์ชันส่วนขยายRoomDatabase.withTransaction
สำหรับ การทำธุรกรรมในฐานข้อมูลภายในโครูทีนด้วย - Auto Value: ตอนนี้ Room รองรับการประกาศคลาสที่ใส่คำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบของห้อง
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดแบบนามธรรมของคลาสที่ใส่คำอธิบายประกอบด้วยค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี@CopyAnnotations
ด้วยเพื่อให้ Room เข้าใจได้อย่างถูกต้อง - การรองรับ Async เพิ่มเติม: ตอนนี้เมธอด 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
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการเริ่มต้นห้องที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า 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 สำหรับฟังก์ชัน Kotlin DAO ที่มีพารามิเตอร์ประเภท Collection b/122066791
เวอร์ชัน 2.1.0-alpha06
22 มีนาคม 2019
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- ตอนนี้การค้นหาธุรกรรมแบบไม่พร้อมกันจะได้รับการจัดลำดับเพื่อให้ Room ไม่ใช้เธรดมากกว่า 1 รายการในการดำเนินการธุรกรรมในฐานข้อมูล
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
13 มีนาคม 2019
ฟีเจอร์ใหม่
- ฟังก์ชันส่วนขยาย
RoomDatabase.withTransaction
ช่วยให้คุณทำธุรกรรมในฐานข้อมูลได้อย่างปลอดภัยภายในโครูทีน ฟังก์ชันส่วนขยายห้องพร้อมการรองรับโครูทีนจะอยู่ในอาร์ติแฟกต์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) คุณแก้ไขการขึ้นต่อกันนี้ได้โดยเพิ่มmaven { url "https://kotlin.bintray.com/kotlinx/" }
ลงในที่เก็บโปรเจ็กต์
เวอร์ชัน 2.1.0-alpha04
25 มกราคม 2019
ฟีเจอร์ใหม่
- ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบด้วย
@Query
ซึ่งมีคำสั่งINSERT
,UPDATE
หรือDELETE
สามารถแสดงผลประเภทแบบไม่พร้อมกันSingle
,Mayble
,Completable
และListenableFuture
ได้แล้ว นอกจากนี้ยังสามารถระงับฟังก์ชันได้ด้วย b/120227284
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- ตอนนี้ 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 ระหว่าง
beginTransaction()
กับendTransaction()
b/120854786
เวอร์ชัน 2.1.0-alpha03
4 ธันวาคม 2018
การเปลี่ยนแปลง API
- ตอนนี้ FTS
tokenizer
ใน@Fts3
/@Fts4
จะใช้สตริงแทน Enum ซึ่งช่วยให้ Room ใช้ตัวแยกคำที่กำหนดเองได้ โดยยังคงกำหนดตัวแยกคำในตัวไว้ในFtsOptions
เป็นค่าคงที่สตริง b/119234881
ฟีเจอร์ใหม่
- Coroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว เราได้เปิดตัวอาร์ติแฟกต์ใหม่
room-coroutines
เพื่อรองรับฟังก์ชันระงับใน Room b/69474692 - ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับListenableFuture
เป็นประเภทการคืนค่าแล้ว b/119418331
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room พยายามค้นหาตัวสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้
ignoredColumns
ของ@Entity
อย่างไม่ถูกต้อง b/119830714 - แก้ไขข้อบกพร่องที่ทำให้ Room ไม่ทำเครื่องหมายพารามิเตอร์ของเมธอด DAO เป็น final ในการติดตั้งใช้งานที่สร้างขึ้น 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 - อัปเดต
Room
ตัวแยกวิเคราะห์ไวยากรณ์ SQLite เพื่อแก้ไขปัญหาด้านประสิทธิภาพที่อาจทำให้ใช้เวลานานในการสร้าง b/117401230
เวอร์ชัน 2.1.0-alpha01
8 ตุลาคม 2018
ฟีเจอร์ใหม่
- 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 เพิ่มเติม: ตอนนี้เมธอด 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 และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว
การแก้ไขข้อบกพร่อง
- ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบ 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
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
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ Kotlin POJO อ้างอิงเอนทิตีความสัมพันธ์ที่ กำหนดไว้ใน Java b/78199923
เวอร์ชัน 1.1.0-beta2
5 เมษายน 2018
การแก้ไขข้อบกพร่อง
แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน
Room
RxSingle
และMaybe
ซึ่งจะรีไซเคิลการค้นหาก่อนเวลาอันควร ทำให้เกิดปัญหาหากคุณเพิ่ม Observer มากกว่า 1 รายการไปยังอินสแตนซ์Single
หรือMaybe
ที่ส่งคืน b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่
VACUUM
ฐานข้อมูล หากมีการเรียกใช้ภายในธุรกรรม b/77235565
เวอร์ชัน 1.1.0-เบต้า1
21 มีนาคม 2018
การเปลี่ยนแปลง API
@RawQuery
ไม่รับส่งString
เป็นพารามิเตอร์การค้นหาอีกต่อไปตามความคิดเห็นจากการตรวจสอบ API คุณต้องใช้ [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 ขึ้นไป) และจะหยุดรองรับ
LivePagedListProvider
ที่เลิกใช้งานแล้ว หากต้องการใช้เวอร์ชันอัลฟ่าของฟีเจอร์ห้องใหม่ คุณจะต้องใช้การแบ่งหน้าalpha-4
ขึ้นไป และเปลี่ยนจากLivePagedListProvider
เป็นLivePagedListBuilder
หากยังไม่ได้ดำเนินการ
การแก้ไขข้อบกพร่อง
- ปรับปรุงการรองรับประเภท Kapt ของ Kotlin b/69164099
- ลำดับของฟิลด์จะไม่ทำให้สคีมาไม่ถูกต้องอีกต่อไป b/64290754