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 कोरूटीन का इस्तेमाल किया जाता है. इसलिए, इसके एपीआई में कोरूटीन को प्राथमिकता दी जाती है. Coroutines, 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 API पर माइग्रेट करना होगा. 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 के लिए वेब सपोर्ट
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 Return Type Converters सेक्शन देखें.
Room 2.x का रखरखाव मोड
Room 3 पर फ़ोकस किया जाएगा. इसलिए, Room 2.x का मौजूदा वर्शन रखरखाव मोड में चला जाएगा. इसका मतलब है कि अब कोई नई सुविधा नहीं जोड़ी जाएगी.हालांकि, गड़बड़ियों को ठीक करने और डिपेंडेंसी अपडेट करने के लिए, पैच रिलीज़ (2.8.1, 2.8.2 वगैरह) अब भी जारी किए जाएंगे. जब तक Room 3 ठीक से काम नहीं करने लगता, तब तक टीम इस पर काम करती रहेगी.
आखिर में कुछ ज़रूरी बातें
हम Room 3.0 की संभावनाओं और Kotlin के लिए उपलब्ध कराए गए अवसरों को लेकर बेहद उत्साहित हैं. इस यात्रा में हमारे साथ बने रहें, ताकि आपको ज़्यादा अपडेट मिलते रहें!
-
प्रॉडक्ट से जुड़ी खबरेंआज हमें यह बताते हुए खुशी हो रही है कि AndroidX Security State के वर्शन 1.1.0 और Security State Provider के वर्शन 1.0.0 की लाइब्रेरी को स्टेबल वर्शन के तौर पर रिलीज़ कर दिया गया है.
Maunik Shah, Alec Garcia, Joseph Yong • पढ़ने में 4 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंआज हम लंबी अवधि के टास्क (एलएचटी) का पहला सेट रिलीज़ कर रहे हैं. ये ऐसे मुश्किल टास्क हैं जिन्हें पूरा करने में इंजीनियर को कई दिन या यहां तक कि एक हफ़्ता भी लग सकता है. हम एजेंटिक इवैल्यूएशन की सुविधा भी लॉन्च कर रहे हैं. इसकी शुरुआत, मॉडल उपलब्ध कराने वाली कंपनियों के एजेंट से की जाएगी.
Matthew McCullough • तीन मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंAndroid पर वायरलेस डीबगिंग की सुविधा अब पहले से ज़्यादा तेज़, भरोसेमंद, और आसानी से सेट अप की जा सकती है. ADB Wi-Fi 2.0 में, हमने नया सर्वर स्टैक और बेहतर नेटवर्क हैंडलिंग की सुविधा जोड़ी है. इससे, इस्तेमाल से जुड़ी समस्याओं के बारे में डेवलपर से मिले सुझावों को सीधे तौर पर हल किया जा सकेगा.
Steven Jenkins, Sherif Eid, Fabien Sanglard • पढ़ने में 1 मिनट लगेगा
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.