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-তে আপনার রুম ইন্টিগ্রেশন মাইগ্রেট করেন, তাহলে রুম ৩.০-এ ট্রানজিশন করা সহজ হয় কারণ প্যাকেজ পরিবর্তনের মধ্যে বেশিরভাগই সিম্বল রেফারেন্স (ইমপোর্ট) আপডেট করা থাকে এবং কল-সাইটে ন্যূনতম পরিবর্তনের প্রয়োজন হতে পারে।
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()-এর মাধ্যমে পরিবর্তন করা যেতে পারে এবং Room-এর বিল্ডারে 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 রিটার্ন টাইপ
Room 3.0-এ RxJava ও Paging-এর মতো Room-এ কাস্টম ইন্টিগ্রেশন যোগ করার সুবিধা চালু করা হয়েছে। @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 ইকোসিস্টেমের জন্য এটি যে সুযোগগুলি খুলে দেয় সে সম্পর্কে আমরা অবিশ্বাস্যভাবে উত্তেজিত। আমরা এই যাত্রা চালিয়ে যাচ্ছি, আরও আপডেটের জন্য সাথে থাকুন!
-
প্রোডাক্ট সংক্রান্ত খবরইন্টেলিজেন্সের যুগে, ব্যবহারকারীরা আর শুধু অ্যাপে ট্যাপ করেন না, তারা উচ্চ-পর্যায়ের লক্ষ্য প্রকাশ করেন এবং Gemini-এর মতো AI এজেন্টের কাছ থেকে একাধিক ধাপের ওয়ার্কফ্লো সম্পূর্ণ করার আশা করেন, কখনও কখনও তাদের ডিভাইসে একাধিক অ্যাপ জুড়ে।
Jingyu Shi • ৪ মিনিট লাগবে -
প্রোডাক্ট সংক্রান্ত খবরআজ, Android Dev Summit-এ, আমরা অনেক টুল এবং API-এর ব্যাপক উপলভ্যতা ঘোষণা করছি যা প্রতিদিনের ঘর্ষণ দূর করতে এবং আপনাকে দুর্দান্ত Android অ্যাপ তৈরি করার জন্য আরও নমনীয়তা দেওয়ার জন্য ডিজাইন করা হয়েছে।
Matthew McCullough • ৪ মিনিট লাগবে -
প্রোডাক্ট সংক্রান্ত খবরAndroid Studio Rabbit 2 এখন স্টেবল এবং প্রোডাকশনে ব্যবহারের জন্য রেডি। এই রিলিজে আপনার ডেভেলপমেন্ট উন্নত করার জন্য গুরুত্বপূর্ণ ফিচার অন্তর্ভুক্ত করা হয়েছে, যেমন Bring Your Own Agent, নতুন XR এমুলেটর ফিচার, LeakCanary আপডেট, নতুন এজেন্ট স্কিল ম্যানেজার টুল, AI কোড রিভিউ এবং আরও অনেক কিছু।
Matthew Warner • ৩ মিনিট রিডিং
আপনার ইনবক্সে প্রতি সপ্তাহে Android ডেভেলপমেন্ট সংক্রান্ত লেটেস্ট ইনসাইট পান।