Room 3.0 เวอร์ชันอัลฟ่าแรกเปิดตัวแล้ว Room 3.0 เป็นเวอร์ชันไลบรารีที่มีการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบครั้งใหญ่ ซึ่งมุ่งเน้นที่ Kotlin Multiplatform (KMP) และเพิ่มการรองรับ JavaScript และ WebAssembly (WASM) นอกเหนือจากการรองรับ Android, iOS และ JVM Desktop ที่มีอยู่
ในบล็อกนี้ เราจะสรุปการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ เหตุผลที่อยู่เบื้องหลัง Room 3.0 และสิ่งต่างๆ ที่คุณทำได้เพื่อย้ายข้อมูลจาก Room 2.0
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
Room 3.0 มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบดังนี้
- การเลิกใช้ SupportSQLite APIs: Room 3.0 ได้รับการสนับสนุนอย่างเต็มที่จาก androidx.sqlite driver APIs SQLiteDriver API เข้ากันได้กับ KMP และการนำทรัพยากร Dependency ของ Room ที่มีต่อ API ของ Android ออก จะช่วยลดความซับซ้อนของ API สำหรับ Android เนื่องจากหลีกเลี่ยงการมีแบ็กเอนด์ที่เป็นไปได้ 2 รายการ
- ไม่มีการสร้างโค้ด Java อีกต่อไป: Room 3.0 จะสร้างโค้ด Kotlin เท่านั้น ซึ่งสอดคล้องกับกระบวนทัศน์ Kotlin-first ที่พัฒนาขึ้น แต่ยังช่วยลดความซับซ้อนของฐานโค้ดและกระบวนการพัฒนา ทำให้สามารถทำซ้ำได้เร็วขึ้น
- มุ่งเน้นที่ KSP: เราจะเลิกใช้ Java Annotation Processing (AP) และ KAPT ด้วย Room 3.0 เป็นโปรเซสเซอร์ KSP (Kotlin Symbol Processing) เพียงอย่างเดียว ซึ่งช่วยให้ประมวลผลฐานโค้ด Kotlin ได้ดียิ่งขึ้นโดยไม่ถูกจำกัดด้วยภาษา Java
- Coroutines เป็นอันดับแรก: Room 3.0 ใช้ Coroutines ของ Kotlin ทำให้ API เป็น Coroutines-first Coroutines เป็นเฟรมเวิร์กแบบอะซิงโครนัสที่เข้ากันได้กับ KMP และการทำให้ Room เป็นแบบอะซิงโครนัสโดยธรรมชาติเป็นข้อกำหนดที่สำคัญสำหรับการรองรับแพลตฟอร์มเว็บ
แพ็กเกจใหม่
Room 3.0 อยู่ในแพ็กเกจใหม่เพื่อป้องกันปัญหาความเข้ากันได้กับการติดตั้งใช้งาน Room 2.x ที่มีอยู่ และสำหรับไลบรารีที่มีการพึ่งพา Room แบบชั่วคราว (เช่น WorkManager) ซึ่งหมายความว่าจะมีกลุ่ม Maven และรหัสอาร์ติแฟกต์ใหม่ด้วย เช่น androidx.room:room-runtime กลายเป็น androidx.room3:room3-runtime และคลาสต่างๆ เช่น androidx.room.RoomDatabase จะอยู่ใน androidx.room3.RoomDatabase แล้ว
Kotlin และ Coroutines เป็นอันดับแรก
เมื่อไม่มีการสร้างโค้ด Java อีกต่อไป Room 3.0 จึงต้องใช้ KSP และคอมไพเลอร์ Kotlin แม้ว่าฐานของโค้ดที่โต้ตอบกับ Room จะอยู่ใน Java ก็ตาม เราขอแนะนำให้ใช้โปรเจ็กต์แบบหลายโมดูลซึ่งมีการใช้งาน Room อย่างเข้มข้น และสามารถใช้ Kotlin Gradle Plugin และ KSP ได้โดยไม่ส่งผลต่อฐานของโค้ดส่วนอื่นๆ
นอกจากนี้ Room 3.0 ยังต้องใช้ Coroutines และโดยเฉพาะอย่างยิ่งฟังก์ชัน DAO ต้องระงับการทำงานเว้นแต่จะแสดงผลประเภทที่ตอบสนอง เช่น Flow Room 3.0 ไม่อนุญาตฟังก์ชัน DAO ที่บล็อก โปรดดู เอกสารประกอบเกี่ยวกับ Coroutines ใน Android เกี่ยวกับการเริ่มต้นผสานรวม Coroutines เข้ากับแอปพลิเคชัน
การย้ายข้อมูลไปยัง SQLiteDriver APIs
เมื่อเปลี่ยนจาก SupportSQLite ไปใช้ SQLiteDriver APIs แอปจะต้องย้ายข้อมูลไปยัง SQLiteDriver APIs การย้ายข้อมูลนี้มีความสำคัญอย่างยิ่งต่อการใช้ประโยชน์จาก Room 3.0 อย่างเต็มที่ ซึ่งรวมถึงการอนุญาตให้ใช้ไลบรารี SQLite ที่รวมไว้ผ่าน BundledSQLiteDriver คุณสามารถเริ่มย้ายข้อมูลไปยัง Driver APIs ได้แล้ววันนี้ด้วย Room 2.7.0 ขึ้นไป เราขอแนะนำอย่างยิ่งให้หลีกเลี่ยงการใช้ SupportSQLite ต่อไป หากคุณย้ายข้อมูลการผสานรวม Room ไปยัง SQLiteDriver APIs การเปลี่ยนไปใช้ Room 3.0 จะง่ายขึ้นเนื่องจากการเปลี่ยนแปลงแพ็กเกจส่วนใหญ่เกี่ยวข้องกับการอัปเดตการอ้างอิงสัญลักษณ์ (การนำเข้า) และอาจต้องมีการเปลี่ยนแปลงเล็กน้อยในตำแหน่งที่เรียก
หากต้องการดูภาพรวมสั้นๆ ของ SQLiteDriver APIs โปรดดู เอกสารประกอบเกี่ยวกับ SQLiteDriver APIs
หากต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีย้ายข้อมูล Room ไปใช้ SQLiteDriver APIs โปรดดู เอกสารประกอบอย่างเป็นทางการสำหรับการย้ายข้อมูลจาก SupportSQLite
Room SupportSQLite Wrapper
เราเข้าใจว่าการนำ SupportSQLite ออกทั้งหมดอาจไม่สามารถทำได้ทันทีสำหรับบางโปรเจ็กต์ Room 2.8.0 ซึ่งเป็น Room 2.0 เวอร์ชันล่าสุดได้เปิดตัวอาร์ติแฟกต์ใหม่ที่ชื่อว่า androidx.room:room-sqlite-wrapper เพื่อให้การเปลี่ยนผ่านนี้ง่ายขึ้น อาร์ติแฟกต์นี้มี API ความเข้ากันได้ที่ช่วยให้คุณแปลง RoomDatabase เป็น SupportSQLiteDatabase ได้ แม้ว่า SupportSQLite APIs ในฐานข้อมูลจะถูกปิดใช้เนื่องจากมีการติดตั้ง SQLiteDriver ซึ่งเป็นสะพานชั่วคราวสำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเวลาเพิ่มเติมในการย้ายข้อมูลฐานของโค้ดทั้งหมด อาร์ติแฟกต์นี้จะยังคงอยู่ใน Room 3.0 ในชื่อ androidx.room3:room3-sqlite-wrapper เพื่อให้การย้ายข้อมูลไปยัง Room 3.0 เป็นไปได้ในขณะที่ยังคงรองรับการใช้งาน SupportSQLite ที่สำคัญ
ตัวอย่างเช่น การเรียกใช้ roomDatabase.openHelper.writableDatabase สามารถแทนที่ด้วย roomDatabase.getSupportWrapper() และระบบจะแสดง Wrapper แม้ว่าจะมีการเรียกใช้ setDriver() ใน Builder ของ Room ก็ตาม
โปรดดูรายละเอียดเพิ่มเติมใน เอกสารประกอบเกี่ยวกับ room-sqlite-wrapper
การรองรับ Room และ SQLite บนเว็บ
การรองรับเป้าหมาย JS และ WasmJS ของ Kotlin Multiplatform ทำให้เกิดการเปลี่ยนแปลง API ที่สำคัญที่สุดบางอย่าง โดยเฉพาะอย่างยิ่ง API หลายรายการใน Room 3.0 เป็นฟังก์ชันระงับการทำงานเนื่องจากการรองรับพื้นที่เก็บข้อมูลบนเว็บอย่างเหมาะสมเป็นแบบอะซิงโครนัส นอกจากนี้ SQLiteDriver APIs ยังได้รับการอัปเดตให้รองรับเว็บ และมีไดรเวอร์แบบอะซิงโครนัสสำหรับเว็บใหม่ใน androidx.sqlite:sqlite-web ซึ่งเป็นไดรเวอร์ที่อิงตาม Web Worker ซึ่งช่วยให้สามารถเก็บข้อมูลฐานข้อมูลไว้ในระบบไฟล์ส่วนตัวของ Origin (OPFS)
หากต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีตั้งค่า Room สำหรับเว็บ โปรดดู หมายเหตุประจำรุ่นของ Room 3.0
ประเภทการแสดงผลที่กำหนดเองของ DAO
Room 3.0 มีความสามารถในการเพิ่มการผสานรวมที่กำหนดเองลงใน Room ซึ่งคล้ายกับ RxJava และ Paging คุณสามารถสร้างการผสานรวมของคุณเองผ่าน API คำอธิบายประกอบใหม่ที่ชื่อว่า @DaoReturnTypeConverter เพื่อให้โค้ดที่สร้างขึ้นของ Room เข้าถึงได้ในรันไทม์ ซึ่งช่วยให้ฟังก์ชัน @Dao มีประเภทการแสดงผลที่กำหนดเองได้โดยไม่ต้องรอให้ทีม Room เพิ่มการรองรับ การผสานรวมที่มีอยู่จะย้ายข้อมูลไปใช้ฟังก์ชันนี้ ดังนั้นผู้ที่ใช้การผสานรวมดังกล่าวจะต้องเพิ่มตัวแปลงลงในคำจำกัดความ @Database หรือ @Dao
ตัวอย่างเช่น ตัวแปลง Paging จะอยู่ในอาร์ติแฟกต์ androidx.room3:room3-paging และมีชื่อว่า PagingSourceDaoReturnTypeConverter ส่วนตัวแปลง LiveData จะอยู่ใน androidx.room3:room3-livedata และมีชื่อว่า LiveDataDaoReturnTypeConverter
โปรดดูรายละเอียดเพิ่มเติมในส่วนตัวแปลงประเภทการแสดงผลของ DAO ใน หมายเหตุประจำรุ่นของ Room 3.0
โหมดการบำรุงรักษาของ Room 2.x
เนื่องจากการพัฒนา Room จะมุ่งเน้นไปที่ Room 3 เวอร์ชัน Room 2.x ปัจจุบันจึงเข้าสู่โหมดการบำรุงรักษา ซึ่งหมายความว่าจะไม่มีการพัฒนาฟีเจอร์หลัก แต่จะยังคงมีการเผยแพร่แพตช์ (2.8.1, 2.8.2 ฯลฯ) พร้อมการแก้ไขข้อบกพร่องและการอัปเดตทรัพยากร Dependency ทีมงานมุ่งมั่นที่จะดำเนินการนี้ต่อไปจนกว่า Room 3 จะเสถียร
ความคิดขั้นสุดท้าย
เรารู้สึกตื่นเต้นอย่างยิ่งกับศักยภาพของ Room 3.0 และโอกาสที่ Room 3.0 จะมอบให้กับระบบนิเวศ Kotlin โปรดติดตามข้อมูลอัปเดตเพิ่มเติมในขณะที่เราดำเนินการต่อไป
อ่านต่อ
-
ข่าวผลิตภัณฑ์
ที่ Google Play เรามุ่งมั่นที่จะมอบประสบการณ์การใช้งานที่ดีที่สุดแก่ผู้ใช้ พร้อมทั้งตรวจสอบว่านักพัฒนาแอปมีเครื่องมือและความสามารถในการปรับตัวเพื่อประสบความสำเร็จ
Paul Feng • ใช้เวลาอ่าน 3 นาที
-
ข่าวผลิตภัณฑ์
เมื่อปีที่แล้ว เราได้เปิดตัวการยืนยันนักพัฒนาแอป Android เพื่อเสริมความปลอดภัยของระบบนิเวศและหยุดผู้ไม่ประสงค์ดีไม่ให้ซ่อนตัวอยู่เบื้องหลังการไม่เปิดเผยตัวตนเพื่อเผยแพร่แอปที่เป็นอันตราย
Matthew Forsythe • ใช้เวลาอ่าน 2 นาที
-
ข่าวผลิตภัณฑ์
ระบบนิเวศ Android XR กำลังขยายตัวอย่างรวดเร็ว ตั้งแต่การซ้อนทับแบบเพิ่มความเป็นจริงไปจนถึงสภาพแวดล้อมที่สมจริงอย่างเต็มรูปแบบ โดย Samsung Galaxy XR พร้อมจำหน่ายแล้ววันนี้
Stevan Silva, Vinny DaSilva • ใช้เวลาอ่าน 3 นาที
รับข่าวสาร
รับข้อมูลเชิงลึกล่าสุดเกี่ยวกับการพัฒนา Android ส่งตรงถึงกล่องจดหมายของคุณ ทุกสัปดาห์