ห้อง
อัปเดตล่าสุด | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
21 สิงหาคม 2024 | 2.6.1 | - | - | 2.7.0-alpha07 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency สำหรับห้องแชท คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
ทรัพยากร Dependency สำหรับห้องประกอบด้วย การย้ายข้อมูลห้องทดสอบและ ห้อง RxJava
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
ดึงดูด
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbol Processing (KSP) ksp "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$room_version") // To use Kotlin Symbol Processing (KSP) ksp("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
สำหรับข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KAPT โปรดดูเอกสารประกอบของ KAPT
สำหรับข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KSP โปรดดูเอกสารการเริ่มต้นใช้งาน KSP อย่างรวดเร็ว
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ในเอกสารประกอบของ ktx
ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์
ไม่บังคับสำหรับไลบรารีที่ไม่ใช่ Android (เช่น โมดูล Gradle ของ Java หรือ Kotlin เท่านั้น)
คุณสามารถใช้ androidx.room:room-common
เพื่อใช้คำอธิบายประกอบห้องแชท
การกำหนดค่าตัวเลือกคอมไพเลอร์
ห้องแชทมีตัวเลือกตัวประมวลผลคำอธิบายประกอบต่อไปนี้
room.schemaLocation |
directory
เปิดใช้การส่งออกสคีมาของฐานข้อมูลไปยังไฟล์ JSON ใน ไดเรกทอรี ดูการย้ายข้อมูลห้อง เพื่อดูข้อมูลเพิ่มเติม |
room.incremental |
boolean
เปิดใช้ตัวประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นของ Gradle ค่าเริ่มต้น มีค่า true
|
room.generateKotlin |
boolean
สร้างไฟล์ต้นฉบับ Kotlin แทน Java ต้องมี KSP ค่าเริ่มต้นคือ false
ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุเวอร์ชัน 2.6.0
|
ใช้ปลั๊กอิน Room Gradle
สำหรับ Room เวอร์ชัน 2.6.0 ขึ้นไป คุณใช้ปลั๊กอิน Room Gradle เพื่อ กำหนดค่าตัวเลือกสำหรับคอมไพเลอร์ห้องแชท ปลั๊กอินจะกำหนดค่าโปรเจ็กต์ในลักษณะต่อไปนี้ ที่สร้างสคีมา (ซึ่งเป็นเอาต์พุตของงานคอมไพล์และ ที่ใช้สำหรับการย้ายข้อมูลอัตโนมัติ) มีการกำหนดค่าอย่างถูกต้องให้สามารถจำลองเหตุการณ์และ บิลด์ที่แคชได้
หากต้องการเพิ่มปลั๊กอิน ในไฟล์บิลด์ Gradle ระดับบนสุด ให้ระบุ และรุ่นของปลั๊กอิน
ดึงดูด
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
ในไฟล์บิลด์ Gradle ระดับโมดูล ให้ใช้ปลั๊กอินและใช้ room
ส่วนขยาย
ดึงดูด
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
ต้องตั้งค่า schemaDirectory
เมื่อใช้ปลั๊กอิน Room Gradle ช่วงเวลานี้
จะกำหนดค่าคอมไพเลอร์ Room และงานการคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ของห้อง
(javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์แต่งกลิ่นได้ เป็นต้น
schemas/flavorOneDebug/com.package.MyDatabase/1.json
ไฟล์เหล่านี้ควรเป็น
ไว้ในที่เก็บเพื่อใช้ในการตรวจสอบและการย้ายข้อมูลอัตโนมัติ
ตัวเลือกบางอย่างไม่สามารถกำหนดค่าได้ในปลั๊กอิน Room Gradle ทุกเวอร์ชัน
แม้ว่าจะมีการสนับสนุนโดยคอมไพเลอร์ห้องแชทก็ตาม ตารางด้านล่างแสดงรายการ
และแสดงเวอร์ชันของปลั๊กอิน Room Gradle ที่เพิ่มการสนับสนุน
การกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย room
หากเวอร์ชันต่ำกว่า
หรือหากตัวเลือกยังไม่มีการรองรับ คุณสามารถใช้
ตัวเลือกตัวประมวลผลคำอธิบายประกอบแทน
ตัวเลือก | ตั้งแต่เวอร์ชัน |
---|---|
room.schemaLocation (ต้องระบุ) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
ใช้ตัวเลือกตัวประมวลผลคำอธิบายประกอบ
หากไม่ได้ใช้ปลั๊กอิน Room Gradle หรือใช้ตัวเลือกที่คุณต้องการ ที่ปลั๊กอินเวอร์ชันของคุณรองรับ คุณจะกำหนดค่าห้องได้โดยใช้ ตัวประมวลผลคำอธิบายประกอบ ตามที่อธิบายไว้ใน เพิ่มการพึ่งพาบิลด์ วิธีที่คุณ การระบุตัวเลือกคำอธิบายประกอบขึ้นอยู่กับว่าคุณใช้ KSP หรือ KAPT สำหรับห้องแชท
ดึงดูด
// 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 รู้เกี่ยวกับไดเรกทอรีนี้เมื่อทำการตรวจสอบล่าสุด
ย้ายข้อมูลฐานข้อมูลห้อง
แสดงการใช้งาน CommandLineArgumentsProvider
ทั้งหมดที่
ตำแหน่งสคีมา
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 2.7
เวอร์ชัน 2.7.0-alpha07
21 สิงหาคม 2024
ปล่อย androidx.room:room-*:2.7.0-alpha07
แล้ว เวอร์ชัน 2.7.0-alpha07 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Room Gradle จะเพิ่มสคีมาที่ส่งออกลงในแหล่งที่มาของทรัพยากร Android Instrumentation Test โดยอัตโนมัติเพื่อให้
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()
กลยุทธ์ใหม่มีดังต่อไปนี้
กำหนดออบเจ็กต์ที่คาดหวังที่ใช้งาน
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 ห้องโดยเพิ่ม API ใหม่ชื่อRoomRawQuery
ซึ่งคล้ายกับSupportSQLiteQuery
ในแง่ของการเก็บสตริง SQL ดิบและฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์กับคำสั่ง ตอนนี้ฟังก์ชันที่มีคำอธิบายประกอบ@RawQuery
สามารถรับRoomRawQuery
เป็นพารามิเตอร์เดี่ยวได้แล้ว (Iea844, b/330586815) - เพิ่ม
setQueryCallback()
มากเกินไปที่ยอมรับCoroutineContext
(Id66ff, b/309996304) - เพิ่มการรองรับเป้าหมายหลายแพลตฟอร์มของ Kotlin
linuxArm64
รายการ (I139d3, b/338268719)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ห้องแชทสร้างการเรียกไปยัง
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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ปัญหาในตัวประมวลผลคำอธิบายประกอบของห้องจะสร้างโค้ด KMP ที่ใช้ร่วมกันไม่ได้เมื่อมีการกำหนดประเภทการแสดงผลแบบหลายแผนที่ใน DAO (b/340983093)
- แก้ไขปัญหาที่ห้องไม่พบการใช้งานฐานข้อมูลที่สร้างขึ้นหากคลาสที่มีคำอธิบายประกอบ
@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 KMP ได้ในเอกสารประกอบเกี่ยวกับ KMP อย่างเป็นทางการของห้องแชท
- การสร้างรหัส Kotlin ใน KSP เปิดอยู่โดยค่าเริ่มต้นหากการประมวลผลผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างซอร์สของ Java
การเปลี่ยนแปลง API
- มีการเพิ่ม
Room.databaseBuilder()
มากเกินไปซึ่งใช้พารามิเตอร์ lambda ที่จะใช้กับฟังก์ชันที่สร้างขึ้นในห้อง เพื่อหลีกเลี่ยงการใช้การสะท้อนขณะเริ่มต้นการใช้งานRoomDatabase
ที่สร้างขึ้น ตัวอย่างการใช้งานมีดังนี้
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- เพิ่ม API สำหรับการกำหนดค่าห้องด้วย
CoroutineContext
ลงในเครื่องมือสร้างแล้ว:RoomDatabase.Builder.setQueryCoroutineContext
โปรดทราบว่าสามารถกำหนดค่าRoomDatabase
ได้เฉพาะกับผู้ดำเนินการที่ใช้setQueryExecutor
หรือด้วยบริบท Coroutine เท่านั้น โดยจะกำหนดค่าทั้ง 2 อย่างไม่ได้ - เพิ่ม API สำหรับการกำหนดค่าห้องด้วยไดรเวอร์
SQLite
แล้ว:RoomDatabase.Builder.setDriver()
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Driver API ของSQLite
ได้ที่เอกสารประกอบเกี่ยวกับ SQLite KMP - มีการเพิ่ม API สำหรับการเข้าถึง
SQLiteConnection
ที่สำคัญจาก API ไดรเวอร์แล้ว ซึ่งได้แก่RoomDatabase.useReaderConnection
และRoomDatabase.useWriterConnection
- ตอนนี้ Callback ที่เกี่ยวข้องกับ Varios Room มีเวอร์ชันที่โอเวอร์โหลดแล้ว ซึ่งได้รับ
SQLiteConnection
แทนที่จะเป็นSupportSQLiteDatabase
โดยมีวัตถุประสงค์เพื่อลบล้างเมื่อย้ายข้อมูลไปยังโปรเจ็กต์ KMP ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลการใช้ห้องในแอป Android ไปยังโมดูล KMP ทั่วไปได้ที่คำแนะนำในการย้ายข้อมูล Callback คือMigration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- รวมอาร์ติแฟกต์
androidx.room:room-ktx
ของ KTX กับandroidx.room:room-runtime
รวมถึง API ทั้งหมดของอาร์ติแฟกต์แล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนำฟีเจอร์นี้ออกจากรายการทรัพยากร Dependency
เวอร์ชัน 2.6
เวอร์ชัน 2.6.1
29 พฤศจิกายน 2023
ปล่อย androidx.room:room-*:2.6.1
แล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ปัญหาในโค้ดที่สร้างขึ้นซึ่งมีการตั้งค่าเริ่มต้นสำหรับคอลัมน์คู่ใน
EntityCursorConverter
เป็น 0 แทนที่จะเป็น 0.0 รวมทั้งได้รวมการแก้ไขที่เป็นไปได้สำหรับตัวอักษรพิมพ์เล็ก-ใหญ่ที่คล้ายกันสำหรับคอลัมน์ประเภทแบบลอยด้วย (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.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกโปรเซสเซอร์สำหรับ KSP ได้ที่เอกสารประกอบของ KSP
หมายเหตุ: โปรดทราบว่ามีการเพิ่มข้อจำกัดเพิ่มเติมเมื่อใช้ Kotlin CodeGen ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ Abstract เป็น Getters ของ DAO หรือคำค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความผิดพลาดที่เป็นเท็จว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกประการที่เพิ่มเข้ามาคือเราไม่อนุญาตให้ใช้ประเภทผลลัพธ์คอลเล็กชันที่เป็นค่าว่างใน Room สำหรับ Kotlin CodeGen อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์มีความเข้มงวดมากขึ้นในแง่ของความสามารถในการเว้นว่างเมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความว่างเปล่าของอาร์กิวเมนต์ประเภทคือสิ่งสำคัญ แต่ใน Java ระบบจะไม่สนใจอาร์กิวเมนต์นี้เป็นส่วนใหญ่ เช่น สมมติว่าคุณมีประเภทการแสดงผล "Flow<foo\>" และตารางว่างเปล่า การดำเนินการนี้จะไม่ทำให้เกิดปัญหาใน Java CodeGen แต่คุณจะได้รับข้อผิดพลาดใน Kotlin CodeGen เพื่อหลีกเลี่ยงเหตุการณ์นี้ คุณจะต้องใช้ "Flow<foo?\>" โดยปล่อยค่า Null </foo?\></foo\>
- มีการเพิ่มอาร์ติแฟกต์ใหม่สำหรับ Room Gradle Plugin ไปยัง Room ที่มีรหัส
androidx.room
ซึ่งแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกตัวประมวลผลคำอธิบายประกอบ Gradle โปรดดูรายละเอียดเพิ่มเติมที่บันทึกประจำรุ่นของห้องเวอร์ชัน 2.6.0-alpha02 - ตอนนี้ KSP รองรับคลาสของเอนทิตีห้องแชทแล้ว (4194095)
- ตอนนี้ระบบรองรับประเภทการแสดงผลแผนที่ที่ซ้อนกันในฟังก์ชัน 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
หรือทั้งคู่) ที่ระบุไว้ในคำอธิบายประกอบ@MapInfo
คุณจะต้องประกาศคำอธิบายประกอบ@MapColumn
ที่มีเพียงcolumnName
และใช้คำอธิบายประกอบในอาร์กิวเมนต์ประเภทที่เจาะจงที่กำลังอ้างอิง (คีย์หรือค่าของแผนที่) ในประเภทการแสดงผลของฟังก์ชัน DAO ทั้งนี้เนื่องจากมีการใช้คำอธิบายประกอบ@MapColumn
โดยตรงในอาร์กิวเมนต์ประเภทภายในประเภทการแสดงผลของฟังก์ชัน DAO แทนที่จะใช้ในฟังก์ชัน เช่น@MapInfo
โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบ@MapColumn
(Ib0305, b/203008711) - อัปเดตไฟล์ API เพื่อให้มีคำอธิบายประกอบสำหรับการระงับความเข้ากันได้ (I8e87a, b/287516207)
- เราได้อัปเดต API ของปลั๊กอิน Room Gradle ให้ไม่ต้องกำหนดค่าแต่ละตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินสามารถยอมรับตำแหน่งส่วนกลางของตัวแปรทั้งหมดโดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ทำให้การย้ายข้อมูลราบรื่นขึ้นแต่มีความยืดหยุ่นเพียงพอที่จะกำหนดค่าเวอร์ชันหรือสคีมาประเภทบิลด์ด้วยตนเอง ในขณะที่ยังคงรักษาประโยชน์ของปลั๊กอินไว้ (บิลด์ที่ทำซ้ำและแคชได้) (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 มีคอมมิตเหล่านี้
ปลั๊กอิน Room Gradle
รุ่นใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Room Gradle รหัส androidx.room
ซึ่งแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกตัวประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Room Gradle กำหนดค่าโปรเจ็กต์ให้สร้างสคีมาที่ใช้สำหรับการย้ายข้อมูลอัตโนมัติ และมีเอาต์พุตจากงานคอมไพล์ มีการกำหนดค่าอย่างถูกต้องให้มีบิลด์ที่ทำซ้ำและแคชได้ ปลั๊กอินมี DSL เพื่อกำหนดค่าตำแหน่งสคีมาพื้นฐาน ดังนี้
room {
schemaDirectory("$projectDir/schemas/")
}
จากนั้นปลั๊กอินจะกำหนดค่าคอมไพเลอร์ Room และงานคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์เวอร์ชันแต่ง เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json
และเช่นเคย ไฟล์เหล่านี้คือการเช็คอินในที่เก็บเพื่อใช้สำหรับการตรวจสอบความถูกต้องและการย้ายข้อมูลอัตโนมัติ เมื่อย้ายข้อมูลไปใช้ปลั๊กอินแทนตัวเลือกตัวประมวลผลคำอธิบายประกอบแล้ว ต้องคัดลอกไฟล์สคีมาที่มีอยู่ไปยังไดเรกทอรีเวอร์ชันที่สร้างขึ้นซึ่งปลั๊กอินสร้างขึ้น ขั้นตอนนี้เป็นการย้ายข้อมูลแบบครั้งเดียวที่ต้องดำเนินการด้วยตนเอง เอกสารสคีมาใน developers.android.com จะมีการอัปเดตในอนาคตเมื่อมีการแก้ไขความคิดเห็นและปลั๊กอินมีความเสถียรแล้ว ดังนั้นโปรดลองใช้งานดู
การเปลี่ยนแปลง API
- ระบบกำหนดให้
RoomDatabase.QueryCallback
เป็นอินเทอร์เฟซที่ใช้งานได้ซึ่งอนุญาตให้ใช้ Conversion ของ SAM (Iab8ea, b/281008549)
แก้ไขข้อบกพร่อง
- การแก้ไขปัญหาที่เกิดขึ้นเมื่อสร้างอินสแตนซ์ฐานข้อมูลใน Robolectric หลังจากการย้ายข้อมูลแหล่งที่มาของห้องจาก Java ไปยัง Kotlin (Ic053c, b/274924903)
เวอร์ชัน 2.6.0-alpha01
22 มีนาคม 2023
ปล่อย androidx.room:room-*:2.6.0-alpha01
แล้ว เวอร์ชัน 2.6.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การสนับสนุนคลาสสุดคุ้มใน Room for KSP Room สามารถรองรับคลาสมูลค่าในเอนทิตีแล้ว (4194095)
- เปิดใช้การสร้างรหัส Kotlin(หรือ "Kotlin CodeGen") ในห้องแชท (4297ec0) ได้แล้ว หากต้องการเปิด Kotlin CodeGen ในห้อง ให้เพิ่มชื่อตัวเลือก
room.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกโปรเซสเซอร์สำหรับ KSP ได้ที่เอกสารประกอบของ KSP
หมายเหตุ: โปรดทราบว่ามีการเพิ่มข้อจำกัดเพิ่มเติมเมื่อใช้ Kotlin CodeGen ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ Abstract เป็น Getters ของ DAO หรือคำค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความผิดพลาดที่เป็นเท็จว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกประการที่เพิ่มเข้ามาคือเราไม่อนุญาตให้ใช้ประเภทผลลัพธ์คอลเล็กชันที่เป็นค่าว่างใน Room สำหรับ Kotlin CodeGen อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์มีความเข้มงวดมากขึ้นในแง่ของความสามารถในการเว้นว่างเมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความว่างเปล่าของอาร์กิวเมนต์ประเภทคือสิ่งสำคัญ แต่ใน Java ระบบจะไม่สนใจอาร์กิวเมนต์นี้เป็นส่วนใหญ่ เช่น สมมติว่าคุณมีประเภทการแสดงผล "Flow<foo\>" และตารางว่างเปล่า การดำเนินการนี้จะไม่ทำให้เกิดปัญหาใน Java CodeGen แต่คุณจะได้รับข้อผิดพลาดใน Kotlin CodeGen เพื่อหลีกเลี่ยงเหตุการณ์นี้ คุณจะต้องใช้ "Flow<foo?\>" โดยปล่อยค่า Null </foo?\></foo\>
การเปลี่ยนแปลง API
- การป้องกันการใช้งานคอลเล็กชันที่ไม่มีข้อมูลที่มีความหมายในประเภทการส่งกลับเมธอด DAO (I777dc, b/253271782, b/259426907)
- เพิ่ม API สําหรับสร้างโฟลว์ที่แสดงการเปลี่ยนแปลงเครื่องมือติดตามการใช้งานไม่ได้ API มีประโยชน์สำหรับการสร้างสตรีมที่ตอบสนองต่อการเปลี่ยนแปลงของฐานข้อมูล (I8c790, b/252899305)
แก้ไขข้อบกพร่อง
- ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้เชิงนามธรรมเป็น Getters DAO หรือคำค้นหา DAO ในโค้ดเจนของ Kotlin แต่ควรเขียนพร็อพเพอร์ตี้ใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงการเข้าใจผิดว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ (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)
- แก้ไขปัญหาที่ทำให้ห้องแชทแสดงข้อผิดพลาดเมื่อใช้ในการทดสอบ 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()
ของห้องจะมีประสิทธิภาพมากขึ้น (219f98b) ระหว่างการระงับธุรกรรม Room จะใช้เทรดจากผู้ดำเนินการธุรกรรม เริ่มลูปเหตุการณ์ในนั้น และส่งการระงับการดำเนินการของฐานข้อมูลไปยังที่เก็บข้อมูลทั้งหมด เพื่อรวมระบบภายในโครูทีนธุรกรรม โดยปกติแล้ว เทรดธุรกรรมจะแตกต่างจากเทรดที่เริ่มทำธุรกรรม แต่ในบางกรณีจะเหมือนกัน ในการจัดการกับกรณีซ้ำดังกล่าว ระบบได้เปลี่ยนโครงสร้างภายในโค้ดwithTransaction()
เพื่อไม่ให้อาศัยงานควบคุมอีกต่อไป และจะดำเนินการบล็อกธุรกรรมที่ระงับจากภายในrunBlocking
ในชุดข้อความธุรกรรมแทน
เวอร์ชัน 2.5.0
เวอร์ชัน 2.5.0
22 กุมภาพันธ์ 2023
ปล่อย androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
และ androidx.room:room-paging-rxjava3:2.5.0
แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
เวอร์ชัน 2.5.0
11 มกราคม 2023
ปล่อย androidx.room:room-*:2.5.0
แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.4.0
- แหล่งที่มา
room-runtime
ทั้งหมดแปลงจาก Java เป็น Kotlin แล้ว โปรดทราบว่าคุณอาจพบปัญหาความไม่เข้ากันของแหล่งที่มาหากโค้ดอยู่ใน Kotlin เนื่องจากการแปลงไลบรารีเป็น Kotlin ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้กับแหล่งที่มาคือตอนนี้ในInvalidationTracker
คุณจะต้องประกาศonInvalidate()
ในObserver
ให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
นอกจากนี้ยังมีการแปลงเมธอด Getter บางเมธอดเป็นพร็อพเพอร์ตี้ที่ต้องใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ในไฟล์ Kotlin ด้วย โปรดรายงานข้อบกพร่องหากมีความไม่เข้ากันที่สำคัญ - เพิ่มคำอธิบายประกอบแป้นพิมพ์ลัดใหม่
@Upsert
ซึ่งพยายามแทรกเอนทิตีเมื่อไม่มีความขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353) - มีการเพิ่มอาร์ติแฟกต์การแบ่งหน้าห้องแชทใหม่
room-paging-rxjava2
,room-paging-rxjava3
และroom-paging-guava
เพื่อรองรับในการแบ่งหน้าห้องแชท - เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าสำหรับชี้แจงใน
@MapInfo
(Icc4b5)
เวอร์ชัน 2.5.0-rc01
7 ธันวาคม 2022
ปล่อย androidx.room:room-*:2.5.0-rc01
แล้ว เวอร์ชัน 2.5.0-rc01 มีคอมมิตเหล่านี้
- รุ่นนี้เหมือนกับ
2.5.0-beta02
เวอร์ชัน 2.5.0-beta02
9 พฤศจิกายน 2022
ปล่อย androidx.room:room-*:2.5.0-beta02
แล้ว เวอร์ชัน 2.5.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไข API ต่างๆ ที่นำอาร์กิวเมนต์การค้นหาจากตัวแปรคงที่ (
Array<Any?>
) ไปเป็นตัวแปร (Array<out Any?>
) เพื่อให้ตรงกับพฤติกรรมอาร์เรย์ของ Java (b/253531073)
เวอร์ชัน 2.5.0-beta01
5 ตุลาคม 2022
ปล่อย androidx.room:room-*:2.5.0-beta01
แล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- จำกัดเวอร์ชันขั้นต่ำที่รองรับ
@Upsert
ให้เป็น API 16 เนื่องจากไม่สามารถระบุความขัดแย้งของข้อจำกัดคีย์หลักใน API เก่าได้ (I5f67f, b/243039555)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบส่งออกตารางเงาไปยังไฟล์สคีมา
.json
อย่างไม่ถูกต้อง ทำให้ไฟล์เสียหาย (I4f83b, b/246751839)
เวอร์ชัน 2.5.0-alpha03
24 สิงหาคม 2022
ปล่อย androidx.room:room-*:2.5.0-alpha03
แล้ว เวอร์ชัน 2.5.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มคำอธิบายประกอบแป้นพิมพ์ลัดใหม่
@Upsert
ซึ่งพยายามแทรกเอนทิตีเมื่อไม่มีความขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353)
แก้ไขข้อบกพร่อง
- ตอนนี้ห้องแชทจะแสดง
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/203}
การเปลี่ยนแปลง API
room-runtime
ทั้งหมดแปลงจาก Java เป็น Kotlin แล้ว (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25/606},หมายเหตุ: คุณอาจพบปัญหาความไม่เข้ากันของแหล่งที่มาเนื่องจากการแปลงไลบรารีเป็น Kotlin หากรหัสของคุณใช้ Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องจัดการกรณีเหล่านี้ ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้กับแหล่งที่มาคือตอนนี้ใน
InvalidationTracker
คุณจะต้องประกาศonInvalidate()
ในObserver
ให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
- เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าสำหรับชี้แจงใน
@MapInfo
(Icc4b5) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาต
@Ignore
อีกครั้งใน Getter พร็อพเพอร์ตี้ (Ifc2fb)
แก้ไขข้อบกพร่อง
- อัลกอริทึมการเรียนรู้เกี่ยวกับความละเอียดของคอลัมน์ซ้ำกัน ตอนนี้ "ห้อง" จะพยายามแก้ไขคอลัมน์ที่ไม่ชัดเจนในการค้นหาแบบหลายแผนที่ ซึ่งจะทำให้ JOIN ที่มีตารางที่มีตารางชื่อเดียวกันสามารถจับคู่กับออบเจ็กต์ข้อมูลผลลัพธ์ได้อย่างถูกต้อง (I4b444, b/201306012, b/212279118)
เวอร์ชัน 2.5.0-alpha01
23 กุมภาพันธ์ 2022
ปล่อย androidx.room:room-*:2.5.0-alpha01
แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไขปัญหาที่ไม่มีการบังคับใช้การใช้งานห้อง
@IntDef
ในแหล่งที่มาของ Kotlin (I75f41, b/217951311) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาต
@Query
อีกครั้งใน Getter พร็อพเพอร์ตี้ (I0a09b) - แปลง "ห้องพักทั่วไป" จาก Java เป็น Kotlin แล้ว (I69c48, b/206858235)
หมายเหตุ: คุณอาจพบปัญหาความไม่เข้ากันของแหล่งที่มา เนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์ที่ใช้ร่วมกันระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณใช้ Kotlin และเรียกใช้ Room เวอร์ชันเก่า โค้ดใหม่จะต้องใช้ ".Companion" ต่อท้ายเมื่อเข้าถึงคุณสมบัติเหล่านี้
- แปลงการย้ายข้อมูลห้องจาก Java ไปยัง Kotlin แล้ว (I2724b, b/206858622)
- แปลงไฟล์ที่เกี่ยวข้อง
paging
ไฟล์ในroom-runtime
จาก Java เป็น Kotlin (I82fc8, b/206859668) - เพิ่ม API สำหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)
แก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยในห้องซึ่งจะใช้แหล่งที่มา
ชื่อของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้ในฐานะ Getters/setters
(ก่อนหน้านี้คือใช้ชื่อ JVM ของฟังก์ชัน ซึ่งต่างจาก
สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากใช้คำอธิบายประกอบ
@JvmName
ที่กำหนดเองเพื่อจับคู่ Getters/setters สำหรับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจาก อัปเดต (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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างรหัสสำหรับฟังก์ชันระงับ Dao
@Transaction
ซึ่งมีเนื้อความที่สร้างเมธอดอินเทอร์เฟซเริ่มต้นเนื่องจากการคอมไพล์ด้วย-Xjvm-default=all
หรือค่าที่เทียบเท่า (Ia4ce5) - การแก้ไขข้อบกพร่องที่ห้องสร้างโค้ดสำหรับวิธีการค้นหาประเภทการแสดงผล
Array<ByteArray>
(If086e, b/213789489)
เวอร์ชัน 2.4.1
เวอร์ชัน 2.4.1
12 มกราคม 2022
ปล่อย androidx.room:room-*:2.4.1
แล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยในห้องซึ่งจะใช้แหล่งที่มา
ชื่อของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้ในฐานะ Getters/setters
(ก่อนหน้านี้คือใช้ชื่อ JVM ของฟังก์ชัน ซึ่งต่างจาก
สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากใช้คำอธิบายประกอบ
@JvmName
ที่กำหนดเองเพื่อจับคู่ Getters/setters สำหรับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจาก อัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
15 ธันวาคม 2021
ปล่อย androidx.room:room-*:2.4.0
แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- การย้ายข้อมูลอัตโนมัติ: ขณะนี้ห้องแชทมี API สำหรับการสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ห้องแชททราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
สามารถใช้เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลไปและกลับโดยอัตโนมัติได้ เมื่อห้องแชทต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือลบตารางและคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบเกี่ยวกับ@AutoMigration
- การแทรกการขึ้นต่อกันในการย้ายข้อมูลอัตโนมัติ:
@ProvidedAutoMigrationSpec
เป็น API ใหม่สำหรับประกาศว่าจะให้บริการAutoMigrationSpec
ขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งจะทำให้เฟรมเวิร์กการแทรกทรัพยากร Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องทรัพยากร Dependency ที่ซับซ้อน - การสนับสนุนโปรแกรมช่วยทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ:
MigrationTestHelper
ของห้องได้รับการอัปเดตให้สนับสนุนการย้ายข้อมูลอัตโนมัติด้วย API ตัวสร้างใหม่ที่ได้รับคลาสฐานข้อมูลภายใต้การทดสอบ วิธีนี้จะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้ในลักษณะเดียวกันโดยอัตโนมัติในช่วงrunMigrationsAndValidate
- การสนับสนุนการแบ่งหน้าห้อง: เปิดตัว
androidx.room:room-paging
ซึ่งรองรับการแบ่งหน้า 3.0 ในเครื่องสำหรับการค้นหาห้องที่แสดงandroidx.paging.PagingSource
- วิธีการค้นหาเชิงสัมพันธ์: ขณะนี้ห้องแชทรองรับเมธอดประเภทการแสดงผลแบบหลายแผนที่
@Dao
ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของหลายแผนที่ที่รองรับ ได้แก่Map
,SparseArray
,LongSparseArray
รวมถึงImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guava
เวอร์ชัน 2.4.0-rc01
1 ธันวาคม 2021
ปล่อย androidx.room:room-*:2.4.0-rc01
แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดตทรัพยากร Dependency ของห้องใน 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 ใหม่ ขอแนะนำให้ระบุ ที่ได้รับ TypeConverters ไม่เป็น null เนื่องจากเครื่องมือวิเคราะห์ใหม่สามารถ ให้รวมการตรวจสอบด้วยค่าว่าง โปรดทราบว่าการดำเนินการนี้ไม่มีผลต่อผู้ใช้ที่ใช้ KAPT หรือ Java เป็น ตัวประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ไม่มีข้อมูลความสามารถในการเว้นว่าง ในประเภทต่างๆ (Ia88f9, b/193437407)
- แก้ไขข้อบกพร่องเมื่อห้องไม่สามารถคอมไพล์ด้วยข้อผิดพลาด 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 ที่สร้างจากการแบ่งหน้าห้องในขณะนี้
ใช้
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 สำหรับประเภทผลตอบแทนแบบหลายแมปใน 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 (ไอแอฟ)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการเรียงลำดับผลการค้นหามัลติแมปไม่ถูกต้องเมื่อคำค้นหามีอนุประโยค ORDER BY ของคอลัมน์จากคีย์ของแผนที่ (I6B887)
การสนับสนุนภายนอก
- เพิ่ม API ใหม่เพื่อระบุลำดับดัชนีใน @ดัชนี ขอขอบคุณ Nikita Zhelonkin (I033fc)
เวอร์ชัน 2.4.0-alpha04
21 กรกฎาคม 2021
ปล่อย androidx.room:room-*:2.4.0-alpha04
แล้ว เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ขณะนี้ Room รองรับเมธอด
@Dao
ประเภทการแสดงผลหลายแผนที่ ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับคือ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
ซึ่งรองรับการแบ่งหน้า 3.0 ในเครื่องสำหรับการค้นหาห้องที่แสดงandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
อาร์ติแฟกต์นี้จะแทนที่การใช้งาน
androidx.paging.PagingSource
ที่สร้างโดย Room ด้วยอาร์ติแฟกต์ที่สร้างขึ้นจาก Paging 3.0 API การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์แตกต่างกัน ดังนั้นคีย์ใดๆ ที่ส่งไปยัง PagingSource ของ Room ด้วยตนเองจะต้องนับรวมกับการเปลี่ยนแปลงการทํางานนี้ รวมถึง defaultKey ที่ส่งผ่านเครื่องมือสร้างของเพจเจอร์ หน้าจะเริ่มโหลดจากKey
โดยมีKey
เป็นรายการแรกที่โหลด ซึ่งจะแตกต่างจากลักษณะการทำงานเดิมที่LoadParams.Refresh.Key
จะถือว่าเป็นตำแหน่งการเลื่อนของผู้ใช้และระบบจะโหลดรายการทั้งก่อนและหลังคีย์คุณจะใช้อาร์ติแฟกต์หรือไม่ก็ได้ และการเลือกไม่ใช้จะเปลี่ยนไปใช้การรองรับ Paging 3.0 ที่มีอยู่แล้วซึ่งนำมาใช้ในห้อง 2.3 อย่างไรก็ตาม อาร์ติแฟกต์นี้จะไม่บังคับสำหรับการเปิดตัวในอนาคตสำหรับผู้ที่ใช้ห้องที่มีหน้าเวอร์ชัน 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
- อัปเดต
MigrationTestHelper
ของห้องเพื่อรองรับการย้ายข้อมูลอัตโนมัติด้วยการสร้าง API ตัวสร้างใหม่ที่ได้รับคลาสฐานข้อมูลที่อยู่ระหว่างการทดสอบ วิธีนี้จะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้ในลักษณะเดียวกันโดยอัตโนมัติในช่วงrunMigrationsAndValidate
แก้ไขข้อบกพร่อง
แก้ไขปัญหาเกี่ยวกับไลบรารีเนทีฟของ SQLite ในห้องเพื่อรองรับชิป M1 ของ Apple (b/174695268
แก้ไขปัญหาที่ห้องพักไม่เกิดข้อผิดพลาดเมื่อประเภทการแสดงผลของฟังก์ชัน @Transaction เป็นโฟลว์ (I56ddd, b/190075899)
แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่เกี่ยวข้องกับดัชนี b/177673291
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การสนับสนุน KSP ของห้องขึ้นอยู่กับ
1.5.10-1.0.0-beta01
ของ KSP แล้ว (1ecb11, b/160322705)
เวอร์ชัน 2.4.0-alpha02
5 พฤษภาคม 2021
ปล่อย androidx.room:room-*:2.4.0-alpha02
แล้ว เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@ProvidedAutoMigrationSpec
คือ API ใหม่สำหรับประกาศว่าจะให้บริการAutoMigrationSpec
ขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งจะทำให้เฟรมเวิร์กการแทรกทรัพยากร Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องทรัพยากร Dependency ที่ซับซ้อน
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติในกรณีที่มีการสร้าง
@DatabaseView
ใหม่อย่างไม่ถูกต้อง
การสนับสนุนภายนอก
- แก้ไขปัญหาใน
JournalMode.TRUNCATE
ของห้องที่มีการเรียกใช้ CallbackInvalidationTracker
ไม่ถูกต้อง ช้าเกินไป หรือไม่ถูกต้องเลย ขอขอบคุณ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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การย้ายข้อมูลอัตโนมัติ: ขณะนี้ห้องแชทมี API สำหรับการสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ห้องแชททราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
สามารถใช้เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลไปและกลับโดยอัตโนมัติได้ เมื่อห้องแชทต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือลบตารางและคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ@AutoMigration
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
defaultValue
ที่มีวงเล็บเกินได้รับการตรวจสอบอย่างไม่ถูกต้องจากการตรวจสอบสคีมาของห้อง b/182284899
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
21 เมษายน 2021
ปล่อย androidx.room:room-*:2.3.0
แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.2.0
- การรองรับ Enum ในตัว: Room จะใช้ค่าเริ่มต้นเป็น Enum เป็นสตริง และเครื่องมือแปลงประเภทเป็น ในทางกลับกัน หากไม่มีให้ หากมีตัวแปลงประเภทสำหรับ enum อยู่แล้ว ห้องจะจัดลำดับความสำคัญให้ใช้เครื่องมือดังกล่าวแทนตัวเลือกเริ่มต้น
- การติดต่อกลับจากคำค้นหา: ขณะนี้ห้องแชทมี API การติดต่อกลับทั่วไป RoomDatabase.QueryCallback สำหรับเมื่อมีการเรียกใช้คำค้นหา ซึ่งอาจเป็นประโยชน์สำหรับการเข้าสู่ระบบบิลด์การแก้ไขข้อบกพร่อง คุณตั้งค่าการติดต่อกลับผ่าน
RoomDatabase.Builder#setQueryCallback()
ได้ - การปรับปรุงแพ็กเกจล่วงหน้า: ตอนนี้ห้องแชทมี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่บรรจุแพ็กเกจไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะช่วยในกรณีต่างๆ เช่น เมื่อฐานข้อมูลก่อนแพ็กเกจถูกบีบอัดด้วย gzip
- จัดทำ Type Converters: ขณะนี้ Room มี API สำหรับให้อินสแตนซ์ของตัวแปลงประเภท เพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทำเครื่องหมายตัวแปลงประเภทที่จะมีให้สำหรับห้อง ให้ใช้คำอธิบายประกอบใหม่ @ProvidedTypeConverter
- การสนับสนุน RxJava3: ขณะนี้ห้องแชทรองรับประเภท RxJava3 แล้ว เช่นเดียวกับ RxJava2 คุณสามารถประกาศเมธอด DAO ซึ่งมีประเภทผลลัพธ์เป็น Flowable, Single, Never และ Completable นอกจากนี้ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่เพื่อรองรับ RxJava3 - การรองรับหน้า 3.0: ขณะนี้ห้องแชทจะรองรับการสร้างการใช้งานสำหรับเมธอดที่มีคำอธิบายประกอบ
@Query
ซึ่งมีประเภทการแสดงผลเป็นandroidx.paging.PagingSource
เวอร์ชัน 2.3.0-rc01
24 มีนาคม 2021
ปล่อย androidx.room:room-*:2.3.0-rc01
แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ป้องกันไม่ให้การค้นหาโฟลว์ Coroutine ที่สร้างโดยห้องใช้งานในบล็อก
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)
การสนับสนุนภายนอก
- อนุญาตให้ห้องแชทยอมรับประเภทการแสดงผล 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 KSP
KSP จะแทนที่ KAPT ในการเรียกใช้ตัวประมวลผลคำอธิบายประกอบบนคอมไพเลอร์ Kotlin โดยตรง ซึ่งช่วยลดเวลาในการสร้างได้อย่างมาก
หากต้องการใช้ห้องแชทกับ 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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ฐานข้อมูลที่ปิดอัตโนมัติ: ตอนนี้ห้องแชทสามารถปิดฐานข้อมูลที่ไม่มีการเข้าถึงหลังจากระยะเวลาหนึ่งๆ ได้แล้ว ฟีเจอร์นี้อยู่ในขั้นทดลองและเปิดใช้งานได้โดยโทรหา
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 อยู่แล้ว ห้องจะจัดลำดับความสำคัญให้ใช้เครื่องมือดังกล่าวแทนตัวเลือกเริ่มต้น (b/73132006)
ปัญหาที่ทราบ
- หากมีตัวแปลงประเภททางเดียวสำหรับการอ่านค่า Enum อยู่แล้ว Room อาจใช้ตัวแปลงสตริงในตัวเป็น Enum โดยไม่ได้ตั้งใจ ซึ่งอาจใช้งานได้ที่ไม่พึงประสงค์ ปัญหานี้เป็นที่ทราบแล้ว และสามารถแก้ไขได้โดยการทำให้เป็นเครื่องแปลงสัญญาณสองทาง ดู: b/175707691
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room ปิดใช้การประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)
- แก้ไขปัญหาการค้นหาคลาสที่สร้างขึ้นในห้องเมื่อมีการใช้ตัวโหลดคลาสหลายรายการ ขอขอบคุณที่แก้ไขปัญหา "Serendipity | 892449346@qq.com" (b/170141113)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่อ Kotlin
@Dao
มีคลาสพื้นฐานที่มี generics เป็นพื้นฐานใน JVM (b/160258066)
การสนับสนุนภายนอก
- ตอนนี้ห้องแชทจะใช้
beginTransactionNonExclusive
โดยค่าเริ่มต้นหากเปิดใช้โหมด WAL และ API ระดับ 16 ขึ้นไป ขอขอบคุณ ‘Ahmed I. คาลิล | ahmedibrahimkhali@gmail.com’! (b/126258791)
เวอร์ชัน 2.3.0-alpha03
14 ตุลาคม 2020
ปล่อย androidx.room:room-*:2.3.0-alpha03
แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของตัวแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทำเครื่องหมายเครื่องมือแปลงประเภทซึ่งจะมีให้ในห้อง ให้ใช้คำอธิบายประกอบใหม่
@ProvidedTypeConverter
ขอขอบคุณ "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210)ขณะนี้ห้องแชทมี 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 ด้วยประเภทขั้นสูงทั่วไปที่มี "Primitives" ของ Kotlin (Ice6bb, b/160258066)
อัปเดตเอกสารเกี่ยวกับการเพิ่ม/นำวิธีการของผู้สังเกตการณ์ออกเพื่อชี้แจงการแยกชุดข้อความ (Ifd1d9, b/153948821)
แก้ไขปัญหาที่ห้องมีการตรวจสอบตาราง FTS ที่ประกาศคอลัมน์แถวแนวนอนอย่างไม่ถูกต้อง (d62ebc, b/145858914)
การสนับสนุนภายนอก
แก้ไขปัญหาเกี่ยวกับภาษาตุรกี (5746e3), b/68159494
แทนที่
ConcurrentHashMap
ในRoomDatabase
ด้วยCollections.synchronizedMap()
เพื่อหลีกเลี่ยงปัญหาใน Android Lollipop (d1cfc7, b/162431855)เพิ่ม onOpenPrepackagedDatabase callback เมื่อมีการใช้แพ็กเกจล่วงหน้า คัดลอกฐานข้อมูลแล้ว (I1ba74, b/148934423)
เวอร์ชัน 2.3.0-alpha02
22 กรกฎาคม 2020
ปล่อย androidx.room:room-*:2.3.0-alpha02
แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การสนับสนุน RxJava3: ขณะนี้ห้องแชทรองรับประเภท RxJava3 แล้ว เช่นเดียวกับ RxJava2 คุณสามารถประกาศเมธอด DAO ซึ่งมีประเภทผลลัพธ์เป็น Flowable, Single, Never และ Completable นอกจากนี้ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่เพื่อรองรับ RxJava3 (b/152427884)
การเปลี่ยนแปลง API
- รองรับการประกาศ
@TypeConverter
ในคลาส Kotlin Object แล้ว (b/151110764) - ตอนนี้ตัวเลือกการประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นของห้องแชทเปิดอยู่โดยค่าเริ่มต้น (b/112110217)
เวอร์ชัน 2.3.0-alpha01
10 มิถุนายน 2020
ปล่อย androidx.room:room-*:2.3.0-alpha01
แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การรองรับหน้า 3.0: ขณะนี้ห้องแชทจะรองรับการสร้างการใช้งานสำหรับ
@Query
เมธอดที่มีคำอธิบายประกอบซึ่งมีประเภทการแสดงผลเป็นandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
การเปลี่ยนแปลง API
@RewriteQueriesToDropUnusedColumns
เป็นคำอธิบายประกอบใหม่เพื่อความสะดวก ซึ่งทำให้ห้องเขียนการฉายภาพ "*" ใหม่ในการค้นหาเพื่อนำคอลัมน์ที่ไม่ได้ใช้ในผลการค้นหาออก- ตัวเลือกโปรเซสเซอร์
room.expandProjection
เลิกใช้งานแล้ว ใช้@RewriteQueriesToDropUnusedColumns
เพื่อแทนที่การค้นหาที่มีการเพิ่มประสิทธิภาพสำหรับห้องด้วยการฉายดาว โปรดทราบว่า@RewriteQueriesToDropUnusedColumns
ไม่ได้แทนที่โซลูชันความขัดแย้งของคอลัมน์room.expandProjection
ที่เสนอเกี่ยวกับประเภทการแสดงผลที่มีช่อง@Embedded
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ตรวจไม่พบเวอร์ชัน JDK ที่ใช้เปิดใช้ตัวประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นอย่างถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
- ตอนนี้ Room ได้ฝังทรัพยากร Dependency ของ 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 ในตัวประมวลผลคำอธิบายประกอบสำหรับห้องที่จะทำให้คอมไพเลอร์ขัดข้องเนื่องจากมีการคอมไพล์แบบขนาน (b/146217083)
เวอร์ชัน 2.2.4
เวอร์ชัน 2.2.4
19 กุมภาพันธ์ 2020
ปล่อย androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
และ androidx.room:room-testing:2.2.4
แล้ว เวอร์ชัน 2.2.4 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการระงับธุรกรรมที่จะมีการติดตายหากส่วน Coroutine ถูกยกเลิกอย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มต้นจริง (b/148181325)
- แก้ไขปัญหาการใช้ @Generated อย่างไม่ถูกต้องเมื่อสร้างด้วย JDK 9 (b/146538330)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่ออินเทอร์เฟซ DAO ใน Kotlin มีฟังก์ชันที่เป็นรูปธรรม (b/146825845)
เวอร์ชัน 2.2.3
เวอร์ชัน 2.2.3
18 ธันวาคม 2019
ปล่อย androidx.room:room-*:2.2.3
แล้ว เวอร์ชัน 2.2.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ห้องแชทไม่สามารถตรวจสอบฐานข้อมูลที่ยังไม่ได้ผ่านการย้ายข้อมูลและมีแฮชเดิมที่มีดัชนีในสคีมา (b/139306173)
เวอร์ชัน 2.2.2
เวอร์ชัน 2.2.2
20 พฤศจิกายน 2019
ปล่อย androidx.room:room-*:2.2.2
แล้ว เวอร์ชัน 2.2.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การรวบรวมความสัมพันธ์แบบหนึ่งต่อหนึ่งที่มีมากกว่า 999 แถวจะทำให้ห้องแชทแสดงรายการที่เกี่ยวข้องแบบ Null (b/143105450)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
23 ตุลาคม 2019
ปล่อย androidx.room:room-*:2.2.1
แล้ว เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ห้องแชทจะแจ้งเตือนเกี่ยวกับ
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()
จะใช้เมื่อไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ใน โฟลเดอร์ Asset ของ APK ส่วนcreateFromFile()
จะใช้เมื่อไฟล์นั้น ในสถานที่ที่กำหนดเอง การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของ ในการย้ายข้อมูลที่ก่อให้เกิดความเสียหาย ซึ่งในระหว่างการย้ายข้อมูลสำรอง ห้องจะพยายาม เพื่อคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้ง ถ้ามี มิฉะนั้นจะสำรองเป็น ลบและสร้างตารางทั้งหมดใหม่ 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: ตอนนี้เมธอด DAO ของ
@Query
สามารถเป็นประเภทการแสดงผลFlow<T>
ได้แล้ว โฟลว์ที่แสดงผลจะสร้างชุดค่าใหม่อีกครั้งหากตารางการสังเกตการณ์ใน การค้นหาใช้ไม่ได้ การประกาศฟังก์ชัน DAO ที่มีผลตอบแทนChannel<T>
type มีข้อผิดพลาด ห้องจะสนับสนุนให้คุณใช้Flow
จากนั้นใช้ ฟังก์ชันใกล้เคียงที่จะแปลงFlow
เป็นChannel
b/130428884 - ตัวประมวลผลคำอธิบายประกอบส่วนเพิ่มของ Gradle: ขณะนี้ฟีเจอร์ห้องแชทแยกแบบ Gradle
ตัวประมวลผลคำอธิบายประกอบและความสามารถในการเพิ่มค่าสามารถเปิดใช้ได้ผ่านโปรเซสเซอร์
ตัวเลือก
room.incremental
โปรดดู ตัวเลือกคอมไพเลอร์ห้อง เพื่อดูข้อมูลเพิ่มเติม หากพบปัญหา โปรดส่ง ที่นี่ เราวางแผนที่จะเปิดใช้ความสามารถในการเพิ่มขึ้นโดยค่าเริ่มต้นสำหรับเวอร์ชันเสถียรในอนาคต b/112110217 - การคาดการณ์การขยาย: ตัวเลือกคอมไพเลอร์ทดสอบแบบใหม่
เพิ่ม
room.expandProjection
แล้ว ซึ่งทำให้ Room เขียนคำค้นหาใหม่ด้วย เส้นโครงดาวที่จะมีเฉพาะคอลัมน์ใน POJO ประเภทการแสดงผล สำหรับ ตัวอย่างเช่น สำหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")
ซึ่งแสดงผล POJO ตั้งชื่อSongIdAndTitle
ที่มีเพียง 2 ฟิลด์ จากนั้น Room จะเขียนคำสั่งใหม่ ไปยังSELECT id, title FROM Song
เพื่อให้ชุดคอลัมน์ต่ำสุด เพื่อตอบสนองประเภทการแสดงผลที่มีการดึงข้อมูล ซึ่งจะช่วยกำจัด คำเตือนCURSOR_MISMATCH
รายการที่แสดงเมื่อคำค้นหาแสดงผลเกิน ที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดงผล
เวอร์ชัน 2.2.0-rc01
5 กันยายน 2019
ปล่อย androidx.room:room:2.2.0-rc01
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ไม่มีการเปลี่ยนแปลงสาธารณะตั้งแต่ห้อง 2.2.0-beta01
เวอร์ชัน 2.2.0-beta01
22 สิงหาคม 2019
ปล่อย androidx.room:room-*:2.2.0-beta01
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่คำค้นหาโฟลว์ Coroutine จะหยุดเรียกใช้ค่าใหม่หลังจากผ่านไประยะหนึ่ง (b/139175786)
- แก้ไขข้อบกพร่องที่ห้องแชทไม่ยอมรับรหัสแฮชของสคีมาเดิมขณะเปิดฐานข้อมูลที่ไม่ได้ย้ายข้อมูลตั้งแต่ห้อง 1.0 ซึ่งทำให้เกิดข้อขัดข้องรันไทม์เนื่องจากสคีมาไม่ถูกต้อง (b/139306173)
เวอร์ชัน 2.2.0-alpha02
7 สิงหาคม 2019
ปล่อย androidx.room:room-*:2.2.0-alpha02
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- โฟลว์Coroutines: ตอนนี้เมธอด DAO ของ
@Query
สามารถเป็นประเภทการแสดงผลFlow<T>
ได้แล้ว โฟลว์ที่แสดงผลจะสร้างชุดค่าใหม่อีกครั้งหากตารางการสังเกตการณ์ใน การค้นหาใช้ไม่ได้ การประกาศฟังก์ชัน DAO ที่มีผลตอบแทนChannel<T>
type มีข้อผิดพลาด ห้องจะสนับสนุนให้คุณใช้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
สำหรับกรณีที่ห้องทำการย้ายฐานข้อมูลอย่างไม่เหมาะสม b/79962330
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ห้องจะสร้างรหัสที่ไม่ถูกต้องโดยใช้เมธอดเป็นช่อง ตัวตั้งค่าเมื่อช่องได้รับการป้องกัน b/136194628
- แก้ไขข้อบกพร่องที่ทำให้ invalidationTracker แสดงผล NPE ในไม่กี่วินาที กระบวนการเมื่อเปิดใช้การทำให้เป็นโมฆะแบบหลายอินสแตนซ์และการทำให้เป็นโมฆะ บริการหยุดทำงาน b/137454915
- แก้ไขข้อบกพร่องที่ "ห้องพัก" ระบุประเภทการส่งคืนไม่ถูกต้อง
รับค่าฟังก์ชันการระงับที่มีหมายเหตุ
@RawQuery
b/137878827 - อัปเดตโค้ดที่สร้างขึ้นสำหรับ
@Relation
เมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB เพื่อใช้ByteBuffer
ที่เทียบเคียงได้ b/137881998 - แก้ไขข้อบกพร่องที่ Room จะร้องเรียนเกี่ยวกับตัวตั้งค่าที่หายไปใน POJO ซึ่งใช้เป็น
พารามิเตอร์เอนทิตีบางส่วนของ
@Insert
,@Update
และ@Delete
b/138664463 - แก้ไขข้อบกพร่องที่ Room จะร้องเรียนเกี่ยวกับผู้สูญหายและ ตัวตั้งค่าสำหรับ
ละเว้นคอลัมน์ผ่าน
@Entity
เมื่อมีการใช้คลาสเอนทิตีใน DAO บางรายการ b/138238182 - แก้ไขข้อบกพร่องที่ Room ไม่แปลงอาร์กิวเมนต์การเชื่อมโยงที่มีชื่อเป็น อาร์กิวเมนต์ตำแหน่งที่ทำให้เกิดข้อยกเว้นรันไทม์เมื่อดำเนินการค้นหาด้วย พารามิเตอร์ที่ใช้ซ้ำ b/137254857
เวอร์ชัน 2.2.0-alpha01
10 กรกฎาคม 2019
ฟีเจอร์ใหม่
- ฐานข้อมูลที่จัดทำแพ็กเกจไว้ล่วงหน้า: ตอนนี้ API ใหม่ 2 รายการใน
RoomDatabase.Builder
ได้รับการใช้แล้ว พร้อมสำหรับการสร้างRoomDatabase
จากฐานข้อมูลที่มีการป้อนข้อมูลอยู่แล้วcreateFromAsset()
จะใช้เมื่อไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ใน โฟลเดอร์ Asset ของ APK ส่วนcreateFromFile()
จะใช้เมื่อไฟล์นั้น ในสถานที่ที่กำหนดเอง การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของ ในการย้ายข้อมูลที่ก่อให้เกิดความเสียหาย ซึ่งในระหว่างการย้ายข้อมูลสำรอง ห้องจะพยายาม เพื่อคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้ง ถ้ามี มิฉะนั้นจะสำรองเป็น ลบและสร้างตารางทั้งหมดใหม่ 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: ขณะนี้ฟีเจอร์ห้องแชทแยกแบบ Gradle
ตัวประมวลผลคำอธิบายประกอบและความสามารถในการเพิ่มค่าสามารถเปิดใช้ได้ผ่านโปรเซสเซอร์
ตัวเลือก
room.incremental
โปรดดู ตัวเลือกคอมไพเลอร์ห้อง เพื่อดูข้อมูลเพิ่มเติม หากพบปัญหา โปรดส่ง ที่นี่ เราวางแผนที่จะเปิดใช้ความสามารถในการเพิ่มขึ้นโดยค่าเริ่มต้นสำหรับเวอร์ชันเสถียรในอนาคต b/112110217
แก้ไขข้อบกพร่อง
- ห้องแชทจะไม่เผยแพร่
EmptySetResultException
ไปยัง ตัวแฮนเดิลข้อผิดพลาดส่วนกลางเมื่อสตรีม Rx ของคำค้นหาถูกกำจัดไปแล้วก่อน การค้นหาเสร็จสมบูรณ์ b/130257475 - แก้ไขข้อบกพร่องที่ห้องแสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อมีการระงับ
ฟังก์ชัน DAO ที่มีคำอธิบายประกอบด้วย
@RawQuery
ไม่มีประเภทการแสดงผล b/134303897 - Room จะไม่สร้างอะแดปเตอร์ DAO ที่มีประเภทข้อมูลดิบอีกต่อไป b/135747255
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
13 มิถุนายน 2019
ปล่อยห้อง 2.1.0 แล้วโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.0.0
- FTS: Room รองรับเอนทิตีที่มีการแมปแล้ว
ตาราง FTS3 หรือ FTS4 ชั้นเรียนที่มีคำอธิบายประกอบ
@Entity
สามารถมีคำอธิบายประกอบเพิ่มเติมด้วย@Fts3
หรือ@Fts4
เพื่อประกาศได้แล้ว ชั้นเรียนที่มีตารางการค้นหาข้อความแบบเต็ม ตัวเลือก FTS สำหรับข้อมูลเพิ่มเติม สามารถปรับแต่งได้ผ่านเมธอดของคำอธิบายประกอบ - ข้อมูลพร็อพเพอร์ตี้: ขณะนี้ห้องแชทรองรับการประกาศชั้นเรียนเป็นการค้นหาที่จัดเก็บไว้ หรือที่รู้จักกัน
เป็นข้อมูลพร็อพเพอร์ตี้ โดยใช้
คำอธิบายประกอบ
@DatabaseView
- Couroutines: เมธอด DAO สามารถระงับฟังก์ชันได้แล้ว รวม
room-ktx
ในทรัพยากร Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ ktx ยังมีฟังก์ชันของส่วนขยายRoomDatabase.withTransaction
สำหรับ ดำเนินธุรกรรมฐานข้อมูลภายในโคโรทีน - ค่าอัตโนมัติ: ห้องแชทรองรับการประกาศค่าแล้ว
ค่าอัตโนมัติ
ใส่คำอธิบายประกอบคลาสเป็นเอนทิตีและ POJO คำอธิบายประกอบห้องแชท
@PrimaryKey
ประกาศ@ColumnInfo
,@Embedded
และ@Relation
ใน Auto ได้แล้ว วิธีการเชิงนามธรรมของคลาสที่มีคำอธิบายประกอบ โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้อง จะแสดงร่วมกับ@CopyAnnotations
เพื่อให้ Room เข้าใจได้อย่างถูกต้อง - การสนับสนุนแบบไม่พร้อมกันเพิ่มเติม: เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
พร้อมด้วย@Query
ที่มีINSERT
,DELETE
หรือUPDATE
คำสั่ง ตอนนี้รองรับประเภทการคืนสินค้า RxCompletable
,Single
,Maybe
, และ Guava ประเภทListenableFuture
และสามารถระงับ 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
- แก้ไขบั๊กที่ RemoveationTracker ทำให้เกิดข้อขัดข้องเมื่อ การตรวจสอบการโมฆะจะเกิดขึ้นพร้อมกัน 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
เป็นรีซีฟเวอร์อีกต่อไป การดำเนินการนี้จะป้องกันไม่ให้มีการข้าม Wrapper เพิ่มเติมcoroutineScope { }
ที่จำเป็นสำหรับการใช้งานต่างๆ ในบล็อกธุรกรรมพร้อมกัน
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จับคู่กับ TypeConverter สำหรับ Kotlin DAO ไม่ได้ ที่มีพารามิเตอร์ประเภทคอลเล็กชัน b/122066791
เวอร์ชัน 2.1.0-alpha06
22 มีนาคม 2019
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- ขณะนี้การค้นหาธุรกรรมแบบไม่พร้อมกันได้รับการเรียงอันดับแล้วว่า Room จะไม่นำไปใช้
เทรดมากกว่า 1 รายการสำหรับการดำเนินการธุรกรรมฐานข้อมูล
เพิ่ม
RoomDatabase.Builder.setTransactionExecutor(Executor)
เพื่ออนุญาตแล้ว การกำหนดค่าผู้ดำเนินการที่จะใช้สำหรับการทำธุรกรรม RoomDatabase.runInTransaction(Callable)
จะไม่เลือกการรวมอีกต่อไป ข้อยกเว้นในรันไทม์ b/128623748
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่เครื่องมือติดตามการใช้งานไม่ได้หยุดสังเกตเนื้อหา หากผู้สังเกตการณ์สำหรับทั้งตารางเนื้อหาและ FTS สำหรับเนื้อหาภายนอก เพิ่มตารางแล้ว b/128508917
- อัปเดตไวยากรณ์ SQLite ของห้องให้ตรงกับ SQLite 3.24.0 b/110883668
เวอร์ชัน 2.1.0-alpha05
13 มีนาคม 2019
ฟีเจอร์ใหม่
- ฟังก์ชันของส่วนขยาย
RoomDatabase.withTransaction
ช่วยให้คุณทำธุรกรรมฐานข้อมูลภายในโครูทีนได้อย่างปลอดภัย ฟังก์ชันส่วนขยายห้องพัก รวมถึงการรองรับโครูทีน (Coroutine) พร้อมใช้งานในอาร์ติแฟกต์room-ktx
- เมธอด DAO แบบไม่เป็นนามธรรมที่มีคำอธิบายประกอบด้วย
@Transaction
สามารถระงับฟังก์ชันได้แล้ว b/120241587
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- เปลี่ยนชื่ออาร์ติแฟกต์
room-coroutines
เป็นroom-ktx
แล้วเป็นชื่อเดียวกับอาร์ติแฟกต์ androidx อื่นๆ beginTransaction
,setTransactionSuccessful
และendTransaction
ในRoomDatabase
เลิกใช้งานแล้วเพื่อใช้runInTransaction
และฟังก์ชันwithTransaction
ของส่วนขยายroom-ktx
แทน
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่มีการตัดอาร์กิวเมนต์โทเค็นเครื่องมือ หากเครื่องมือแปลงข้อมูลเป็นโทเค็นที่ใช้ง่าย b/125427014
- แก้ไขข้อบกพร่องที่ "ห้อง" ระบุฟังก์ชันการระงับอย่างไม่ถูกต้องด้วยพารามิเตอร์ที่ประเภทเป็นคลาสภายใน b/123767877
- แก้ไขข้อบกพร่องที่เลื่อนเมธอด
@Query
DAO ที่มีคำสั่งINSERT
,UPDATE
หรือDELETE
เตรียมคำค้นหาในเทรดหลักอย่างตั้งใจ b/123695593 - แก้ไขข้อบกพร่องต่างๆ ที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับฟังก์ชันการระงับบางอย่าง b/123466702 และ b/123457323
- แก้ไขข้อบกพร่องที่ไม่มีการระงับการใช้วิธีการที่เลิกใช้งานแล้วอย่างถูกต้องในโค้ดที่สร้างขึ้น b/117602586
- อัปเดตทรัพยากร Dependency ของห้องของ androidx.sqlite เป็น 1.0.2 ซึ่งมีการแก้ไขสำหรับการจัดการฐานข้อมูลที่เสียหายอย่างถูกต้อง b/124476912
ปัญหาที่ทราบ
- ห้อง 2.1.0-alpha05 ขึ้นอยู่กับอาร์ติแฟกต์
kotlinx-metadata-jvm
ซึ่งขณะนี้ยังไม่พร้อมใช้งานใน Maven Central (KT-27991) คุณแก้ไขทรัพยากร Dependency นี้ได้โดยเพิ่มmaven { url "https://kotlin.bintray.com/kotlinx/" }
ลงในที่เก็บโปรเจ็กต์
เวอร์ชัน 2.1.0-alpha04
25 มกราคม 2019
ฟีเจอร์ใหม่
- ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบด้วย
@Query
ที่มีคำสั่งINSERT
,UPDATE
หรือDELETE
สามารถแสดงผลประเภทที่ไม่พร้อมกันSingle
,Mayble
,Completable
และListenableFuture
ได้แล้ว นอกจากนี้ ยังสามารถระงับฟังก์ชันได้ด้วย b/120227284
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- ตอนนี้ห้องแชทจะแสดงข้อผิดพลาดหากเมธอด DAO แบบไม่เป็นนามธรรมที่มีคำอธิบายประกอบด้วย
@Transaction
แสดงผลประเภทอะซิงโครนัส เช่นSingle
,Mayble
,Completable
,LiveData
หรือListenableFuture
เนื่องจากธุรกรรมถูกจํากัดระดับเทรด ปัจจุบันห้องแชทจึงเริ่มและสิ้นสุดธุรกรรมเกี่ยวกับฟังก์ชันที่อาจสร้างการค้นหาในชุดข้อความต่างๆ ไม่ได้ b/120109336 OnConflictStrategy.FAIL
และOnConflictStrategy.ROLLBACK
ได้รับ@Deprecated
เนื่องจากไม่ทำงานตามที่คาดหวังกับการเชื่อมโยง SQLite ปัจจุบันของ Android b/117266738
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ไม่ใช้ TypeConverter ในประเภทการแสดงผลอย่างถูกต้อง หากเมธอด DAO เป็นฟังก์ชันระงับ b/122988159
- แก้ไขข้อบกพร่องที่ "ห้อง" ระบุอย่างไม่ถูกต้องว่าฟังก์ชันการระงับที่รับค่ามาเป็น "ไม่ระงับ" b/122902595
- แก้ไขข้อบกพร่องที่ห้องแชทจะสร้างรหัสไม่ถูกต้องเมื่อช่อง
@Embedded
อยู่ในชั้นเรียนระดับบนสุดและใช้ในชั้นเรียนย่อยหลายชั้นเรียน b/121099048 - แก้ไขปัญหาที่ฐานข้อมูลจะติดตายเมื่อเรียกใช้ DAO ระงับฟังก์ชันระหว่าง
beginTransaction()
ถึงendTransaction()
b/120854786
เวอร์ชัน 2.1.0-alpha03
4 ธันวาคม 2018
การเปลี่ยนแปลง API
- ตอนนี้ FTS
tokenizer
ใน@Fts3
/@Fts4
ใช้สตริงแทน Enum แล้ว การดำเนินการนี้จะอนุญาตให้ห้องแชทใช้โทเค็นที่กำหนดเองได้ เครื่องมือแปลงข้อมูลเป็นโทเค็นในตัวยังคงกำหนดไว้ในFtsOptions
เป็นค่าคงที่สตริง b/119234881
ฟีเจอร์ใหม่
- Couroutines: เมธอด DAO สามารถระงับฟังก์ชันได้แล้ว ระบบเผยแพร่อาร์ติแฟกต์ใหม่เพื่อรองรับการระงับฟังก์ชันในห้องแล้ว
room-coroutines
b/69474692 - ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบด้วย
@Insert
,@Delete
หรือ@Update
รองรับListenableFuture
เป็นประเภทการแสดงผลแล้ว b/119418331
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ห้องพยายามค้นหาเครื่องมือสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้
ignoredColumns
ของ@Entity
อย่างไม่ถูกต้อง b/119830714 - แก้ไขข้อบกพร่องที่ Room ไม่ทำเครื่องหมายพารามิเตอร์เมธอด DAO ว่าเป็นพารามิเตอร์สุดท้ายในการใช้งานที่สร้างขึ้น b/118015483
- แก้ไขข้อบกพร่องที่ตัวประมวลผลของห้องขัดข้องเมื่อรายงานข้อผิดพลาดในการค้นหาที่มีสัญลักษณ์พิเศษ b/119520136
- แก้ไขข้อบกพร่องที่ห้องจะปฏิเสธการใช้งาน
Collection
อื่นๆ ที่เป็นอาร์กิวเมนต์ของนิพจน์IN
b/119884035 - แก้ไขข้อบกพร่องที่ LiveData ส่งคืนจากห้องเมื่อมีการเก็บขยะเมื่อสังเกตการณ์ตลอดไป ซึ่งทำให้ไม่ปล่อยข้อมูลใหม่อีก b/74477406
- อัปเดตแม่กุญแจของ
RoomDatabase
เพื่อลดการช่วงชิงล็อก b/117900450
เวอร์ชัน 2.1.0-alpha02
30 ตุลาคม 2018
ฟีเจอร์ใหม่
- เพิ่มการรองรับการอ้างอิง
@DatabaseView
ใน@Relation
b/117680932
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะทำ I/O ดิสก์ในเทรดหลักเมื่อสมัครใช้บริการและกำจัดจากประเภทการแสดงผล Rx b/117201279
- แก้ไขข้อบกพร่องที่ Room ไม่พบเครื่องมือแปลงประเภทที่เหมาะสมสำหรับช่องในคลาสเอนทิตี Kotlin b/111404868
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับการใช้งานอินเทอร์เฟซ
DAO
ที่มีเมธอด Kotlin เริ่มต้นที่ไม่มีอาร์กิวเมนต์ b/117527454 - อัปเดตโปรแกรมแยกวิเคราะห์ไวยากรณ์ SQLite ของห้องแล้ว ซึ่งช่วยแก้ไขปัญหาด้านประสิทธิภาพที่อาจทำให้ใช้เวลาสร้างนาน b/117401230
เวอร์ชัน 2.1.0-alpha01
8 ตุลาคม 2018
ฟีเจอร์ใหม่
- FTS: ขณะนี้ Room รองรับเอนทิตีที่มีตาราง FTS3 หรือ FTS4 การจับคู่ ตอนนี้คุณสามารถใส่คำอธิบายประกอบด้วย
@Fts3
หรือ@Fts4
ชั้นเรียนที่มีคำอธิบายประกอบด้วย@Entity
เพิ่มเติม เพื่อประกาศชั้นเรียนด้วยตารางการค้นหาข้อความแบบเต็มการแมป ตัวเลือก FTS สำหรับการปรับแต่งเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416 - ข้อมูลพร็อพเพอร์ตี้: ขณะนี้ห้องแชทรองรับการประกาศคลาสเป็นการค้นหาที่จัดเก็บไว้ หรือที่เรียกว่าข้อมูลพร็อพเพอร์ตี้ที่ใช้คำอธิบายประกอบ @DatabaseView b/67033276
- ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว คุณประกาศคำอธิบายประกอบห้อง
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดนามธรรมของชั้นเรียนที่มีคำอธิบายประกอบแล้วโดยอัตโนมัติได้ โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมาพร้อมกับ@CopyAnnotations
ด้วยเพื่อให้ห้องแชทเข้าใจได้อย่างถูกต้อง b/62408420 - การสนับสนุนประเภทการคืนสินค้า Rx เพิ่มเติม: เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับการแสดงผล Rx ประเภทCompletable
,Single<T>
และMaybe<T>
แล้ว b/63317956 - ประเภทที่เปลี่ยนแปลงไม่ได้ด้วย
@Relation
: ก่อนหน้านี้ห้องแชทกำหนดให้ตั้งค่าช่องที่มีคำอธิบายประกอบ@Relation
ได้ แต่ตอนนี้เป็นพารามิเตอร์ตัวสร้างได้ enableMultiInstanceInvalidation
: เป็น API ใหม่ในRoomDatabase.Builder
เพื่อเปิดใช้การทำให้เป็นโมฆะใน RoomDatabase หลายรายการโดยใช้ไฟล์ฐานข้อมูลเดียวกัน กลไกการทำให้เป็นโมฆะแบบหลายอินสแตนซ์นี้ยังทำงานได้กับหลายกระบวนการอีกด้วย b/62334005fallbackToDestructiveMigrationOnDowngrade
: เป็น API ใหม่ในRoomDatabase.Builder
เพื่อสร้างฐานข้อมูลใหม่โดยอัตโนมัติหากมีการดาวน์เกรด b/110416954ignoredColumns
: เป็น API ใหม่ในคำอธิบายประกอบ@Entity
ที่สามารถใช้เพื่อแสดงรายการช่องที่ละเว้นตามชื่อได้ มีประโยชน์สำหรับการละเว้นช่องที่รับช่วงมาในเอนทิตี b/63522075
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- ขณะนี้
mCallback
และmDatabase
ในRoomDatabase
เปลี่ยนเป็น@Deprecated
แล้ว และจะถูกนำออกจากห้องแชทเวอร์ชันหลักเวอร์ชันถัดไป b/76109329
แก้ไขข้อบกพร่อง
- แก้ไขปัญหา 2 ข้อที่ห้องแชทไม่สามารถกู้คืนได้อย่างถูกต้องจากฐานข้อมูลที่เสียหาย หรือการย้ายข้อมูลที่ไม่ดีระหว่างการเริ่มต้น 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 ให้ใส่ทรัพยากร Dependency ต่อไปนี้
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
เราขอเรียนให้ทราบว่า
เราขอแนะนำให้ใช้ห้อง 1.1.1-rc1
แทน 1.1.0
หากคุณใช้การย้ายข้อมูล
แก้ไขข้อบกพร่องที่ห้องแชทไม่จัดการหลังการเริ่มต้นการย้ายข้อมูลอย่างถูกต้องb/79362399
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0-beta3
19 เมษายน 2018
แก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ Kotlin POJO อ้างอิงเอนทิตีความสัมพันธ์ที่ กำหนดไว้ใน Java b/78199923
เวอร์ชัน 1.1.0-beta2
5 เมษายน 2018
แก้ไขข้อบกพร่อง
แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน Rx
Single
และMaybe
ของห้อง จะนำคำค้นหาดังกล่าวกลับมาใช้ใหม่ล่วงหน้า ซึ่งจะทำให้เกิดปัญหาหากคุณเพิ่มคำขอมากกว่า 1 รายการ ผู้สังเกตการณ์สำหรับSingle
หรือMaybe
ที่ส่งกลับ b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่
VACUUM
ฐานข้อมูลหากมีการเรียก ภายในธุรกรรม b/77235565
เวอร์ชัน 1.1.0-beta1
21 มีนาคม 2018
การเปลี่ยนแปลง API
- จากความคิดเห็นเกี่ยวกับการตรวจสอบ API
@RawQuery
ไม่ยอมรับการส่งString
เป็นพารามิเตอร์การค้นหาอีกต่อไป คุณต้องใช้ [SupportSQLiteQuery][ref-SupportSQLiteQuery] (ดู [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] เพื่อสร้างอินสแตนซ์ของ [SupportSQLiteQuery][ref-SupportSQLiteQuery] อย่างง่ายดายพร้อมด้วยการสนับสนุนอาร์กิวเมนต์) - ตอนนี้เมธอด [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] ของ RoomDatabase.Builder ยอมรับ
vararg int
แทนvararg Integer
แล้ว
แก้ไขข้อบกพร่อง
- ตอนนี้ [RoomDatabase.clearAllTables][ref-clearAllTables] คืนพื้นที่กลับไปยังระบบปฏิบัติการโดยการตั้งค่าจุดตรวจสอบ WAL และ
VACUUM
ฐานข้อมูล - ตอนนี้ [
@RawQuery
][ref-RawQuery] ยอมรับ Pojo สำหรับพร็อพเพอร์ตี้observedEntities
ตราบใดที่ Pojo อ้างอิงถึงเอนทิตีอย่างน้อย 1 รายการผ่านฟิลด์Embedded
หรือRelation
b/74041772 - การแบ่งหน้า: การติดตั้งใช้งานแหล่งข้อมูลของห้องจะจัดการทรัพยากร Dependency แบบหลายตารางได้อย่างถูกต้องแล้ว (เช่น ความสัมพันธ์และการรวม) ซึ่งก่อนหน้านี้จะทำให้ทริกเกอร์ผลลัพธ์ใหม่ไม่สำเร็จหรือคอมไพล์ไม่สำเร็จ 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 รุ่นใหม่ (อัลฟ่า-4+) และไม่รองรับ API ที่เลิกใช้งานแล้ว
LivePagedListProvider
หากต้องการใช้ห้องแชทอัลฟ่าแบบใหม่ คุณจะต้องใช้การแบ่งหน้าalpha-4
ขึ้นไป และเปลี่ยนจากLivePagedListProvider
เป็นLivePagedListBuilder
หากยังไม่ได้ดำเนินการ
แก้ไขข้อบกพร่อง
- ปรับปรุงการรองรับประเภท Kotlin Kapt b/69164099
- ลำดับของช่องไม่ทำให้สคีมาเป็นโมฆะอีกต่อไป b/64290754