اولین نسخه آلفای Room 3.0 منتشر شد! Room 3.0 نسخه اصلی و متمایز این کتابخانه است که بر Kotlin Multiplatform (KMP) تمرکز دارد و علاوهبر پشتیبانی موجود از Android، iOS، و JVM desktop، پشتیبانی از JavaScript و WebAssembly (WASM) را نیز اضافه میکند.
در این وبلاگ، تغییرات ناسازگار، دلیل Room 3.0، و کارهای مختلفی را که میتوانید برای انتقال از Room 2.0 انجام دهید شرح میدهیم.
تغییرات ناگهانی
Room 3.0 شامل تغییرات ناسازگار میانای برنامهسازی کاربردی زیر است:
- حذف میاناهای برنامهسازی کاربردی SupportSQLite: Room 3.0 کاملاً توسط میاناهای برنامهسازی کاربردی درایور androidx.sqlite پشتیبانی میشود. میاناهای برنامهسازی کاربردی SQLiteDriver با KMP سازگار هستند و حذف وابستگی Room به میانای برنامهسازی کاربردی Android سطح میانای برنامهسازی کاربردی را برای Android ساده میکند زیرا از داشتن دو پسبک احتمالی جلوگیری میکند.
- دیگر کد Java تولید نمیشود: Room 3.0 منحصراً کد Kotlin تولید میکند. این امر با الگوی درحال تکامل Kotlin-first همسو است و همچنین پایگاه کد و فرایند توسعه را ساده میکند و تکرارهای سریعتر را امکانپذیر میسازد.
- تمرکز بر KSP: همچنین پشتیبانی از Java Annotation Processing (AP) و KAPT را متوقف میکنیم. Room 3.0 صرفاً یک پردازنده KSP (پردازش نماد Kotlin) است که امکان پردازش بهتر پایگاههای کد Kotlin را بدون محدود شدن توسط زبان Java فراهم میکند.
- اولویت با روالهای مشترک: Room 3.0 از روالهای مشترک Kotlin استقبال میکند و میاناهای برنامهسازی کاربردی خود را براساس اولویت روالهای مشترک طراحی میکند. 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 و Coroutines First
با توقف تولید کد جاوا، Room 3.0 به KSP و کامپایلر Kotlin نیز نیاز دارد، حتی اگر پایگاه کد تعاملکننده با Room به زبان جاوا باشد. توصیه میشود پروژهای چندماژولی داشته باشید که در آن استفاده از Room متمرکز باشد و بتوانید «افزونه Kotlin Gradle» و KSP را بدون تأثیر بر بقیه پایگاه کد اعمال کنید.
Room 3.0 همچنین به Coroutines نیاز دارد و بهطور خاص توابع DAO باید تعلیق شوند، مگراینکه نوع واکنشی مانند Flow را برگردانند. Room 3.0 مسدود کردن عملکردهای DAO را مجاز نمیداند. برای شروع ادغام Coroutines در برنامهتان، سند Coroutines در Android را ببینید.
انتقال به SQLiteDriver APIs
با کنار گذاشتن SupportSQLite، برنامهها باید به میاناهای برنامهسازی کاربردی SQLiteDriver منتقل شوند. این انتقال برای بهرهبرداری کامل از مزایای Room 3.0 ضروری است، ازجمله امکان استفاده از کتابخانه SQLite همراه ازطریق BundledSQLiteDriver. از امروز میتوانید با Room 2.7.0+ به میاناهای برنامهسازی کاربردی درایور مهاجرت کنید. اکیداً توصیه میکنیم از هرگونه استفاده بیشتر از SupportSQLite خودداری کنید. اگر ادغامهای Room را به میاناهای برنامهسازی کاربردی SQLiteDriver منتقل کنید، انتقال به Room 3.0 آسانتر خواهد بود زیرا تغییر بسته عمدتاً شامل بهروزرسانی ارجاعهای نماد (واردات) است و ممکن است به حداقل تغییرات در سایتهای فراخوانی نیاز داشته باشد.
برای مروری کوتاه بر میاناهای برنامهسازی کاربردی SQLiteDriver، اسناد میاناهای برنامهسازی کاربردی SQLiteDriver را بررسی کنید.
برای جزئیات بیشتر درباره نحوه انتقال Room برای استفاده از میاناهای برنامهسازی کاربردی SQLiteDriver، سند رسمی انتقال از SupportSQLite را بررسی کنید.
پوشاننده Room SupportSQLite
میدانیم که حذف کامل SupportSQLite ممکن است فوراً برای همه پروژهها امکانپذیر نباشد. برای تسهیل این انتقال، Room 2.8.0، جدیدترین نسخه از سری Room 2.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() جایگزین کرد و حتی اگر setDriver() در سازنده Room فراخوانی شود، یک پوشاننده ارائه میشود.
برای جزئیات بیشتر، اسناد room-sqlite-wrapper را بررسی کنید.
پشتیبانی وب Room و SQLite
پشتیبانی از Kotlin Multiplatform، JS و WasmJS را هدف قرار میدهد و برخیاز مهمترین تغییرات API را بههمراه دارد. بهطور خاص، بسیاری از میاناهای برنامهسازی کاربردی در Room 3.0 توابع تعلیق هستند زیرا پشتیبانی مناسب از فضای ذخیرهسازی وب ناهمگام است. میاناهای برنامهسازی کاربردی SQLiteDriver نیز برای پشتیبانی از وب بهروز شدهاند و درایور ناهمگام وب جدیدی در androidx.sqlite:sqlite-web دردسترس است. این درایور مبتنی بر Web Worker است که امکان ماندگاری پایگاه داده را در سیستم فایل خصوصی Origin (OPFS) فراهم میکند.
برای جزئیات بیشتر درباره نحوه راهاندازی Room برای وب، یادداشتهای انتشار Room 3.0 را بررسی کنید.
نوع پاسخ DAO سفارشی
Room 3.0 قابلیت افزودن ادغامهای سفارشی به Room را معرفی میکند، مشابه RxJava و Paging. ازطریق میانای برنامهسازی کاربردی حاشیهنویسی جدیدی بهنام @DaoReturnTypeConverter میتوانید ادغام خودتان را ایجاد کنید تا کد تولیدشده Room در زمان اجرا دردسترس قرار گیرد، این کار باعث میشود توابع @Dao نوع پاسخ سفارشی خود را داشته باشند بدون اینکه لازم باشد منتظر بمانید تا تیم Room پشتیبانی را اضافه کند. ادغامهای موجود برای استفاده از این عملکرد منتقل میشوند و بنابراین اکنون برای کسانی که به آن تکیه میکنند لازم است مبدلها را به تعاریف @Database یا @Dao اضافه کنند.
برای مثال، مبدل Paging در آرتیفکت androidx.room3:room3-paging قرار خواهد داشت و PagingSourceDaoReturnTypeConverter نامیده میشود. درهمینحال، برای LiveData مبدل در androidx.room3:room3-livedata است و LiveDataDaoReturnTypeConverter نام دارد.
برای جزئیات بیشتر، بخش «مبدلهای نوع پاسخ DAO» را در یادداشتهای انتشار Room 3.0 بررسی کنید.
حالت تعمیر و نگهداری Room 2.x
ازآنجاییکه توسعه Room بر Room 3 متمرکز خواهد بود، نسخه فعلی Room 2.x وارد حالت نگهداری میشود. این یعنی هیچ ویژگی مهمی توسعه نخواهد یافت اما نسخههای وصله (۲.۸.۱، ۲.۸.۲، و غیره) همچنان با رفع اشکال و بهروزرسانیهای وابستگی منتشر خواهند شد. تیم متعهد است که این کار را تا زمانی که «اتاق ۳» پایدار شود ادامه دهد.
تفکرات نهایی
ما درباره پتانسیل Room 3.0 و فرصتهایی که برای بومسازگان Kotlin ایجاد میکند بسیار هیجانزده هستیم. منتظر بهروزرسانیهای بیشتر باشید، زیرا ما این مسیر را ادامه میدهیم!
-
اخبار محصولاز غوطهوری کامل در خانه تا تجربههای اجمالی درحال حرکت، ساختن روی Android XR به شما امکان میدهد در هر لحظه در سراسر طیف برنامههای فضایی با کاربران ملاقات کنید. در «نشست توسعهدهندگان Android»، با راهاندازی XREAL AURA به نقطه عطف هیجانانگیزی رسیدیم.
Amy Zeppenfeld, Vinny DaSilva • ۳ دقیقه خواندن -
اخبار محصولدر عصر هوش مصنوعی، کاربران دیگر فقط در برنامهها ضربه نمیزنند، بلکه اهداف سطح بالا را بیان میکنند و انتظار دارند عاملهای هوش مصنوعی مانند Gemini گردشهای کاری چندمرحلهای را، گاهی در چندین برنامه در دستگاههایشان، تکمیل کنند.
Jingyu Shi • زمان خواندن: ۴ دقیقه -
اخبار محصولامروز در «نشست توسعهدهندگان Android»، دردسترس بودن گسترده بسیاری از ابزارها و میاناهای برنامهسازی کاربردی را اعلام میکنیم که برای رفع اصطکاک روزمره و ارائه انعطافپذیری بیشتر به شما برای ساختن برنامههای Android عالی طراحی شدهاند.
Matthew McCullough • زمان خواندن: ۴ دقیقه
جدیدترین اطلاعات آماری توسعه Android را بهصورت هفتگی در صندوق ورودیتان دریافت کنید.