ห้อง
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 19 พฤศจิกายน 2025 | 2.8.4 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Room คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงใน โปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
การขึ้นต่อกันสำหรับ Room ได้แก่ การทดสอบการย้ายข้อมูล Room และ Room RxJava
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Kotlin
dependencies { val room_version = "2.8.4" 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.8.4" 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
คุณสามารถใช้ androidx.room:room-common เพื่อใช้คำอธิบายประกอบ Room สำหรับไลบรารีที่ไม่ใช่ Android (เช่น โมดูล Gradle ของ Java หรือ Kotlin เท่านั้น)
การกำหนดค่าตัวเลือกคอมไพเลอร์
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 จะรองรับตัวเลือกเหล่านั้นก็ตาม ตารางด้านล่างแสดงรายการแต่ละ
ตัวเลือกและแสดงเวอร์ชันของปลั๊กอิน Gradle ของ Room ที่เพิ่มการรองรับ
การกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย room หากเวอร์ชันต่ำกว่า หรือตัวเลือกยังไม่รองรับ คุณสามารถใช้ตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบแทนได้
| ตัวเลือก | ตั้งแต่เวอร์ชัน |
|---|---|
room.schemaLocation (ต้องระบุ) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
ใช้ตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ
หากไม่ได้ใช้ปลั๊กอิน Room Gradle หรือหากปลั๊กอินเวอร์ชันที่คุณใช้ไม่รองรับตัวเลือกที่ต้องการ คุณสามารถกำหนดค่า Room โดยใช้ตัวเลือกโปรเซสเซอร์คำอธิบายประกอบได้ตามที่อธิบายไว้ในเพิ่มการขึ้นต่อกันในการสร้าง วิธี ระบุตัวเลือกคำอธิบายประกอบจะขึ้นอยู่กับว่าคุณใช้ KSP หรือ KAPT สำหรับ Room
Groovy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
เนื่องจาก room.schemaLocation เป็นไดเรกทอรี ไม่ใช่ประเภทดั้งเดิม จึงจำเป็นต้องใช้ CommandLineArgumentsProvider เมื่อเพิ่มตัวเลือกนี้เพื่อให้ Gradle รู้จักไดเรกทอรีนี้เมื่อทำการตรวจสอบว่าข้อมูลเป็นเวอร์ชันล่าสุด
ย้ายข้อมูลฐานข้อมูล Room
แสดงการติดตั้งใช้งาน CommandLineArgumentsProvider อย่างสมบูรณ์ซึ่งระบุ
ตำแหน่งสคีมา
ความคิดเห็น
ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.8
เวอร์ชัน 2.8.4
19 พฤศจิกายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.4 เวอร์ชัน 2.8.4 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มแคชของคำสั่งที่เตรียมไว้ลงใน Connection Pool ของ Room เมื่อใช้
SQLiteDriverที่ไม่มี Pool ภายใน เช่นBundledSQLiteDriverซึ่งจะช่วยปรับปรุงประสิทธิภาพเมื่อเรียกใช้คำสั่ง SQL เดียวกันซ้ำ (5f43bc, b/319653917) - แก้ไขปัญหาที่ข้อความแสดงข้อผิดพลาดจริง / ที่คาดไว้ในการตรวจสอบสคีมาไม่มีข้อมูล (8b23da, b/454531083)
- แก้ไขปัญหาการสร้างโค้ด Kotlin ของ Room ที่ไม่มี
@Transactionฟังก์ชัน DAO ที่มีตัวแปรประเภท (a8365d, b/251316420) - ปรับปรุง
SupportSQLiteประสิทธิภาพของ Wrapper โดยหลีกเลี่ยงการเปลี่ยนเธรดและคงลักษณะการบล็อกเดียวกันกับ API ของSupportSQLiteDatabase(fc70e4)
เวอร์ชัน 2.8.3
22 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.3 เวอร์ชัน 2.8.3 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาด้านประสิทธิภาพของ Room SQLite Wrapper ซึ่งทำให้เกิดการเรียก JNI มากเกินไปและประสิทธิภาพลดลงอย่างมากเมื่อวนซ้ำในเคอร์เซอร์
เวอร์ชัน 2.8.2
8 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.2 เวอร์ชัน 2.8.2 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขภาวะหยุดชะงักที่อาจเกิดขึ้นเมื่อเปิดฐานข้อมูลที่ปิดอัตโนมัติอีกครั้งจากการปล่อย Flow (b/446643789)
เวอร์ชัน 2.8.1
24 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.1 เวอร์ชัน 2.8.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการทำงานล้มเหลวของโปรเซสเซอร์ซึ่งจะเกิดขึ้นเมื่อประมวลผลฟังก์ชัน DAO ด้วย Lambda ที่ระงับ (b/442220723)
- แก้ไข Race Condition ที่จะป้องกันไม่ให้ Flows ได้รับการอัปเดตล่าสุด
เวอร์ชัน 2.8.0
10 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.0 เวอร์ชัน 2.8.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.7.0
- เพิ่มอาร์ติแฟกต์ใหม่
androidx.room:room-sqlite-wrapperซึ่งมี API สำหรับรับ WrapperSupportSQLiteDatabaseจากRoomDatabaseที่มีSQLiteDriverที่กำหนดค่าไว้ หากต้องการรับ Wrapper ให้ใช้ฟังก์ชันส่วนขยายใหม่RoomDatabase.getSupportWrapper()นี่คืออาร์ติแฟกต์ความเข้ากันได้เพื่อรักษาการใช้งานSupportSQLiteDatabaseซึ่งมักได้มาจากroomDatabase.openHelper.writableDatabaseแม้ว่าจะกำหนดค่าฐานข้อมูล Room ด้วยSQLiteDriverก็ตาม Wrapper นี้มีประโยชน์สำหรับการย้ายข้อมูลโค้ดเบสแบบทีละขั้นสำหรับผู้ที่ต้องการใช้ SQLiteDriver API แต่มีการใช้งาน SupportSQLite API อย่างกว้างขวางและต้องการใช้ประโยชน์จากBundledSQLiteDriverดูข้อมูลเพิ่มเติมได้ที่คำแนะนำในการย้ายข้อมูล - เพิ่มการรองรับเป้าหมาย KMP สำหรับ Watch OS และ Tv OS
- อัปเดต minSDK ของ Android ของไลบรารีจาก API 21 เป็น API 23
เวอร์ชัน 2.8.0-rc02
27 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.0-rc02 เวอร์ชัน 2.8.0-rc02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- อัปเดต minSDK จาก API 21 เป็น API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- อัปเดตปลั๊กอิน Android Gradle (AGP) เวอร์ชันขั้นต่ำที่เข้ากันได้กับปลั๊กอิน Room Gradle จาก 8.1 เป็น 8.4 (Ia0d28)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การย้ายข้อมูลแบบทำลายจะดำเนินการแม้ว่าจะมีเส้นทางการย้ายข้อมูลสำหรับฐานข้อมูลที่แพ็กไว้ล่วงหน้า (b/432634197)
เวอร์ชัน 2.8.0-rc01
13 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.0-rc01 เวอร์ชัน 2.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
การแก้ไขข้อบกพร่อง
- แก้ไข Race Condition ที่โฟลว์ของ Room ไม่แสดงผลการค้นหาล่าสุดในสถานการณ์การค้นหา/เขียนแบบหลายรายการแบบไม่พร้อมกัน (Ic9a3c)
เวอร์ชัน 2.8.0-beta01
1 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.room:room-*:2.8.0-beta01 เวอร์ชัน 2.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะกำหนดชื่อตารางและมุมมองเป็นอักขระหลีกอย่างถูกต้องในระหว่างการย้ายข้อมูลที่ทำลายข้อมูล (9e55f8, b/427095319)
เวอร์ชัน 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อีกต่อไปเมื่อมีการขัดจังหวะเธรดระหว่างการเรียกใช้ API การบล็อก Room รวมถึงการบล็อกฟังก์ชัน DAO (b/400584611) - ใช้ Connection Pool ของ 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 ที่ใช้
RoomDatabaseConstructorexpect 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 สำหรับกำหนดค่า Room ด้วยไดรเวอร์
SQLiteแล้ว:RoomDatabase.Builder.setDriver()ดูข้อมูลเพิ่มเติมเกี่ยวกับSQLiteDriver 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 ความสามารถในการเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ แต่ใน 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 เพื่อไม่ให้ต้องมีการกำหนดค่าต่อตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินสามารถยอมรับตำแหน่งส่วนกลางสำหรับตัวแปรทั้งหมดได้โดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ทำให้การย้ายข้อมูลราบรื่นขึ้น แต่ก็มีความยืดหยุ่นเพียงพอที่จะกำหนดค่าสคีมาประเภท Flavor หรือ Build ด้วยตนเองในขณะที่ยังคงได้รับประโยชน์จากปลั๊กอิน (Build ที่ทำซ้ำได้และแคชได้) (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 ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่แล้วใน 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ได้รับการกำหนดให้เป็นอินเทอร์เฟซที่ใช้งานได้เพื่อให้ใช้ 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 หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้เปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้แบบคงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดให้เป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์มีความเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ แต่ใน 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) - ใช้
isOpenInternalcheck เมื่อตรวจสอบว่าฐานข้อมูลเปิดอยู่แล้วหรือไม่ (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-pagingroom-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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชัน
@Transactionsuspend ของ 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เอกสารประกอบ - การแทรกการอ้างอิงในการย้ายข้อมูลอัตโนมัติ:
@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 ใหม่ที่พิจารณาข้อมูลเกี่ยวกับค่า Null ในประเภทต่างๆ เนื่องจากข้อมูลนี้ใช้ได้เฉพาะใน 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 ผ่านคำอธิบายประกอบ
@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>แผนที่ความสัมพันธ์แบบหนึ่งต่อหลายรายการ (Multimap มาตรฐาน)
@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 จะรองรับการสร้างการติดตั้งใช้งานสำหรับเมธอดที่ใส่คำอธิบายประกอบซึ่งมีประเภทการคืนค่าเป็น
androidx.paging.PagingSourceแล้ว@Query@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
การเปลี่ยนแปลง API
@RewriteQueriesToDropUnusedColumnsคือคำอธิบายประกอบใหม่ที่สะดวกซึ่งทำให้ Room เขียนการฉายภาพ "*" ในการค้นหาใหม่เพื่อให้ระบบนำคอลัมน์ที่ไม่ได้ใช้ในผลลัพธ์ออก- ตัวเลือกโปรเซสเซอร์
room.expandProjectionเลิกใช้งานแล้ว ใช้@RewriteQueriesToDropUnusedColumnsแทนคำค้นหาการเพิ่มประสิทธิภาพห้องที่มีการคาดการณ์ดาว โปรดทราบว่า@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 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการระงับธุรกรรมซึ่งจะเกิดการหยุดชะงักหากมีการยกเลิกโครูทีนอย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (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เป็นChannelb/130428884 - Annotation Processor แบบเพิ่มของ Gradle: ตอนนี้ Room เป็น Annotation Processor ที่แยกของ Gradle แล้ว และเปิดใช้ความสามารถในการเพิ่มได้ผ่านตัวเลือกของ Processor
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เป็นChannelb/130428884 - การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ทดลองใหม่
room.expandProjectionซึ่งทำให้ Room เขียนคำค้นหาใหม่ด้วย การฉายภาพดาวให้มีเฉพาะคอลัมน์ใน POJO ของประเภทที่ส่งคืน ตัวอย่างเช่น สำหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")ซึ่งส่งคืน POJO ชื่อSongIdAndTitleที่มีฟิลด์เพียง 2 รายการ จากนั้น Room จะเขียนคำค้นหาใหม่เป็นSELECT id, title FROM Songเพื่อให้ระบบดึงชุดคอลัมน์ขั้นต่ำ เพื่อตอบสนองประเภทการคืนค่า ซึ่งจะช่วยขจัดCURSOR_MISMATCHคำเตือนที่แสดงเมื่อการค้นหาแสดงผลคอลัมน์เพิ่มเติม ซึ่งไม่ตรงกับฟิลด์ใดๆ ในประเภท POJO ที่แสดงผล onDestructiveMigrateคือ Callback API ใหม่ที่เพิ่มลงในRoomDatabase.Callbackเมื่อ Room ย้ายข้อมูลฐานข้อมูลแบบทำลาย b/79962330
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องโดยใช้วิธีการเป็นตัวตั้งค่าฟิลด์เมื่อฟิลด์ได้รับการป้องกัน b/136194628
- แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker แสดง NPE ในกระบวนการที่ 2 เมื่อเปิดใช้การลบล้างหลายอินสแตนซ์และระบบปิด InvalidationService b/137454915
- แก้ไขข้อบกพร่องที่ Room ระบุประเภทการคืนค่าของฟังก์ชัน suspend ที่รับค่ามาซึ่งมีคำอธิบายประกอบ
@RawQueryไม่ถูกต้อง b/137878827 - อัปเดตโค้ดที่สร้างขึ้นสำหรับ
@Relationเมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB ให้ใช้ByteBufferที่เทียบเท่า b/137881998 - แก้ไขข้อบกพร่องที่ Room จะแจ้งว่าไม่มีตัวตั้งค่าใน POJO ที่ใช้เป็น
พารามิเตอร์เอนทิตีบางส่วนของ
@Insert,@Updateและ@Deleteb/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 - Annotation Processor แบบเพิ่มของ Gradle: ตอนนี้ Room เป็น Annotation Processor ที่แยกของ Gradle แล้ว และเปิดใช้ความสามารถในการเพิ่มได้ผ่านตัวเลือกของ Processor
room.incrementalดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217
การแก้ไขข้อบกพร่อง
- Room จะไม่ส่งต่อ
EmptySetResultExceptionไปยัง ตัวแฮนเดิลข้อผิดพลาดส่วนกลางอีกต่อไปเมื่อสตรีม Rx ของการค้นหาถูกทิ้งก่อน การค้นหาจะเสร็จสมบูรณ์ b/130257475 - แก้ไขข้อบกพร่องที่ Room แสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อฟังก์ชัน suspend
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 - โครูทีน: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว รวม
room-ktxไว้ในการอ้างอิงเพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ 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
- อัปเดตไวยากรณ์
RoomSQLite ให้ตรงกับ 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-ktxwithTransaction
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้ระบบทิ้งอาร์กิวเมนต์ของโทเค็นไนเซอร์หากโทเค็นไนเซอร์ที่ใช้เป็น SIMPLE b/125427014
- แก้ไขข้อบกพร่องที่ทำให้ Room ระบุฟังก์ชันที่ระงับซึ่งมีพารามิเตอร์ที่มีประเภทเป็นคลาสภายในไม่ถูกต้อง b/123767877
- แก้ไขข้อบกพร่องที่ทำให้เมธอด
@QueryDAO ที่เลื่อนเวลาที่มีคำสั่ง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
ฟีเจอร์ใหม่
- โครูทีน: ตอนนี้เมธอด 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อื่นๆ เป็นอาร์กิวเมนต์ของนิพจน์INb/119884035 - แก้ไขข้อบกพร่องที่ทำให้ LiveData ที่ส่งคืนจาก Room จะได้รับการเก็บขยะเมื่อสังเกตการณ์ตลอดเวลา ซึ่งทำให้ไม่สามารถปล่อยข้อมูลใหม่ได้อีก b/74477406
- อัปเดตการล็อกปิดของ
RoomDatabaseเพื่อลดการช่วงชิงล็อก b/117900450
เวอร์ชัน 2.1.0-alpha02
30 ตุลาคม 2018
ฟีเจอร์ใหม่
- เพิ่มการรองรับการอ้างอิง
@DatabaseViewใน@Relationb/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 อย่างถูกต้องในคลาสข้อมูล ซึ่งช่วยให้ไม่ต้องประกาศฟิลด์เป็น
varsb/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
การแก้ไขข้อบกพร่อง
แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน
RoomRxSingleและMaybeซึ่ง จะรีไซเคิลการค้นหาก่อนเวลาอันควร ทำให้เกิดปัญหาหากคุณเพิ่ม Observer มากกว่า 1 รายการลงในอินสแตนซ์SingleหรือMaybeที่ส่งคืน b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่
VACUUMฐานข้อมูล หากมีการเรียกใช้ภายในธุรกรรม b/77235565
เวอร์ชัน 1.1.0-เบต้า1
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หรือRelationb/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