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

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 पर ट्रांज़िटिव डिपेंडेंसी वाली लाइब्रेरी (उदाहरण के लिए, WorkManager) के लिए, Room 3.0 एक नए पैकेज में मौजूद है. इसका मतलब है कि इसका मेवन ग्रुप और आर्टफ़ैक्ट आईडी भी नया है. उदाहरण के लिए, 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 Plugin और 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 में एक नया वेब एसिंक्रोनस ड्राइवर उपलब्ध है. यह _Web Worker_ पर आधारित ड्राइवर है. इसकी मदद से, डेटाबेस को Origin Private File System (OPFS) में सेव किया जा सकता है.

वेब के लिए 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 इकोसिस्टम के लिए मिलने वाले अवसरों को लेकर बहुत उत्साहित हैं. इस सफ़र में हमारे साथ बने रहें. हम आपको नए अपडेट देते रहेंगे!

इसे लिखा है:

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