Room 3.0 เวอร์ชันอัลฟารายการแรกเปิดตัวแล้ว Room 3.0 เป็นเวอร์ชันหลักที่สำคัญของไลบรารีซึ่งมุ่งเน้นที่ Kotlin Multiplatform (KMP) และเพิ่มการรองรับ JavaScript และ WebAssembly (WASM) นอกเหนือจากการรองรับ Android, iOS และ JVM บนเดสก์ท็อปที่มีอยู่
ในบล็อกนี้ เราจะสรุปการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ เหตุผลเบื้องหลัง Room 3.0 และสิ่งต่างๆ ที่คุณทำได้เพื่อย้ายข้อมูลจาก Room 2.0
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
Room 3.0 มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบต่อไปนี้
- การเลิกใช้ SupportSQLite API: Room 3.0 ได้รับการสนับสนุนอย่างเต็มรูปแบบจาก androidx.sqlite driver API SQLiteDriver API เข้ากันได้กับ KMP และการนำการพึ่งพา Room ใน API ของ Android ออกจะช่วยลดความซับซ้อนของ API Surface สำหรับ 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 ใช้ Coroutine ของ Kotlin ทำให้ API ของ Room เป็น Coroutine เป็นอันดับแรก โครูทีนเป็นเฟรมเวิร์กแบบอะซิงโครนัสที่เข้ากันได้กับ KMP และการทำให้ Room เป็นแบบอะซิงโครนัสโดยธรรมชาติเป็นข้อกำหนดที่สำคัญสำหรับการรองรับแพลตฟอร์มเว็บ
แพ็กเกจใหม่
เพื่อป้องกันปัญหาความเข้ากันได้กับการใช้งาน Room 2.x ที่มีอยู่และสำหรับไลบรารีที่มีทรัพยากร Dependency แบบสกรรมกริยากับ Room (เช่น WorkManager) Room 3.0 จะอยู่ในแพ็กเกจใหม่ ซึ่งหมายความว่าจะมีกลุ่ม 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 ยังต้องใช้ Coroutine และฟังก์ชัน 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
Wrapper ของ SupportSQLite สำหรับ Room
เราเข้าใจว่าการนำ SupportSQLite ออกทั้งหมดอาจไม่สามารถทำได้ทันทีสำหรับบางโปรเจ็กต์ เพื่อช่วยให้การเปลี่ยนผ่านนี้เป็นไปอย่างราบรื่น Room 2.8.0 ซึ่งเป็นเวอร์ชันล่าสุดของซีรีส์ Room 2.0 ได้เปิดตัวอาร์ติแฟกต์ใหม่ที่ชื่อว่า androidx.room:room-sqlite-wrapper อาร์ติแฟกต์นี้มี 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() ใน Builder ของ Room ก็ตาม
ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบของ room-sqlite-wrapper
การรองรับ Room และ SQLite Web
การรองรับ 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 Return Type Converters ในบันทึกประจำรุ่นของ Room 3.0
โหมดการบำรุงรักษาของ Room 2.x
เนื่องจากการพัฒนา Room จะมุ่งเน้นไปที่ Room 3 เวอร์ชัน Room 2.x ปัจจุบันจึงเข้าสู่โหมดการบำรุงรักษา ซึ่งหมายความว่าจะไม่มีการพัฒนาฟีเจอร์หลักๆ แต่จะยังคงมีการเผยแพร่แพตช์ (2.8.1, 2.8.2 ฯลฯ) พร้อมการแก้ไขข้อบกพร่องและการอัปเดตทรัพยากร Dependency ทีมมุ่งมั่นที่จะทำงานนี้จนกว่าห้อง 3 จะเสถียร
ความคิดขั้นสุดท้าย
เรารู้สึกตื่นเต้นอย่างยิ่งกับศักยภาพของ Room 3.0 และโอกาสที่ Room 3.0 จะปลดล็อกให้กับระบบนิเวศ Kotlin โปรดติดตามข้อมูลอัปเดตเพิ่มเติมในขณะที่เราดำเนินการต่อไป
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์Unity ขับเคลื่อนเกมบนอุปกรณ์เคลื่อนที่มากกว่าครึ่งหนึ่งทั่วโลก ดังนั้นความประทับใจแรกจึงเป็นสิ่งสำคัญ สำหรับนักพัฒนาเกม ประสบการณ์การเตรียมความพร้อมผู้ใช้งานใหม่ที่ราบรื่นและเชื่อถือได้เป็นสิ่งสำคัญในการกระตุ้นการคงผู้ใช้ไว้ตั้งแต่วันแรกและความผูกพันในระยะยาว
Michelle Martin • ใช้เวลาอ่าน 1 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์ตั้งแต่การดื่มด่ำอย่างเต็มรูปแบบที่บ้านไปจนถึงประสบการณ์ที่เข้าถึงได้ง่ายในระหว่างเดินทาง การสร้างแอปบน Android XR ช่วยให้คุณเข้าถึงผู้ใช้ได้ทุกที่ทุกเวลาในแอปพลิเคชันเชิงพื้นที่ทุกประเภท ที่งาน Android Developer Summit เราได้ประกาศความสำเร็จครั้งสำคัญด้วยการเปิดตัว XREAL AURA
Amy Zeppenfeld, Vinny DaSilva • ใช้เวลาอ่าน 3 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์ในยุคของระบบอัจฉริยะ ผู้ใช้ไม่ได้เพียงแค่แตะผ่านแอปเท่านั้น แต่ยังแสดงเป้าหมายระดับสูงและคาดหวังให้ AI Agent อย่าง Gemini ทำเวิร์กโฟลว์หลายขั้นตอนให้เสร็จสมบูรณ์ ซึ่งบางครั้งอาจครอบคลุมหลายแอปในอุปกรณ์
Jingyu Shi • ใช้เวลาอ่าน 4 นาที
รับข้อมูลเชิงลึกล่าสุดเกี่ยวกับการพัฒนา Android ที่ส่งไปยังกล่องจดหมายของคุณทุกสัปดาห์