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