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 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 รองรับ 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 เป็นฟังก์ชันระงับเนื่องจากการรองรับพื้นที่เก็บข้อมูลบนเว็บที่เหมาะสมเป็นแบบอะซิงโครนัส นอกจากนี้ API ของ SQLiteDriver ยังได้รับการอัปเดตเพื่อรองรับเว็บ และไดรเวอร์แบบอะซิงโครนัสบนเว็บใหม่พร้อมใช้งานใน androidx.sqlite:sqlite-web ซึ่งเป็นไดรเวอร์ที่ใช้ Web Worker ซึ่งช่วยให้คงฐานข้อมูลไว้ในระบบไฟล์ส่วนตัวของต้นทาง (OPFS) ได้
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีตั้งค่า Room สำหรับเว็บได้ที่บันทึกประจำรุ่นของ Room 3.0
ประเภทการแสดงผล DAO ที่กำหนดเอง
Room 3.0 เปิดตัวความสามารถในการเพิ่มการผสานรวมที่กำหนดเองลงใน Room ซึ่งคล้ายกับ RxJava และเพจจิ้ง คุณสามารถสร้างการผสานรวมของคุณเองผ่าน 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 ทีมมุ่งมั่นที่จะทำงานนี้จนกว่า Room 3 จะเสถียร
ความคิดขั้นสุดท้าย
เราตื่นเต้นมากกับศักยภาพของ Room 3.0 และโอกาสที่ Room 3.0 จะมอบให้กับระบบนิเวศ Kotlin โปรดติดตามข้อมูลอัปเดตเพิ่มเติมในขณะที่เราดำเนินการตามแผนนี้ต่อไป
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์แอปที่กำหนดเป้าหมายเป็น Android รุ่นที่กำลังจะเปิดตัวจะไม่สามารถเขียนลงในรายชื่อติดต่อโดยตรงด้วยสิทธิ์ WRITE_CONTACTS ได้อีกต่อไป
Roxanna Aliabadi Walker • ใช้เวลาอ่าน 6 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์เมื่อการพัฒนา Agent เร็วขึ้น วิศวกรรม Android กำลังก้าวเข้าสู่พรมแดนใหม่ที่น่าตื่นเต้น นั่นคือการเปลี่ยนจากการเติมโค้ดแบบช่วยเหลือไปเป็น Agent ที่ดำเนินการตั้งแต่ต้นจนจบภายใต้คำสั่งของคุณ คุณมีตัวเลือกและความยืดหยุ่นอย่างเต็มที่ในโมเดลและ Agent ที่ใช้
Jason Buchel • ใช้เวลาอ่าน 3 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์วันนี้เราได้แชร์วิธีที่เรากำลังนำวิสัยทัศน์ "เป็นมากกว่าร้านค้า" ไปสู่บทถัดไป Google Play ตอบสนองความต้องการของผู้ใช้ได้ทุกที่ทุกเวลา ตั้งแต่แท็บ "คุณ" ซึ่งปัจจุบันเป็นศูนย์กลางส่วนตัวสำหรับผู้ใช้ที่ใช้งานอยู่รายเดือนกว่า 250 ล้านคน ไปจนถึงแพลตฟอร์มเกมแบบรวมที่เชื่อมต่อโปรไฟล์เกมเมอร์กว่า 700 ล้านโปรไฟล์
Paul Feng • ใช้เวลาอ่าน 3 นาที
รับข้อมูลเชิงลึกเกี่ยวกับการพัฒนา Android ล่าสุดที่ส่งไปยังกล่องจดหมายของคุณทุกสัปดาห์