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

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

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

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

SupportSQLite का इस्तेमाल बंद होने के बाद, ऐप्लिकेशन को SQLiteDriver एपीआई पर माइग्रेट करना होगा. Room 3.0 के सभी फ़ायदों का इस्तेमाल करने के लिए, माइग्रेट करना ज़रूरी है. इनमें BundledSQLiteDriver के ज़रिए, बंडल की गई SQLite लाइब्रेरी का इस्तेमाल करने की अनुमति देना भी शामिल है. Room 2.7.0+ का इस्तेमाल करके, आज ही ड्राइवर एपीआई पर माइग्रेट किया जा सकता है. हमारा सुझाव है कि आप SupportSQLite का इस्तेमाल न करें. अगर Room इंटिग्रेशन को SQLiteDriver एपीआई पर माइग्रेट किया जाता है, तो 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 एपीआई बंद कर दिए गए हों, क्योंकि 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 Web की सुविधा

यह 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 नाम के नए एनोटेशन एपीआई की मदद से, अपना इंटिग्रेशन बनाया जा सकता है. इससे Room का जनरेट किया गया कोड, रनटाइम पर ऐक्सेस किया जा सकता है. इससे @Dao फ़ंक्शन, Room टीम के सपोर्ट जोड़ने का इंतज़ार किए बिना, अपने कस्टम रिटर्न टाइप इस्तेमाल कर सकते हैं. मौजूदा इंटिग्रेशन को इस सुविधा का इस्तेमाल करने के लिए माइग्रेट किया जाता है. इसलिए, अब इस सुविधा का इस्तेमाल करने वाले लोगों को, कन्वर्टर को @Database या @Dao की परिभाषाओं में जोड़ना होगा.

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

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

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

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

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

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

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