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

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 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 को एक नए पैकेज में रखा गया है. साथ ही, Room पर ट्रांज़िटिव डिपेंडेंसी वाली लाइब्रेरी (उदाहरण के लिए, WorkManager) के लिए भी ऐसा किया गया है. इसका मतलब है कि इसमें एक नया Maven ग्रुप और आर्टफ़ैक्ट आईडी भी है. उदाहरण के लिए, 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 के लिए भी कोरूटीन की ज़रूरत होती है. साथ ही, डीएओ फ़ंक्शन को सस्पेंड करना ज़रूरी होता है. हालांकि, अगर वे फ़्लो जैसे रिएक्टिव टाइप को वापस भेज रहे हैं, तो उन्हें सस्पेंड करने की ज़रूरत नहीं होती. 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 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 API बंद कर दिए गए हों, क्योंकि 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 API को भी अपडेट किया गया है, ताकि वे वेब के साथ काम कर सकें. साथ ही, androidx.sqlite:sqlite-web में एक नया वेब एसिंक्रोनस ड्राइवर उपलब्ध है. यह वेब वर्कर पर आधारित ड्राइवर है. इससे डेटाबेस को ऑरिजिन प्राइवेट फ़ाइल सिस्टम (ओपीएफ़एस) में सेव किया जा सकता है.

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

कस्टम DAO के रिटर्न टाइप

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

इसे लिखा है:

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