ห้อง

ไลบรารี Room Persistence มีเลเยอร์การเปลี่ยนระดับนามธรรมเหนือ SQLite เพื่อให้เข้าถึงฐานข้อมูลได้อย่างมีประสิทธิภาพมากขึ้นในขณะที่ใช้ประโยชน์จากความสามารถทั้งหมดของ SQLite
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
9 กันยายน 2026 2.8.5 - - -

การประกาศทรัพยากร 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 Build ระดับบนสุด

ดึงดูด

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

ในไฟล์ Gradle Build ระดับโมดูล ให้ใช้ปลั๊กอินและใช้ส่วนขยาย room

ดึงดูด

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 -

ใช้ตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ

หากไม่ได้ใช้ปลั๊กอิน Gradle ของ Room หรือหากปลั๊กอินเวอร์ชันที่คุณใช้ไม่รองรับตัวเลือกที่ต้องการ คุณสามารถกำหนดค่า Room โดยใช้ตัวเลือกของโปรเซสเซอร์สำหรับคำอธิบายประกอบได้ตามที่อธิบายไว้ในเพิ่มทรัพยากร Dependency ในบิลด์ วิธี ระบุตัวเลือกคำอธิบายประกอบจะขึ้นอยู่กับว่าคุณใช้ KSP หรือ KAPT สำหรับ Room

ดึงดูด

// 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 ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Issue Tracker

เวอร์ชัน 2.8

เวอร์ชัน 2.8.5

9 กันยายน 2026

androidx.room:room-*:2.8.5ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.8.5 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้การค้นหาการระงับห้องและการดำเนินการติดตามการลบล้างจะแสดง IllegalStateException เมื่อเรียกใช้หลังจากปิดฐานข้อมูลแล้ว (Ic0166, b/543076356)

เวอร์ชัน 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)
  • ปรับปรุงประสิทธิภาพของ Wrapper SupportSQLite ของ Room โดยหลีกเลี่ยงการเปลี่ยนเธรดและคงลักษณะการบล็อกเดียวกันกับ SupportSQLiteDatabase API ของ Room (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)
  • แก้ไขภาวะแข่งขันที่จะป้องกันไม่ให้ Flows ได้รับการอัปเดตล่าสุด

เวอร์ชัน 2.8.0

10 กันยายน 2025

androidx.room:room-*:2.8.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.8.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.7.0

  • เพิ่มอาร์ติแฟกต์ใหม่ androidx.room:room-sqlite-wrapper ซึ่งมี API สำหรับรับ Wrapper SupportSQLiteDatabase จาก 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

  • นำคำอธิบายประกอบ @RequiresApi(21) ที่ล้าสมัยออก (Ic4792, I9103b)

การแก้ไขข้อบกพร่อง

  • แก้ไขภาวะแข่งขันที่โฟลว์ของ 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 สำหรับรับ Wrapper SupportSQLiteDatabase ของ 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 อีกต่อไปเมื่อใช้เวลานานเกินไปในการเชื่อมต่อ แต่จะส่งข้อความในบันทึกโดยไลบรารีแทน การบันทึกแทนการส่งข้อยกเว้นจะหลีกเลี่ยงการวนซ้ำที่ทำให้ iOS ระงับ Looper ซึ่งทำให้ 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 การบล็อกห้อง รวมถึงการบล็อกฟังก์ชัน DAO (b/400584611)
  • ใช้พูลการเชื่อมต่อของ Room อีกครั้งเพื่อพยายามลดปัญหา SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection. และปัญหาที่คล้ายกัน (b/380088809)

เวอร์ชัน 2.7.0-rc02

12 มีนาคม 2025

androidx.room:room-*:2.7.0-rc02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-rc02 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขการย้ายข้อมูลอัตโนมัติที่จัดการคอลัมน์ใหม่ในตาราง FTS อย่างไม่ถูกต้อง (b/348227770, Ic53f3)
  • แก้ไขข้อขัดข้องของคอมไพเลอร์ Room เนื่องจาก NullPointerException เมื่อประมวลผลแหล่งที่มาที่ไม่ใช่ JVM ผ่าน KSP (b/396607230, I693c9)
  • แก้ไขปัญหาที่ Room ไม่ทำให้ตารางเป็นโมฆะเมื่อสิ้นสุดการใช้การเชื่อมต่อ Writer (b/340606803, I73ef6)

เวอร์ชัน 2.7.0-rc01

26 กุมภาพันธ์ 2025

androidx.room:room-*:2.7.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Room ไม่ได้ตั้งค่า busy_timeout ในการเชื่อมต่อฐานข้อมูลครั้งแรก ซึ่งจะทำให้เกิดปัญหา SQLException: Error code: 5, message: database is locked (I93208, b/380088809)
  • แก้ไขปัญหาในคอมไพเลอร์ของ Room ซึ่งทำให้ตัวประมวลผล KSP ขัดข้องเมื่อประมวลผลชุดแหล่งที่มาดั้งเดิม (เช่น iOS) ใน Kotlin 2.1.x และ KSP1 (I883b8, b/396607230)

เวอร์ชัน 2.7.0-beta01

12 กุมภาพันธ์ 2025

androidx.room:room-*:2.7.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-beta01 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับการRoomDatabase.inTransaction()เปิดฐานข้อมูลที่ปิดอยู่เมื่อไม่ควรเปิด และควรแสดงผลเป็นเท็จอย่างรวดเร็วหากฐานข้อมูลปิดอยู่ (b/325432967)
  • แก้ไขข้อขัดข้อง (IllegalArgumentException: not a valid name) ในคอมไพเลอร์ของ Room เมื่อประมวลผลฟังก์ชัน DAO ด้วยคลาสอินไลน์ / ค่า Kotlin (b/388299754)
  • รวมกฎ Proguard ไว้ในอาร์ติแฟกต์ JVM ของ room-runtime เพื่อไม่ให้นำตัวสร้างเริ่มต้นของการติดตั้งใช้งานฐานข้อมูลที่สร้างขึ้นออก เนื่องจาก Room ใช้การเริ่มต้นเริ่มต้นที่ใช้การสะท้อน (b/392657750)

เวอร์ชัน 2.7.0-alpha13

29 มกราคม 2025

androidx.room:room-*:2.7.0-alpha13ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha13 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ Room จะกำหนดเป้าหมายเป็นภาษา Kotlin 2.0 และกำหนดให้โปรเจ็กต์ต้องคอมไพล์ด้วย Kotlin 2.0 และภาษาเวอร์ชันที่เทียบเท่าหรือสูงกว่า (I8efb0, b/315461431, b/384600605)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในตัวสร้างฐานข้อมูล KMP ของ Room เมื่อใช้ชื่ออย่างง่ายแทนเส้นทางใน Android และจะไม่พบเส้นทางที่แก้ไขของไฟล์ฐานข้อมูลในไดเรกทอรีข้อมูลของแอป (I83315, b/377830104)
  • แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่การกำหนดค่าอินพุตและเอาต์พุตของสคีมาทำให้เกิดปัญหาในโปรเจ็กต์ 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() กลยุทธ์ใหม่มีดังนี้

  1. กำหนดออบเจ็กต์ expect ที่ใช้ RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. ลิงก์ออบเจ็กต์กับการประกาศ @Database โดยใช้ @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. สร้างอินสแตนซ์ฐานข้อมูลใหม่โดยไม่ต้องส่งอาร์กิวเมนต์โรงงาน

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

แก้ไข b/316978491, b/338446862 และ b/342905180

  • รองรับ @RawQuery ใน KMP ของ Room โดยการเพิ่ม API ใหม่ที่ชื่อ RoomRawQuery ซึ่งคล้ายกับ SupportSQLiteQuery ในแง่ของการเก็บสตริง SQL ดิบและฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์กับคำสั่ง @RawQuery ตอนนี้ฟังก์ชันที่มีคำอธิบายประกอบสามารถรับ RoomRawQuery เป็นพารามิเตอร์เดียวได้แล้ว (Iea844, b/330586815)
  • เพิ่มโอเวอร์โหลดของ setQueryCallback() ที่ยอมรับ CoroutineContext (Id66ff, b/309996304)
  • เพิ่มการรองรับlinuxArm64เป้าหมาย Kotlin Multiplatform (I139d3, b/338268719)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Room สร้างการเรียกไปยัง recursiveFetchArrayMap ในเป้าหมายที่ไม่ใช่ Android อย่างไม่ถูกต้อง (710c36, b/352482325)
  • แก้ไขปัญหาที่บางครั้ง Room จะส่งข้อยกเว้นเกี่ยวกับ "การเชื่อมต่อหมดเวลา" ในโปรเจ็กต์ KMP (fa72d0, b/347737870)
  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติซึ่งจะตรวจสอบคีย์นอกเร็วเกินไปก่อนที่ตารางอื่นๆ จะเปลี่ยนสคีมาให้เป็นไปตามคีย์นอกใหม่ (7672c0, b/352085724)

เวอร์ชัน 2.7.0-alpha05

10 กรกฎาคม 2024

androidx.room:room-*:2.7.0-alpha05ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • เปลี่ยนชื่อ SQLiteKt เป็น SQLite และ BundledSQLiteKt เป็น BundledSQLite (I8b501)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้ RoomDatabase ค้างหรือเกิดข้อผิดพลาดเนื่องจากหมดเวลาการเชื่อมต่อเมื่อใช้ AndroidSQLiteDriver

เวอร์ชัน 2.7.0-alpha04

12 มิถุนายน 2024

androidx.room:room-*:2.7.0-alpha04ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha04 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ที่จะสร้างโค้ด KMP ที่เข้ากันไม่ได้เมื่อมีการกำหนดประเภทการคืนค่าแบบหลายแมปใน DAO (b/340983093)
  • แก้ไขปัญหาที่ Room ค้นหาการติดตั้งใช้งานฐานข้อมูลที่สร้างขึ้นไม่สำเร็จหากคลาสที่ใส่คำอธิบายประกอบ @Database ไม่มีแพ็กเกจ (b/342097292)
  • แก้ไขปัญหาที่การเปิดใช้การปิดอัตโนมัติและการลบล้างหลายอินสแตนซ์บางครั้งทำให้เกิด ConcurrentModificationException เมื่อระบบปิดฐานข้อมูลโดยอัตโนมัติเนื่องจากไม่มีการใช้งาน

เวอร์ชัน 2.7.0-alpha03

29 พฤษภาคม 2024

androidx.room:room-*:2.7.0-alpha03ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาต่างๆ เกี่ยวกับ Kotlin 2.0 และ KSP 2.0 โปรดทราบว่า Kotlin 2.0 ที่รองรับ KSP 2 ยังไม่สมบูรณ์ และทีมกำลังดำเนินการกับ API ต่างๆ และการเปลี่ยนแปลงลักษณะการทำงานในคอมไพเลอร์ใหม่ (b/314151707)

เวอร์ชัน 2.7.0-alpha02

14 พฤษภาคม 2024

androidx.room:room-*:2.7.0-alpha02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha02 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหา KSP ต่างๆ

เวอร์ชัน 2.7.0-alpha01

1 พฤษภาคม 2024

androidx.room:room-*:2.7.0-alpha01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.7.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ เราได้ปรับโครงสร้าง Room ใหม่ให้เป็นไลบรารี Kotlin Multiplatform (KMP) แม้ว่าเรายังต้องดำเนินการอีกหลายอย่าง แต่การเปิดตัวครั้งนี้จะนำเสนอ Room เวอร์ชันใหม่ที่ฟังก์ชันการทำงานส่วนใหญ่ได้รับการ "ทำให้เป็นแบบทั่วไป" (ทำให้ใช้ได้หลายแพลตฟอร์ม) แพลตฟอร์มที่รองรับในปัจจุบันคือ Android, iOS, JVM (เดสก์ท็อป), Mac แบบเนทีฟ และ Linux แบบเนทีฟ ฟังก์ชันการทำงานที่ขาดหายไปในแพลตฟอร์มที่รองรับใหม่จะได้รับการทำให้ "มีฟีเจอร์ครบถ้วน" ในการเปิดตัว Room ที่กำลังจะมาถึง

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ

  • การสร้างโค้ด Kotlin ใน KSP จะเปิดอยู่โดยค่าเริ่มต้นหากประมวลผลผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างแหล่งที่มาของ Java

การเปลี่ยนแปลง API

  • มีการเพิ่มการโอเวอร์โหลดของ Room.databaseBuilder() ซึ่งใช้พารามิเตอร์ Lambda ที่มีไว้เพื่อใช้กับฟังก์ชันที่สร้างโดย Room เพื่อหลีกเลี่ยงการใช้การสะท้อนเมื่อสร้างอินสแตนซ์การใช้งาน RoomDatabase ที่สร้างขึ้น ตัวอย่างการใช้งานมีดังนี้
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • เราได้เพิ่ม API สำหรับกำหนดค่าห้องที่มี CoroutineContext ลงในเครื่องมือสร้างแล้ว: RoomDatabase.Builder.setQueryCoroutineContext โปรดทราบว่าคุณจะกำหนดค่า RoomDatabase ได้โดยใช้ตัวดำเนินการที่ใช้ setQueryExecutor หรือใช้บริบทของโครูทีนอย่างใดอย่างหนึ่ง แต่จะใช้ทั้ง 2 อย่างไม่ได้
  • เพิ่ม API สำหรับกำหนดค่าห้องที่มีSQLiteไดรเวอร์แล้ว: RoomDatabase.Builder.setDriver() ดูข้อมูลเพิ่มเติมเกี่ยวกับ SQLite Driver API ได้ที่เอกสารประกอบ SQLite KMP
  • เราได้เพิ่ม API สำหรับเข้าถึง SQLiteConnection พื้นฐานจาก API ของไดรเวอร์ ได้แก่ RoomDatabase.useReaderConnection และ RoomDatabase.useWriterConnection
  • ตอนนี้การเรียกกลับที่เกี่ยวข้องกับ Varios Room มีเวอร์ชันที่โอเวอร์โหลดซึ่งรับ SQLiteConnection แทน SupportSQLiteDatabase แล้ว โดยตั้งใจให้มีการลบล้างเมื่อย้ายข้อมูลไปยังโปรเจ็กต์ KMP ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลการใช้งาน Room ในแอป Android ไปยังโมดูล KMP ทั่วไปได้ที่คู่มือการย้ายข้อมูล การเรียกกลับมีดังนี้
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • อาร์ติแฟกต์ KTX androidx.room:room-ktx ได้รวมเข้ากับ androidx.room:room-runtime พร้อมกับ API ทั้งหมดแล้ว ตอนนี้อาร์ติแฟกต์จึงว่างเปล่า โปรดนำออกจากรายการทรัพยากร Dependency

เวอร์ชัน 2.6

เวอร์ชัน 2.6.1

29 พฤศจิกายน 2023

androidx.room:room-*:2.6.1ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในโค้ดที่สร้างขึ้นซึ่งมีการตั้งค่าเริ่มต้นสำหรับคอลัมน์ Double ใน EntityCursorConverter เป็น 0 แทนที่จะเป็น 0.0 นอกจากนี้ เรายังได้รวมการแก้ไขที่เป็นไปได้สำหรับกรณีที่คล้ายกันสำหรับคอลัมน์ประเภท Float ด้วย (Id75f5, b/304584179)
  • ตอนนี้ระบบจะส่งต่อข้อยกเว้นที่เกิดจากโหลด PagingSource เป็น LoadStateUpdate ของ LoadResult.Error ที่มี Throwable คุณสังเกตสถานะข้อผิดพลาดนี้ได้ผ่าน PagingDataAdapter.loadStateFlow(Views) หรือ LazyPagingItems.loadState(Compose) โปรดทราบว่านี่เป็นการเปลี่ยนแปลงลักษณะการทำงาน ซึ่งในอดีตข้อผิดพลาดในการโหลดจะแสดงเป็นข้อยกเว้นที่เมธอด DAO ทริกเกอร์การโหลด (I93887, b/302708983)

เวอร์ชัน 2.6.0

18 ตุลาคม 2023

androidx.room:room-*:2.6.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.5.0

  • ตอนนี้ตัวเลือกในการเปิดใช้การสร้างโค้ด Kotlin (หรือ "Kotlin CodeGen") พร้อมใช้งานใน Room KSP แล้ว (4297ec0) หากต้องการเปิดใช้ Kotlin CodeGen ใน Room ให้เพิ่มชื่อตัวเลือก room.generateKotlin ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกโปรเซสเซอร์สำหรับ KSP ได้ในเอกสารประกอบ KSP

หมายเหตุ: เมื่อใช้ Kotlin CodeGen โปรดทราบว่ามีการเพิ่มข้อจำกัดเพิ่มเติม ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้แบบนามธรรมเป็นตัวรับ DAO หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้ไม่เปลี่ยนแปลงและมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดให้เป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป

คำเตือน: คุณอาจพบว่าโปรเจ็กต์มีความเข้มงวดมากขึ้นในแง่ของความสามารถในการเว้นว่างเมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเว้นว่างของอาร์กิวเมนต์ประเภทมีความสําคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>

  • เราได้เพิ่มอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ลงใน Room ด้วยรหัส androidx.room ซึ่งจะช่วยแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของโปรเซสเซอร์สำหรับคำอธิบายประกอบ Gradle ดูรายละเอียดเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Room เวอร์ชัน 2.6.0-alpha02
  • ตอนนี้ KSP รองรับคลาสค่าในเอนทิตี Room แล้ว (4194095)
  • ตอนนี้ Room รองรับประเภทการแสดงผลของแผนที่ที่ซ้อนกันในฟังก์ชัน DAO แล้ว (I13f48, 203008711)

เวอร์ชัน 2.6.0-rc01

20 กันยายน 2023

androidx.room:room-*:2.6.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.6.0-rc01 มีคอมมิตต่อไปนี้

เวอร์ชัน 2.6.0-beta01

23 สิงหาคม 2023

androidx.room:room-*:2.6.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.6.0-beta01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • การจัดการข้อยกเว้นกรณีพิเศษ SQLite ระหว่างการแทรก/อัปเดตที่พบเมื่อมีการส่งข้อยกเว้น 2067 SQLITE_CONSTRAINT_UNIQUE ระหว่างการแทรก/อัปเดต การแทรก/อัปเดตควรทำการอัปเดต (If2849, b/243039555)

เวอร์ชัน 2.6.0-alpha03

9 สิงหาคม 2023

androidx.room:room-*:2.6.0-alpha03ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.6.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Room รองรับประเภทการแสดงผลของแผนที่ที่ซ้อนกันในฟังก์ชัน DAO แล้ว (I13f48, 203008711)

การเปลี่ยนแปลง 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 มีคอมมิตเหล่านี้

ปลั๊กอิน Room Gradle

การเปิดตัวเวอร์ชันใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Room Gradle ที่มีรหัส androidx.room ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของตัวประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Gradle ของ Room จะกำหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้างขึ้นซึ่งใช้สำหรับการย้ายข้อมูลอัตโนมัติและเป็นเอาต์พุตของงานคอมไพล์ได้รับการกำหนดค่าอย่างถูกต้องเพื่อให้มีการบิลด์ที่ทำซ้ำได้และแคชได้ ปลั๊กอินมี DSL สำหรับกำหนดค่าตำแหน่งสคีมาฐาน ดังนี้

room {
    schemaDirectory("$projectDir/schemas/")
}

จากนั้นปลั๊กอินจะกำหนดค่าคอมไพเลอร์ Room และงานการคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรสชาติ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json ตามปกติแล้ว ระบบจะเช็คอินไฟล์เหล่านี้ลงในที่เก็บเพื่อใช้ในการตรวจสอบและการย้ายข้อมูลอัตโนมัติ เมื่อย้ายข้อมูลไปใช้ปลั๊กอินแทนตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ คุณต้องคัดลอกไฟล์สคีมาที่มีอยู่ไปยังไดเรกทอรีเวอร์ชันที่สร้างขึ้นซึ่งปลั๊กอินสร้างขึ้น การดำเนินการย้ายข้อมูลนี้เป็นแบบครั้งเดียวและต้องดำเนินการด้วยตนเอง เราจะอัปเดตเอกสารประกอบเกี่ยวกับสคีมาใน developers.android.com ในอนาคตเมื่อได้รับความคิดเห็นและปลั๊กอินมีเสถียรภาพแล้ว ดังนั้นโปรดลองใช้

การเปลี่ยนแปลง API

  • RoomDatabase.QueryCallback ได้รับการกำหนดให้เป็นอินเทอร์เฟซที่ใช้งานได้เพื่อให้ใช้ 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 อีกต่อไป

คำเตือน: คุณอาจพบว่าโปรเจ็กต์มีความเข้มงวดมากขึ้นในแง่ของความสามารถในการเว้นว่างเมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเว้นว่างของอาร์กิวเมนต์ประเภทมีความสําคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>

การเปลี่ยนแปลง API

  • ป้องกันการใช้งานคอลเล็กชันที่อนุญาตให้มีค่า Null ในประเภทการคืนค่าของเมธอด DAO ที่ไม่มีความหมาย (I777dc, b/253271782, b/259426907)
  • เพิ่ม API สำหรับสร้างโฟลว์ที่ส่งการเปลี่ยนแปลงของเครื่องมือติดตามการลบล้าง API นี้มีประโยชน์ในการสร้างสตรีมที่ต้องตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูล (I8c790, b/252899305)

การแก้ไขข้อบกพร่อง

  • ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้แบบนามธรรมเป็นตัวรับ DAO หรือการค้นหา DAO ใน Codegen ของ 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)
  • แก้ไขปัญหาที่ทำให้ Room แสดงข้อผิดพลาดเมื่อใช้ในการทดสอบ Robolectric (f79bea, b/274924903)

เวอร์ชัน 2.5.1

เวอร์ชัน 2.5.1

22 มีนาคม 2023

androidx.room:room-*:2.5.1ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.1 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • หลีกเลี่ยงการตรวจสอบไดเรกทอรีหลักของฐานข้อมูลใน FrameworkSQLiteHelper หากฐานข้อมูลเปิดอยู่แล้ว (5de86b8)
  • ใช้isOpenInternalตรวจสอบว่าฐานข้อมูลเปิดอยู่แล้วหรือไม่ (e91fb35)
  • ตอนนี้ acquireTransactionThread() ของ Room จัดการกรณีที่เกิดการเรียกซ้ำได้ดีขึ้นแล้ว (219f98b) ในระหว่างธุรกรรมที่ระงับ Room จะใช้เทรดจากตัวดำเนินการธุรกรรม เริ่มวนรอบเหตุการณ์ในเทรดนั้น และส่งการดำเนินการฐานข้อมูลที่ระงับไปยังเทรดดังกล่าวเพื่อให้การดำเนินการทั้งหมดห่อหุ้มอยู่ภายในโครูทีนธุรกรรม โดยปกติแล้ว เธรดธุรกรรมจะแตกต่างจากเธรดที่เริ่มธุรกรรม แต่ในบางกรณีก็อาจเป็นเธรดเดียวกัน เราได้ปรับโครงสร้าง withTransaction() เพื่อไม่ให้ต้องอาศัยงานควบคุมอีกต่อไป และจะดำเนินการบล็อกธุรกรรมที่ระงับจากภายใน runBlocking ในเธรดธุรกรรมแทน

เวอร์ชัน 2.5.0

เวอร์ชัน 2.5.0

22 กุมภาพันธ์ 2023

androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 และ androidx.room:room-paging-rxjava3:2.5.0 เปิดตัวแล้ว เวอร์ชัน 2.5.0 มีคอมมิตต่อไปนี้

เวอร์ชัน 2.5.0

11 มกราคม 2023

androidx.room:room-*:2.5.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0

  • เราได้แปลงroom-runtimeแหล่งข้อมูลทั้งหมดจาก Java เป็น Kotlin แล้ว โปรดทราบว่าคุณอาจพบปัญหาความเข้ากันไม่ได้ของแหล่งที่มาหากโค้ดอยู่ใน Kotlin เนื่องจากการแปลงไลบรารีเป็น Kotlin ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าไม่เข้ากันคือใน InvalidationTracker คุณจะต้องประกาศ onInvalidate() ใน Observer เพื่อให้มีพารามิเตอร์ประเภท Set และไม่ใช่ MutableSet นอกจากนี้ เรายังแปลงเมธอด Getter บางรายการเป็นพร็อพเพอร์ตี้ที่ต้องใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ในไฟล์ Kotlin โปรดรายงานข้อบกพร่องหากพบปัญหาความเข้ากันไม่ได้ที่สำคัญ
  • เพิ่มคำอธิบายประกอบแป้นพิมพ์ลัดใหม่ @Upsert ซึ่งพยายามแทรกเอนทิตีเมื่อไม่มีความขัดแย้งด้านความไม่ซ้ำกัน หรืออัปเดตเอนทิตีหากมีความขัดแย้ง (I7aaab, b/241964353)
  • เพิ่มอาร์ติแฟกต์การเรียกหน้าในห้องใหม่ room-paging-rxjava2, room-paging-rxjava3 และ room-paging-guava เพื่อรองรับการเรียกหน้าในห้อง
  • เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อแยกความกำกวมใน @MapInfo (Icc4b5)

เวอร์ชัน 2.5.0-rc01

7 ธันวาคม 2022

androidx.room:room-*:2.5.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-rc01 มีคอมมิตต่อไปนี้

  • ผลงานนี้เหมือนกับ 2.5.0-beta02

เวอร์ชัน 2.5.0-beta02

9 พฤศจิกายน 2022

androidx.room:room-*:2.5.0-beta02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-beta02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • แก้ไข API ต่างๆ ที่ใช้อาร์กิวเมนต์การค้นหาจาก Invariant (Array<Any?>) เป็น Contravariant (Array<out Any?>) เพื่อให้ตรงกับลักษณะการทำงานของอาร์เรย์ของ Java (b/253531073)

เวอร์ชัน 2.5.0-beta01

5 ตุลาคม 2022

androidx.room:room-*:2.5.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • จำกัดเวอร์ชันขั้นต่ำที่รองรับ @Upsert เป็น API 16 ซึ่งเป็นเพราะ API เก่าไม่สามารถระบุข้อขัดแย้งของข้อจํากัดคีย์หลักได้ (I5f67f, b/243039555)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ระบบส่งออกตารางเงาไปยังไฟล์สคีมา .json อย่างไม่ถูกต้อง ทำให้ไฟล์เสียหาย (I4f83b, b/246751839)

เวอร์ชัน 2.5.0-alpha03

24 สิงหาคม 2022

androidx.room:room-*:2.5.0-alpha03ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มคำอธิบายประกอบแป้นพิมพ์ลัดใหม่ @Upsert ซึ่งพยายามแทรกเอนทิตีเมื่อไม่มีความขัดแย้งด้านความไม่ซ้ำกัน หรืออัปเดตเอนทิตีหากมีความขัดแย้ง (I7aaab, b/241964353)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Room จะแสดง SQLiteConstraintException แทน IllegalStateException ระหว่างการตรวจสอบข้อจำกัดของคีย์นอกในการย้ายข้อมูลอัตโนมัติ (I328dd)
  • แก้ไขการเปลี่ยนแปลงที่ไม่เข้ากันของแหล่งที่มาของ Kotlin สำหรับ Getter / พร็อพเพอร์ตี้ของ getOpenHelper, getQueryExecutor และ getTransactionExecutor (Iad0ac)

เวอร์ชัน 2.5.0-alpha02

1 มิถุนายน 2022

androidx.room:room-*:2.5.0-alpha02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-alpha02 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เราได้เพิ่มอาร์ติแฟกต์ room-paging ใหม่ room-paging-rxjava2, room-paging-rxjava3 และ room-paging-guava เพื่อรองรับการแบ่งหน้าในห้อง (41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)

การเปลี่ยนแปลง API

  • room-runtime ทั้งหมดได้รับการแปลงจาก Java เป็น Kotlin แล้ว (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    หมายเหตุ: คุณอาจพบปัญหาแหล่งที่มาไม่เข้ากันเนื่องจากการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณอยู่ใน Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องจัดการกรณีเหล่านี้ ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าไม่เข้ากันคือใน InvalidationTracker คุณจะต้องประกาศ onInvalidate() ใน Observer เพื่อให้มีพารามิเตอร์ประเภท Set และไม่ใช่ MutableSet

  • เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อแยกความกำกวมใน @MapInfo (Icc4b5)
  • แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้ @Ignore ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (Ifc2fb)

การแก้ไขข้อบกพร่อง

  • อัลกอริทึมฮิวริสติกสำหรับการแก้ปัญหาคอลัมน์ที่ซ้ำกัน ตอนนี้ Room จะพยายามแก้ไขคอลัมน์ที่คลุมเครือในการค้นหาแบบ Multimap ซึ่งจะช่วยให้ JOIN กับตารางที่มีตารางชื่อเดียวกันได้รับการแมปกับออบเจ็กต์ข้อมูลผลลัพธ์อย่างถูกต้อง (I4b444, b/201306012, b/212279118)

เวอร์ชัน 2.5.0-alpha01

23 กุมภาพันธ์ 2022

androidx.room:room-*:2.5.0-alpha01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.5.0-alpha01 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • แก้ไขปัญหาที่ไม่ได้บังคับใช้การใช้งาน Room @IntDef ในแหล่งที่มาของ Kotlin (I75f41, b/217951311)
  • แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้ @Query ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (I0a09b)
  • แปลง room-common จาก Java เป็น Kotlin (I69c48, b/206858235)

    หมายเหตุ: คุณอาจพบปัญหาความไม่เข้ากันของแหล่งที่มาเนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์คู่ในระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณอยู่ใน Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องมีคำต่อท้าย ".Companion" เมื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้

  • แปลงการย้ายข้อมูล Room จาก Java เป็น Kotlin (I2724b, b/206858622)
  • แปลงไฟล์ที่เกี่ยวข้องกับ paging ใน room-runtime จาก Java เป็น Kotlin (I82fc8, b/206859668)
  • เพิ่ม API สำหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)

การแก้ไขข้อบกพร่อง

  • เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin การเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างกัน สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน) หากคุณใช้@JvmNameคำอธิบายประกอบที่กำหนดเองเพื่อให้ตรงกับตัวรับ/ตัวตั้งค่า กับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการ อัปเดต (If6531, b/205289020)

เวอร์ชัน 2.4.3

เวอร์ชัน 2.4.3

27 กรกฎาคม 2022

androidx.room:room-*:2.4.3ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.3 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ทำให้ Room ไม่รู้จักฟังก์ชันระงับใน Kotlin 1.7 (b/236612358)

เวอร์ชัน 2.4.2

เวอร์ชัน 2.4.2

23 กุมภาพันธ์ 2022

androidx.room:room-*:2.4.2ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชัน @Transaction suspend ของ Dao ที่มีเนื้อหาซึ่งสร้างเมธอดอินเทอร์เฟซเริ่มต้นเนื่องจากการคอมไพล์ด้วย -Xjvm-default=all หรือเทียบเท่า (Ia4ce5)
  • แก้ไขข้อบกพร่องที่ Room สร้างโค้ดสำหรับเมธอดคำค้นหาประเภทการแสดงผล Array<ByteArray> (If086e, b/213789489)

เวอร์ชัน 2.4.1

เวอร์ชัน 2.4.1

12 มกราคม 2022

androidx.room:room-*:2.4.1ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.1 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin การเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างกัน สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน) หากคุณใช้@JvmNameคำอธิบายประกอบที่กำหนดเองเพื่อให้ตรงกับตัวรับ/ตัวตั้งค่า กับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจาก การอัปเดต (If6531, b/205289020)

เวอร์ชัน 2.4.0

เวอร์ชัน 2.4.0

15 ธันวาคม 2021

androidx.room:room-*:2.4.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0

  • การย้ายข้อมูลอัตโนมัติ: ตอนนี้ Room มี API สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่ส่งออกสคีมา หากต้องการให้ Room ทราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ คุณสามารถใช้พร็อพเพอร์ตี้ใหม่ @Database#autoMigrations เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลอัตโนมัติจากและไปยัง เมื่อ Room ต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือการลบตารางและคอลัมน์ @AutoMigration คำอธิบายประกอบจะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมใน@AutoMigrationเอกสารประกอบ
  • การแทรกทรัพยากร Dependency ในการย้ายข้อมูลอัตโนมัติ: @ProvidedAutoMigrationSpec เป็น API ใหม่สำหรับการประกาศว่า AutoMigrationSpec จะมีให้ใช้งานที่รันไทม์ผ่าน RoomDatabase.Builder#addAutoMigrationSpec() ซึ่งช่วยให้เฟรมเวิร์กการแทรกทรัพยากร Dependency ระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการทรัพยากร Dependency ที่ซับซ้อน
  • การรองรับตัวช่วยทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ: เราได้อัปเดต MigrationTestHelper ของ Room เพื่อรองรับการย้ายข้อมูลอัตโนมัติโดยการจัดหา API ตัวสร้างใหม่ที่รับคลาสฐานข้อมูลภายใต้การทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้โดยอัตโนมัติในลักษณะเดียวกันระหว่างrunMigrationsAndValidate
  • การรองรับเพจจิ้งใน Room: androidx.room:room-paging ได้รับการเผยแพร่แล้ว ซึ่งให้การรองรับเพจจิ้ง 3.0 แบบเนทีฟสำหรับการค้นหา Room ที่แสดงผล androidx.paging.PagingSource
  • วิธีการค้นหาเชิงสัมพันธ์: ตอนนี้ Room รองรับประเภทการคืนค่า multimap @Dao ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือ Map, SparseArray, LongSparseArray รวมถึง ImmutableMap, ImmutableSetMultimap และ ImmutableListMultimap ของ Guava

เวอร์ชัน 2.4.0-rc01

1 ธันวาคม 2021

androidx.room:room-*:2.4.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-rc01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • อัปเดตการขึ้นต่อกันของ Room กับ KSP เป็น 1.6.0-1.0.1 เพื่อรองรับ Kotlin 1.6

เวอร์ชัน 2.4.0-beta02

17 พฤศจิกายน 2021

androidx.room:room-*:2.4.0-beta02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-beta02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เราได้เพิ่มการรองรับ SparseArray และ LongSparseArray ใน @MapInfo (Ic91a2b/138910317)

การแก้ไขข้อบกพร่อง

  • เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่พิจารณาข้อมูลความสามารถในการเว้นว่างในประเภทต่างๆ เนื่องจากข้อมูลนี้ใช้ได้เฉพาะใน KSP จึงเปิดไว้โดยค่าเริ่มต้นใน KSP เท่านั้น หากทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่ง room.useNullAwareTypeAnalysis=false ไปยัง ตัวประมวลผลคำอธิบายประกอบ หากเกิดกรณีดังกล่าว โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำฟีเจอร์นี้ออกในอนาคต เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้แนะนำให้ระบุเฉพาะ TypeConverter ที่รับค่าที่ไม่ใช่ Null เนื่องจากเครื่องมือวิเคราะห์ใหม่มีความสามารถในการห่อหุ้มด้วยการตรวจสอบ Null โปรดทราบว่าการดำเนินการนี้จะไม่มีผลกับผู้ใช้ที่ใช้ KAPT หรือ Java เป็น ตัวประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ซึ่งไม่มีข้อมูลเกี่ยวกับค่า Null ในประเภท (Ia88f9, b/193437407)
  • แก้ไขข้อบกพร่องที่ Room จะคอมไพล์ไม่สำเร็จเนื่องจากข้อผิดพลาด SQL เมื่อมีการประกาศเอนทิตี FTS ให้ใช้ตัวแยกคำ ICU (I00db9, b/201753224)
  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับคอลัมน์ใหม่ที่เพิ่มลงในเอนทิตีที่ฝังระหว่างเวอร์ชัน (I5fcb1b/193798291)
  • เราได้แก้ไขปัญหาเกี่ยวกับประเภทการแสดงผลของวิธีการค้นหาเชิงสัมพันธ์ในการค้นหา LEFT JOIN แล้ว การเปลี่ยนแปลงเหล่านี้จะทำให้ในกรณีที่มีการแมปแบบ 1 ต่อหลาย รายการที่แสดงผลสำหรับคีย์จะไม่รวมออบเจ็กต์ค่าที่ไม่ถูกต้องหากไม่พบในเคอร์เซอร์ หากไม่พบค่าที่ถูกต้อง ระบบจะแมปคีย์กับคอลเล็กชันที่ว่างเปล่า (Id5552b/201946438)
  • แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่คีย์เวิร์ด SQLite ไม่สามารถหลีกในชื่อคอลัมน์ได้ (Idbed4b/197133152)

เวอร์ชัน 2.4.0-beta01

13 ตุลาคม 2021

androidx.room:room-*:2.4.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-beta01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่เพิ่มคอลัมน์ใหม่เมื่อตารางอื่นในการย้ายข้อมูลอัตโนมัติเดียวกันมีคอลัมน์ใหม่ที่มีชื่อเดียวกันด้วย (Ia5db5, b/200818663)
  • การใช้งาน PagingSource ที่สร้างโดยการแบ่งหน้าของ Room จะใช้ queryExecutor ที่ส่งผ่าน RoomDatabase.Builder แล้วในตอนนี้ จึงสามารถ ลบล้างได้แทนที่จะเป็น Dispatchers.IO ก่อนหน้านี้ (Iae259)

เวอร์ชัน 2.4.0-alpha05

29 กันยายน 2021

androidx.room:room-*:2.4.0-alpha05ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เพิ่มตัวแปลงประเภทบิวท์อินสำหรับ UUID (I671e8, b/73132006)

การเปลี่ยนแปลง API

  • เพิ่มพร็อพเพอร์ตี้ใหม่ลงในคำอธิบายประกอบ TypeConverters เพื่อให้ผู้พัฒนาปิดใช้ตัวแปลง Enum และ UUID ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณปิดใช้ได้สำหรับขอบเขตหนึ่งๆ หรือสำหรับทั้งฐานข้อมูล ดูรายละเอียดได้ที่เอกสารประกอบ TypeConverters (36ae9e, b/195413406)

  • รองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทการแสดงผล Multimap ใน DAO ผ่าน Annotation @MapInfo (I4d704)

@MapInfo จะต้องระบุเมื่อคอลัมน์คีย์หรือค่าของแผนที่มาจากคอลัมน์เดียว ดูตัวอย่างดังนี้

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • กำหนดให้ room-paging เป็นอาร์ติแฟกต์ที่จำเป็นเมื่อใช้ Paging3 กับ Room (Ieaffe)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ผลลัพธ์ของคำค้นหาแบบหลายแผนที่เรียงลำดับไม่ถูกต้องเมื่อคำค้นหามีคําสั่ง ORDER BY ของคอลัมน์จากคีย์ของแผนที่ (I6b887)

การมีส่วนร่วมจากภายนอก

  • เพิ่ม API ใหม่เพื่อระบุลำดับดัชนีใน @Index ขอขอบคุณ Nikita Zhelonkin (I033fc)

เวอร์ชัน 2.4.0-alpha04

21 กรกฎาคม 2021

androidx.room:room-*:2.4.0-alpha04ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ขณะนี้ Room รองรับประเภทการคืนค่าแบบหลายแผนที่ @Dao ซึ่งเป็นประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือ Map รวมถึง ImmutableMap, ImmutableSetMultimap และ ImmutableListMultimap ของ Guava

    ตัวอย่างการค้นหาแบบหลายแผนที่

    แผนที่ความสัมพันธ์แบบหนึ่งต่อหนึ่ง

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    แผนที่ความสัมพันธ์แบบหนึ่งต่อหลายรายการ (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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้การรองรับ KSP ของ Room ขึ้นอยู่กับ KSP 1.5.10-1.0.0-beta01 แล้ว (1ecb11, b/160322705)

เวอร์ชัน 2.4.0-alpha02

5 พฤษภาคม 2021

androidx.room:room-*:2.4.0-alpha02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • @ProvidedAutoMigrationSpec เป็น API ใหม่สำหรับการประกาศว่า AutoMigrationSpec จะมีให้ใช้งานที่รันไทม์ผ่าน RoomDatabase.Builder#addAutoMigrationSpec() ซึ่งจะช่วยให้เฟรมเวิร์กการแทรกทรัพยากร Dependency ระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการทรัพยากร Dependency ที่ซับซ้อน

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับการย้ายข้อมูลอัตโนมัติที่ระบบสร้าง @DatabaseView ใหม่ไม่ถูกต้อง

การมีส่วนร่วมจากภายนอก

  • แก้ไขปัญหาใน JournalMode.TRUNCATE ของ Room ที่บางครั้งระบบเรียกใช้การเรียกกลับ InvalidationTracker อย่างไม่ถูกต้อง ช้าเกินไป หรือไม่เรียกใช้เลย ขอขอบคุณ 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

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การตรวจสอบสคีมาของ Room ตรวจสอบ 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 เป็น String และในทางกลับกันโดยค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ Enum อยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงนั้นมากกว่าตัวแปลงเริ่มต้น
  • Callback API สำหรับการค้นหา: ตอนนี้ Room มี Callback 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 ในการเรียกใช้ Annotation Processor ในคอมไพเลอร์ 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 มี Callback API ทั่วไป RoomDatabase.QueryCallback สำหรับเมื่อกำลังจะเรียกใช้การค้นหา ซึ่งอาจมีประโยชน์สำหรับการบันทึกในบิลด์การแก้ไขข้อบกพร่อง คุณตั้งค่าการโทรกลับได้ผ่าน RoomDatabase.Builder#setQueryCallback() (Iaa513, b/174478034, b/74877608)
  • ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็น String และในทางกลับกันเป็นค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ Enum อยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงนั้นมากกว่าตัวแปลงเริ่มต้น (b/73132006)

ปัญหาที่ทราบ

  • หากมีตัวแปลงประเภททางเดียวสำหรับการอ่าน Enum อยู่แล้ว Room อาจใช้ตัวแปลง String เป็น Enum ในตัวโดยไม่ตั้งใจ ซึ่งอาจไม่เป็นที่ต้องการ นี่เป็นปัญหาที่ทราบอยู่แล้ว และแก้ไขได้โดยการทำให้เป็นตัวแปลงแบบ 2 ทาง ดู b/175707691

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Room ปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการอย่างไม่ถูกต้องใน JDK เวอร์ชันใหม่กว่า (b/171387388)
  • แก้ไขปัญหาเกี่ยวกับ Room ที่ค้นหาคลาสที่สร้างขึ้นเมื่อใช้ตัวโหลดคลาสหลายตัว ขอขอบคุณสำหรับวิธีแก้ไข "Serendipity | 892449346@qq.com" (b/170141113)
  • แก้ไขปัญหาที่ Room สร้างโค้ดไม่ถูกต้องเมื่อ @Dao ของ Kotlin มีคลาสฐานซึ่ง Generics เป็น Primitive ใน JVM (b/160258066)

การมีส่วนร่วมจากภายนอก

  • ตอนนี้ Room จะใช้ beginTransactionNonExclusive โดยค่าเริ่มต้นหากเปิดใช้โหมด WAL และ API เป็น 16 ขึ้นไป ขอขอบคุณ "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

เวอร์ชัน 2.3.0-alpha03

14 ตุลาคม 2020

androidx.room:room-*:2.3.0-alpha03ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Room มี API สำหรับการจัดเตรียมอินสแตนซ์ของตัวแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทําเครื่องหมายตัวแปลงประเภทที่จะส่งไปยัง Room ให้ใช้คำอธิบายประกอบใหม่ @ProvidedTypeConverter ขอขอบคุณ "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210)

  • ตอนนี้ Room มี API สำหรับสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่แพ็กไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะช่วยให้ใช้ได้ในกรณีต่างๆ เช่น เมื่อฐานข้อมูลที่แพ็กไว้ล่วงหน้าเป็นแบบ Gzip ขอขอบคุณ "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)

การเปลี่ยนแปลง API

  • เพิ่มเป้าหมายที่ขาดหายไปลงในคำอธิบายประกอบ @ForeignKey เพื่อป้องกันไม่ให้มีการใช้งานนอกคำอธิบายประกอบ @Entity (Iced1e)

  • ตอนนี้ระบบได้ซ่อนฟิลด์ mCallbacks ในRoomDatabase.java แล้ว (d576cb, b/76109329)

การแก้ไขข้อบกพร่อง

  • อัปเดตเอกสารประกอบของ TypeConverters เพื่อชี้แจงว่า TypeConverters ใช้ได้เฉพาะในการแปลงคอลัมน์ / ฟิลด์เท่านั้น และใช้กับแถวไม่ได้ (I07c56, b/77307836)

  • อัปเดต DaoProcessor เพื่อแก้ไขข้อผิดพลาดของคอมไพเลอร์ใน Dao ที่มีประเภทซูเปอร์ไทป์ทั่วไปที่มี "Primitive" ของ Kotlin (Ice6bb, b/160258066)

  • อัปเดตเอกสารประกอบเกี่ยวกับเมธอดเพิ่ม/นำผู้สังเกตการณ์ออกเพื่อชี้แจงการทำงานแบบหลายเธรด (Ifd1d9, b/153948821)

  • แก้ไขปัญหาที่ Room ตรวจสอบตาราง FTS ที่ประกาศคอลัมน์ rowid ไม่ถูกต้อง (d62ebc, b/145858914)

การมีส่วนร่วมภายนอก

  • แก้ไขปัญหาเกี่ยวกับภาษาที่ใช้ตัวพิมพ์ใหญ่/เล็กที่เกี่ยวข้องกับภาษาตุรกี (5746e3), b/68159494

  • แทนที่ ConcurrentHashMap ใน RoomDatabase ด้วย Collections.synchronizedMap() เพื่อหลีกเลี่ยงปัญหาใน Android Lollipop (d1cfc7, b/162431855)

  • เพิ่มการเรียกกลับ onOpenPrepackagedDatabase สำหรับกรณีที่คัดลอก DB ที่แพ็กไว้ล่วงหน้า (I1ba74, b/148934423)

เวอร์ชัน 2.3.0-alpha02

22 กรกฎาคม 2020

androidx.room:room-*:2.3.0-alpha02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • รองรับ RxJava3: ตอนนี้ Room รองรับประเภท RxJava3 แล้ว คุณสามารถประกาศเมธอด DAO ที่มีประเภทการแสดงผลเป็น Flowable, Single, Maybe และ Completable ได้เช่นเดียวกับ RxJava2 นอกจากนี้ ยังมีอาร์ติแฟกต์ใหม่ androidx.room:room-rxjava3 ที่พร้อมรองรับ RxJava3 (b/152427884)

การเปลี่ยนแปลง API

  • ตอนนี้ระบบรองรับการประกาศ @TypeConverter ในคลาสออบเจ็กต์ Kotlin แล้ว (b/151110764)
  • Room ตอนนี้ตัวเลือกการประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการจะเปิดอยู่โดยค่าเริ่มต้น (b/112110217)

เวอร์ชัน 2.3.0-alpha01

10 มิถุนายน 2020

androidx.room:room-*:2.3.0-alpha01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การรองรับ Paging 3.0: ตอนนี้ Room จะรองรับการสร้างการติดตั้งใช้งานสำหรับ@Queryเมธอดที่ใส่คำอธิบายประกอบซึ่งมีประเภทการแสดงผลเป็น androidx.paging.PagingSource แล้ว

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

การเปลี่ยนแปลง API

  • @RewriteQueriesToDropUnusedColumns คือคำอธิบายประกอบใหม่ที่สะดวกสบายซึ่งทำให้ Room เขียนการฉายภาพ "*" ในการค้นหาใหม่เพื่อให้ระบบนำคอลัมน์ที่ไม่ได้ใช้ในผลลัพธ์ออก
  • ตัวเลือกโปรเซสเซอร์ room.expandProjection เลิกใช้งานแล้ว ใช้ @RewriteQueriesToDropUnusedColumns แทนคำค้นหาการเพิ่มประสิทธิภาพห้องที่มีการคาดการณ์ระดับดาว โปรดทราบว่า @RewriteQueriesToDropUnusedColumns ไม่ได้แทนที่โซลูชันความขัดแย้งของคอลัมน์ room.expandProjection ที่เสนอเกี่ยวกับประเภทการคืนค่าที่มีฟิลด์ @Embedded

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ Room ตรวจหาเวอร์ชัน JDK ที่ใช้เพื่อเปิดใช้ตัวประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการไม่ถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
  • ตอนนี้ Room จะฝังทรัพยากร 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 ในตัวประมวลผลคำอธิบายประกอบ 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 จะพยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมี ไม่เช่นนั้นก็จะกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่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> return type เป็นข้อผิดพลาด แต่ Room ขอแนะนำให้คุณใช้ Flow แทน แล้วใช้ฟังก์ชันที่อยู่ข้างเคียงเพื่อแปลง Flow เป็น Channel b/130428884
  • โปรเซสเซอร์สำหรับคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นโปรเซสเซอร์สำหรับคำอธิบายประกอบที่แยก Gradle และเปิดใช้ส่วนเพิ่มได้ผ่านตัวเลือกโปรเซสเซอร์ room.incremental ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217
  • การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ทดลองใหม่ room.expandProjection ซึ่งทำให้ Room เขียนคำค้นหาใหม่ด้วย การฉายภาพแบบดาวให้มีเฉพาะคอลัมน์ใน POJO ของประเภทที่ส่งคืน เช่น สำหรับเมธอด DAO ที่มี @Query("SELECT * FROM Song") ซึ่งส่งคืน POJO ชื่อ SongIdAndTitle ที่มีฟิลด์เพียง 2 รายการ จากนั้น Room จะเขียนคำค้นหาใหม่เป็น SELECT id, title FROM Song เพื่อให้ระบบดึงข้อมูลชุดคอลัมน์ขั้นต่ำ เพื่อตอบสนองประเภทการแสดงผล ซึ่งจะช่วยขจัด CURSOR_MISMATCHคำเตือนที่แสดงเมื่อการค้นหาแสดงผลคอลัมน์เพิ่มเติม ซึ่งไม่ตรงกับฟิลด์ใดๆ ในประเภท POJO ที่แสดงผล

เวอร์ชัน 2.2.0-rc01

5 กันยายน 2019

androidx.room:room:2.2.0-rc01ระบบจะถอนการอ้างสิทธิ์ ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ไม่มีการเปลี่ยนแปลงแบบสาธารณะนับตั้งแต่ห้อง 2.2.0-beta01

เวอร์ชัน 2.2.0-beta01

22 สิงหาคม 2019

androidx.room:room-*:2.2.0-beta01ระบบจะถอนการอ้างสิทธิ์ ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่การค้นหา Coroutine Flow จะหยุดส่งค่าใหม่อีกครั้งหลังจากผ่านไประยะเวลาหนึ่ง (b/139175786)
  • แก้ไขข้อบกพร่องที่ Room ไม่ยอมรับรหัสแฮชของสคีมาเดิมขณะเปิดฐานข้อมูลที่ยังไม่ได้ย้ายข้อมูลตั้งแต่ Room 1.0 ซึ่งทำให้เกิดข้อขัดข้องขณะรันไทม์เนื่องจากสคีมาไม่ถูกต้อง (b/139306173)

เวอร์ชัน 2.2.0-alpha02

7 สิงหาคม 2019

androidx.room:room-*:2.2.0-alpha02ระบบจะถอนการอ้างสิทธิ์ ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • Coroutines Flow: @Query ตอนนี้เมธอด DAO สามารถมีประเภทการแสดงผลเป็น Flow<T> ได้แล้ว Flow ที่แสดงผลจะปล่อยค่าชุดใหม่ซ้ำอีกครั้งหากตารางที่สังเกตใน การค้นหาไม่ถูกต้อง การประกาศฟังก์ชัน DAO ที่มีChannel<T> return type เป็นข้อผิดพลาด แต่ Room ขอแนะนำให้คุณใช้ Flow แทน แล้วใช้ ฟังก์ชันที่อยู่ใกล้เคียงเพื่อแปลง Flow เป็น Channel b/130428884
  • การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ทดลองใหม่ room.expandProjection ซึ่งทำให้ Room เขียนคำค้นหาใหม่ด้วย การฉายภาพแบบดาวให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่ส่งคืน เช่น สำหรับเมธอด DAO ที่มี @Query("SELECT * FROM Song") ซึ่งส่งคืน POJO ชื่อ SongIdAndTitle ที่มีฟิลด์เพียง 2 รายการ จากนั้น Room จะเขียนคำค้นหาใหม่เป็น SELECT id, title FROM Song เพื่อให้ระบบดึงชุดคอลัมน์ขั้นต่ำ เพื่อตอบสนองประเภทการแสดงผล ซึ่งจะช่วยขจัด CURSOR_MISMATCHคำเตือนที่แสดงเมื่อการค้นหาแสดงผลคอลัมน์เพิ่มเติม ซึ่งไม่ตรงกับฟิลด์ใดๆ ในประเภท POJO ที่แสดงผล
  • onDestructiveMigrate เป็น Callback API ใหม่ที่เพิ่มลงใน RoomDatabase.Callback เมื่อ Room ย้ายข้อมูลฐานข้อมูลแบบทำลาย b/79962330

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องโดยใช้วิธีการเป็นตัวตั้งค่าฟิลด์เมื่อฟิลด์ได้รับการป้องกัน b/136194628
  • แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker แสดง NPE ในกระบวนการที่ 2 เมื่อเปิดใช้การลบล้างหลายอินสแตนซ์และระบบปิด Invalidation Service b/137454915
  • แก้ไขข้อบกพร่องที่ Room ระบุประเภทการคืนค่าของฟังก์ชันระงับที่รับค่ามาซึ่งมีคำอธิบายประกอบ @RawQuery ไม่ถูกต้อง b/137878827
  • อัปเดตโค้ดที่สร้างขึ้นสำหรับ @Relation เมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB ให้ใช้ ByteBuffer ที่เทียบเท่า b/137881998
  • แก้ไขข้อบกพร่องที่ Room จะแจ้งว่าไม่มีตัวตั้งค่าใน POJO ที่ใช้เป็น พารามิเตอร์เอนทิตีบางส่วนของ @Insert, @Update และ @Delete b/138664463
  • แก้ไขข้อบกพร่องที่ Room จะแจ้งว่าไม่มี Getter และ Setter สำหรับคอลัมน์ที่ ละเว้นผ่าน@Entityเมื่อใช้คลาสเอนทิตีในเมธอด DAO บางรายการ b/138238182
  • แก้ไขข้อบกพร่องที่ Room จะแปลงอาร์กิวเมนต์การเชื่อมโยงที่มีชื่อเป็น อาร์กิวเมนต์ตามตำแหน่งไม่ถูกต้อง ซึ่งทำให้เกิดข้อยกเว้นรันไทม์เมื่อเรียกใช้การค้นหาที่มี พารามิเตอร์ที่นำกลับมาใช้ใหม่ b/137254857

เวอร์ชัน 2.2.0-alpha01

10 กรกฎาคม 2019

ฟีเจอร์ใหม่

  • ฐานข้อมูลที่แพ็กไว้ล่วงหน้า: ตอนนี้มี API ใหม่ 2 รายการใน RoomDatabase.Builder พร้อมให้ใช้งานแล้วสําหรับการสร้าง RoomDatabase เมื่อมีไฟล์ฐานข้อมูลที่สร้างไว้แล้ว createFromAsset() ใช้ในกรณีที่ไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ในโฟลเดอร์ชิ้นงานของ APK ส่วน createFromFile() ใช้ในกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของการย้ายข้อมูลแบบทำลายล้างเพื่อให้ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมี ไม่เช่นนั้นก็จะกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่b/62185732
  • ค่าเริ่มต้นของสคีมา: @ColumnInfo มีพร็อพเพอร์ตี้ใหม่ defaultValue ซึ่งใช้ระบุค่าเริ่มต้นของคอลัมน์ได้แล้ว ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูล และจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากมีการระบุ b/64088772

    หมายเหตุ: หากสคีมาฐานข้อมูลมีค่าเริ่มต้นอยู่แล้ว เช่น ค่าที่เพิ่มผ่าน ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z และคุณตัดสินใจที่จะกำหนดค่าเริ่มต้นผ่าน @ColumnInfo ให้กับคอลัมน์เดียวกัน คุณอาจต้องระบุการย้ายข้อมูลเพื่อตรวจสอบค่าเริ่มต้นที่ไม่ได้ระบุ ดูข้อมูลเพิ่มเติมได้ที่ การย้ายข้อมูลห้อง

  • ความสัมพันธ์แบบกลุ่มต่อกลุ่ม: ตอนนี้ @Relation มีพร็อพเพอร์ตี้ใหม่ associateBy ซึ่งรับคำอธิบายประกอบใหม่ @Junction ที่ใช้เพื่อประกาศความสัมพันธ์ที่ ต้องเป็นไปตามตารางเชื่อม (หรือที่เรียกว่าตารางรวม) b/69201917
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: เราได้ยกเลิกข้อจำกัดในฟิลด์ POJO ที่มีคำอธิบายประกอบ @Relation ให้เป็นประเภท List หรือ Set แล้ว ซึ่งจะช่วยให้ แสดงความสัมพันธ์แบบค่าเดียวได้ b/62905145
  • เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO @Insert, @Update และ @Delete มีพร็อพเพอร์ตี้ใหม่ targetEntity ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO มีไว้เพื่อดำเนินการได้ ซึ่งจะช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งจะได้รับการตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตให้แทรก ลบ และอัปเดตบางส่วนได้ b/127549506
  • โปรเซสเซอร์สำหรับคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นโปรเซสเซอร์สำหรับคำอธิบายประกอบที่แยก Gradle แล้ว และเปิดใช้ส่วนเพิ่มได้ผ่านตัวเลือกโปรเซสเซอร์ room.incremental ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217

การแก้ไขข้อบกพร่อง

  • Room จะไม่ส่งต่อ EmptySetResultException ไปยัง ตัวแฮนเดิลข้อผิดพลาดส่วนกลางอีกต่อไปเมื่อสตรีม Rx ของการค้นหาถูกทิ้งก่อน การค้นหาจะเสร็จสมบูรณ์ b/130257475
  • แก้ไขข้อบกพร่องที่ Room แสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อฟังก์ชัน DAO ที่ระงับ ซึ่งมีคำอธิบายประกอบด้วย @RawQuery ไม่มีประเภทการคืนค่า b/134303897
  • Room จะไม่สร้างอแดปเตอร์ DAO ที่มีประเภทดิบอีกต่อไป b/135747255

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

13 มิถุนายน 2019

Room 2.1.0 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01 ดูคอมมิตที่รวมอยู่ในเวอร์ชันได้ที่นี่

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.0.0

  • FTS: ตอนนี้ Room รองรับเอนทิตีที่มีการแมปกับตาราง FTS3 หรือ FTS4 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติมให้กับคลาสที่ใส่คำอธิบายประกอบด้วย @Entity โดยใช้ @Fts3 หรือ @Fts4 เพื่อประกาศ คลาสที่มีตารางการค้นหาข้อความแบบเต็มของการแมป ตัวเลือก FTS สำหรับการปรับแต่งเพิ่มเติม มีให้ใช้งานผ่านเมธอดของคำอธิบายประกอบ
  • มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นการค้นหาที่จัดเก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้ คำอธิบายประกอบ @DatabaseView
  • โครูทีน: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว รวม room-ktx ไว้ใน Dependencies เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ KTX ยังมีฟังก์ชันส่วนขยาย RoomDatabase.withTransaction สำหรับ การทำธุรกรรมในฐานข้อมูลภายในโครูทีนด้วย
  • ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่ใส่คำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณสามารถประกาศคำอธิบายประกอบของ Room @PrimaryKey, @ColumnInfo, @Embedded และ @Relation ในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบ AutoValue ได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี@CopyAnnotationsด้วยเพื่อให้ Room เข้าใจได้อย่างถูกต้อง
  • การรองรับแบบไม่พร้อมกันเพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update พร้อมกับ @Query ที่มีคำสั่ง INSERT, DELETE หรือ UPDATE รองรับประเภทการแสดงผล Rx Completable, Single, Maybe และประเภทการแสดงผล ListenableFuture ของ Guava แล้ว และยังสามารถเป็นฟังก์ชันระงับได้ด้วย
  • enableMultiInstanceInvalidation เป็น API ใหม่ใน RoomDatabase.Builder ที่ใช้ เปิดใช้การลบล้างในอินสแตนซ์หลายรายการของ RoomDatabase โดยใช้ไฟล์ฐานข้อมูลเดียวกัน
  • fallbackToDestructiveMigrationOnDowngrade เป็น API ใหม่ใน RoomDatabase.Builder ที่จะสร้างฐานข้อมูลใหม่โดยอัตโนมัติหากมีการดาวน์เกรด เกิดขึ้น
  • ignoredColumns เป็น API ใหม่ในคำอธิบายประกอบ @Entity ที่ใช้เพื่อ แสดงรายการฟิลด์ที่ละเว้นตามชื่อได้
  • ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin ในคลาสข้อมูลอย่างถูกต้อง จึงไม่จำเป็นต้องประกาศพร็อพเพอร์ตี้เป็น vars

เวอร์ชัน 2.1.0-rc01

29 พฤษภาคม 2019

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดในการเริ่มต้นห้องที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า temp_store ที่ตั้งค่าไว้แล้ว b/132602198
  • แก้ไขคำเตือนการใช้เครื่องหมายคำพูดคู่สำหรับผู้ใช้ที่มี SQLite 3.27.0 ขึ้นไป b/131712640
  • แก้ไขข้อบกพร่องที่ InvalidationTracker ทำให้เกิดข้อขัดข้องเมื่อมีการตรวจสอบการลบล้างหลายรายการพร้อมกัน b/133457594

เวอร์ชัน 2.1.0-beta01

7 พฤษภาคม 2019

androidx.room 2.1.0-beta01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha07 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชัน 2.1.0-alpha07

25 เมษายน 2019

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • ฟังก์ชันส่วนขยาย RoomDatabase.withTransaction ได้รับการเปลี่ยนแปลงให้ ไม่รับบล็อกฟังก์ชันที่มี CoroutineScope เป็นตัวรับอีกต่อไป ซึ่งจะช่วยป้องกันไม่ให้ข้ามcoroutineScope { } Wrapper เพิ่มเติม ที่จำเป็นต่อการเรียกใช้สิ่งต่างๆ ในบล็อกธุรกรรมพร้อมกัน

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ Room ไม่สามารถจับคู่ TypeConverter สำหรับฟังก์ชัน Kotlin DAO ที่มีพารามิเตอร์ประเภท Collection b/122066791

เวอร์ชัน 2.1.0-alpha06

22 มีนาคม 2019

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • ตอนนี้การค้นหาธุรกรรมแบบไม่พร้อมกันจะได้รับการจัดลำดับเพื่อให้ Room ไม่ใช้เธรดมากกว่า 1 รายการในการดำเนินการธุรกรรมของฐานข้อมูล RoomDatabase.Builder.setTransactionExecutor(Executor) ได้รับการเพิ่มเพื่ออนุญาต การกำหนดค่าโปรแกรมเรียกใช้ที่จะใช้สำหรับธุรกรรม
  • RoomDatabase.runInTransaction(Callable) จะไม่ห่อหุ้มข้อยกเว้นที่ตรวจสอบแล้ว เป็น RuntimeExceptions อีกต่อไป b/128623748

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ตัวติดตามการลบล้างจะหยุดสังเกตตารางเนื้อหา หากมีการเพิ่มผู้สังเกตการณ์ทั้งตารางเนื้อหาและตาราง FTS ของเนื้อหาภายนอก b/128508917
  • อัปเดตไวยากรณ์ Room SQLite ให้ตรงกับ SQLite 3.24.0 b/110883668

เวอร์ชัน 2.1.0-alpha05

13 มีนาคม 2019

ฟีเจอร์ใหม่

  • ฟังก์ชันส่วนขยาย RoomDatabase.withTransaction ช่วยให้คุณทำธุรกรรมในฐานข้อมูลได้อย่างปลอดภัยภายในโครูทีน ฟังก์ชันส่วนขยายห้องพร้อมการรองรับโครูทีนจะอยู่ในอาร์ติแฟกต์ room-ktx
  • ตอนนี้เมธอด DAO ที่ไม่ใช่แบบแอบสแทรกซึ่งมีคำอธิบายประกอบด้วย @Transaction สามารถเป็นฟังก์ชันระงับได้แล้ว b/120241587

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • เราได้เปลี่ยนชื่ออาร์ติแฟกต์ room-coroutines เป็น room-ktx โดยใช้การตั้งชื่อแบบเดียวกับอาร์ติแฟกต์ androidx อื่นๆ
  • beginTransaction, setTransactionSuccessful และ endTransaction ใน RoomDatabase ถูกเลิกใช้งานแล้วเพื่อรองรับ runInTransaction และฟังก์ชันส่วนขยาย room-ktx withTransaction

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่อาร์กิวเมนต์ของโทเค็นไนเซอร์ถูกทิ้งหากโทเค็นไนเซอร์ที่ใช้เป็น SIMPLE b/125427014
  • แก้ไขข้อบกพร่องที่ทำให้ Room ระบุฟังก์ชันที่ระงับซึ่งมีพารามิเตอร์ที่มีประเภทเป็นคลาสภายในไม่ถูกต้อง b/123767877
  • แก้ไขข้อบกพร่องที่ทำให้@Queryเมธอด DAO ที่เลื่อนเวลาพร้อมกับคำสั่ง INSERT, UPDATE หรือ DELETE เตรียมคำค้นหาในเธรดหลักอย่างรวดเร็ว b/123695593
  • แก้ไขข้อบกพร่องต่างๆ ที่ Room สร้างโค้ดไม่ถูกต้องสำหรับฟังก์ชันระงับบางอย่าง b/123466702 และ b/123457323
  • แก้ไขข้อบกพร่องที่การใช้งานเมธอดที่เลิกใช้งานแล้วไม่ถูกระงับอย่างถูกต้องในโค้ดที่สร้างขึ้น b/117602586
  • อัปเดตทรัพยากร Dependency ของ 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 อื่นๆ เป็นอาร์กิวเมนต์ของนิพจน์ IN b/119884035
  • แก้ไขข้อบกพร่องที่ทำให้ LiveData ที่ส่งคืนจาก Room จะได้รับการเก็บขยะเมื่อสังเกตการณ์ตลอดเวลา ซึ่งทำให้ไม่สามารถปล่อยข้อมูลใหม่ได้อีก b/74477406
  • อัปเดตการล็อกปิดของ RoomDatabase เพื่อลดการแย่งกันล็อก b/117900450

เวอร์ชัน 2.1.0-alpha02

30 ตุลาคม 2018

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการอ้างอิง @DatabaseView ใน @Relation b/117680932

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ Room จะดำเนินการ I/O ของดิสก์ในเทรดหลักเมื่อสมัครใช้บริการและยกเลิกการสมัครใช้บริการจากประเภทการคืนค่า Rx b/117201279
  • แก้ไขข้อบกพร่องที่ Room ไม่พบตัวแปลงประเภทที่เหมาะสมสำหรับฟิลด์ในคลาสเอนทิตี Kotlin b/111404868
  • แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับการใช้งานอินเทอร์เฟซ DAO ซึ่งมีเมธอดเริ่มต้นของ Kotlin ที่ไม่มีอาร์กิวเมนต์ b/117527454
  • อัปเดตRoomตัวแยกวิเคราะห์ไวยากรณ์ SQLite เพื่อแก้ไขปัญหาด้านประสิทธิภาพที่ทำให้ใช้เวลานานในการสร้าง b/117401230

เวอร์ชัน 2.1.0-alpha01

8 ตุลาคม 2018

ฟีเจอร์ใหม่

  • FTS: ตอนนี้ Room รองรับเอนทิตีที่มีตาราง FTS3 หรือ FTS4 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติมให้กับคลาสที่ใส่คำอธิบายประกอบด้วย @Entity โดยใช้ @Fts3 หรือ @Fts4 เพื่อประกาศคลาสที่มีตารางการค้นหาข้อความแบบเต็มของการแมป ตัวเลือก FTS สำหรับการปรับแต่งเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416
  • มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคําค้นหาที่จัดเก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้คำอธิบายประกอบ @DatabaseView b/67033276
  • Auto Value: ตอนนี้ Room รองรับการประกาศคลาสที่ใส่คำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบ Room @PrimaryKey, @ColumnInfo, @Embedded และ @Relation ได้แล้วในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบค่าอัตโนมัติ โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมาพร้อมกับ @CopyAnnotations เพื่อให้ Room เข้าใจได้อย่างถูกต้อง b/62408420
  • รองรับประเภทการคืนค่า Rx เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update รองรับประเภทการคืนค่า Rx Completable, Single<T> และ Maybe<T> แล้ว b/63317956
  • ประเภทที่ไม่เปลี่ยนแปลงพร้อม @Relation: ก่อนหน้านี้ Room กำหนดให้ฟิลด์ที่ใส่คำอธิบายประกอบ @Relation ต้องตั้งค่าได้ แต่ตอนนี้ฟิลด์ดังกล่าวสามารถเป็นพารามิเตอร์ของตัวสร้างได้
  • enableMultiInstanceInvalidation: เป็น API ใหม่ใน RoomDatabase.Builder เพื่อเปิดใช้การลบล้างในหลายอินสแตนซ์ของ RoomDatabase โดยใช้ไฟล์ฐานข้อมูลเดียวกัน กลไกการลบล้างแบบหลายอินสแตนซ์นี้ยังใช้ได้กับหลายกระบวนการด้วย b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: เป็น API ใหม่ใน RoomDatabase.Builder ที่จะสร้างฐานข้อมูลใหม่โดยอัตโนมัติหากมีการดาวน์เกรด b/110416954
  • ignoredColumns: เป็น API ใหม่ในคำอธิบายประกอบ @Entity ที่ใช้แสดงรายการฟิลด์ที่ระบบไม่สนใจตามชื่อได้ มีประโยชน์ในการละเว้นฟิลด์ที่รับค่ามาในเอนทิตี b/63522075

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • mCallback และ mDatabase ใน RoomDatabase เปลี่ยนเป็น @Deprecated แล้ว และจะนำออกใน Room เวอร์ชันหลักถัดไป b/76109329

การแก้ไขข้อบกพร่อง

  • แก้ไข 2 ปัญหาที่ Room กู้คืนจากฐานข้อมูลที่เสียหายหรือการย้ายข้อมูลที่ไม่ถูกต้องระหว่างการเริ่มต้นไม่ถูกต้อง b/111504749 และ b/111519144
  • ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin ในคลาสข้อมูลอย่างถูกต้องโดยไม่จำเป็นต้องประกาศฟิลด์เป็น vars b/105769985

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

1 ตุลาคม 2018

androidx.room 2.0.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc01

เวอร์ชัน 2.0.0-rc01

20 กันยายน 2018

androidx.room 2.0.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-beta01

เวอร์ชัน 2.0.0-beta01

2 กรกฎาคม 2018

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • เพิ่ม RoomDatabase.Builder.setQueryExecutor() เพื่ออนุญาตให้ปรับแต่งตำแหน่งที่จะเรียกใช้การค้นหา
  • เพิ่มการรองรับ RxJava2 Observable
  • ตอนนี้การใช้งาน DAO และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว

การแก้ไขข้อบกพร่อง

  • ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบ Getter สำหรับฟิลด์" b/73334503
  • แก้ไขความเข้ากันได้แบบย้อนหลังของ RoomOpenHelper กับ Room เวอร์ชันเก่า b/110197391

การขึ้นอยู่กับไลบรารีก่อน AndroidX

สำหรับ Room เวอร์ชันก่อน AndroidX ให้รวมการขึ้นต่อกันต่อไปนี้

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

เวอร์ชัน 1.1.1

เวอร์ชัน 1.1.1

19 มิถุนายน 2018

ห้อง 1.1.1 เหมือนกับห้อง 1.1.1-rc1

เวอร์ชัน 1.1.1-rc1

16 พฤษภาคม 2018 เราขอแนะนำให้ใช้ Room 1.1.1-rc1 แทน 1.1.0 หากคุณใช้การย้ายข้อมูล

แก้ไขข้อบกพร่องที่ Room ไม่จัดการการเริ่มต้นหลังการย้ายข้อมูลอย่างถูกต้อง b/79362399

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0-เบต้า 3

19 เมษายน 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ POJO ของ Kotlin อ้างอิงเอนทิตีความสัมพันธ์ที่ กำหนดไว้ใน Java b/78199923

เวอร์ชัน 1.1.0-beta2

5 เมษายน 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน Room Rx Single และ 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 หรือ Relation b/74041772
  • เพจจิ้ง: การติดตั้งใช้งาน DataSource ของ Room จะจัดการทรัพยากร Dependency หลายตาราง (เช่น ความสัมพันธ์และการรวม) ได้อย่างถูกต้องแล้ว ก่อนหน้านี้การดำเนินการเหล่านี้จะไม่ทำให้เกิดผลลัพธ์ใหม่ หรืออาจคอมไพล์ไม่สำเร็จ b/74128314

เวอร์ชัน 1.1.0-alpha1

22 มกราคม 2018

ฟีเจอร์ใหม่

  • RawQuery: API ใหม่นี้ช่วยให้เมธอด @Dao รับ SQL เป็นพารามิเตอร์การค้นหาได้ b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: API ใหม่นี้ใน RoomDatabase.Builder ช่วยให้ควบคุมได้ละเอียดยิ่งขึ้นว่าจะอนุญาตการย้ายข้อมูลแบบทำลายล้างจากสคีมาเริ่มต้นเวอร์ชันใด (เมื่อเทียบกับ fallbackToDestructiveMigration) b/64989640
  • ตอนนี้ Room รองรับเฉพาะ Paging API เวอร์ชันใหม่กว่า (alpha-4 ขึ้นไป) และจะหยุดรองรับ LivePagedListProviderที่เลิกใช้งานแล้ว หากต้องการใช้เวอร์ชันอัลฟ่าของฟีเจอร์ห้องใหม่ คุณจะต้องใช้การแบ่งหน้า alpha-4ขึ้นไป และเปลี่ยนจาก LivePagedListProvider เป็น LivePagedListBuilder หากยังไม่ได้ดำเนินการ

การแก้ไขข้อบกพร่อง

  • ปรับปรุงการรองรับประเภท Kapt ของ Kotlin b/69164099
  • ลำดับของฟิลด์จะไม่ทำให้สคีมาไม่ถูกต้องอีกต่อไป b/64290754