Room 3.0-এর প্রথম আলফা রিলিজ করা হয়েছে! Room 3.0 হল লাইব্রেরির একটি প্রধান ব্রেকিং ভার্সন যা Kotlin Multiplatform (KMP)-এর উপর ফোকাস করে এবং আগে থেকে থাকা Android, iOS এবং JVM ডেস্কটপ সাপোর্টের উপরে JavaScript এবং WebAssembly (WASM)-এর জন্য সাপোর্ট যোগ করে।
এই ব্লগে আমরা ব্রেকিং পরিবর্তন, Room 3.0-এর পিছনে থাকা কারণ এবং Room 2.0 থেকে মাইগ্রেট করার জন্য আপনি যেসব বিভিন্ন জিনিস করতে পারেন সেগুলি সম্পর্কে আলোচনা করব।
ব্রেকিং পরিবর্তন
Room 3.0-এ নিম্নলিখিত ব্রেকিং API পরিবর্তন অন্তর্ভুক্ত:
- SupportSQLite API বাদ দেওয়া: Room 3.0-এর সম্পূর্ণ ব্যাক-আপ androidx.sqlite ড্রাইভার API-এর মাধ্যমে করা হয়। SQLiteDriver API হল KMP-মানানসই এবং Android-এর API-এর উপর Room-এর নির্ভরতা সরিয়ে দিলে Android-এর জন্য API সারফেস সহজ হয়ে যায়, কারণ এটি দুটি সম্ভাব্য ব্যাকএন্ড এড়িয়ে যায়।
- আর Java কোড জেনারেট করা হবে না: Room 3.0 শুধুমাত্র Kotlin কোড জেনারেট করে। এটি ক্রমবর্ধমান Kotlin-ফার্স্ট প্যারাডাইমের সাথে সামঞ্জস্যপূর্ণ, তবে এটি কোডবেস এবং ডেভেলপমেন্ট প্রসেসকে সহজ করে তোলে, যা দ্রুত ইটারেশন করতে সাহায্য করে।
- KSP-তে ফোকাস করুন: আমরা Java Annotation Processing (AP) ও KAPT-এর জন্য সহায়তা বন্ধ করে দিচ্ছি। Room 3.0 হল শুধুমাত্র একটি KSP (Kotlin Symbol Processing) প্রসেসর, যা জাভা ভাষার মধ্যে সীমাবদ্ধ না থেকে Kotlin কোডবেসের আরও ভাল প্রসেসিংয়ের সুবিধা দেয়।
- Coroutines first: Room 3.0-এ Kotlin coroutines ব্যবহার করা হয়, যার ফলে এর API-গুলি coroutine-first হয়ে যায়। Coroutines হল KMP-মানানসই অ্যাসিঙ্ক্রোনাস ফ্রেমওয়ার্ক এবং Room-কে অ্যাসিঙ্ক্রোনাস করা হল ওয়েব প্ল্যাটফর্মকে সাপোর্ট করার জন্য একটি গুরুত্বপূর্ণ প্রয়োজনীয়তা।
নতুন প্যাকেজ
আগে থেকে থাকা Room 2.x ইমপ্লিমেন্টেশনের সাথে মানানসই হওয়ার সমস্যা এড়াতে এবং Room-এর (যেমন, WorkManager) সাথে ট্রানজিটিভ ডিপেন্ডেন্সি সহ লাইব্রেরির জন্য, Room 3.0 একটি নতুন প্যাকেজে থাকে যার অর্থ হল এটির একটি নতুন Maven গ্রুপ এবং আর্টিফ্যাক্ট আইডি রয়েছে। যেমন, androidx.room:room-runtime এখন androidx.room3:room3-runtime হয়ে গেছে এবং androidx.room.RoomDatabase-এর মতো ক্লাস এখন androidx.room3.RoomDatabase-এ পাওয়া যাবে।
Kotlin and Coroutines First
Java কোড জেনারেশন বন্ধ হয়ে যাওয়ার ফলে, Room 3.0-এর জন্য KSP এবং Kotlin কম্পাইলারও প্রয়োজন, এমনকি Room-এর সাথে ইন্টার্যাক্ট করা কোডবেস Java-তে থাকলেও। মাল্টি-মডিউল প্রোজেক্ট ব্যবহার করার সাজেশন দেওয়া হয় যেখানে রুমের ব্যবহার কনসেনট্রেট করা হয় এবং Kotlin Gradle প্লাগ-ইন ও KSP বাকি কোডবেসকে প্রভাবিত না করেই প্রয়োগ করা যেতে পারে।
এছাড়াও, Room 3.0-এর জন্য Coroutines প্রয়োজন এবং আরও নির্দিষ্টভাবে DAO ফাংশনগুলিকে সাসপেন্ড করতে হবে, যদি না সেগুলি Flow-এর মতো কোনও রিঅ্যাক্টিভ টাইপ রিটার্ন করে। Room 3.0-এ DAO ফাংশন ব্লক করা যায় না। আপনার অ্যাপ্লিকেশনে Coroutines ইন্টিগ্রেট করা শুরু করার জন্য Android ডকুমেন্টেশনে Coroutines দেখুন।
SQLiteDriver API-তে মাইগ্রেশন
SupportSQLite থেকে সরে আসার সাথে সাথে, অ্যাপগুলিকে SQLiteDriver API-তে মাইগ্রেট করতে হবে। Room 3.0-এর সম্পূর্ণ সুবিধা পেতে এই মাইগ্রেশন করা প্রয়োজন, যার মধ্যে BundledSQLiteDriver-এর মাধ্যমে বান্ডেল করা SQLite লাইব্রেরি ব্যবহার করার অনুমতি দেওয়াও অন্তর্ভুক্ত। আপনি আজই Room 2.7.0+ ভার্সনের মাধ্যমে ড্রাইভার API-তে মাইগ্রেট করা শুরু করতে পারেন। আমরা আপনাকে SupportSQLite ব্যবহার করা বন্ধ করার জন্য জোরালো সাজেশন দিচ্ছি। আপনি যদি SQLiteDriver API-তে আপনার Room ইন্টিগ্রেশন মাইগ্রেট করেন, তাহলে Room 3.0-এ ট্রানজিশন করা সহজ হয় কারণ প্যাকেজ পরিবর্তনের মধ্যে বেশিরভাগই সিম্বল রেফারেন্স (ইমপোর্ট) আপডেট করা থাকে এবং কল-সাইটে ন্যূনতম পরিবর্তনের প্রয়োজন হতে পারে।
SQLiteDriver API-এর সংক্ষিপ্ত ওভারভিউয়ের জন্য, SQLiteDriver API ডকুমেন্টেশন চেক করুন।
SQLiteDriver API ব্যবহার করার জন্য Room কীভাবে মাইগ্রেট করবেন সেই সম্পর্কে আরও জানতে, SupportSQLite থেকে মাইগ্রেট করার অফিসিয়াল ডকুমেন্টেশন দেখুন।
রুম SupportSQLite র্যাপার
আমরা বুঝি যে সব প্রোজেক্টের জন্য SupportSQLite সম্পূর্ণভাবে সরিয়ে দেওয়া হয়ত এখনই সম্ভব নয়। এই ট্রানজিশন সহজ করতে, Room 2.0 সিরিজের লেটেস্ট ভার্সন Room 2.8.0, androidx.room:room-sqlite-wrapper নামে একটি নতুন আর্টিফ্যাক্ট নিয়ে এসেছে। এই আর্টিফ্যাক্ট একটি কম্প্যাটিবিলিটি API অফার করে যা আপনাকে RoomDatabase-কে SupportSQLiteDatabase-এ কনভার্ট করতে দেয়, এমনকি SQLiteDriver ইনস্টল করার কারণে ডেটাবেসে SupportSQLite API বন্ধ হয়ে গেলেও। এটি সেইসব ডেভেলপারদের জন্য একটি সাময়িক সমাধান প্রদান করে যাদের কোডবেস সম্পূর্ণভাবে মাইগ্রেট করার জন্য আরও সময় প্রয়োজন। এই আর্টিফ্যাক্ট Room 3.0-তে androidx.room3:room3-sqlite-wrapper হিসেবে কাজ করা চালিয়ে যায় যাতে Room 3.0-তে মাইগ্রেশন চালু করা যায় এবং একই সাথে গুরুত্বপূর্ণ SupportSQLite ব্যবহারও কাজ করে।
যেমন, roomDatabase.openHelper.writableDatabase-এর ইনভোকেশন roomDatabase.getSupportWrapper() দ্বারা প্রতিস্থাপিত হতে পারে এবং রুমের বিল্ডারে setDriver() কল করা হলেও একটি র্যাপার প্রদান করা হবে।
আরও জানতে room-sqlite-wrapper ডকুমেন্টেশন দেখুন।
রুম ও SQLite ওয়েব সাপোর্ট
Kotlin Multiplatform-এর জন্য সহায়তা JS এবং WasmJS-কে টার্গেট করে এবং কিছু সবচেয়ে গুরুত্বপূর্ণ API পরিবর্তন নিয়ে আসে। বিশেষ করে, Room 3.0-এর অনেক API হল সাসপেন্ড ফাংশন, কারণ ওয়েব স্টোরেজের জন্য সঠিক সহায়তা অ্যাসিঙ্ক্রোনাস। এছাড়াও, SQLiteDriver API আপডেট করা হয়েছে যাতে ওয়েব কাজ করে এবং androidx.sqlite:sqlite-web-এ নতুন ওয়েব অ্যাসিঙ্ক্রোনাস ড্রাইভার উপলভ্য। এটি একটি ওয়েব ওয়ার্কার ভিত্তিক ড্রাইভার যা অরিজিন প্রাইভেট ফাইল সিস্টেমে (OPFS) ডেটাবেসকে স্থায়ীভাবে সেভ করতে সাহায্য করে।
ওয়েবের জন্য Room কীভাবে সেট-আপ করবেন সেই সম্পর্কে আরও জানতে Room 3.0 রিলিজ নোট দেখুন।
কাস্টম DAO রিটার্নের ধরন
RxJava এবং পেজিংয়ের মতো Room-এ কাস্টম ইন্টিগ্রেশন যোগ করার ক্ষমতা Room 3.0-এ চালু করা হয়েছে। @DaoReturnTypeConverter নামক নতুন অ্যানোটেশন API-এর মাধ্যমে আপনি নিজের ইন্টিগ্রেশন তৈরি করতে পারবেন যাতে রানটাইমে Room-এর জেনারেট করা কোড অ্যাক্সেস করা যায়, এর ফলে @Dao ফাংশনগুলির কাস্টম রিটার্ন টাইপ থাকে এবং Room টিমের তরফ থেকে সহায়তা যোগ করার জন্য অপেক্ষা করতে হয় না। এই কার্যকারিতা ব্যবহার করার জন্য বিদ্যমান ইন্টিগ্রেশনগুলি মাইগ্রেট করা হয়েছে এবং এইভাবে এখন যারা এটির উপর নির্ভর করে তাদের @Database বা @Dao সংজ্ঞায় কনভার্টার যোগ করতে হবে।
যেমন, পেজিং কনভার্টার androidx.room3:room3-paging আর্টিফ্যাক্টে থাকবে এবং এটিকে PagingSourceDaoReturnTypeConverter বলা হয়। এদিকে LiveData-এর জন্য কনভার্টার androidx.room3:room3-livedata-এ আছে এবং একে LiveDataDaoReturnTypeConverter বলা হয়।
আরও তথ্যের জন্য, Room 3.0 রিলিজ নোট-এ DAO রিটার্ন টাইপ কনভার্টার বিভাগটি দেখুন।
Room 2.x-এর রক্ষণাবেক্ষণ মোড
Room-এর ডেভেলপমেন্ট Room 3-এর উপর ফোকাস করবে, তাই বর্তমান Room 2.x ভার্সন রক্ষণাবেক্ষণ মোডে প্রবেশ করবে। এর অর্থ হল, কোনও বড় ফিচার ডেভেলপ করা হবে না, তবে ত্রুটি সমাধান ও ডিপেন্ডেন্সি আপডেট সহ প্যাচ রিলিজ (২.৮.১, ২.৮.২ ইত্যাদি) করা হবে। রুম ৩ স্থিতিশীল না হওয়া পর্যন্ত টিম এই কাজে প্রতিশ্রুতিবদ্ধ।
চূড়ান্ত ভাবনা
Room 3.0-এর সম্ভাবনা এবং Kotlin ইকোসিস্টেমের জন্য এটি যে সুযোগগুলি আনলক করে সে সম্পর্কে আমরা অবিশ্বাস্যভাবে উত্তেজিত। আমরা এই যাত্রা চালিয়ে যাচ্ছি, আরও আপডেটের জন্য সাথে থাকুন!
-
প্রোডাক্ট সংক্রান্ত খবরএজেন্টিক ডেভেলপমেন্টের গতি বাড়ার সাথে সাথে, Android ইঞ্জিনিয়ারিং একটি নতুন দিগন্তে পৌঁছে যাচ্ছে: সহায়ক কোড সম্পূর্ণ করা থেকে শুরু করে আপনার নির্দেশনায় এন্ড-টু-এন্ড কাজ করা এজেন্ট পর্যন্ত। আপনি যে মডেল ও এজেন্ট ব্যবহার করেন, তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ ও নমনীয়তা থাকে।
Jason Buchel • ৩ মিনিট রিডিং -
প্রোডাক্ট সংক্রান্ত খবরআজ আমরা শেয়ার করেছি যে কীভাবে আমরা আমাদের "স্টোরের চেয়েও বেশি কিছু" ভিশনকে পরবর্তী অধ্যায়ে নিয়ে যাচ্ছি। 'অ্যাকাউন্ট' ট্যাব থেকে, এখন ২৫০ মিলিয়নেরও বেশি মাসিক অ্যাক্টিভ ব্যবহারকারীর জন্য ব্যক্তিগত হোম বেস, আমাদের ইউনিফায়েড গেমিং প্ল্যাটফর্ম ৭০০ মিলিয়নেরও বেশি গেমার প্রোফাইলকে কানেক্ট করছে, Google Play ব্যবহারকারীদের যেখানেই থাকুক না কেন তাদের সাথে কানেক্ট করছে।
Paul Feng • ৩ মিনিট রিডিং -
প্রোডাক্ট সংক্রান্ত খবরGooglebook-এর মাধ্যমে, ব্যবহারকারীদের নিজেদের প্রকাশ করতে এবং এইসব টুলে অ্যাক্সেস পেতে সাহায্য করতে পেরে আমরা আনন্দিত।
Cyrus Stoller • পড়তে ২ মিনিট লাগবে
আপনার ইনবক্সে প্রতি সপ্তাহে Android ডেভেলপমেন্ট সংক্রান্ত লেটেস্ট ইনসাইট পান।