اتاق
| جدیدترین بهروزرسانی | نسخه پایدار | نامزد انتشار | انتشار نسخه بتا | نسخه آلفا |
|---|---|---|---|---|
| ۹ سپتامبر ۲۰۲۶ | ۲.۸.۵ | - | - | - |
اعلام وابستگیها
برای افزودن وابستگی به Room، باید مخزن Google Maven را به پروژهتان اضافه کنید. برای اطلاعات بیشتر، مخزن Maven در Google را بخوانید.
وابستگیهای «اتاق» شامل آزمایش انتقالهای «اتاق» و اتاق RxJava میشود
وابستگیهای آرتیفکتهای موردنیازتان را در فایل build.gradle برای برنامه یا واحدتان اضافه کنید:
کاتلین
dependencies { val room_version = "2.8.5" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
شیار
dependencies { def room_version = "2.8.5" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
برای کسب اطلاعات درباره استفاده از افزایه KAPT، به مستندات KAPT مراجعه کنید.
برای کسب اطلاعات درباره استفاده از افزونه KSP، به سند شروع سریع KSP مراجعه کنید.
برای کسب اطلاعات درباره استفاده از افزونههای Kotlin، به اسناد ktx مراجعه کنید.
برای اطلاعات بیشتر درباره وابستگیها، افزودن وابستگیهای ساخت را ببینید.
بهطور اختیاری، برای کتابخانههای غیرAndroid (یعنی Java یا Kotlin فقط ماژولهای Gradle)
میتوانید به androidx.room:room-common وابسته باشید تا از حاشیهنویسیهای Room استفاده کنید.
درحال پیکربندی گزینههای گردآوردنده
اتاق گزینههای پردازشگر شرح زیر را دارد.
room.schemaLocation |
directory
صادر کردن طرحوارههای پایگاه داده به فایلهای JSON را در دایرکتوری ارائهشده فعال میکند. برای اطلاعات بیشتر، انتقال اتاقها را ببینید. |
room.incremental |
boolean
پردازشگر حاشیهنویسی افزایشی Gradle را فعال میکند. مقدار پیشفرض true است.
|
room.generateKotlin |
boolean
بهجای جاوا، فایلهای منبع Kotlin تولید شود. به KSP نیاز دارد. مقدار پیشفرض از نسخه ۲.۷.۰ برابر با true است.
برای جزئیات بیشتر، یادداشتهای نسخه ۲.۶.۰ را که در آن معرفی شده است ببینید.
|
استفاده از افزایه Room Gradle
با Room نسخه ۲.۶.۰ و بالاتر، میتوانید از «افزایه Room Gradle» برای پیکربندی گزینههای گردآورنده Room استفاده کنید. این افزایه پروژه را بهگونهای پیکربندی میکند که طرحوارههای تولیدشده (که خروجی تکالیف کامپایل هستند و برای انتقالهای خودکار مصرف میشوند) بهدرستی پیکربندی شوند تا ساختهای قابلتولید مجدد و قابلذخیره در حافظه نهان داشته باشند.
برای افزودن افزایه، در فایل ساخت Gradle سطح بالا، افزایه و نسخه آن را تعریف کنید.
شیک
plugins { id 'androidx.room' version "$room_version" apply false }
کاتلین
plugins { id("androidx.room") version "$room_version" apply false }
در فایل ساخت Gradle سطح واحد، افزایه را اعمال کنید و از افزونه room
استفاده کنید.
شیک
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
کاتلین
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
هنگام استفاده از «افزایه Room Gradle»، تنظیم schemaDirectory الزامی است. این کار
کامپایلر Room و وظایف مختلف کامپایل و زیرینههای آن
(javac، KAPT، KSP) را پیکربندی میکند تا فایلهای طرحواره را در پوشههای طعمدار، برای مثال
schemas/flavorOneDebug/com.package.MyDatabase/1.json، برونداد کند. این فایلها باید
در مخزن بررسی شوند تا برای اعتبارسنجی و انتقال خودکار استفاده شوند.
برخیاز گزینهها را نمیتوان در همه نسخههای «افزایه Room Gradle» پیکربندی کرد،
حتی اگر توسط گردآورنده Room پشتیبانی شوند. جدول زیر هر گزینه را فهرست میکند و نسخه «افزایه Room Gradle» را که پشتیبانی از پیکربندی آن گزینه را بااستفاده از افزایه room اضافه کرده است نشان میدهد. اگر نسخه شما پایینتر است،
یا اگر این گزینه هنوز پشتیبانی نمیشود، میتوانید بهجای آن از
گزینههای پردازشگر گزارمان استفاده کنید.
| گزینه | از نسخه |
|---|---|
room.schemaLocation (الزامی) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
استفاده از گزینههای پردازشگر حاشیهنویسی
اگر از Room Gradle Plugin استفاده نمیکنید، یا اگر گزینه موردنظرتان توسط نسخه افزایه شما پشتیبانی نمیشود، میتوانید Room را بااستفاده از گزینههای پردازشگر گزارمان پیکربندی کنید، همانطور که در افزودن وابستگیهای ساخت شرح داده شده است. نحوه مشخص کردن گزینههای حاشیهنویسی به این بستگی دارد که از KSP یا KAPT برای Room استفاده میکنید.
شیک
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
کاتلین
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
چون room.schemaLocation یک فهرست راهنما است و نوع ابتدایی نیست،
هنگام افزودن این گزینه باید از CommandLineArgumentsProvider استفاده کنید تا
Gradle هنگام انجام بررسیهای بهروز بودن از این فهرست راهنما مطلع شود.
انتقال پایگاه داده Room
پیادهسازی کاملی از CommandLineArgumentsProvider را نشان میدهد که
مکان طرحواره را ارائه میدهد.
بازخورد
بازخوردتان به بهبود Jetpack کمک میکند. اگر مشکلات جدیدی پیدا کردید یا ایدههایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبلاز ایجاد کتابخانه جدید، مشکلات موجود در این کتابخانه را بررسی کنید. با کلیک کردن روی دکمه ستاره میتوانید رأی خود را به مشکل موجود اضافه کنید.
برای کسب اطلاعات بیشتر، به مستندات «پیگیری مسائل» مراجعه کنید.
نسخه ۲.۸
نسخه ۲.۸.۵
۹ سپتامبر ۲۰۲۶
androidx.room:room-*:2.8.5 منتشر شد. نسخه ۲.۸.۵ شامل این تعهدات است.
رفع اشکالها
- اکنون، عملیات ردیاب نامعتبرسازی و پُرسمانهای تعلیق اتاق، پساز بسته شدن پایگاه داده، خطای
IllegalStateExceptionرا فراخوانی میکنند. (Ic0166، b/543076356)
نسخه ۲.۸.۴
۱۹ نوامبر ۲۰۲۵
androidx.room:room-*:2.8.4 منتشر شد. نسخه ۲.۸.۴ شامل این تعهدات است.
رفع اشکالها
- وقتی از
SQLiteDriverاستفاده میکنید که بهطور داخلی استخر ندارد، مثلBundledSQLiteDriver، حافظه نهان بیانیه آمادهای به استخر اتصال «اتاق» اضافه شد. این کار عملکرد را در اجرای مکرر همان عبارت SQL بهبود میبخشد. (5f43bc، b/319653917) - رفع مشکلی که در آن پیام خطای واقعی / موردانتظار در اعتبارسنجی طرحواره فاقد اطلاعات بود. (8b23da، b/454531083)
- مشکلی را برطرف کنید که باعث میشد تولید کد Kotlin در Room توابع
@TransactionDAO را با متغیرهای نوع ازدست بدهد. (a8365d، b/251316420) - با اجتناب از پرشهای رشتهای که همان رفتار مسدودسازی را مانند میاناهای برنامهسازی کاربردی
SupportSQLiteDatabaseحفظ میکنند، عملکرد Room’sSupportSQLiteWrapper را بهبود بخشیدیم. (fc70e4)
نسخه ۲.۸.۳
۲۲ اکتبر ۲۰۲۵
androidx.room:room-*:2.8.3 منتشر شد. نسخه ۲.۸.۳ شامل این تعهدات است.
رفع اشکالها
- رفع مشکل عملکردی در Room SQLite Wrapper که باعث تماسهای بیشازحد JNI و کاهش قابلتوجه عملکرد هنگام تکرار روی Cursor میشد.
نسخه ۲.۸.۲
۸ اکتبر ۲۰۲۵
androidx.room:room-*:2.8.2 منتشر شد. نسخه ۲.۸.۲ شامل این تعهدات است.
رفع اشکالها
- رفع بنبستی که ممکن بود هنگام باز کردن مجدد پایگاه داده بستهشده خودکار از انتشار Flow رخ دهد (b/446643789).
نسخه ۲.۸.۱
۲۴ سپتامبر ۲۰۲۵
androidx.room:room-*:2.8.1 منتشر شد. نسخه ۲.۸.۱ شامل این تعهدات است.
رفع اشکالها
- رفع خرابی پردازنده که هنگام پردازش تابع DAO با لامبدای تعلیق رخ میداد. (b/442220723).
- رفع شرایط رقابتی که مانع از دریافت آخرین بهروزرسانی توسط «جریانها» میشد.
نسخه ۲.۸.۰
۱۰ سپتامبر ۲۰۲۵
androidx.room:room-*:2.8.0 منتشر شد. نسخه ۲.۸.۰ شامل این تعهدات است.
تغییرات مهم از نسخه ۲.۷.۰:
- دستساز جدیدی
androidx.room:room-sqlite-wrapperاضافه شد که حاوی میاناهای برنامهسازی کاربردی برای دریافت بستهبندیSupportSQLiteDatabaseازRoomDatabaseباSQLiteDriverپیکربندیشده است. برای دریافت بستهبندی، از تابع افزونه جدیدRoomDatabase.getSupportWrapper()استفاده کنید. این یک مصنوع سازگاری برای حفظ استفاده ازSupportSQLiteDatabaseاست که معمولاً ازroomDatabase.openHelper.writableDatabaseبهدست میآید، حتی اگر پایگاه داده Room باSQLiteDriverپیکربندی شده باشد. این بستهبندی برای انتقال تدریجی پایههای کد که میخواهند از SQLiteDriver APIs استفاده کنند اما هنوز استفاده گستردهای از SupportSQLite APIs دارند و درعینحال میخواهند ازBundledSQLiteDriverبهرهمند شوند مفید است. برای اطلاعات بیشتر، راهنمای انتقال را بررسی کنید. - پشتیبانی از Watch OS و Tv OS بهعنوان هدفهای KMP اضافه شد.
- کیت توسعه نرمافزار Android minSDK کتابخانه از میانای برنامهسازی کاربردی ۲۱ به میانای برنامهسازی کاربردی ۲۳ بهروزرسانی شد
نسخه 2.8.0-rc02
۲۷ اوت ۲۰۲۵
androidx.room:room-*:2.8.0-rc02 منتشر شد. نسخه 2.8.0-rc02 حاوی این موارد ثبت است.
تغییرات میانای برنامهسازی کاربردی
- minSDK را از API 21 به API 23 بهروز کنید (Ibdfca، b/380448311، b/435705964، b/435705223)
- حداقل نسخه سازگار «افزایه Android Gradle» (AGP) با «افزایه Room Gradle» را از ۸.۱ به ۸.۴ بهروزرسانی کنید. (Ia0d28)
رفع اشکالها
- مشکلی که در آن انتقال مخرب انجام میشد، حتی اگر مسیر انتقال برای پایگاه داده ازپیش بستهبندیشده دردسترس بود، برطرف شد (b/432634197).
نسخه 2.8.0-rc01
۱۳ اوت ۲۰۲۵
androidx.room:room-*:2.8.0-rc01 منتشر شد. نسخه 2.8.0-rc01 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
رفع اشکالها
- رفع شرایط رقابتی که در آن Room Flows آخرین نتیجه پُرسمان را در وضعیت چندپُرسمانی/نوشتن ناهمگام منتشر نمیکرد. (Ic9a3c)
نسخه 2.8.0-beta01
۱ اوت ۲۰۲۵
androidx.room:room-*:2.8.0-beta01 منتشر شد. نسخه 2.8.0-beta01 شامل این تعهدات است.
رفع اشکالها
- اکنون نامهای جدول و نما درطول انتقالهای مخرب بهدرستی گریز داده میشوند. (9e55f8، b/427095319)
نسخه 2.8.0-alpha01
۱۶ ژوئیه ۲۰۲۵
androidx.room:room-*:2.8.0-alpha01 منتشر شد. نسخه 2.8.0-alpha01 حاوی این ارسالها است.
ویژگیهای جدید
- یک آرتیفکت جدید
androidx.room:room-sqlite-wrapperاضافه شد که حاوی میاناهای برنامهسازی کاربردی برای دریافت بستهبندیSupportSQLiteDatabaseازRoomDatabaseباSQLiteDriverپیکربندیشده است. برای دریافت بستهبندی، از تابع افزونه جدیدRoomDatabase.getSupportWrapper()استفاده کنید. این یک مصنوع سازگاری برای حفظ استفاده ازSupportSQLiteDatabaseاست که معمولاً ازRoomDatabase.openHelper.writableDatabaseبهدست میآید، حتی اگر پایگاه داده Room باSQLiteDriverپیکربندی شده باشد. این بستهبندی برای انتقال تدریجی پایههای کد که میخواهندSQLiteDriverرا بهکار ببرند اما هنوز از APIهایSupportSQLiteاستفادههای گستردهای دارند و درعینحال میخواهند ازBundledSQLiteDriverبهرهمند شوند مفید است. (Icf6ac) - افزودن هدفهای KMP برای Watch OS و TV OS (I228f6، b/394238801)
رفع اشکالها
- رفع بنبستی که گاهی هنگام استفاده از تراکنشهای تعلیق و
AndroidSQLiteDriverرخ میداد. (b/415006268)
نسخه ۲.۷
نسخه ۲.۷.۲
۱۸ ژوئن ۲۰۲۵
androidx.room:room-*:2.7.2 منتشر شد. نسخه ۲.۷.۲ شامل این تعهدات است.
رفع اشکالها
- رفع مشکلی که در آن مقادیر گزارمان هنگام پردازش منابع بومی با KSP بهاشتباه خوانده میشد و گاهی اوقات صادر کردن طرحواره ازدست میرفت. (b/416549580)
- رفع اشکالی که در آن نظرات پیشرو در SQL باعث میشد بیانیهها بهگونهای اجرا شوند که انگار پُرسمانهای غیرخواندنی هستند. (b/413061402)
- مشکل مربوط به پیکربندی نشدن «افزونه Gradle» در Room بهدلیل خالی بودن فهرست راهنمای طرحواره برطرف شد. (b/417823384)
- وقتی برقراری اتصال خیلی طول میکشد، دیگر
SQLiteExceptionپرتاب نمیشود، بلکه پیام گزارش توسط کتابخانه ارسال میشود. ثبت کردن بهجای ایجاد کردن، باعث میشود که Room وقفه زمانی را که در Kotlin Coroutine درحال دریافت اتصال رخ میدهد اشتباه تفسیر کند و درنتیجه وقتی برنامه iOS در پسزمینه قرار میگیرد و بعداً در وسط عملیات پایگاه داده ازسر گرفته میشود، از ایجاد استثنا جلوگیری میکند. (b/422448815)
نسخه ۲.۷.۱
۲۳ آوریل ۲۰۲۵
androidx.room:room-*:2.7.1 منتشر شد. نسخه ۲.۷.۱ حاوی این ثبتها است.
رفع اشکالها
- رفع اشکال
IndexOutOfBoundsExceptionدرطول اعتبارسنجی تبدیلکننده نوع ارائهشده. (b/409804755). - از
RoomDatabase.runInTransaction()وقتیSQLiteDriverبا Room پیکربندی شده است پشتیبانی کنید. (b/408364828).
نسخه ۲.۷.۰
۹ آوریل ۲۰۲۵
androidx.room:room-*:2.7.0 منتشر شد. نسخه ۲.۷.۰ شامل این تعهدات است.
تغییرات مهم از نسخه ۲.۶.۰
- پشتیبانی از Kotlin چندپلاتفرمی (KMP): در این نسخه پخش، Room بازسازی شده است تا به کتابخانه Kotlin چندپلاتفرمی (KMP) تبدیل شود. پلاتفرمهای پشتیبانیشده فعلی عبارتاند از Android، iOS، JVM (رایانه)، Mac بومی، و Linux بومی. برای کسب اطلاعات بیشتر درباره نحوه شروع استفاده از Room KMP، لطفاً به مستندات رسمی Room KMP مراجعه کنید. بهعنوان بخشی از پشتیبانی KMP، Room را میتوان با
SQLiteDriverنیز پیکربندی کرد. برای کسب اطلاعات درباره نحوه انتقال دادن برنامه موجود به «میاناهای برنامهسازی کاربردی» درایور و به Room KMP، به مستندات انتقال مراجعه کنید. - اگر پردازش ازطریق KSP انجام شود، تولید کد Kotlin در KSP بهطور پیشفرض روشن است. برای پروژههای فقط KAPT یا Java، Room همچنان منابع Java تولید خواهد کرد.
- Kotlin 2.0 و KSP2: اکنون Room زبان Kotlin 2.0 را هدفیابی میکند و پروژهها را ملزم میکند که با Kotlin 2.0 و نسخه زبان معادل یا بالاتر نیز کامپایل شوند. پشتیبانی از KSP2 نیز اضافه شده است و هنگام استفاده از Room با Kotlin نسخه ۲.۰ یا بالاتر توصیه میشود.
نسخه 2.7.0-rc03
۲۶ مارس ۲۰۲۵
androidx.room:room-*:2.7.0-rc03 منتشر شد. نسخه 2.7.0-rc03 شامل این تعهدات است.
رفع اشکالها
- دیگر وقتی رشتهای درحین اجرای «میاناهای برنامهسازی کاربردی» مسدودکننده Room، ازجمله توابع مسدودکننده DAO، قطع میشود،
InterruptedExceptionپرتاب نمیشود (b/400584611). - برای کاهش
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.و مشکلات مشابه، استخر اتصال «اتاق» را دوباره پیادهسازی کنید (b/380088809).
نسخه 2.7.0-rc02
۱۲ مارس ۲۰۲۵
androidx.room:room-*:2.7.0-rc02 منتشر شد. نسخه 2.7.0-rc02 حاوی این موارد ثبت است.
رفع اشکالها
- رفع مشکل «انتقالهای خودکار» که ستون جدیدی را در جدول FTS بهدرستی مدیریت نمیکرد. (b/348227770، Ic53f3)
- رفع خرابی کامپایلر اتاق بهدلیل
NullPointerExceptionهنگام پردازش منابع غیر JVM ازطریق KSP. (b/396607230، I693c9) - رفع مشکلی که باعث میشد Room در پایان استفاده از اتصال نویسنده، جدولها را نامعتبر نکند. (b/340606803، I73ef6)
نسخه 2.7.0-rc01
۲۶ فوریه ۲۰۲۵
androidx.room:room-*:2.7.0-rc01 منتشر شد. نسخه 2.7.0-rc01 حاوی این ارسالها است.
رفع اشکالها
- Fix an issue where Room would not be setting the
busy_timeoutin the initial database connection that would lead toSQLException: Error code: 5, message: database is lockedissues (I93208, b/380088809). - مشکلی در کامپایلر Room برطرف شد که باعث میشد پردازنده KSP هنگام پردازش مجموعههای منبع بومی (مثل iOS) در Kotlin 2.1.x و KSP1 ازکار بیفتد (I883b8، b/396607230).
نسخه 2.7.0-beta01
۱۲ فوریه ۲۰۲۵
androidx.room:room-*:2.7.0-beta01 منتشر شد. نسخه 2.7.0-beta01 شامل این تعهدات است.
رفع اشکالها
- رفع مشکلی در
RoomDatabase.inTransaction()که باعث میشد پایگاه داده بستهشده را در زمانی که نباید باز کند و اگر پایگاه داده بسته باشد باید بهسرعت مقدار نادرست را برگرداند (b/325432967). - رفع خرابی (
IllegalArgumentException: not a valid name) در مترجم Room هنگام پردازش توابع «شیء دسترسی به داده» با کلاسهای مقدار / درونخط Kotlin (b/388299754). - قوانین Proguard را در آرتیفکت JVM مربوط به
room-runtimeاضافه کنید تا سازنده پیشفرض پیادهسازی پایگاه داده تولیدشده حذف نشود، زیرا از آن در مقداردهی اولیه پیشفرض Room که از بازتاب استفاده میکند (b/392657750) استفاده میشود.
نسخه 2.7.0-alpha13
۲۹ ژانویه ۲۰۲۵
androidx.room:room-*:2.7.0-alpha13 منتشر شد. نسخه 2.7.0-alpha13 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- Room اکنون زبان Kotlin نسخه ۲.۰ را هدفیابی میکند و پروژهها باید با Kotlin نسخه ۲.۰ و نسخه زبان معادل یا بالاتر نیز کامپایل شوند. (I8efb0، b/315461431، b/384600605)
رفع اشکالها
- رفع مشکلی در سازنده پایگاه داده Room KMP که وقتی بهجای مسیر از نام ساده در Android استفاده میشد، مسیر حلشده فایل پایگاه داده در دایرکتوری دادههای برنامه قرار نمیگرفت. (I83315، b/377830104)
- مشکلی در «افزایه Room Gradle» برطرف شد که در آن پیکربندی ورودیها و برونداد طرحواره باعث ایجاد مشکل در پروژههای Android میشد:
property 'inputDirectory' is final and cannot be changed any further.(1dbb4c، b/376071291) - افزودن پشتیبانی از KSP2 در افزونه Room Gradle برای رفع مشکلی که در آن دایرکتوری طرحواره بهدرستی توسط افزونه راهاندازی نمیشد. (Iec3c4، b/379159770)
همیاری خارجی
- رفع مشکلی در یکپارچهسازی صفحهبندی
Roomکه باعث میشد واسط کاربر هنگام نزدیک بودن کلید اولیه برای بازآوری به انتهای فهرست، جهش داشته باشد. با تشکر از Eva! (I2abbe، b/389729367)
نسخه 2.7.0-alpha12
۱۱ دسامبر ۲۰۲۴
androidx.room:room-*:2.7.0-alpha12 منتشر شد. نسخه 2.7.0-alpha12 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- میانای برنامهسازی کاربردی آزمایشی
RoomDatabase.Builder.setInMemoryTrackingMode()را اضافه کنید تا پیکربندی کنید که آیا Room از جدول درونحافظهای برای ردیابی ابطال استفاده کند یا نه. (I2a9b2، b/185414040)
رفع اشکالها
- انتقالهای مخرب اکنون نماها را حذف میکنند تا مطمئن شوند که دوباره ایجاد میشوند، و رفتار را زمانی که
allowDestructiveMigrationForAllTablesروشن است (پیشفرض KMP) با رفتار موجود زمانی که خاموش است هماهنگ میکنند. (0a3e83، b/381518941)
نسخه 2.7.0-alpha11
۳۰ اکتبر ۲۰۲۴
androidx.room:room-*:2.7.0-alpha11 منتشر شد. نسخه 2.7.0-alpha11 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- امضای روش
convertRows()جدیداً اضافهشده را دوباره بررسی کنید تا تابع تعلیقی باشد کهRawRoomQueryرا برای صفحهبندی اتاق دریافت میکند. (Ie57b5، b/369136627)
رفع اشکالها
- مشکل اتاقپیجینگ که در آن هنگام استفاده از
@RelationبههمراهPagingSourceکد نامعتبر تولید میشد برطرف شد.
نسخه 2.7.0-alpha10
۱۶ اکتبر ۲۰۲۴
androidx.room:room-*:2.7.0-alpha10 منتشر شد. نسخه 2.7.0-alpha10 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- Create internal
ByteArrayWrapperclass to support Relations withByteBufferin non-Android & non-JVM platforms. (I75543، b/367205685) SQLiteStatement.getColumnType()را بههمراه ثابتهای مختلف نتیجهSQLITE_DATA_*اضافه کنید تا بازیابی نوع داده ستون فعال شود. (I1985c، b/369636251)
نسخه 2.7.0-alpha09
۲ اکتبر ۲۰۲۴
androidx.room:room-*:2.7.0-alpha09 منتشر شد. نسخه 2.7.0-alpha09 شامل این تعهدات است.
رفع اشکالها
- رفع مشکلی در پیادهسازی KMP مربوط به
room-pagingکه باعث ایجادError code: 8, message: attempt to write a readonly databaseبهدلیل شروع تراکنش نوشتاری در اتصال خواندنی میشد. (b/368380988)
نسخه 2.7.0-alpha08
۱۸ سپتامبر ۲۰۲۴
androidx.room:room-*:2.7.0-alpha08 منتشر شد. نسخه 2.7.0-alpha08 حاوی این ارسالها است.
ویژگیهای جدید
- دادههای جلسه
room-pagingبرای سازگاری با KMP منتقل شدهاند. (Ib8756، b/339934824) - API
invalidationTrackerFlow()بهعنوان API شخص اول با نامInvalidationTracker.createFlow()عمومیسازی شده است و اکنون برای مجموعههای منبع غیرAndroid در پروژههای KMP دردسترس است. (I1fbfa، (I8fb29)، b/329291639، b/329315924)
تغییرات میانای برنامهسازی کاربردی
- همه هشدارها و پیامهای خطا در Room که از کلمه
Cursorاستفاده میکنند برداشته یا جایگزین شدهاند، زیراCursorدیگر اصطلاح عمومی دقیقی برای استفاده در نسخه KMP از Room نیست. (Id8cd9، b/334087492)
رفع اشکالها
- مشکلی برطرف شد که در آن Room KMP سعی میکرد بااستفاده از
UUIDبرای پلاتفرمهای غیر JVM کد منتشر کند. (b/362994709) - مشکلی در Room Gradle Plugin برطرف شد که باعث میشد هنگام استفاده در پروژه KMP با Compose Multiplatform، خطایی مانند «Cannot change attributes of configuration … after it has been locked for mutation» (نمیتوان ویژگیهای پیکربندی … را پساز قفل شدن برای جهش تغییر داد) رخ دهد. (b/343408758)
نسخه 2.7.0-alpha07
۲۱ اوت ۲۰۲۴
androidx.room:room-*:2.7.0-alpha07 منتشر شد. نسخه 2.7.0-alpha07 شامل این تعهدات است.
ویژگیهای جدید
- «افزایه Gradle اتاق» اکنون بهطور خودکار طرحوارههای برونبردشده را به منابع منبع «آزمایش ابزار Android» اضافه میکند تا بتواند از
MigrationTestHelperاستفاده کند.
رفع اشکالها
- مشکلی در «واقعی» تولیدشده
RoomDatabaseConstructorرفع شد که در تابعinitializeاصلاحگر «واقعی» را نداشت، اگر چنین تابعی در اظهارنامه «انتظار» نیز ملغی شده باشد. (۳۵۹۶۳۱۶۲۷) - مشکلی در «واقعی» تولیدشده
RoomDatabaseConstructorرفع شد که با رؤیتپذیری اظهارنامه «انتظار» مطابقت نداشت. (358138953)
نسخه 2.7.0-alpha06
۷ اوت ۲۰۲۴
androidx.room:room-*:2.7.0-alpha06 منتشر شد. نسخه 2.7.0-alpha06 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- راهاندازی نمونهسازی را برای
RoomDatabaseدر پروژه KMP تغییر دهید.
بهدلیل مدل ترجمه Kotlin 2.0، استراتژی ارجاع به تابع تولیدشدنی با نام instantiateImpl() دیگر امکانپذیر نیست. دو API جدید، @ConstructedBy و RoomDatabaseConstructor، معرفی شدهاند که جایگزین استراتژی instantiateImpl() میشوند. استراتژی جدید بهصورت زیر است:
شیء expect را که
RoomDatabaseConstructorرا پیادهسازی میکند تعریف کنیدexpect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>پیوند دادن شیء با اظهارنامه
@Databaseبااستفاده از@ConstructedBy@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabaseایجاد نمونه پایگاه داده جدید بدون ارسال آرگومان کارخانه
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
رفع اشکال b/316978491، b/338446862، و b/342905180
- پشتیبانی از
@RawQueryدر Room KMP با افزودن میانای برنامهسازی کاربردی جدیدی بهنامRoomRawQueryکه ازنظر نگهداری رشته SQL خام و تابعی برای مقید کردن آرگومانها به عبارت، مشابهSupportSQLiteQueryاست. @RawQueryتابع حاشیهنویسیشده اکنون میتواندRoomRawQueryرا بهعنوان پارامتر تکی خود بپذیرد. (Iea844، b/330586815) - یک سربار
setQueryCallback()اضافه کنید کهCoroutineContextرا بپذیرد. (Id66ff، b/309996304) - پشتیبانی از
linuxArm64هدف Kotlin چندپلاتفرمی اضافه شد (I139d3، b/338268719)
رفع اشکالها
- رفع مشکلی که باعث میشد Room بهطور نادرست تماسی با
recursiveFetchArrayMapدر هدفهای غیرAndroid ایجاد کند. (710c36، b/352482325) - مشکلی که گاهی باعث میشد Room در پروژه KMP استثنایی درباره «مهلت تلاش برای اتصال بهپایان رسید» ایجاد کند برطرف شد. (fa72d0، b/347737870)
- مشکلی در انتقال خودکار برطرف شد که باعث میشد کلیدهای خارجی خیلی زودتر از اینکه جدولهای دیگر طرحوارههایشان را برای مطابقت با کلیدهای خارجی جدید تغییر دهند بررسی شوند. (7672c0, b/352085724)
نسخه 2.7.0-alpha05
۱۰ ژوئیه ۲۰۲۴
androidx.room:room-*:2.7.0-alpha05 منتشر شد. نسخه 2.7.0-alpha05 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- نام
SQLiteKtبهSQLiteوBundledSQLiteKtبهBundledSQLiteتغییر کرد. (I8b501)
رفع اشکالها
- اشکالی برطرف شد که در آن
RoomDatabaseهنگام استفاده ازAndroidSQLiteDriverدچار بنبست یا خطای مهلت زمانی اتصال میشد.
نسخه 2.7.0-alpha04
۱۲ ژوئن ۲۰۲۴
androidx.room:room-*:2.7.0-alpha04 منتشر شد. نسخه 2.7.0-alpha04 حاوی این ارسالها است.
رفع اشکالها
- مشکلی در پردازشگر گزارمان Room برطرف شد که باعث میشد وقتی نوع پاسخ چندنگاشتی در DAO تعریف شده باشد، کد KMP ناسازگار تولید شود. (b/340983093)
- مشکلی برطرف شد که در آن اگر کلاس حاشیهنویسیشده
@Databaseبسته نداشت، Room نمیتوانست پیادهسازی پایگاه داده تولیدشده را پیدا کند. (b/342097292) - رفع مشکلی که در آن فعال کردن بستن خودکار و باطل کردن چند نمونه گاهی اوقات باعث
ConcurrentModificationExceptionمیشد وقتی پایگاه داده بهدلیل عدم استفاده بهطور خودکار بسته میشد.
نسخه 2.7.0-alpha03
۲۹ مه ۲۰۲۴
androidx.room:room-*:2.7.0-alpha03 منتشر شد. نسخه 2.7.0-alpha03 شامل این تعهدات است.
رفع اشکالها
- مشکلات مختلف مربوط به Kotlin 2.0 و KSP 2.0 برطرف شد. توجه داشته باشید که Kotlin 2.0 با پشتیبانی KSP 2 کامل نیست و تیم درحال کار روی میاناهای برنامهسازی کاربردی مختلف و تغییرات رفتار در مترجم جدید است. (b/314151707)
نسخه 2.7.0-alpha02
۱۴ مه ۲۰۲۴
androidx.room:room-*:2.7.0-alpha02 منتشر شد. نسخه 2.7.0-alpha02 حاوی این موارد ارسال است.
رفع اشکالها
- مشکلات مختلف KSP برطرف شد.
نسخه 2.7.0-alpha01
۱ مه ۲۰۲۴
androidx.room:room-*:2.7.0-alpha01 منتشر شد. نسخه 2.7.0-alpha01 شامل این تعهدات است.
ویژگیهای جدید
- پشتیبانی از Kotlin Multiplatform (KMP): در این نسخه، Room بازسازی کد شده است تا به کتابخانه Kotlin Multiplatform (KMP) تبدیل شود. اگرچه هنوز کارهایی برای انجام دادن وجود دارد، این نسخه جدیدی از «اتاق» را معرفی میکند که در آن اکثر عملکردها «عمومیسازی» شده است (بهگونهای که چندسکویی باشد). پلاتفرمهای پشتیبانیشده فعلی عبارتاند از Android، iOS، JVM (رایانه)، Mac بومی، و Linux بومی. هر عملکردی که در پلاتفرمهای جدید پشتیبانیشده وجود نداشته باشد، در نسخههای آتی «اتاق» به «ویژگی کامل» تبدیل خواهد شد.
برای اطلاعات بیشتر درباره نحوه شروع استفاده از Room KMP، لطفاً به مستندات رسمی Room KMP مراجعه کنید.
- اگر پردازش ازطریق KSP انجام شود، تولید کد Kotlin در KSP بهطور پیشفرض روشن میشود. برای پروژههایی که فقط KAPT یا Java دارند، Room همچنان منابع Java را تولید خواهد کرد.
تغییرات میانای برنامهسازی کاربردی
- بار اضافی
Room.databaseBuilder()اضافه شده است که پارامتر لامبدایی را میگیرد که برای استفاده با تابع تولیدشده «اتاق» درنظر گرفته شده است تا هنگام نمونهسازی پیادهسازی تولیدشدهRoomDatabaseاز انعکاس استفاده نشود. نمونه استفاده این است:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- میانای برنامهسازی کاربردی برای پیکربندی «اتاق» با
CoroutineContextبه سازنده اضافه شده است:RoomDatabase.Builder.setQueryCoroutineContext. توجه داشته باشید کهRoomDatabaseرا فقط میتوان با مجریان استفادهکننده ازsetQueryExecutorیا با زمینه «روال کمکی» پیکربندی کرد، اما نمیتوان با هر دو پیکربندی کرد. - میانای برنامهسازی کاربردی برای پیکربندی «اتاق» با «گرداننده»
SQLiteاضافه شده است:RoomDatabase.Builder.setDriver(). برای کسب اطلاعات بیشتر دربارهSQLiteDriver API، به مستندات SQLite KMP مراجعه کنید - میاناهای برنامهسازی کاربردی برای دسترسی به
SQLiteConnectionزیرین از میاناهای برنامهسازی کاربردی درایور اضافه شده است:RoomDatabase.useReaderConnectionوRoomDatabase.useWriterConnection. - چندین فراخوانی برگشتی مربوط به Room اکنون نسخه سربارگذاریشدهای دارند که بهجای
SupportSQLiteDatabase،SQLiteConnectionرا دریافت میکند. اینها درنظر گرفته شدهاند که هنگام انتقال به پروژه KMP لغو شوند. برای اطلاعات بیشتر درباره انتقال دادن موارد استفاده از Room در برنامه Android به واحد KMP مشترک، به راهنمای انتقال مراجعه کنید. فراخوانهای برگشتی عبارتاند از:Migration.migrate(SQLiteConnection)AutoMigrationSpec.onPostMigrate(SQLiteConnection)RoomDatabase.Callback.onCreate(SQLiteConnection)RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)RoomDatabase.Callback.onOpen(SQLiteConnection)
- مصنوع KTX
androidx.room:room-ktxباandroidx.room:room-runtimeو همه میاناهای برنامهسازی کاربردی آن ادغام شده است، این مصنوع اکنون خالی است. لطفاً آن را از فهرست وابستگیهایتان بردارید.
نسخه ۲.۶
نسخه ۲.۶.۱
۲۹ نوامبر ۲۰۲۳
androidx.room:room-*:2.6.1 منتشر شد. نسخه ۲.۶.۱ حاوی این ثبتها است.
رفع اشکالها
- مشکل موجود در کد تولیدشده که باعث میشد مقدار پیشفرض ستونهای Double در
EntityCursorConverterبهجای 0.0 روی 0 تنظیم شود برطرف شد. یک اصلاح بالقوه برای یک مورد حاشیهای مشابه برای ستونهای نوع «شناور» نیز اضافه شده است. (Id75f5، b/304584179) - استثناهای پرتابشده از بار
PagingSourceاکنون بهعنوانLoadStateUpdateازLoadResult.Errorحاوی Throwable منتشر خواهد شد. این وضعیت خطا ازطریقPagingDataAdapter.loadStateFlow(Views)یاLazyPagingItems.loadState(Compose)قابل مشاهده است. توجه داشته باشید که این نشاندهنده تغییری در رفتار است که در آن خطاهای بارگیری گذشته بهعنوان یک Exception که توسط روش dao که بارگیری را راهاندازی کرده است، ظاهر میشوند. (I93887، b/302708983)
نسخه ۲.۶.۰
۱۸ اکتبر ۲۰۲۳
androidx.room:room-*:2.6.0 منتشر شد. نسخه ۲.۶.۰ حاوی این تعهدات است.
تغییرات مهم از نسخه ۲.۵.۰
- گزینه فعال کردن تولید کد Kotlin (یا «Kotlin CodeGen») اکنون در Room KSP دردسترس است. (4297ec0). برای روشن کردن Kotlin CodeGen در Room، نام گزینه
room.generateKotlinرا به گزینههای پردازشگر برای KSP اضافه کنید. برای جزئیات بیشتر درباره نحوه ارسال گزینههای پردازنده برای KSP، به اسناد KSP مراجعه کنید.
توجه: هنگام استفاده از Kotlin CodeGen، باید توجه داشته باشید که محدودیتهای بیشتری اضافه شده است. ویژگیهای انتزاعی بهعنوان گیرندههای DAO یا پُرسمانهای DAO در Kotlin CodeGen مجاز نیستند و درعوض انتظار میرود که بهعنوان توابع بازنویسی شوند تا از این تصور اشتباه که مقدار ویژگی تغییرناپذیر است و نتیجه ذخیرهشده ثابتی دارد جلوگیری شود. محدودیت دیگری که اضافه شده است این است که انواع برگشتی مجموعه «تهیپذیر» دیگر در Room برای Kotlin CodeGen مجاز نیستند.
هشدار: ممکن است متوجه شوید که پروژههایتان هنگام استفاده از Kotlin CodeGen ازنظر تهیپذیری سختگیرانهتر هستند. در Kotlin CodeGen، تهیپذیری آرگومانهای نوع مهم است، درحالیکه در Java این موضوع عمدتاً نادیده گرفته میشود. برای مثال، فرض کنید نوع برگشتی `Flow<foo\>` دارید و جدول خالی است. در Java CodeGen، این موضوع مشکلی ایجاد نمیکند، اما در Kotlin CodeGen، با خطا مواجه خواهید شد. برای جلوگیری از این اتفاق، باید از `Flow<foo?\>` استفاده کنید، با این فرض که مقدار تهی منتشر میشود. </foo?\></foo\>
- آرتیفکت جدید «افزایه Room Gradle» با شناسه
androidx.roomبه Room اضافه شده است که مشکلات مختلف موجود در Room را درخصوص داشتن ورودی و خروجی طرحوارهها ازطریق گزینههای پردازشگر شرح Gradle حل میکند. برای جزئیات بیشتر، به یادداشتهای انتشار «نسخه ۲.۶.۰-آلفا۰۲» از Room مراجعه کنید. - کلاسهای مقدار در «نهادهای اتاق» اکنون برای KSP پشتیبانی میشوند. (4194095)
- اکنون از انواع برگشتی «نقشه تودرتو» در توابع DAO در Room پشتیبانی میشود. (I13f48، 203008711)
نسخه 2.6.0-rc01
۲۰ سپتامبر ۲۰۲۳
androidx.room:room-*:2.6.0-rc01 منتشر شد. نسخه 2.6.0-rc01 شامل این تعهدات است.
نسخه 2.6.0-beta01
۲۳ اوت ۲۰۲۳
androidx.room:room-*:2.6.0-beta01 منتشر شد. نسخه 2.6.0-beta01 شامل این commit-ها است.
رفع اشکالها
- رسیدگی به استثنای مورد خاص
SQLiteدرطول درج/بهروزرسانی با استثنای مواجه شد. وقتی استثنای2067 SQLITE_CONSTRAINT_UNIQUEدرطول درج/بهروزرسانی ایجاد میشود، درج/بهروزرسانی باید بهروزرسانی را انجام دهد. (If2849، b/243039555)
نسخه 2.6.0-alpha03
۹ اوت ۲۰۲۳
androidx.room:room-*:2.6.0-alpha03 منتشر شد. نسخه 2.6.0-alpha03 حاوی این commit-ها است.
ویژگیهای جدید
تغییرات میانای برنامهسازی کاربردی
- یک نوع جدید از گزارمان بهنام
@MapColumnایجاد شده است تا جایگزین@MapInfoشود که اکنون منسوخ شده است. برای هر نام ستون (keyColumnName،valueColumnName، یا هر دو) که در یک گزارمان@MapInfoارائه شده است، باید یک گزارمان@MapColumnرا فقط باcolumnNameاعلام کنید و از این گزارمان در آرگومان نوع خاصی که در نوع برگشتی تابع DAO به آن ارجاع داده میشود (کلید یا مقدار «نقشه») استفاده کنید. بهایندلیل که از گزارمان@MapColumnمستقیماً در آرگومان نوع در نوع برگشتی تابع «شیء دسترسی به داده» استفاده میشود، نه در خود تابع مثل@MapInfo. برای اطلاعات بیشتر، لطفاً به@MapColumnمستندات مراجعه کنید. (Ib0305، b/203008711) - فایلهای API بهروزرسانیشده برای حاشیهنویسی سرکوب سازگاری (I8e87a، b/287516207)
- میاناهای برنامهسازی کاربردی افزایه Room Gradle بهروز شده است تا همیشه به پیکربندیهای هر گونه نیاز نداشته باشد. این یعنی افزایه میتواند مکان جهانی را برای همه گونهها بدون ایجاد چندین دایرکتوری بپذیرد، که باعث میشود انتقالها روانتر انجام شود، اما درعینحال انعطافپذیری کافی را دارد تا بتواند طرحوارههای نوع ساخت یا طعمها را بهصورت دستی پیکربندی کند و همچنان از مزایای افزایه (ساختهای قابلتولید مجدد و قابلذخیره در حافظه نهان) بهرهمند شود. (I09d6f, b/278266663)
رفع اشکالها
- آسیبپذیری احتمالی نشت حافظه در
QueryInterceptorStatementبرطرف شد. (I193d1) - رفتار نادرست در تابع
QueryInterceptorDatabase execSQL()اصلاح شد. (Iefdc8)
نسخه 2.6.0-alpha02
۲۱ ژوئن ۲۰۲۳
androidx.room:room-*:2.6.0-alpha02 منتشر شد. نسخه 2.6.0-alpha02 حاوی این commit-ها است.
افزایه Room Gradle
این نسخه جدید حاوی آرتیفکت جدیدی برای Room Gradle Plugin با شناسه androidx.room است که مشکلات موجود مختلفی را در Room درخصوص داشتن ورودیها و خروجیهای طرحوارهها ازطریق گزینههای پردازشگر گزارمان Gradle حل میکند. «افزونه Room Gradle» پروژه را بهگونهای پیکربندی میکند که طرحوارههای تولیدشده که برای انتقال خودکار استفاده میشوند و خروجی تکالیف کامپایل هستند بهدرستی پیکربندی شوند تا ساختهای تکرارپذیر و قابلذخیره در حافظه نهان داشته باشند. این افزایه «زبان دامنه خاصی» برای پیکربندی مکان طرحواره پایه ارائه میدهد:
room {
schemaDirectory("$projectDir/schemas/")
}
سپس افزایه، «گردآورنده اتاق» و وظایف مختلف گردآوری و زیرینههای آن (javac، KAPT، KSP) را پیکربندی میکند تا فایلهای طرحواره را در پوشههای طعمدار، یعنی schemas/flavorOneDebug/com.package.MyDatabase/1.json، برونداد کند. طبق معمول، این فایلها در مخزن ثبت میشوند تا برای اعتبارسنجی و انتقال خودکار استفاده شوند. پساز انتقال به استفاده از افزایه بهجای گزینههای پردازشگر گزارمان، فایلهای طرحواره موجود باید در فهرستهای طعم تولیدشده توسط افزایه کپی شوند. این یک عملیات انتقال یکباره است که باید بهصورت دستی انجام شود. مستندات طرحواره در developers.android.com در آینده پساز رسیدگی به بازخوردها و رسیدن افزایه به نسخه پایدار بهروزرسانی خواهد شد، بنابراین لطفاً آن را امتحان کنید.
تغییرات میانای برنامهسازی کاربردی
-
RoomDatabase.QueryCallbackبهعنوان یک میانای کارکردی تعریف شده است تا امکان استفاده از تبدیل SAM را فراهم کند. (Iab8ea, b/281008549)
رفع اشکالها
- حل کردن مشکلی که هنگام نمونهسازی پایگاه داده در Robolectric پساز انتقال منابع Room از Java به Kotlin ایجاد میشود. (Ic053c، b/274924903)
نسخه 2.6.0-alpha01
۲۲ مارس ۲۰۲۳
androidx.room:room-*:2.6.0-alpha01 منتشر شد. نسخه 2.6.0-alpha01 حاوی این commit-ها است.
ویژگیهای جدید
- پشتیبانی از کلاسهای مقدار در Room برای KSP. «اتاق» اکنون میتواند از کلاسهای مقدار در «نهادها» پشتیبانی کند. (۴۱۹۴۰۹۵)
- اکنون میتوان تولید کد Kotlin(یا «Kotlin CodeGen») را در Room فعال کرد (4297ec0). برای روشن کردن Kotlin CodeGen در Room، نام گزینه
room.generateKotlinرا به گزینههای پردازشگر برای KSP اضافه کنید. برای جزئیات بیشتر درباره نحوه ارسال گزینههای پردازنده برای KSP، به اسناد KSP مراجعه کنید.
توجه: هنگام استفاده از Kotlin CodeGen، مهم است که توجه داشته باشید محدودیتهای اضافیای اضافه شده است. ویژگیهای انتزاعی بهعنوان واکشیکنندههای DAO یا پُرسمانهای DAO در Kotlin CodeGen مجاز نیستند و درعوض انتظار میرود بهعنوان توابع بازنویسی شوند تا از این تصور غلط که مقدار ویژگی تغییرناپذیر است و نتیجه ذخیرهشده ثابتی دارد جلوگیری شود. محدودیت دیگری که اضافه شده است این است که انواع برگشتی مجموعه «تهیپذیر» دیگر در Room برای Kotlin CodeGen مجاز نیستند.
هشدار: ممکن است متوجه شوید که پروژههایتان هنگام استفاده از Kotlin CodeGen ازنظر تهیپذیری سختگیرانهتر هستند. در Kotlin CodeGen، تهیپذیری آرگومانهای نوع مهم است، درحالیکه در Java این موضوع عمدتاً نادیده گرفته میشود. برای مثال، فرض کنید نوع برگشتی `Flow<foo\>` دارید و جدول خالی است. در Java CodeGen، این کار باعث بروز هیچ مشکلی نمیشود، اما در Kotlin CodeGen، با خطا مواجه خواهید شد. برای جلوگیری از این اتفاق، باید از `Flow<foo?\>` استفاده کنید، با فرض اینکه null منتشر شده است. </foo?\></foo\>
تغییرات میانای برنامهسازی کاربردی
- محافظت دربرابر استفاده بیمعنی از مجموعههای تهیپذیر در انواع برگشتی روش DAO. (I777dc، b/253271782، b/259426907)
- میانای برنامهسازی کاربردی برای ایجاد «جریانی» که تغییرات ردیاب نامعتبرسازی را منتشر میکند اضافه کنید. این میانای برنامهسازی کاربردی برای ایجاد جریانهایی که باید به تغییرات پایگاه داده واکنش نشان دهند مفید است. (I8c790، b/252899305)
رفع اشکالها
- در کدساز Kotlin، ویژگیهای انتزاعی بهعنوان گیرندههای DAO یا پُرسمانهای DAO مجاز نیستند، درعوض باید بهعنوان تابع بازنویسی شوند تا از این تصور اشتباه که مقدار ویژگی تغییرناپذیر است و نتیجه ذخیرهشده ثابتی دارد جلوگیری شود. (If6a13، b/127483380، b/257967987)
نسخه ۲.۵.۲
نسخه ۲.۵.۲
۲۱ ژوئن ۲۰۲۳
androidx.room:room-*:2.5.2 منتشر شد. نسخه ۲.۵.۲ شامل این تعهدات است.
رفع اشکالها
- مشکل ناسازگاری با kotlinx-metadata-jvm را برطرف کنید. (386d5c)
- رفع مشکلی که باعث میشد Room هنگام استفاده در آزمایش Robolectric خطا نشان دهد. (f79bea، b/274924903)
نسخه ۲.۵.۱
نسخه ۲.۵.۱
۲۲ مارس ۲۰۲۳
androidx.room:room-*:2.5.1 منتشر شد. نسخه ۲.۵.۱ حاوی این تعهدات است.
رفع اشکالها
- اگر پایگاه داده ازقبل باز است، از بررسی کردن فهرست راهنمای والد پایگاه داده در
FrameworkSQLiteHelperخودداری کنید. (5de86b8) - هنگام بررسی اینکه پایگاه داده ازقبل باز است یا نه، از
isOpenInternalبررسی استفاده کنید. (e91fb35) - اکنون مدیریت بهتر مورد بازورودی در
acquireTransactionThread()ازRoomدردسترس است. (219f98b). درطول تراکنش تعلیق، Room از رشتهای از اجراکننده تراکنش استفاده میکند، حلقه رویدادی را در آن شروع میکند، و عملیات پایگاه داده تعلیق را به آن ارسال میکند تا همه آنها در روتین همزمان تراکنش کپسوله شوند. معمولاً انتظار میرود که رشته تراکنش با رشتهای که تراکنش را شروع میکند متفاوت باشد، اما در برخی موارد یکسان هستند. برای رسیدگی به چنین موارد بازورودی،withTransaction()بازسازی شده است تا دیگر به کار کنترل متکی نباشد و درعوض، بلوک تراکنش تعلیق را از درونrunBlockingدر رشته تراکنش اجرا کند.
نسخه ۲.۵.۰
نسخه ۲.۵.۰
۲۲ فوریه ۲۰۲۳
androidx.room:room-paging-guava:2.5.0، androidx.room:room-paging-rxjava2:2.5.0، و androidx.room:room-paging-rxjava3:2.5.0 منتشر شدهاند. نسخه ۲.۵.۰ حاوی این تعهدات است.
نسخه ۲.۵.۰
۱۱ ژانویه ۲۰۲۳
androidx.room:room-*:2.5.0 منتشر شد. نسخه ۲.۵.۰ حاوی این موارد است.
تغییرات مهم از نسخه ۲.۴.۰
- همه منابع
room-runtimeاز Java به Kotlin تبدیل شده است. توجه داشته باشید که اگر کدتان به زبان Kotlin باشد، ممکن است بهدلیل تبدیل کتابخانه به Kotlin با مشکلات ناسازگاری منبع مواجه شوید. برای مثال، تغییر ناسازگار منبع شناختهشده این است که درInvalidationTrackerاکنون بایدonInvalidate()را درObserverاعلام کنید تا پارامتری از نوعSetداشته باشید و نهMutableSet. علاوهبراین، برخیاز روشهای getter به داراییهایی تبدیل شدند که در فایلهای Kotlin به دستورگان دسترسی به دارایی نیاز دارند. اگر ناسازگاری قابلتوجهی وجود دارد، لطفاً گزارش اشکالی ثبت کنید. - یک گزارمان میانبر جدید،
@Upsert، اضافه شد که تلاش میکند وقتی تداخل یکتایی وجود ندارد نهادی را درج کند یا اگر تداخلی وجود دارد نهاد را بهروز کند. (I7aaab, b/241964353) - مصنوعات صفحهبندی اتاق جدید
room-paging-rxjava2،room-paging-rxjava3، وroom-paging-guavaبرای پشتیبانی در «صفحهبندی اتاق» اضافه شدهاند. - میاناهای برنامهسازی کاربردی برای ارائه نامهای جدول کلید و مقدار برای رفع ابهام در
@MapInfoاضافه شد (Icc4b5)
نسخه 2.5.0-rc01
۷ دسامبر ۲۰۲۲
androidx.room:room-*:2.5.0-rc01 منتشر شد. نسخه 2.5.0-rc01 حاوی این commitها است.
- این نسخهٔ پخش با
2.5.0-beta02یکسان است.
نسخه 2.5.0-beta02
۹ نوامبر ۲۰۲۲
androidx.room:room-*:2.5.0-beta02 منتشر شد. نسخه ۲.۵.۰-beta02 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- میاناهای برنامهسازی کاربردی مختلفی را که آرگومانهای پُرسمان را از ناوردا (
Array<Any?>) به ناهمسوساز (Array<out Any?>) میبرند اصلاح کنید تا با رفتار آرایه Java مطابقت داشته باشند. (b/253531073)
نسخه 2.5.0-beta01
۵ اکتبر ۲۰۲۲
androidx.room:room-*:2.5.0-beta01 منتشر شد. نسخه 2.5.0-beta01 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- حداقل نسخه پشتیبانیکننده
@Upsertرا به «میانای برنامهسازی کاربردی ۱۶» محدود کنید. این امر بهدلیل ناتوانی در شناسایی تعارض محدودیت کلید اصلی در «میاناهای برنامهسازی کاربردی» قدیمیتر است. (I5f67f، b/243039555)
رفع اشکالها
- رفع مشکلی که باعث میشد جدولهای سایه بهاشتباه به فایلهای طرحواره
.jsonصادر شوند و آنها را خراب کنند. (I4f83b, b/246751839)
نسخه 2.5.0-alpha03
۲۴ اوت ۲۰۲۲
androidx.room:room-*:2.5.0-alpha03 منتشر شد. نسخه 2.5.0-alpha03 حاوی این تعهدها است.
ویژگیهای جدید
- یک گزارمان میانبر جدید،
@Upsert، اضافه شد که تلاش میکند وقتی تداخل یکتایی وجود ندارد نهادی را درج کند یا اگر تداخلی وجود دارد نهاد را بهروز کند. (I7aaab, b/241964353)
رفع اشکالها
- Room اکنون درطول بررسی محدودیت کلید خارجی در انتقال خودکار،
SQLiteConstraintExceptionبهجایIllegalStateExceptionپرتاب خواهد کرد. (I328dd) - تغییر ناسازگار منبع Kotlin را برای دریافتکننده / داراییهای
getOpenHelper،getQueryExecutor، وgetTransactionExecutorاصلاح کنید. (Iad0ac)
نسخه 2.5.0-alpha02
۱ ژوئن ۲۰۲۲
androidx.room:room-*:2.5.0-alpha02 منتشر شد. نسخه ۲.۵.۰-alpha02 حاوی این تعهدات است.
ویژگیهای جدید
- مصنوعات جدید
room-pagingroom-paging-rxjava2،room-paging-rxjava3وroom-paging-guavaبرای پشتیبانی در Room Paging اضافه شدهاند.(41a1d4،b/203666906)،(eb6098،b/203666906)،(1b9ae4،b/203666906)
تغییرات میانای برنامهسازی کاربردی
- همه
room-runtimeاز Java به Kotlin تبدیل شده است. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)توجه: ممکن است بهدلیل تبدیل کتابخانه به Kotlin با مشکلات ناسازگاری منبع مواجه شوید. اگر کد شما در Kotlin بود و نسخه قدیمی Room را فراخوانی میکرد، نسخه جدید باید این موارد را مدیریت کند. برای مثال، تغییر ناسازگار منبع شناختهشده این است که در
InvalidationTrackerاکنون بایدonInvalidate()را درObserverاعلام کنید تا پارامتری از نوعSetداشته باشید و نهMutableSet. - میاناهای برنامهسازی کاربردی برای ارائه نامهای جدول کلید و مقدار برای ابهامزدایی در
@MapInfoاضافه شد (Icc4b5) - مشکل سازگاری منبع را برطرف کنید تا
@Ignoreدر واگیرهای دارایی دوباره مجاز شود. (Ifc2fb)
رفع اشکالها
- الگوریتم اکتشافی حلوفصل ستون تکراری. Room اکنون تلاش میکند ستونهای مبهم را در پُرسمان چندنقشهای حلوفصل کند. این کار باعث میشود JOIN با جدولهایی که حاوی جدولهای همنام هستند بهدرستی به هدف اصلی داده نتیجه نگاشت شود. (I4b444, b/201306012, b/212279118)
نسخه 2.5.0-alpha01
۲۳ فوریه ۲۰۲۲
androidx.room:room-*:2.5.0-alpha01 منتشر شد. نسخه 2.5.0-alpha01 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- مشکلی که باعث میشد استفاده از «اتاق»
@IntDefدر منابع Kotlin اعمال نشود برطرف شد. (I75f41، b/217951311) - مشکل سازگاری منبع برطرف شد تا
@Queryدوباره در گیرندههای ویژگی مجاز شود. (I0a09b) - room-common از جاوا به Kotlin تبدیل شد. (I69c48، b/206858235)
توجه: ممکن است با مشکلات ناسازگاری منبع مواجه شوید زیرا برخیاز داراییها درطول تبدیل کتابخانه به Kotlin به اشیای همراه منتقل شدهاند. اگر کد شما در Kotlin بود و نسخه قدیمی Room را فراخوانی میکرد، نسخه جدید هنگام دسترسی به این داراییها به پسوند «.Companion» نیاز دارد.
- اتاق-انتقال از جاوا به کاتلین تبدیل شد. (I2724b، b/206858622)
-
pagingفایل مرتبط درroom-runtimeاز جاوا به Kotlin تبدیل شد. (I82fc8, b/206859668) - «میانای برنامهسازی کاربردی» برای قفل و استفاده چندپردازشی در سطح FrameworkSQLite* اضافه شد تا از ایجاد پایگاه داده و انتقال داده چندپردازشی در اولینبار محافظت شود. (Ied267، b/193182592)
رفع اشکالها
- پشتیبانی از ویژگیهای داخلی در منابع Kotlin اضافه شد.
این تغییر جزئی در عملکرد Room است که در آن هنگام مطابقت دادن نام توابع با داراییها بهعنوان دریافتکننده/تنظیمکننده، از نام منبع توابع استفاده میکند (قبلاً از نام JVM تابع استفاده میکرد که برای توابع/داراییهای داخلی متفاوت است).
اگر از گزارمانهای سفارشی
@JvmNameبرای مطابقت دادن دریافتکنندهها/تنظیمکنندهها با داراییهای خصوصی استفاده میکنید، لطفاً کد تولیدشده را پساز بهروزرسانی دوبارهسنجی کنید (If6531، b/205289020)
نسخه ۲.۴.۳
نسخه ۲.۴.۳
۲۷ ژوئیه ۲۰۲۲
androidx.room:room-*:2.4.3 منتشر شد. نسخه ۲.۴.۳ حاوی این تعهدات است.
رفع اشکالها
- مشکلی که باعث میشد Room توابع تعلیق را در Kotlin 1.7 تشخیص ندهد برطرف شد (b/236612358)
نسخه ۲.۴.۲
نسخه ۲.۴.۲
۲۳ فوریه ۲۰۲۲
androidx.room:room-*:2.4.2 منتشر شد. نسخه ۲.۴.۲ حاوی این تعهدات است.
رفع اشکالها
- مشکل تولید کد برای تابع تعلیق Dao
@Transactionبا بدنه را برطرف کنید که بهدلیل ترجمه با-Xjvm-default=allیا معادل آن، روش رابط پیشفرضی را تولید میکند. (Ia4ce5) - رفع اشکالی که در آن «اتاق» برای روش پُرسمان نوع برگشتی
Array<ByteArray>کد تولید میکند. (If086e، b/213789489)
نسخه ۲.۴.۱
نسخه ۲.۴.۱
۱۲ ژانویه ۲۰۲۲
androidx.room:room-*:2.4.1 منتشر شد. نسخه ۲.۴.۱ حاوی این تعهدات است.
رفع اشکالها
- پشتیبانی از داراییهای داخلی در منابع Kotlin اضافه شد.
این تغییر جزئی در عملکرد Room است که در آن هنگام مطابقت دادن نام توابع با داراییها بهعنوان دریافتکننده/تنظیمکننده، از نام منبع توابع استفاده میکند (قبلاً از نام JVM تابع استفاده میکرد که برای توابع/داراییهای داخلی متفاوت است).
اگر از گزارمانهای سفارشی
@JvmNameبرای مطابقت دادن دریافتکنندهها/تنظیمکنندهها با داراییهای خصوصی استفاده میکنید، لطفاً کد تولیدشده را پساز بهروزرسانی دوبارهسنجی کنید (If6531، b/205289020)
نسخه ۲.۴.۰
نسخه ۲.۴.۰
۱۵ دسامبر ۲۰۲۱
androidx.room:room-*:2.4.0 منتشر شد. نسخه ۲.۴.۰ شامل این تعهدات است.
تغییرات مهم از نسخه ۲.۳.۰
- انتقالهای خودکار: اکنون Room میانای برنامهسازی کاربردیای برای تولید خودکار انتقالها ارائه میدهد، بهشرطی که طرحوارهها صادر شوند. برای اینکه به Room بگویید باید یک انتقال خودکار برای دارایی جدیدی تولید کند، از
@Database#autoMigrationsمیتوان برای اعلام نسخههایی که باید از آنها به نسخههای دیگر انتقال خودکار انجام شود استفاده کرد. وقتی «اتاق» به اطلاعات بیشتری درباره جدولها و تغییر نام یا حذف ستونها نیاز دارد، شرح@AutoMigrationمیتواند کلاس مشخصاتی حاوی چنین ورودیهایی را اعلام کند. برای جزئیات بیشتر، مستندات@AutoMigrationرا ببینید. - تزریق وابستگی در انتقالهای خودکار:
@ProvidedAutoMigrationSpecمیانای برنامهسازی کاربردی جدیدی برای اعلام اینکهAutoMigrationSpecدر زمان اجرا ازطریقRoomDatabase.Builder#addAutoMigrationSpec()ارائه خواهد شد. این کار به چارچوب تزریق وابستگی اجازه میدهد تا وقتی مشخصات وابستگی پیچیده نیاز باشد، چنین مشخصاتی را ارائه دهد. - پشتیبانی «یاریرسان آزمایش انتقال» برای انتقالهای خودکار:
MigrationTestHelper«اتاق» بهروزرسانی شد تا با ارائه میانای برنامهسازی کاربردی سازنده جدیدی که کلاس پایگاه داده تحت آزمایش را دریافت میکند، از انتقالهای خودکار پشتیبانی کند. این کار به دستیار اجازه میدهد تا درطولrunMigrationsAndValidate، مهاجرتهای خودکار را به همان روش بهطور خودکار اضافه کند. - پشتیبانی از صفحهبندی اتاق:
androidx.room:room-pagingمنتشر شد و پشتیبانی بومی از «صفحهبندی ۳.۰» را برای پُرسمانهای «اتاق» کهandroidx.paging.PagingSourceرا برمیگردانند ارائه میدهد. - روشهای پُرسمان رابطهای: Room اکنون از انواع برگشتی چندنقشهای
@Daoروش پشتیبانی میکند که برای دستورات JOIN مفید است. انواع چندنقشههای پشتیبانیشده عبارتاند ازMap،SparseArray،LongSparseArray، بههمراهImmutableMap،ImmutableSetMultimap، وImmutableListMultimapاز Guava.
نسخه 2.4.0-rc01
۱ دسامبر ۲۰۲۱
androidx.room:room-*:2.4.0-rc01 منتشر شد. نسخه 2.4.0-rc01 شامل این commit-ها است.
ویژگیهای جدید
- برای پشتیبانی از Kotlin 1.6، وابستگی Room به KSP را به
1.6.0-1.0.1بهروز کنید
نسخه ۲.۴.۰-بتا۰۲
۱۷ نوامبر ۲۰۲۱
androidx.room:room-*:2.4.0-beta02 منتشر شد. نسخه ۲.۴.۰-beta02 حاوی این تعهدات است.
ویژگیهای جدید
- از SparseArray و LongSparseArray در @MapInfo پشتیبانی اضافه کردهایم. (Ic91a2b/138910317)
رفع اشکالها
- تجزیهگر جدیدی به نام TypeConverter اضافه کردهایم که اطلاعات تهیپذیری در انواع را درنظر میگیرد. ازآنجاییکه این اطلاعات فقط در KSP دردسترس است، این ویژگی بهطور پیشفرض فقط در KSP روشن است. اگر مشکلی ایجاد کرد، میتوانید با ارسال room.useNullAwareTypeAnalysis=false به پردازنده گزارمان آن را خاموش کنید. اگر این اتفاق افتاد، لطفاً اشکالی را گزارش کنید زیرا این پرچم در آینده برداشته خواهد شد. با این تحلیلگر TypeConverter جدید، پیشنهاد میشود فقط TypeConverters دریافتکننده غیرتهی ارائه شود، زیرا تحلیلگر جدید میتواند آنها را با بررسی تهی بودن بپوشاند. توجه داشته باشید که این موضوع هیچ تأثیری بر کاربرانی که از KAPT یا Java بهعنوان پردازشگرهای گزارمان استفاده میکنند ندارد، زیرا (برخلاف KSP) اطلاعات تهیپذیری در انواع ندارند. (Ia88f9, b/193437407)
- رفع اشکالی که در آن «اتاق» هنگام کامپایل کردن با خطای SQL با شکست مواجه میشد، زمانی که نهاد FTS برای استفاده از ICU tokenizer اعلام میشد. (I00db9, b/201753224)
- مشکل مربوط به ستون جدید اضافهشده به «نهاد» جاسازیشده بین نسخهها در انتقالهای خودکار برطرف شد. (I5fcb1b/193798291)
- مشکلی را درباره انواع برگشتی روش پُرسمان رابطهای در پُرسمانهای LEFT JOIN حل کردیم. با این تغییرات، در مواردی که یک نگاشت یک به چند وجود دارد، مجموعه برگشتی برای یک کلید شامل شیء مقدار نامعتبر نخواهد بود اگر در مکاننما پیدا نشود. اگر مقدار معتبری پیدا نشود، کلید به مجموعه خالی نگاشت میشود. (Id5552b/201946438)
- مشکل انتقال خودکار که در آن کلیدواژههای SQLite در نام ستونها فرار نمیکردند حل شد. (Idbed4b/197133152)
نسخه 2.4.0-beta01
۱۳ اکتبر ۲۰۲۱
androidx.room:room-*:2.4.0-beta01 منتشر شد. نسخه ۲.۴.۰-beta01 حاوی این تعهدات است.
رفع اشکالها
- مشکلی برطرف شد که در آن، وقتی جدول دیگری در همان انتقال خودکار ستون جدیدی با همان نام داشت، انتقالهای خودکار ستونهای جدید را اضافه نمیکردند. (Ia5db5، b/200818663)
- پیادهسازی PagingSource که توسط صفحهبندی اتاق تولید شده است اکنون از
queryExecutorکه ازطریقRoomDatabase.Builderارسال شده است استفاده میکند، بنابراین میتواند بهجایDispatchers.IOقبلی ملغی شود. (Iae259)
نسخه 2.4.0-alpha05
۲۹ سپتامبر ۲۰۲۱
androidx.room:room-*:2.4.0-alpha05 منتشر شد. نسخه 2.4.0-alpha05 حاوی این تعهدات است.
ویژگیهای جدید
- تبدیلکننده نوع داخلی برای UUID اضافه شد. (I671e8، b/73132006)
تغییرات میانای برنامهسازی کاربردی
ویژگی جدیدی به حاشیهنویسی TypeConverters اضافه شد تا توسعهدهندگان بتوانند تبدیلکنندههای داخلی Enum و UUID را غیرفعال کنند. بهطور پیشفرض، این تبدیلکنندهها روشن هستند اما میتوانید آنها را برای یک حوزه خاص، یا برای کل پایگاه داده غیرفعال کنید. برای جزئیات بیشتر، به مستندات TypeConverters مراجعه کنید. (36ae9e، b/195413406)
پشتیبانی از کلیدها/مقادیر غیرPOJO برای انواع برگشتی «چندنگاشت» در «اشیا دسترسی به دادهها» ازطریق گزارمان
@MapInfo. (I4d704)
وقتی ستون کلید یا مقدار نقشه از یک ستون باشد، @MapInfo الزامی خواهد بود. برای مثال:
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- هنگام استفاده از Paging3 با Room،
room-pagingرا یک آرتیفکت الزامی کنید. (Ieaffe)
رفع اشکالها
- رفع مشکلی که در آن نتایج پُرسمانهای چندنگاشتی بهدرستی مرتب نمیشدند، وقتی پُرسمان حاوی عبارت ORDER BY برای ستونی از کلید نگاشت بود. (I6b887)
همیاری خارجی
- میانای برنامهسازی کاربردی جدیدی برای مشخص کردن ترتیب نمایه در @Index اضافه شد. با سپاس از Nikita Zhelonkin. (I033fc)
نسخه 2.4.0-alpha04
۲۱ ژوئیه ۲۰۲۱
androidx.room:room-*:2.4.0-alpha04 منتشر شد. نسخه 2.4.0-alpha04 حاوی این تعهدات است.
ویژگیهای جدید
Room اکنون از انواع برگشتی چندنقشهای
@Daoروش پشتیبانی میکند که برای دستورات JOIN مفید است. انواع پشتیبانیشده چندنگاشتها عبارتاند ازMapبههمراهImmutableMap،ImmutableSetMultimap، وImmutableListMultimapاز Guava.در زیر نمونههایی از پُرسمانهای چندنقشهای آورده شده است:
نقشه رابطه یکبهیک
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>نقشه رابطه یکبهچند (چندنقشهای استاندارد)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>نتیجه چندنقشهای را میتوان در انواع برگشتی غیرهمزمان پشتیبانیشده، مثل
LiveData،Observableاز Rx، یاFlowاز روتینهای همزمان نیز پیچید.
پیجینگ اتاق
androidx.room:room-pagingمنتشر شد و از «صفحهبندی ۳.۰» بومی برای پُرسمانهای «اتاق» کهandroidx.paging.PagingSourceرا برمیگردانند پشتیبانی میکند.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }این آرتیفکت جایگزین پیادهسازی
androidx.paging.PagingSourceتولیدشده توسط Room با پیادهسازی ساختهشده روی میاناهای برنامهسازی کاربردی Paging 3.0 میشود. پیادهسازی جدید PagingSource کلیدها را بهطور متفاوتی تجزیه میکند، بنابراین هر کلیدی که بهصورت دستی به PagingSource مربوط به Room ارائه میشود باید این تغییر رفتار را درنظر بگیرد، ازجمله initialKey که ازطریق سازنده Pager ارسال میشود. صفحهها ازKeyشروع به بار شدن میکنند وKeyاولین موردی است که بار میشود. این رفتار با رفتار موجود که در آنLoadParams.Refresh.Keyبهعنوان موقعیت پیمایش کاربر درنظر گرفته میشود و عناصر هم قبلاز کلید و هم بعداز آن بار میشوند متفاوت است.این آرتیفکت اختیاری است و درصورت انصراف دادن، به پشتیبانی موجود برای «صفحهبندی ۳.۰» که در «اتاق ۲.۳» معرفی شده است برمیگردد. بااینحال، این آرتیفکت در نسخه پخش آتی برای کسانی که از Room با Paging 3.0 استفاده میکنند، غیر اختیاری خواهد شد. برای موافقت کردن، عنصر جدید صفحهبندی اتاق را به مسیر کلاس خود اضافه کنید. اگر از Gradle استفاده میکنید، میتوانید تکهکد زیر را به build.gradle اضافه کنید:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
رفع اشکالها
- رفع مشکل در انتقالهای خودکار درخصوص مدیریت نقضهای کلید خارجی. (b/190113935)
نسخه 2.4.0-alpha03
۱۶ ژوئن ۲۰۲۱
androidx.room:room-*:2.4.0-alpha03 منتشر شد. نسخه ۲.۴.۰-alpha03 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
-
MigrationTestHelper«اتاق» را بهروز کنید تا با ارائه میانای برنامهسازی کاربردی سازنده جدیدی که کلاس پایگاه داده را تحت آزمایش دریافت میکند، از انتقال خودکار پشتیبانی کنید. این کار به دستیار اجازه میدهد تا درطولrunMigrationsAndValidate، مهاجرتهای خودکار را به همان روش بهطور خودکار اضافه کند.
رفع اشکالها
مشکلی در کتابخانه بومی SQLite مربوط به Room برای پشتیبانی از تراشههای M1 شرکت Apple برطرف شد. (b/174695268
مشکلی که در آن Room وقتی نوع پاسخ تابع Transaction @از نوع Flow بود خطا نمیداد برطرف شد (I56ddd، b/190075899)
رفع مشکل در انتقالهای خودکار مربوط به شاخصها. b/177673291
بهروزرسانیهای وابستگی
- پشتیبانی Room از KSP اکنون به KSP
1.5.10-1.0.0-beta01وابسته است. (1ecb11, b/160322705)
نسخه 2.4.0-alpha02
۵ مه ۲۰۲۱
androidx.room:room-*:2.4.0-alpha02 منتشر شد. نسخه ۲.۴.۰-alpha02 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
-
@ProvidedAutoMigrationSpecیک «میانای برنامهسازی کاربردی» جدید برای اعلام اینکهAutoMigrationSpecدر زمان اجرا ازطریقRoomDatabase.Builder#addAutoMigrationSpec()ارائه خواهد شد است. این کار به چارچوب تزریق وابستگی اجازه میدهد تا وقتی مشخصات وابستگی پیچیده نیاز باشد، چنین مشخصاتی را ارائه دهد.
رفع اشکالها
- رفع مشکلی در انتقالهای خودکار که در آن
@DatabaseViewبهدرستی بازآفرینی نمیشد.
همیاری خارجی
- مشکلی در
JournalMode.TRUNCATE«اتاق» برطرف شد که در آن گاهی اوقات برگشتInvalidationTrackerبهصورت نامعتبر، خیلی دیر، یا اصلاً فراخوانی میشد. با تشکر ازUli Bubenheimer | bubenheimer@users.noreply.github.com(b/154040286)
نسخه 2.4.0-alpha01
۲۱ آوریل ۲۰۲۱
androidx.room:room-*:2.4.0-alpha01 منتشر شد. نسخه ۲.۴.۰-alpha01 حاوی این تعهدات است.
ویژگیهای جدید
- انتقالهای خودکار: اکنون Room میانای برنامهسازی کاربردیای برای تولید خودکار انتقالها ارائه میدهد، بهشرطی که طرحوارهها صادر شوند. برای اینکه Room بداند باید انتقال خودکار ایجاد کند، میتوان از ویژگی جدید
@Database#autoMigrationsبرای اعلام نسخههایی که باید از آنها و به آنها انتقال خودکار انجام شود استفاده کرد. وقتی «اتاق» به اطلاعات بیشتری درباره جدولها و تغییر نام یا حذف ستونها نیاز دارد، شرح@AutoMigrationمیتواند کلاس مشخصاتی حاوی چنین ورودیهایی را اعلام کند. برای جزئیات بیشتر، مستندات@AutoMigrationرا ببینید.
رفع اشکالها
- مشکلی برطرف شد که در آن
defaultValueبا پرانتزهای اضافی بهطور نادرست توسط اعتبارسنجی طرحواره «اتاق» اعتبارسنجی میشد. b/182284899
نسخه ۲.۳.۰
نسخه ۲.۳.۰
۲۱ آوریل ۲۰۲۱
androidx.room:room-*:2.3.0 منتشر شد. نسخه ۲.۳.۰ شامل این تعهدات است.
تغییرات مهم از نسخه ۲.۲.۰
- پشتیبانی داخلی از Enum: اگر هیچ مبدل نوعی ارائه نشده باشد، Room اکنون بهطور پیشفرض از مبدل نوع Enum به String و بالعکس استفاده خواهد کرد. اگر تبدیلکننده نوعی برای شمارش ازقبل وجود داشته باشد، Room استفاده از آن را بر تبدیلکننده پیشفرض اولویت میدهد.
- بازخوانی پُرسمان: اکنون Room یک میانای برنامهسازی کاربردی بازخوانی عمومی RoomDatabase.QueryCallback برای زمانی که پُرسمانها درحال اجرا هستند ارائه میدهد که میتواند برای ثبت گزارش در ساختهای اشکالزدایی مفید باشد. میتوانید تماس برگشتی را ازطریق
RoomDatabase.Builder#setQueryCallback()تنظیم کنید. - بهبود پیشبستهبندی: Room اکنون دارای میاناهای برنامهسازی کاربردی برای ایجاد پایگاه داده بااستفاده از پایگاه داده پیشبستهبندیشده خواندهشده از جریان ورودی است. این کار برای مواردی مثل زمانی که پایگاه داده پیشبسته با gzip فشرده شده است امکانپذیر است.
- تبدیلکنندههای نوع ارائهشده: اکنون Room دارای «میاناهای برنامهسازی کاربردی» برای ارائه نمونههای تبدیلکنندههای نوع است تا برنامه بتواند مقداردهی اولیه آنها را کنترل کند. برای علامتگذاری مبدل نوعی که به Room ارائه میشود، از گزارمان جدید @ProvidedTypeConverter استفاده کنید.
- پشتیبانی از RxJava3: Room اکنون از انواع RxJava3 پشتیبانی میکند. مشابه RxJava2، میتوانید روشهای DAO را که نوع پاسخ آنها Flowable، Single، Maybe، و Completable است اعلام کنید. علاوهبراین، خروجی ساختاریافته جدیدی بهنام
androidx.room:room-rxjava3برای پشتیبانی از RxJava3 دردسترس است. - پشتیبانی از Paging 3.0: Room اکنون از تولید پیادهسازیها برای روشهای حاشیهنویسیشده
@Queryکه نوع پاسخ آنهاandroidx.paging.PagingSourceاست پشتیبانی میکند.
نسخه 2.3.0-rc01
۲۴ مارس ۲۰۲۱
androidx.room:room-*:2.3.0-rc01 منتشر شد. نسخه 2.3.0-rc01 حاوی این تعهدات است.
رفع اشکالها
- رفع مشکلی که مانع از مصرف پُرسمانهای Coroutine Flow ایجادشده توسط Room در بلوک
withTransactionتعلیق میشد. (I797bf)
نسخه 2.3.0-beta03
۱۰ مارس ۲۰۲۱
androidx.room:room-*:2.3.0-beta03 منتشر شد. نسخه 2.3.0-beta03 شامل این commit-ها است.
ویژگیهای جدید
- پشتیبانی از کامپایل افزایشی برای KSP اضافه شد. (I031c1، b/176453350)
رفع اشکالها
- اشکالی که در آن ایجاد PagingSource در رشته اصلی میتوانست باعث خطای ANR شود برطرف شد. (I42b74، b/181221318)
- رؤیتپذیری
@ExperimentalRoomApiرا بهجای خصوصی بسته به عمومی تغییر داد. (b/181356119)
همیاری خارجی
- به «اتاق» اجازه میدهد نوع برگشتی POJO را در روش DAO با شرح
@Queryبپذیرد، وقتی که با@SkipQueryVerificationنیز شرحگذاری شده باشد. Room تلاش میکند نتیجه پُرسمان را به نوع برگشتی POJO تبدیل کند، همانطور که برای روش DAO با شرح@RawQueryانجام میشود. با تشکر از «Markus Riegel | hey@marcorei.com». (I45acb)
نسخه 2.3.0-beta02
۱۸ فوریه ۲۰۲۱
androidx.room:room-*:2.3.0-beta02 منتشر شد. نسخه ۲.۳.۰-beta02 حاوی این تعهدات است.
ویژگیهای جدید
Room اکنون از «پردازش نماد Kotlin» KSP پشتیبانی آزمایشی میکند.
KSP جایگزینی برای KAPT است تا پردازشگرهای گزارمان را بهصورت بومی در کامپایلر Kotlin اجرا کند و زمان ساخت را بهطور قابلتوجهی کاهش دهد.
برای استفاده از Room با KSP، میتوانید افزایه KSP Gradle را اعمال کنید و پیکربندی
kaptرا در فایل ساخت باkspجایگزین کنید. برای مثال، بهجایkapt 'androidx.room:room-compiler:2.3.0-beta02'ازksp 'androidx.room:room-compiler:2.3.0-beta02'استفاده کنید. برای جزئیات بیشتر، مستندات KSP را ببینید.توجه داشته باشید که ازآنجاییکه KSP آزمایشی است، توصیه میشود همچنان از KAPT برای کد تولید استفاده کنید. کاهش زمان ساخت فقط درصورتی قابلاعمال است که پردازشگر دیگری از KAPT استفاده نکند. برای مشکلات شناختهشده، به b/160322705 مراجعه کنید.
نسخه 2.3.0-beta01
۲۷ ژانویه ۲۰۲۱
androidx.room:room-*:2.3.0-beta01 منتشر شد. نسخه ۲.۳.۰-beta01 حاوی این تعهدات است.
ویژگیهای جدید
- پایگاههای داده قابلبستهشدن خودکار: Room اکنون این قابلیت را دارد که پایگاههای دادهای را که پساز مدت زمان مشخصی به آنها دسترسی نشده است ببندد. این ویژگی آزمایشی است و با فراخوانی
RoomDatabase.Builder#setAutoCloseTimeout()میتوان آن را فعال کرد. این ویژگی برای برنامههایی که چندین پایگاه داده دارند مفید است.
رفع اشکالها
- مشکلی برطرف شد که در آن روشهای Dao با چند روش
@Updateیا@Deleteبا استراتژیهای تداخل متفاوت، کدی را فقط با یکی از استراتژیها تولید میکردند و عملاً استراتژی تعریفشده را نادیده میگرفتند. (/I0b90d، b/176138543)
نسخه 2.3.0-alpha04
۱۶ دسامبر ۲۰۲۰
androidx.room:room-*:2.3.0-alpha04 منتشر شد. نسخه 2.3.0-alpha04 شامل این ارسالها است.
ویژگیهای جدید
- Room اکنون یک callback API عمومی
RoomDatabase.QueryCallbackارائه میدهد، برای زمانی که پُرسمانها درحال اجرا هستند، که میتواند برای ورود به سیستم در ساختهای اشکالزدایی مفید باشد. میتوانید تماس برگشتی را ازطریقRoomDatabase.Builder#setQueryCallback()تنظیم کنید. (Iaa513، b/174478034، b/74877608) - اگر تبدیلکننده نوعی ارائه نشده باشد، Room اکنون بهطور پیشفرض از تبدیلکننده نوع «Enum به رشته» و برعکس استفاده میکند. اگر تبدیلکننده نوعی برای شمارش ازقبل وجود داشته باشد، Room استفاده از آن را بر تبدیلکننده پیشفرض اولویت میدهد. (b/73132006)
مشکل شناختهشده
- اگر تبدیلکننده نوع یکطرفهای برای خواندن ازقبل برای Enum وجود داشته باشد، ممکن است Room بهطور تصادفی از تبدیلکننده داخلی «رشته به Enum» استفاده کند که ممکن است مطلوب نباشد. این یک مشکل شناختهشده است و با تبدیل آن به یک تبدیلکننده دوطرفه قابلحل است. ببینید: b/175707691
رفع اشکالها
- مشکلی که در آن Room پردازش گزارمان افزایشی را در نسخههای جدیدتر JDK بهاشتباه غیرفعال میکرد برطرف شد. (b/171387388)
- رفع مشکلی که باعث میشد Room کلاس تولیدشده را هنگام استفاده از چندین بارکننده کلاس پیدا نکند. از شما برای اصلاح «Serendipity | 892449346@qq.com» سپاسگزاریم! (b/170141113)
- مشکلی که باعث میشد Room وقتی Kotlin
@Daoکلاس پایهای داشت که انواع عمومی آن در JVM اولیه بودند کد نادرست تولید کند برطرف شد. (b/160258066)
همیاری خارجی
- اگر حالت WAL فعال باشد و API برابر با ۱۶ یا بیشتر باشد، اتاق اکنون بهطور پیشفرض از
beginTransactionNonExclusiveاستفاده خواهد کرد. با تشکر از «احمد ا. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
نسخه 2.3.0-alpha03
۱۴ اکتبر ۲۰۲۰
androidx.room:room-*:2.3.0-alpha03 منتشر شد. نسخه ۲.۳.۰-alpha03 شامل این تعهدها است.
ویژگیهای جدید
Room اکنون APIهایی برای ارائه نمونههای مبدل نوع دارد تا برنامه بتواند مقداردهی اولیه آنها را کنترل کند. برای علامتگذاری مبدل نوعی که به Room ارائه خواهد شد، از حاشیهنویسی جدید
@ProvidedTypeConverterاستفاده کنید. با سپاس از «mzgreen yairobbe@gmail.com». (Ie4fa5، b/121067210)اکنون Room دارای میاناهای برنامهسازی کاربردی برای ایجاد پایگاه داده بااستفاده از پایگاه داده ازپیش بستهبندیشده است که از جریان ورودی خوانده میشود. این کار امکان مواردی مثل زمانی که پایگاه داده پیشبسته فشردهسازی شده است را فراهم میکند. با تشکر از «Ahmed El-Helw ahmedre@gmail.com» (3e6792، b/146911060)
تغییرات میانای برنامهسازی کاربردی
هدف ازدسترفته به گزارمان
@ForeignKeyاضافه شد و از استفاده آن در خارج از گزارمان@Entityجلوگیری شد. (Iced1e)فیلد
mCallbacksدرRoomDatabase.javaاکنون پنهان است. (d576cb، b/76109329)
رفع اشکالها
مستندات TypeConverters را بهروز کنید تا مشخص شود که TypeConverters فقط برای تبدیل ستونها / فیلدها استفاده میشود و نه ردیفها. (I07c56، b/77307836)
برای رفع خطای کامپایلر در Dao با نوع فوقالعاده عمومی با «نوعهای اولیه» Kotlin، به DaoProcessor بهروزرسانی کنید. (Ice6bb، b/160258066)
Update add/remove observer methods documentation to clarify threading (Ifd1d9, b/153948821)
رفع مشکل Room درستیسنجی نادرست جدولهای FTS که ستون rowid را اعلام کردهاند. (d62ebc، b/145858914)
همیاریهای خارجی
رفع مشکلات حروف بزرگ/کوچک محلی مربوط به ترکی (5746e3)، b/68159494
برای جلوگیری از بروز مشکل در Android Lollipop،
ConcurrentHashMapدرونRoomDatabaseرا باCollections.synchronizedMap()جایگزین کنید (d1cfc7، b/162431855)افزودن callback (فراخوانی برگشتی) onOpenPrepackagedDatabase برای زمانی که DB ازپیش بستهبندیشده کپی میشود. (I1ba74، b/148934423)
نسخه 2.3.0-alpha02
۲۲ ژوئیه ۲۰۲۰
androidx.room:room-*:2.3.0-alpha02 منتشر شد. نسخه 2.3.0-alpha02 حاوی این تعهدها است.
ویژگیهای جدید
- پشتیبانی RxJava3: اکنون Room از انواع RxJava3 پشتیبانی میکند. مشابه RxJava2، میتوانید روشهای DAO را که نوع پاسخ آنها Flowable، Single، Maybe، و Completable است اعلام کنید. علاوهبراین، خروجی ساختاریافته جدیدی بهنام
androidx.room:room-rxjava3برای پشتیبانی از RxJava3 دردسترس است. (b/152427884)
تغییرات میانای برنامهسازی کاربردی
- اکنون اعلام
@TypeConverterدر کلاس Kotlin Object پشتیبانی میشود. (b/151110764) - گزینه پردازش افزایشی حاشیهنویسی
Roomاکنون بهطور پیشفرض روشن است. (b/112110217)
نسخه 2.3.0-alpha01
۱۰ ژوئن ۲۰۲۰ (۲۱ خرداد ۱۳۹۹)
androidx.room:room-*:2.3.0-alpha01 منتشر شد. نسخه 2.3.0-alpha01 حاوی این تعهدها است.
ویژگیهای جدید
پشتیبانی از صفحهبندی ۳.۰: Room اکنون از تولید پیادهسازی برای
@Queryروشهای حاشیهنویسیشدهای که نوع برگشتی آنهاandroidx.paging.PagingSourceاست پشتیبانی میکند.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
تغییرات میانای برنامهسازی کاربردی
-
@RewriteQueriesToDropUnusedColumnsیک گزارمان جدید و راحت است که باعث میشود Room پیشبینی «*» را در پُرسمان بازنویسی کند تا ستونهای استفادهنشده در نتیجه برداشته شوند. - گزینه پردازنده
room.expandProjectionاکنون منسوخ شده است. از@RewriteQueriesToDropUnusedColumnsبهعنوان جایگزین پُرسمانهای بهینهسازی اتاق با پیشبینیهای ستارهای استفاده کنید. توجه داشته باشید که@RewriteQueriesToDropUnusedColumnsجایگزین راهحل تداخل ستونroom.expandProjectionکه دررابطهبا انواع پاسخ حاوی فیلدهای@Embeddedارائه شده است نمیشود.
رفع اشکالها
- اشکالی را برطرف کردیم که در آن Room نسخه JDK استفادهشده برای فعال کردن پردازشگر گزارمان افزایشی را بهدرستی شناسایی نمیکرد. با تشکر از Blaz Solar (me@blaz.solar) (b/155215201)
- Room اکنون وابستگی ANTLR خود را با پردازشگر شرح جاسازی میکند تا از تعارض نسخه با پردازشگرهای دیگری که از ANTLR استفاده میکنند جلوگیری کند. (b/150106190)
نسخه ۲.۲.۶
نسخه ۲.۲.۶
۱۶ دسامبر ۲۰۲۰
androidx.room:room-*:2.2.6 منتشر شد. نسخه ۲.۲.۶ حاوی این تعهدات است.
رفع اشکالها
- مشکلی برطرف شد که در آن «اتاق» پردازش حاشیهنویسی افزایشی را در نسخههای جدیدتر JDK بهاشتباه غیرفعال میکرد. (b/171387388)
نسخه ۲.۲.۵
نسخه ۲.۲.۵
۱۸ مارس ۲۰۲۰
androidx.room:room-*:2.2.5 منتشر شد. نسخه ۲.۲.۵ حاوی این تعهدات است.
رفع اشکالها
-
MultiInstanceInvalidationServiceرا directBootAware کنید. با سپاس از «Mygod contact-git@mygod.be» (b/148240967) - رفع اشکالی که باعث میشد وقتی باطل کردن چند نمونه فعال بود و پایگاه داده حاوی نهاد FTS بود، برنامه ازکار بیفتد. (b/148969394)
- مشکلی هنگام بار کردن کتابخانههای بومی SQLite در پردازشگر گزارمان Room برطرف شد که باعث میشد کامپایلر بهدلیل کامپایلهای موازی ازکار بیفتد. (b/146217083)
نسخه ۲.۲.۴
نسخه ۲.۲.۴
۱۹ فوریه ۲۰۲۰
androidx.room:room-common:2.2.4، androidx.room:room-compiler:2.2.4، androidx.room:room-guava:2.2.4، androidx.room:room-ktx:2.2.4، androidx.room:room-migration:2.2.4، androidx.room:room-runtime:2.2.4، androidx.room:room-rxjava2:2.2.4، و androidx.room:room-testing:2.2.4 منتشر میشوند. نسخه ۲.۲.۴ حاوی این تعهدات است.
رفع اشکالها
- مشکل مربوط به تعلیق تراکنشها برطرف شد که در آن اگر روال همزمان بهسرعت قبلاز شروع واقعی تراکنش لغو میشد، تراکنشها به بنبست میرسیدند. (b/148181325)
- مشکل استفاده نادرست از @Generated هنگام ساخت با JDK 9 برطرف شد. (b/146538330)
- مشکلی که باعث میشد Room هنگام وجود تابع واقعی در میانای DAO در Kotlin کد نادرست تولید کند برطرف شد. (b/146825845)
نسخه ۲.۲.۳
نسخه ۲.۲.۳
۱۸ دسامبر ۲۰۱۹
androidx.room:room-*:2.2.3 منتشر شد. نسخه ۲.۲.۳ حاوی این ثبتها است.
رفع اشکالها
- اشکالی برطرف شد که در آن «اتاق» نمیتوانست پایگاه دادهای را که هیچ انتقالی را پشت سر نگذاشته بود و در طرحوارهاش دربردارنده درهمسازی قدیمی با نمایهها بود اعتبارسنجی کند. (b/139306173)
نسخه ۲.۲.۲
نسخه ۲.۲.۲
۲۰ نوامبر ۲۰۱۹
androidx.room:room-*:2.2.2 منتشر شد. نسخه ۲.۲.۲ حاوی این ثبتها است.
رفع اشکالها
- اشکالی برطرف شد که در آن جمعآوری رابطه یکبهیک با بیشاز ۹۹۹ ردیف باعث میشد Room موارد مرتبط تهی برگرداند. (b/143105450)
نسخه ۲.۲.۱
نسخه ۲.۲.۱
۲۳ اکتبر ۲۰۱۹
androidx.room:room-*:2.2.1 منتشر شد. نسخه ۲.۲.۱ شامل این تعهدات است.
رفع اشکالها
- اشکالی که در آن Room بهاشتباه درباره
CURSOR_MISMATCHبا گزینه کامپایلرexpandProjectionروشن هشدار میداد برطرف شد. (b/140759491) - مکانیزم تکرار مجددی برای رسیدگی به کتابخانه بومی مفقودشده که برای درستیسنجی پرسمانها در زمان ترجمه استفاده میشود اضافه شد.
نسخه ۲.۲.۰
نسخه ۲.۲.۰
۹ اکتبر ۲۰۱۹
androidx.room:room-*:2.2.0 منتشر شد. نسخه ۲.۲.۰ شامل این تعهدات است.
تغییرات مهم از نسخه ۲.۱.۰
- پایگاه داده ازپیش بستهبندیشده: دو میانای برنامهسازی کاربردی جدید در
RoomDatabase.Builderاکنون برای ایجادRoomDatabaseبااستفاده از فایل پایگاه داده ازپیش تکمیلشده دردسترس است.createFromAsset()برای زمانی است که فایل پایگاه داده ازپیش تکمیلشده در پوشه داراییهای APK باشد، درحالیکهcreateFromFile()برای زمانی است که فایل در مکان دلخواهی باشد. استفاده از این API رفتار انتقالهای مخرب را تغییر میدهد بهطوریکه درطول انتقال برگشتی، Room سعی میکند پایگاه داده ازپیش تکمیلشده را درصورت دردسترس بودن دوباره کپی کند، درغیراینصورت به حذف و بازایجاد همه جدولها برمیگردد. b/62185732 - مقادیر پیشفرض طرحواره:
@ColumnInfoاکنون ویژگی جدیدdefaultValueرا دارد که میتوان از آن برای مشخص کردن مقدار پیشفرض ستون استفاده کرد. مقادیر پیشفرض بخشی از طرح پایگاه داده هستند و درصورت مشخص شدن، درطول انتقال اعتبارسنجی خواهند شد. b/64088772 - روابط چند به چند:
@Relationاکنون دارایی جدیدی بهنامassociateByدارد که یک گزارمان جدید@Junctionرا میپذیرد و برای اعلام رابطهای استفاده میشود که باید ازطریق جدول اتصال (که بهعنوان جدول پیوند نیز شناخته میشود) برآورده شود. b/69201917 - روابط یکبهیک: محدودیت در فیلدهای POJO که با
@Relationحاشیهنویسی شدهاند تا از نوعListیاSetباشند برداشته شده است، که بهطور مؤثری اجازه میدهد روابط تکمقداری نمایش داده شوند. b/62905145 - نهاد هدف: اکنون دستورات حاشیهنویسی DAO
@Insert،@Update، و@Deleteدارای خصوصیت جدیدیtargetEntityاست که امکان میدهد جدول هدفی را که روش DAO برای عملکرد در آن درنظر گرفته شده است مشخص کنید. این امر باعث میشود پارامترهای آن روشهای DAO به POJOهای اختیاری تبدیل شوند که بهعنوان نهادهای جزئی تفسیر میشوند. در عمل، این امکان درج، حذف، و بهروزرسانی جزئی را فراهم میکند. b/127549506 - Coroutines Flow:
@Queryروشهای DAO اکنون میتوانند از نوع پاسخFlow<T>باشند. اگر جدولهای مشاهدهشده در پُرسمان نامعتبر شوند، Flow برگشتی مجموعه جدیدی از مقادیر را دوباره منتشر خواهد کرد. اعلام تابع DAO با نوع برگشتیChannel<T>خطا است، Room درعوض شما را تشویق میکند ازFlowاستفاده کنید و سپس از توابع همسایه برای تبدیلFlowبهChannelاستفاده کنید. b/130428884 - پردازشگر حاشیهنویسی افزایشی Gradle: اکنون Room یک پردازشگر حاشیهنویسی مجزای Gradle است و قابلیت افزایشی را میتوان ازطریق گزینه پردازشگر
room.incrementalفعال کرد. برای اطلاعات بیشتر، گزینههای گردآورنده اتاق را ببینید. اگر با مشکلی مواجه شدید، لطفاً اینجا اشکال را ثبت کنید. قصد داریم در نسخه پایدار آینده، افزایشی بودن را بهطور پیشفرض فعال کنیم. b/112110217 - گسترش پیشبینیها: گزینه جدیدی برای کامپایلر آزمایشی
room.expandProjectionاضافه شده است که باعث میشود Room پُرسمان را با پیشبینی ستارهای بازنویسی کند تا فقط شامل ستونهای نوع برگشتی POJO باشد. برای مثال، برای روش DAO با@Query("SELECT * FROM Song")که POJO بهنامSongIdAndTitleرا با تنها دو فیلد برمیگرداند. سپس Room پُرسمان را بهSELECT id, title FROM Songبازنویسی میکند بهطوریکه حداقل مجموعه ستونها برای برآورده کردن نوع برگشتی واکشی شود. این کار اساساًCURSOR_MISMATCHهشداری را که وقتی پُرسمان ستونهای اضافی برمیگرداند که با هیچ فیلدی در نوع POJO برگشتی مطابقت ندارد حذف میکند.
نسخه 2.2.0-rc01
۵ سپتامبر ۲۰۱۹
androidx.room:room:2.2.0-rc01 منتشر شد. تغییرات گنجاندهشده در این نسخه را میتوانید در اینجا ببینید.
از زمان «اتاق 2.2.0-beta01» هیچ تغییر عمومیای وجود ندارد.
نسخه 2.2.0-beta01
۲۲ اوت ۲۰۱۹
androidx.room:room-*:2.2.0-beta01 منتشر شد. تغییرات گنجاندهشده در این نسخه را میتوانید در اینجا ببینید.
رفع اشکالها
- اشکالی برطرف شد که در آن پُرسمان Coroutine Flow پساز مدت زمان مشخصی بازگسیل مقادیر جدید را متوقف میکرد. (b/139175786)
- اشکالی برطرف شد که در آن «اتاق» کد درهمسازی طرحواره قدیمی را هنگام باز کردن پایگاه دادهای که از زمان «اتاق» نسخه ۱.۰ انتقال نیافته بود نمیپذیرفت و باعث ازکارافتادن زمان اجرا بهدلیل نامعتبر بودن طرحواره میشد. (b/139306173)
نسخه 2.2.0-alpha02
۷ اوت ۲۰۱۹
androidx.room:room-*:2.2.0-alpha02 منتشر شد. ثبتهای موجود در این نسخه را میتوانید در اینجا ببینید.
ویژگیهای جدید
- جریان روتینهای همکار:
@Queryروشهای «شیء دسترسی به دادهها» اکنون میتوانند از نوع برگشتیFlow<T>باشند. اگر جدولهای مشاهده در پُرسمان نامعتبر شوند، Flow برگرداندهشده مجموعه جدیدی از مقادیر را دوباره منتشر خواهد کرد. اعلام تابع DAO با نوع برگشتیChannel<T>خطا است، Room درعوض شما را تشویق میکند ازFlowاستفاده کنید و سپس از توابع همسایه برای تبدیلFlowبهChannelاستفاده کنید. b/130428884 - گسترش پیشبینیها: گزینه کامپایلر آزمایشی جدیدی
room.expandProjectionاضافه شد که باعث میشود Room پُرسمان را با پیشبینی ستاره بازنویسی کند تا فقط ستونهای موجود در نوع پاسخ POJO را دربرگیرد. برای مثال، برای روش DAO با@Query("SELECT * FROM Song")که POJO بهنامSongIdAndTitleرا با تنها دو فیلد برمیگرداند. سپس Room پُرسمان را بهSELECT id, title FROM Songبازنویسی میکند بهطوریکه حداقل مجموعه ستونها برای برآورده کردن نوع برگشتی واکشی شود. این کار اساساً هشدارCURSOR_MISMATCHرا که وقتی پُرسمان ستونهای اضافیای را برمیگرداند که با هیچ فیلدی در نوع POJO برگشتی مطابقت ندارد ارائه میشود حذف میکند. onDestructiveMigrateیک callback API جدید است که بهRoomDatabase.Callbackاضافه شده است برای زمانی که Room یک پایگاه داده را بهصورت مخرب منتقل میکند. b/79962330
رفع اشکالها
- اشکالی که در آن Room بااستفاده از روشی بهعنوان تنظیمکننده فیلد، کد نادرستی تولید میکرد، درصورتیکه فیلد محافظتشده بود، برطرف شد. b/136194628
- اشکالی که باعث میشد وقتی ابطال چندنمونهای فعال بود و «خدمات ابطال» متوقف میشد، InvalidationTracker در فرایند دوم NPE ایجاد کند رفع شد. b/137454915
- اشکالی برطرف شد که در آن Room نوع برگشتی تابع تعلیق بهارثرسیده را که با
@RawQueryحاشیهنویسی شده بود بهدرستی شناسایی نمیکرد. b/137878827 - کد تولیدشده برای
@Relationبهروزرسانی شد تا وقتی کلید مربوطه از نوع BLOB است، ازByteBufferقابلمقایسه استفاده شود. b/137881998 - اشکالی برطرف شد که در آن Room درباره فقدان تنظیمکنندهها در POJOهایی که بهعنوان
پارامترهای نهاد جزئی
@Insert،@Update، و@Deleteاستفاده میشد شکایت میکرد. b/138664463 - اشکالی رفع شد که در آن، وقتی کلاس نهاد در روشهای خاص «شیء دسترسی به داده» استفاده میشد، Room درباره نبودن دریافتکننده و تنظیمکننده برای ستون نادیده گرفتهشده ازطریق
@Entityشکایت میکرد. b/138238182 - اشکالی برطرف شد که در آن «اتاق» آرگومانهای پیوند نامگذاریشده را بهدرستی به آرگومانهای جایگاهی تبدیل نمیکرد و باعث استثنای زمان اجرا هنگام اجرای پُرسمان با پارامترهای استفادهشده مجدد میشد. b/137254857
نسخه 2.2.0-alpha01
۱۰ ژوئیه ۲۰۱۹
ویژگیهای جدید
- پایگاه داده ازپیش بستهبندیشده: دو میانای برنامهسازی کاربردی جدید در
RoomDatabase.Builderاکنون برای ایجادRoomDatabaseبااستفاده از فایل پایگاه داده ازپیش تکمیلشده دردسترس است.createFromAsset()برای زمانی است که فایل پایگاه داده ازپیش تکمیلشده در پوشه داراییهای APK باشد، درحالیکهcreateFromFile()برای زمانی است که فایل در مکان دلخواهی باشد. The usages of these API change the behaviour of destructive migrations such that during a fallback migration, Room will try to re-copy the pre-populated database if available, otherwise it fallbacks to just dropping and re-creating all tables. b/62185732 - مقادیر پیشفرض طرحواره:
@ColumnInfoاکنون ویژگی جدیدdefaultValueرا دارد که میتوان از آن برای مشخص کردن مقدار پیشفرض ستون استفاده کرد. مقادیر پیشفرض بخشی از طرحواره پایگاه داده است و درطول انتقالها درصورت مشخص شدن اعتبارسنجی خواهد شد. b/64088772توجه: اگر طرحواره پایگاه دادهتان ازقبل مقادیر پیشفرض دارد، مثل مقادیری که ازطریق
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT zاضافه شدهاند، و تصمیم میگیرید مقادیر پیشفرض را ازطریق@ColumnInfoبه همان ستونها تعریف کنید، ممکن است لازم باشد برای اعتبارسنجی مقادیر پیشفرض غیرقابل توضیح، انتقال ارائه دهید. برای اطلاعات بیشتر، انتقالهای اتاق را ببینید. - روابط چند به چند:
@Relationاکنون دارایی جدیدی بهنامassociateByدارد که یک گزارمان جدید@Junctionرا میپذیرد و برای اعلام رابطهای استفاده میشود که باید ازطریق جدول اتصال (که بهعنوان جدول پیوند نیز شناخته میشود) برآورده شود. b/69201917 - روابط یکبهیک: محدودیت در فیلدهای POJO که با
@Relationحاشیهنویسی شدهاند برای اینکه از نوعListیاSetباشند برداشته شده است، درواقع به روابط تکمقداری اجازه میدهد نمایش داده شوند. b/62905145 - نهاد هدف: دستورات حاشیهنویسی DAO
@Insert،@Update، و@Deleteاکنون دارای خصوصیت جدیدی بهنامtargetEntityاست که امکان میدهد جدول هدفی را که روش DAO برای عملکرد در آن درنظر گرفته شده است مشخص کنید. این امر اجازه میدهد پارامترهای آن روشهای DAO بهصورت POJO دلخواه باشند که بهعنوان موجودیتهای جزئی تفسیر خواهند شد. در عمل، این امکان درج، حذف، و بهروزرسانی جزئی را فراهم میکند. b/127549506 - پردازشگر حاشیهنویسی افزایشی Gradle: اکنون Room یک پردازشگر حاشیهنویسی مجزای Gradle است و قابلیت افزایشی را میتوان ازطریق گزینه پردازشگر
room.incrementalفعال کرد. برای اطلاعات بیشتر، گزینههای گردآورنده اتاق را ببینید. اگر با مشکلی مواجه شدید، لطفاً اینجا اشکال را ثبت کنید. قصد داریم در نسخه پایدار آینده، افزایشی بودن را بهطور پیشفرض فعال کنیم. b/112110217
رفع اشکالها
- وقتی جاریسازی Rx پُرسمانی قبلاز تکمیل پُرسمان ازبین رفته باشد، اتاق دیگر
EmptySetResultExceptionرا به مدیر خطای سراسری منتشر نخواهد کرد. b/130257475 - اشکالی که در آن Room پیام خطای نادرستی را هنگام تعلیق نشان میداد
تابع DAO با حاشیهنویسی
@RawQueryنوع پاسخ نداشت. b/134303897 - اتاق دیگر آداپتورهای DAO را با انواع خام تولید نخواهد کرد. b/135747255
نسخه ۲.۱.۰
نسخه ۲.۱.۰
۱۳ ژوئن ۲۰۱۹
اتاق ۲.۱.۰ بدون هیچ تغییری از 2.1.0-rc01 منتشر شده است. تعهدات موجود در نسخه را میتوانید در اینجا ببینید.
تغییرات مهم از نسخه ۲.۰.۰
- FTS: اکنون «اتاق» از نهادهای دارای جدول
FTS3 یا FTS4 پشتیبانی میکند. اکنون میتوان کلاسهای حاشیهنویسیشده با
@Entityرا با@Fts3یا@Fts4نیز حاشیهنویسی کرد تا کلاسی با جدول جستجوی تماممتن نگاشت اعلام شود. گزینههای FTS برای سفارشیسازی بیشتر ازطریق روشهای گزارمان دردسترس است. - نماها: Room اکنون از اعلام کلاس بهعنوان پُرسمان ذخیرهشده، که با نام
نما نیز شناخته میشود، بااستفاده از
حاشیهنویسی
@DatabaseViewپشتیبانی میکند. - روالهای همزمان: روشهای DAO اکنون میتوانند توابع تعلیق باشند. برای بهرهمندی از این عملکرد،
room-ktxرا در وابستگیهایتان بگنجانید. آرتیفکت ktx همچنین تابع افزونهRoomDatabase.withTransactionرا برای انجام تراکنشهای پایگاه داده در یک روال همزمان ارائه میدهد. - مقدار خودکار: Room اکنون از تعریف
AutoValue
کلاسهای حاشیهگذاریشده بهعنوان نهاد و POJO پشتیبانی میکند. حاشیهنویسیهای Room
@PrimaryKey،@ColumnInfo،@Embedded، و@Relationاکنون میتوانند در روشهای انتزاعی کلاس حاشیهنویسیشده با مقدار خودکار اعلام شوند. توجه داشته باشید که این گزارمانها باید با@CopyAnnotationsهمراه باشند تا Room آنها را بهدرستی درک کند. - پشتیبانی ناهمزمان اضافی: روشهای «شیء دسترسی به دادهها» که با
@Insert،@Deleteیا@Updateحاشیهگذاری شدهاند، بههمراه@QueryحاویINSERT،DELETEیاUPDATEعبارتها، اکنون از انواع برگشتی RxCompletable،Single،Maybe، و نوع برگشتی GuavaListenableFutureپشتیبانی میکنند و همچنین میتوانند توابع تعلیق باشند. -
enableMultiInstanceInvalidationیک میانای برنامهنویسی کاربردی جدید درRoomDatabase.Builderاست که بااستفاده از فایل پایگاه داده یکسان، باطل کردن را در چندین نمونه از RoomDatabase فعال میکند. -
fallbackToDestructiveMigrationOnDowngradeیک «میانای برنامهسازی کاربردی» جدید درRoomDatabase.Builderاست که درصورت تنزل نسخه، پایگاه داده را بهطور خودکار بازسازی میکند. -
ignoredColumnsیک API جدید در حاشیهنویسی@Entityاست که میتوان از آن برای فهرست کردن فیلدهای نادیدهگرفتهشده براساس نام استفاده کرد. - Room اکنون بهدرستی از سازنده اصلی Kotlin در کلاسهای داده استفاده میکند
و دیگر نیازی به تعریف ویژگیها بهعنوان
varsنیست.
نسخه 2.1.0-rc01
۲۹ مه ۲۰۱۹
رفع اشکالها
- خطای مقداردهی اولیه «اتاق» که ممکن است بهدلیل پیکربندی temp_store ازقبل راهاندازیشده رخ دهد برطرف شد. b/132602198
- هشدار استفاده از نقلقول دوتایی برای کاربران دارای SQLite 3.27.0 و بالاتر برطرف شد. b/131712640
- رفع اشکالی که در آن، وقتی چندین بررسی نامعتبرسازی بهصورت موازی انجام میشد، InvalidationTracker باعث ازکارافتادن برنامه میشد. b/133457594
نسخه 2.1.0-beta01
۷ مه ۲۰۱۹
androidx.room 2.1.0-beta01 بدون هیچ تغییری از نسخه 2.1.0-alpha07 منتشر شده است. ثبتهای موجود در این نسخه را میتوانید در اینجا ببینید.
نسخه 2.1.0-alpha07
۲۵ آوریل ۲۰۱۹
تغییرات میانای برنامهسازی کاربردی / رفتار
- تابع افزونه
RoomDatabase.withTransactionتغییر کرده است و دیگر بلوک تابع باCoroutineScopeرا بهعنوان گیرنده نمیپذیرد. این کار از رد شدن از بستهبندیcoroutineScope { }اضافی موردنیاز برای اجرای همزمان موارد در بلوک تراکنش جلوگیری میکند.
رفع اشکالها
- اشکالی برطرف شد که در آن Room نمیتوانست TypeConverter را برای تابع Kotlin DAO حاوی پارامتر نوع Collection مطابقت دهد. b/122066791
نسخه 2.1.0-alpha06
۲۲ مارس ۲۰۱۹
میانای برنامهسازی کاربردی / تغییرات رفتار
- پُرسمانهای تراکنش غیرهمزمان اکنون بهترتیب اجرا میشوند تا Room از
بیشاز یک رشته برای اجرای تراکنشهای پایگاه داده استفاده نکند.
RoomDatabase.Builder.setTransactionExecutor(Executor)اضافه شد تا امکان پیکربندی مجری برای استفاده در تراکنشها فراهم شود. -
RoomDatabase.runInTransaction(Callable)دیگر استثناهای بررسیشده را در RuntimeExceptions نمیپوشاند. b/128623748
رفع اشکالها
- اشکالی برطرف شد که در آن ردیاب نامعتبرسازی اگر ناظران هم برای جدول محتوا و هم برای جدول محتوای خارجی FTS اضافه میشدند، نظارت بر جدول محتوا را متوقف میکرد. b/128508917
- دستور زبان
RoomSQLite بهروزرسانی شد تا با SQLite 3.24.0 مطابقت داشته باشد. b/110883668
نسخه 2.1.0-alpha05
۱۳ مارس ۲۰۱۹
ویژگیهای جدید
- تابع افزونه
RoomDatabase.withTransactionبه شما امکان میدهد تراکنشهای پایگاه داده را بهطور ایمن در یک روال همکار انجام دهید. عملکردهای افزونه اتاق همراه با پشتیبانی از روالهای همکار در مصنوعهroom-ktxدردسترس است. - روشهای غیرانتزاعی «شیء دسترسی به دادهها» که با
@Transactionحاشیهنویسی شدهاند اکنون میتوانند توابع تعلیق باشند. b/120241587
تغییرات میانای برنامهسازی کاربردی / رفتار
- نام محصول
room-coroutinesبهroom-ktxتغییر کرده است و از همان نامگذاری سایر محصولات androidx پیروی میکند. -
beginTransaction،setTransactionSuccessful، وendTransactionدرRoomDatabaseبهنفعrunInTransactionو تابع افزونهroom-ktxwithTransactionمنسوخ شده است.
رفع اشکالها
- اشکالی برطرف شد که در آن اگر از تجزیهکننده SIMPLE استفاده میشد، آرگومانهای تجزیهکننده حذف میشد. b/125427014
- اشکالی برطرف شد که در آن «اتاق» نمیتوانست توابع تعلیقکننده را با پارامترهایی که نوع آنها کلاس داخلی بود بهدرستی شناسایی کند. b/123767877
- اشکالی برطرف شد که در آن روش DAO
@Queryبهتعویقافتاده با عبارتهایINSERT،UPDATE، یاDELETEبا اشتیاق پُرسمان را در رشته اصلی آماده میکرد. b/123695593 - اشکالات مختلفی که در آنها Room کد نادرستی برای برخیاز توابع تعلیق تولید میکرد برطرف شد. b/123466702 و b/123457323
- اشکالی که در آن استفاده منسوخشده از روشها بهدرستی در کد تولیدشده سرکوب نمیشد برطرف شد. b/117602586
- وابستگی «اتاق» androidx.sqlite به نسخه 1.0.2 بهروزرسانی شد که حاوی اصلاحاتی برای مدیریت صحیح پایگاههای داده خراب است. b/124476912
مشکلات شناختهشده
- Room 2.1.0-alpha05 به عنصر
kotlinx-metadata-jvmوابسته است که درحالحاضر در Maven Central دردسترس نیست (KT-27991). با افزودنmaven { url "https://kotlin.bintray.com/kotlinx/" }به مخزنهای پروژه میتوانید این وابستگی را حل کنید.
نسخه 2.1.0-alpha04
۲۵ ژانویه ۲۰۱۹
ویژگیهای جدید
- روشهای DAO حاشیهنویسیشده با
@QueryحاویINSERT،UPDATE، یاDELETEبیانیه اکنون میتوانند انواع ناهمزمانSingle،Mayble،Completable، وListenableFutureرا برگردانند. علاوهبراین، میتوانند تابعهای تعلیق هم باشند. b/120227284
میانای برنامهسازی کاربردی / تغییرات رفتار
- اگر روش غیرانتزاعی «شیء دسترسی به داده» که با
@Transactionحاشیهگذاری شده است نوع ناهمزمان مثلSingle،Mayble،Completable،LiveData، یاListenableFutureبرگرداند، Room اکنون خطا میدهد. ازآنجاییکه تراکنشها به رشته محدود میشوند، درحالحاضر «اتاق» نمیتواند تراکنشی را در اطراف تابعی که ممکن است در رشتههای مختلف پُرسمان انجام دهد شروع و تمام کند. b/120109336 -
OnConflictStrategy.FAILوOnConflictStrategy.ROLLBACK@Deprecatedشدهاند زیرا با پیوندهای SQLite کنونی Android عملکرد موردانتظار را ندارند. b/117266738
رفع اشکالها
- اشکالی که در آن Room بهدرستی از TypeConverter نوع پاسخ استفاده نمیکرد، اگر روش DAO یک تابع تعلیق بود، برطرف شد. b/122988159
- اشکالی که در آن «اتاق» توابع تعلیق ارثی را بهاشتباه بهعنوان غیرتعلیقی شناسایی میکرد برطرف شد. b/122902595
- اشکالی برطرف شد که در آن Room وقتی فیلد
@Embeddedدر کلاس والد بود و در چند کلاس فرزند استفاده میشد، کد نادرست تولید میکرد. b/121099048 - رفع مشکلی که باعث میشد پایگاه داده هنگام فراخوانی توابع تعلیق DAO بین
beginTransaction()وendTransaction()قفل شود. b/120854786
نسخه 2.1.0-alpha03
۴ دسامبر ۲۰۱۸
تغییرات میانای برنامهسازی کاربردی
- FTS
tokenizerدر@Fts3/@Fts4اکنون بهجای «شمارشی» از «رشته» استفاده میکند. این کار به Room اجازه میدهد از واحدسازهای سفارشی استفاده کند. نشانهگذارهای داخلی همچنان درFtsOptionsبهعنوان ثابتهای رشتهای تعریف میشوند. b/119234881
ویژگیهای جدید
- روالهای همزمان: روشهای DAO اکنون میتوانند توابع تعلیق باشند. برای پشتیبانی از توابع تعلیق در «اتاق»، محصول جدیدی منتشر شده است،
room-coroutines. b/69474692 - روشهای DAO که با
@Insert،@Delete، یا@Updateحاشیهنویسی شدهاند اکنون ازListenableFutureبهعنوان نوع پاسخ پشتیبانی میکنند. b/119418331
رفع اشکالها
- اشکالی برطرف شد که در آن Room بهاشتباه تلاش میکرد سازندهای با ستونها در ویژگی
ignoredColumnsاز@Entityپیدا کند. b/119830714 - اشکالی برطرف شد که در آن «اتاق» پارامترهای روش DAO را در پیادهسازی تولیدشدهشان بهعنوان نهایی علامتگذاری نمیکرد. b/118015483
- اشکالی برطرف شد که در آن پردازنده
Roomهنگام گزارش خطا در پُرسمانی با نمادهای ویژه ازکار میافتاد. b/119520136 - اشکالی برطرف شد که در آن «اتاق» پیادهسازیهای مختلف دیگر
Collectionرا بهعنوان آرگومانهای عبارتINرد میکرد. b/119884035 - اشکالی رفع شد که در آن LiveData برگشتی از Room وقتی برای همیشه مشاهده میشد، جمعآوری زباله میشد و دیگر دادههای جدید منتشر نمیکرد. b/74477406
- قفل بسته
RoomDatabaseبرای کاهش درگیری بر سر قفل بهروز شد. b/117900450
نسخه 2.1.0-alpha02
۳۰ اکتبر ۲۰۱۸
ویژگیهای جدید
- پشتیبانی از ارجاع به
@DatabaseViewدر@Relationاضافه شد. b/117680932
رفع اشکالها
- اشکالی برطرف شد که در آن Room هنگام مشترک شدن و حذف کردن از نوع برگشتی Rx، عملیات ورودی/خروجی دیسک را در رشته اصلی انجام میداد. b/117201279
- اشکالی برطرف شد که در آن «اتاق» نمیتوانست تبدیلکننده نوع مناسبی برای فیلدی در کلاس موجودیت Kotlin پیدا کند. b/111404868
- اشکالی برطرف شد که در آن Room برای پیادهسازی رابط
DAOحاوی روش پیشفرض Kotlin که هیچ آرگومانی ندارد کد نادرست تولید میکرد. b/117527454 - تجزیهگر دستور زبان SQLite
Roomبهروزرسانی شد و مشکل عملکردی که باعث طولانی شدن زمان ساخت میشد برطرف شد. b/117401230
نسخه 2.1.0-alpha01
۸ اکتبر ۲۰۱۸
ویژگیهای جدید
- FTS: اکنون Room از نهادهایی با جدول FTS3 یا FTS4 پشتیبانی میکند. اکنون میتوان کلاسهای حاشیهنویسیشده با
@Entityرا با@Fts3یا@Fts4نیز حاشیهنویسی کرد تا کلاسی با جدول جستجوی تماممتن نگاشت اعلام شود. گزینههای FTS برای سفارشیسازی بیشتر ازطریق روشهای گزارمان دردسترس است. b/62356416 - نماها: اکنون Room از تعریف کلاس بهعنوان پُرسمان ذخیرهشده، که بااستفاده از گزارمان @DatabaseView بهعنوان نما نیز شناخته میشود، پشتیبانی میکند. b/67033276
- مقدار خودکار: اکنون Room از تعریف کلاسهای حاشیهگذاریشده AutoValue بهعنوان نهاد و POJO پشتیبانی میکند. اکنون میتوان شرحهای «اتاق»
@PrimaryKey،@ColumnInfo،@Embedded، و@Relationرا در روشهای انتزاعی کلاس شرحدار مقدار خودکار اعلام کرد. توجه داشته باشید که این گزارمانها باید با@CopyAnnotationsهمراه باشند تا «اتاق» آنها را بهدرستی درک کند. b/62408420 - پشتیبانی از انواع برگشتی Rx اضافی: روشهای «اشیاء دسترسی به دادهها» (DAO) که با
@Insert،@Delete، یا@Updateحاشیهنویسی شدهاند اکنون از انواع برگشتی RxCompletable،Single<T>، وMaybe<T>پشتیبانی میکنند. b/63317956 - انواع تغییرناپذیر با
@Relation: قبلاً Room برای تنظیم شدن@Relationفیلد حاشیهنویسیشده الزامی بود اما اکنون میتوانند پارامترهای سازنده باشند. enableMultiInstanceInvalidation: یک API جدید درRoomDatabase.Builderاست که بااستفاده از فایل پایگاه داده یکسان، باطل کردن را در چندین نمونه از RoomDatabase فعال میکند. This multi-instance invalidation mechanism also works across multiple processes. b/62334005-
fallbackToDestructiveMigrationOnDowngrade: میانای برنامهسازی کاربردی جدیدی درRoomDatabase.Builderاست که درصورت تنزل نسخه، پایگاه داده را بهطور خودکار بازسازی میکند. b/110416954 ignoredColumns: یک میانای برنامهسازی کاربردی جدید در حاشیهنویسی@Entityاست که میتوان از آن برای فهرست کردن فیلدهای نادیدهگرفتهشده براساس نام استفاده کرد. برای نادیده گرفتن فیلدهای بهارثرسیده در یک نهاد مفید است. b/63522075
میانای برنامهسازی کاربردی / تغییرات رفتار
-
mCallbackوmDatabaseدرRoomDatabaseاکنون@Deprecatedهستند و در نسخه اصلی بعدی Room برداشته خواهند شد. b/76109329
رفع اشکالها
- دو مشکل برطرف شد که در آنها Room نمیتوانست از پایگاه داده خراب یا انتقال بد درطول مقداردهی اولیه بهدرستی بازیابی کند. b/111504749 و b/111519144
- اکنون Room بهدرستی از سازنده اصلی Kotlin در کلاسهای داده استفاده میکند و نیاز به اعلام فیلدها بهعنوان
varsرا برطرف میکند. b/105769985
نسخه ۲.۰.۰
نسخه ۲.۰.۰
۱ اکتبر ۲۰۱۸
androidx.room 2.0.0 بدون هیچ تغییری نسبتبه نسخه 2.0.0-rc01 منتشر شده است.
نسخه 2.0.0-rc01
۲۰ سپتامبر ۲۰۱۸
androidx.room 2.0.0-rc01 بدون هیچ تغییری نسبت به نسخه 2.0.0-beta01 منتشر شده است.
نسخه 2.0.0-beta01
۲ ژوئیه ۲۰۱۸
میانای برنامهسازی کاربردی / تغییرات رفتار
-
RoomDatabase.Builder.setQueryExecutor()اضافه شد تا سفارشیسازی محل اجرای پُرسمانها مجاز شود - پشتیبانی از RxJava2
Observableاضافه شد - پیادهسازیهای «شیء دسترسی به داده» و «پایگاه داده» تولیدشده اکنون نهایی است
رفع اشکالها
- نام کلاس/فیلد را در خطای «نمیتوانم دریافتکننده فیلد را پیدا کنم» مشخص کنید b/73334503
- سازگاری با نسخه قدیمی RoomOpenHelper با نسخههای قدیمیتر Room اصلاح شد b/110197391
وابستگیهای پیشاز AndroidX
برای نسخههای پیشاز AndroidX در Room، این وابستگیها را اضافه کنید:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
نسخه ۱.۱.۱
نسخه ۱.۱.۱
۱۹ ژوئن ۲۰۱۸
اتاق 1.1.1 با اتاق 1.1.1-rc1 یکسان است.
نسخه 1.1.1-rc1
۱۶ مه ۲۰۱۸
اگر از انتقال استفاده میکنید،
بهشدت توصیه میکنیم بهجای 1.1.0 از «اتاق 1.1.1-rc1» استفاده کنید.
اشکالی برطرف شد که باعث میشد Room مقداردهی اولیه پساز انتقال را بهدرستی انجام ندهد b/79362399
نسخه ۱.۱.۰
نسخه ۱.۱.۰-beta3
۱۹ آوریل ۲۰۱۸
رفع اشکالها
- رفع خطای کامپایل وقتی Kotlin POJO به نهاد رابطهای که در Java تعریف شده است ارجاع میدهد b/78199923
نسخه 1.1.0-beta2
۵ آوریل ۲۰۱۸
رفع اشکالها
اشکال بحرانی در پیادهسازیهای
RoomRxSingleوMaybeبرطرف شد که در آن پرسش پیشاز موعد بازیافت میشد و درصورت افزودن بیشاز ۱ ناظر به نمونههایSingleیاMaybeبرگشتی، مشکلاتی ایجاد میکرد. b/76031240اگر [RoomDatabase.clearAllTables][ref-clearAllTables] در تراکنشی فراخوانی شود، پایگاه داده را
VACUUMنمیکند. b/77235565
نسخه ۱.۱.۰-beta1
۲۱ مارس ۲۰۱۸
تغییرات میانای برنامهسازی کاربردی
- براساس بازخورد «بازبینی میانای برنامهسازی کاربردی»،
@RawQueryدیگر ارسالStringرا بهعنوان پارامتر پُرسمان نمیپذیرد. باید از [SupportSQLiteQuery][ref-SupportSQLiteQuery] استفاده کنید. (برای ایجاد آسان نمونهای از [SupportSQLiteQuery][ref-SupportSQLiteQuery] با پشتیبانی از آرگومان، [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] را ببینید). - روش [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] در RoomDatabase.Builder اکنون بهجای
vararg Integer،vararg intرا میپذیرد.
رفع اشکالها
- [RoomDatabase.clearAllTables][ref-clearAllTables] اکنون با تنظیم کردن نقطه بازرسی WAL و
VACUUMکردن پایگاه داده سعی میکند فضا را به سیستمعامل برگرداند. - [
@RawQuery][ref-RawQuery] اکنون هر Pojo را برای داراییobservedEntitiesمیپذیرد، بهشرطی که Pojo ازطریق فیلدهایEmbeddedیاRelationبه یک یا چند نهاد ارجاع دهد. b/74041772 - صفحهبندی: پیادهسازی «منبع داده» اتاق اکنون وابستگیهای چند جدولی (مثل روابط و پیوندها) را بهدرستی مدیریت میکند. قبلاً این موارد نمیتوانست نتایج جدید را راهاندازی کند یا ممکن بود کامپایل نشود. b/74128314
نسخه 1.1.0-alpha1
۲۲ ژانویه ۲۰۱۸
ویژگیهای جدید
RawQuery: این API جدید به روشهای@Daoاجازه میدهد SQL را بهعنوان پارامتر پُرسمان دریافت کنند b/62103290، b/71458963-
fallBackToDestructiveMigrationsFrom: این API جدید درRoomDatabase.Builderامکان کنترل دقیقتری را بر نسخههای طرحوارهای که از آنها به نسخههای مخرب اجازه انتقال داده میشود فراهم میکند (در مقایسه با fallbackToDestructiveMigration) b/64989640 - Room اکنون فقط از میاناهای برنامهسازی کاربردی صفحهبندی جدیدتر (alpha-4+) پشتیبانی میکند و پشتیبانی از
LivePagedListProviderمنسوخشده را متوقف کرده است. برای استفاده از نسخه آلفای جدید Room، باید از صفحهبندیalpha-4یا بالاتر استفاده کنید و اگر قبلاً این کار را نکردهاید، ازLivePagedListProviderبهLivePagedListBuilderبروید.
رفع اشکالها
- پشتیبانی بهبودیافته برای انواع Kotlin Kapt. b/69164099
- ترتیب فیلدها دیگر طرحواره را نامعتبر نمیکند. b/64290754