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

Room 3.0 - Room को आधुनिक बनाना

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

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

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

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

Room 3.0 में, एपीआई से जुड़े ये बदलाव शामिल हैं: 

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

नया पैकेज

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

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

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

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

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

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

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

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

Room SupportSQLite wrapper

हम समझते हैं कि सभी प्रोजेक्ट के लिए, 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() से बदला जा सकता है. साथ ही, रूम के बिल्डर पर setDriver() को कॉल करने पर भी रैपर दिया जाएगा.

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

Room और SQLite Web के लिए सहायता

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

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

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

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

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

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