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

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

नया पैकेज

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

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

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

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

SQLiteDriver एपीआई पर माइग्रेट करना

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

SQLiteDriver एपीआई की खास जानकारी के लिए, SQLiteDriver एपीआई का दस्तावेज़ देखें.

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

Room SupportSQLite रैपर

हम समझते हैं कि सभी प्रोजेक्ट के लिए, SupportSQLite को पूरी तरह से हटाना तुरंत मुमकिन नहीं हो सकता. इस ट्रांज़िशन को आसान बनाने के लिए, Room 2.0 सीरीज़ के सबसे नए वर्शन, Room 2.8.0 में एक नया आर्टफ़ैक्ट जोड़ा गया है. इसे androidx.room:room-sqlite-wrapper कहा जाता है. इस आर्टफ़ैक्ट में एक ऐसा कंपैटिबिलिटी एपीआई है जिसकी मदद से, RoomDatabase को SupportSQLiteDatabase में बदला जा सकता है. भले ही, डेटाबेस में मौजूद SupportSQLite एपीआई को 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 एपीआई को भी वेब के लिए सहायता उपलब्ध कराने के लिए अपडेट किया गया है. साथ ही, androidx.sqlite:sqlite-web में एक नया वेब एसिंक्रोनस ड्राइवर उपलब्ध है. यह वेब वर्कर पर आधारित ड्राइवर है. इसकी मदद से, ऑरिजिन प्राइवेट फ़ाइल सिस्टम (ओपीएफ़एस) में डेटाबेस को सेव किया जा सकता है.

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

कस्टम डीएओ रिटर्न टाइप

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

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

ज़्यादा जानकारी के लिए, Room 3.0 के रिलीज़ नोट में डीएओ रिटर्न टाइप कनवर्टर सेक्शन देखें.

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

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

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

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

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