प्रॉडक्ट से जुड़ी खबरें

Room 3.0 - Room को मॉडर्न बनाना

पढ़ने में 4 मिनट लगेंगे
डैनियल सैंटियागो रिवेरा की प्रोफ़ाइल देखना
Daniel Santiago Rivera सॉफ़्टवेयर इंजीनियर

Room 3.0 का पहला ऐल्फ़ा वर्शन रिलीज़ कर दिया गया है! Room 3.0, लाइब्रेरी का एक मुख्य वर्शन है. यह Kotlin Multiplatform (KMP) पर फ़ोकस करता है. साथ ही, यह Android, iOS, और JVM डेस्कटॉप के लिए पहले से मौजूद सहायता के साथ-साथ JavaScript और WebAssembly (WASM) के लिए भी सहायता जोड़ता है. 

इस ब्लॉग में, हमने Room 3.0 में हुए बड़े बदलावों के बारे में बताया है. साथ ही, Room 3.0 को लॉन्च करने की वजह बताई है. इसके अलावा, Room 2.0 से माइग्रेट करने के अलग-अलग तरीकों के बारे में भी बताया है.

नुकसान पहुंचा सकने वाले बदलाव

Room 3.0 में, एपीआई में ये बड़े बदलाव किए गए हैं: 

  • SupportSQLite API का इस्तेमाल बंद करना: Room 3.0, पूरी तरह से androidx.sqlite ड्राइवर एपीआई पर आधारित है. SQLiteDriver API, KMP के साथ काम करते हैं. साथ ही, Android के एपीआई पर Room की डिपेंडेंसी को हटाने से, Android के लिए एपीआई का इस्तेमाल करना आसान हो जाता है. ऐसा इसलिए, क्योंकि इसमें दो बैकएंड नहीं होते.
  • अब Java कोड जनरेट नहीं किया जाएगा: Room 3.0 सिर्फ़ Kotlin कोड जनरेट करता है. यह Kotlin-first के बदलते पैराडाइम के साथ काम करता है. साथ ही, इससे कोड बेस और डेवलपमेंट प्रोसेस को आसान बनाया जा सकता है. इससे तेज़ी से बदलाव किए जा सकते हैं.
  • KSP पर फ़ोकस करें: हम Java Annotation Processing (AP) और KAPT के लिए भी सहायता बंद कर रहे हैं. Room 3.0 सिर्फ़ एक KSP (Kotlin Symbol Processing) प्रोसेसर है. इससे Kotlin कोडबेस को बेहतर तरीके से प्रोसेस किया जा सकता है. साथ ही, Java लैंग्वेज की सीमाओं से भी बचा जा सकता है.
  • कोरूटीन को प्राथमिकता: Room 3.0 में Kotlin कोरूटीन का इस्तेमाल किया जाता है. इससे इसके एपीआई, कोरूटीन को प्राथमिकता देते हैं. को-रूटीन, KMP के साथ काम करने वाला एसिंक्रोनस फ़्रेमवर्क है. वेब प्लैटफ़ॉर्म के साथ काम करने के लिए, Room को एसिंक्रोनस बनाना ज़रूरी है.

नया पैकेज

Room 2.x के मौजूदा वर्शन के साथ काम न करने से जुड़ी समस्याओं को रोकने के लिए, Room 3.0 को एक नए पैकेज में रखा गया है. इसका मतलब है कि इसमें एक नया Maven ग्रुप और आर्टफ़ैक्ट आईडी भी है. ऐसा उन लाइब्रेरी के लिए किया गया है जिनमें Room की ट्रांज़िटिव डिपेंडेंसी होती हैं. उदाहरण के लिए, WorkManager. उदाहरण के लिए, androidx.room:room-runtime अब androidx.room3:room3-runtime हो गया है. साथ ही, androidx.room.RoomDatabase जैसी क्लास अब androidx.room3.RoomDatabase पर मौजूद होंगी.

Kotlin और कोरूटीन को प्राथमिकता देना

Room 3.0 में Java कोड जनरेट नहीं होता. इसलिए, अगर Room के साथ इंटरैक्ट करने वाला कोडबेस Java में है, तब भी Room 3.0 के लिए KSP और Kotlin कंपाइलर की ज़रूरत होती है. हमारा सुझाव है कि आपके पास एक से ज़्यादा मॉड्यूल वाला प्रोजेक्ट हो, जिसमें Room का इस्तेमाल किया गया हो. साथ ही, Kotlin Gradle Plugin और KSP को बाकी कोडबेस पर असर डाले बिना लागू किया जा सकता हो.

Room 3.0 के लिए भी कोरूटीन की ज़रूरत होती है. साथ ही, डीएओ फ़ंक्शन को सस्पेंड करना ज़रूरी होता है. हालांकि, अगर वे फ़्लो जैसे रिएक्टिव टाइप को वापस भेज रहे हैं, तो उन्हें सस्पेंड करने की ज़रूरत नहीं होती. Room 3.0 में, डीएओ फ़ंक्शन को ब्लॉक करने की अनुमति नहीं है. अपने ऐप्लिकेशन में कोरूटीन को इंटिग्रेट करने के बारे में जानने के लिए, Android पर कोरूटीन के बारे में जानकारी देने वाला दस्तावेज़ पढ़ें.

SQLiteDriver API पर माइग्रेट करना

SupportSQLite का इस्तेमाल बंद होने के बाद, ऐप्लिकेशन को SQLiteDriver API पर माइग्रेट करना होगा. Room 3.0 के सभी फ़ायदों का इस्तेमाल करने के लिए, माइग्रेट करना ज़रूरी है. इनमें BundledSQLiteDriver के ज़रिए, बंडल की गई SQLite लाइब्रेरी का इस्तेमाल करने की अनुमति देना भी शामिल है. Room 2.7.0+ का इस्तेमाल करके, आज ही ड्राइवर एपीआई पर माइग्रेट किया जा सकता है. हमारा सुझाव है कि आप SupportSQLite का इस्तेमाल न करें. अगर आपने Room इंटिग्रेशन को SQLiteDriver API पर माइग्रेट किया है, तो Room 3.0 पर ट्रांज़िशन करना आसान हो जाता है. ऐसा इसलिए, क्योंकि पैकेज में बदलाव करने के लिए, ज़्यादातर सिंबल रेफ़रंस (इंपोर्ट) अपडेट करने होते हैं. साथ ही, कॉल-साइट में कम से कम बदलाव करने पड़ सकते हैं.

SQLiteDriver API के बारे में खास जानकारी पाने के लिए, SQLiteDriver API से जुड़ा दस्तावेज़ देखें.

SQLiteDriver API का इस्तेमाल करने के लिए, Room को माइग्रेट करने के बारे में ज़्यादा जानने के लिए, SupportSQLite से माइग्रेट करने से जुड़ा आधिकारिक दस्तावेज़ देखें.

Room SupportSQLite रैपर

हम समझते हैं कि सभी प्रोजेक्ट के लिए, SupportSQLite को पूरी तरह से हटाना तुरंत संभव नहीं हो सकता. इस ट्रांज़िशन को आसान बनाने के लिए, Room 2.0 सीरीज़ के नए वर्शन Room 2.8.0 में, androidx.room:room-sqlite-wrapper नाम का नया आर्टफ़ैक्ट लॉन्च किया गया है. इस आर्टफ़ैक्ट में एक कंपैटिबिलिटी एपीआई होता है. इसकी मदद से, RoomDatabase को SupportSQLiteDatabase में बदला जा सकता है. भले ही, डेटाबेस में SupportSQLite API बंद कर दिए गए हों. ऐसा SQLiteDriver इंस्टॉल होने की वजह से होता है. इससे उन डेवलपर को कुछ समय के लिए मदद मिलती है जिन्हें अपने पूरे कोड बेस को डेटा दूसरी जगह भेजने में ज़्यादा समय लगता है. यह आर्टफ़ैक्ट, Room 3.0 में androidx.room3:room3-sqlite-wrapper के तौर पर मौजूद है. इससे Room 3.0 पर माइग्रेट करने में मदद मिलती है. साथ ही, SupportSQLite के ज़रूरी इस्तेमाल को भी जारी रखा जा सकता है.

उदाहरण के लिए, roomDatabase.openHelper.writableDatabase के इनवोकेशन को roomDatabase.getSupportWrapper() से बदला जा सकता है. साथ ही, अगर Room के बिल्डर पर setDriver() को कॉल किया जाता है, तो भी रैपर उपलब्ध कराया जाएगा.

ज़्यादा जानकारी के लिए, room-sqlite-wrapper का दस्तावेज़ देखें.

Room और SQLite की वेब पर काम करने की सुविधा

Kotlin Multiplatform, JS और WasmJS को टारगेट करने की सुविधा देता है. साथ ही, इसमें एपीआई से जुड़े कुछ अहम बदलाव किए गए हैं. खास तौर पर, Room 3.0 में कई एपीआई, निलंबित फ़ंक्शन हैं. ऐसा इसलिए है, क्योंकि वेब स्टोरेज के लिए सही तरीके से एसिंक्रोनस सपोर्ट उपलब्ध है. SQLiteDriver API को भी अपडेट किया गया है, ताकि वे वेब के साथ काम कर सकें. साथ ही, androidx.sqlite:sqlite-web में एक नया वेब एसिंक्रोनस ड्राइवर उपलब्ध है. यह वेब वर्कर पर आधारित ड्राइवर है. इससे डेटाबेस को ऑरिजिन प्राइवेट फ़ाइल सिस्टम (ओपीएफ़एस) में सेव किया जा सकता है.

वेब के लिए Room को सेट अप करने के तरीके के बारे में ज़्यादा जानने के लिए, Room 3.0 के रिलीज़ नोट देखें.

कस्टम DAO के रिटर्न टाइप

Room 3.0 में, Room में कस्टम इंटिग्रेशन जोड़ने की सुविधा दी गई है. यह सुविधा, RxJava और Paging की तरह ही काम करती है. @DaoReturnTypeConverter नाम के नए एनोटेशन एपीआई की मदद से, अपना इंटिग्रेशन बनाया जा सकता है. इससे रूम का जनरेट किया गया कोड, रनटाइम पर ऐक्सेस किया जा सकता है. इससे @Dao फ़ंक्शन, रूम टीम के सपोर्ट जोड़ने का इंतज़ार किए बिना, अपने कस्टम रिटर्न टाइप का इस्तेमाल कर सकते हैं. मौजूदा इंटिग्रेशन को इस सुविधा का इस्तेमाल करने के लिए माइग्रेट किया जाता है. इसलिए, अब इस सुविधा पर भरोसा करने वाले लोगों को, @Database या @Dao की परिभाषाओं में कन्वर्टर जोड़ने होंगे.

उदाहरण के लिए, Paging कनवर्टर, androidx.room3:room3-paging आर्टफ़ैक्ट में मौजूद होगा और इसे PagingSourceDaoReturnTypeConverter कहा जाता है. वहीं, LiveData के लिए कन्वर्ज़न androidx.room3:room3-livedata में है और इसे LiveDataDaoReturnTypeConverter कहा जाता है.

ज़्यादा जानकारी के लिए, Room 3.0 के रिलीज़ नोट में DAO Return Type Converters सेक्शन देखें.

Room 2.x का रखरखाव मोड

Room 3 पर फ़ोकस किया जाएगा. इसलिए, Room 2.x का मौजूदा वर्शन रखरखाव मोड में चला जाएगा. इसका मतलब है कि कोई नई सुविधा नहीं जोड़ी जाएगी.हालांकि, गड़बड़ियों को ठीक करने और डिपेंडेंसी अपडेट के साथ पैच रिलीज़ (2.8.1, 2.8.2 वगैरह) अब भी जारी किए जाएंगे. टीम इस काम को तब तक करती रहेगी, जब तक Room 3 ठीक से काम नहीं करने लगता.

आखिर में कुछ ज़रूरी बातें

हम Room 3.0 की संभावनाओं और Kotlin के नेटवर्क के लिए उपलब्ध अवसरों को लेकर बेहद उत्साहित हैं. इस यात्रा में हमारे साथ बने रहें, ताकि आपको ज़्यादा अपडेट मिलते रहें!

लेखक:
पढ़ना जारी रखें