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

Room 3.0 - Room को बेहतर बनाना

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

नया पैकेज

Room 2.x के मौजूदा वर्शन के साथ काम करने से जुड़ी समस्याओं से बचने के लिए, Room 3.0 को एक नए पैकेज में रखा गया है. साथ ही, Room पर ट्रांज़िटिव डिपेंडेंसी वाली लाइब्रेरी (उदाहरण के लिए, WorkManager) के लिए भी, Room 3.0 को एक नए पैकेज में रखा गया है. इसका मतलब है कि इसके लिए एक नया Maven ग्रुप और आर्टफ़ैक्ट आईडी भी है. उदाहरण के लिए, 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 के लिए कोरूटीन की भी ज़रूरत होती है. खास तौर पर, डीएओ फ़ंक्शन को सस्पेंड करना होगा. हालांकि, अगर वे Flow जैसे रिएक्टिव टाइप को वापस नहीं कर रहे हैं, तो उन्हें सस्पेंड करने की ज़रूरत नहीं है. 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 में बदला जा सकता है. भले ही, SQLiteDriver इंस्टॉल होने की वजह से, डेटाबेस में SupportSQLite एपीआई बंद कर दिए गए हों. इससे उन डेवलपर को कुछ समय के लिए मदद मिलती है जिन्हें अपने कोडबेस को पूरी तरह से माइग्रेट करने में ज़्यादा समय लगता है. 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 के इकोसिस्टम के लिए मिलने वाले अवसरों को लेकर बहुत उत्साहित हैं. इस सफ़र में हमारे साथ बने रहें. हम आपको नए अपडेट देते रहेंगे!

लेखक:

पढ़ना जारी रखें