اتاق

کتابخانه پایداری Room یک لایه انتزاعی روی SQLite ارائه می‌دهد تا دسترسی به پایگاه داده را قوی‌تر کند و درعین‌حال از قدرت کامل SQLite بهره ببرد.
جدیدترین به‌روزرسانی نسخه پایدار نامزد انتشار انتشار نسخه بتا نسخه آلفا
‫۹ سپتامبر ۲۰۲۶ ۲.۸.۵ - - -

اعلام وابستگی‌ها

برای افزودن وابستگی به 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 توابع @Transaction DAO را با متغیرهای نوع ازدست بدهد. (a8365d، b/251316420)
  • با اجتناب از پرش‌های رشته‌ای که همان رفتار مسدودسازی را مانند میاناهای برنامه‌سازی کاربردی SupportSQLiteDatabase حفظ می‌کنند، عملکرد Room’s SupportSQLite Wrapper را بهبود بخشیدیم. (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 شامل این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • درحال برداشتن @RequiresApi(21) گزارمان منسوخ (Ic4792، I9103b)

رفع اشکال‌ها

  • رفع شرایط رقابتی که در آن 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_timeout in the initial database connection that would lead to SQLException: Error code: 5, message: database is locked issues (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 ByteArrayWrapper class to support Relations with ByteBuffer in 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() می‌شوند. استراتژی جدید به‌صورت زیر است:

  1. شیء expect را که RoomDatabaseConstructor را پیاده‌سازی می‌کند تعریف کنید

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. پیوند دادن شیء با اظهارنامه @Database بااستفاده از @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. ایجاد نمونه پایگاه داده جدید بدون ارسال آرگومان کارخانه

      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(). برای کسب اطلاعات بیشتر درباره SQLite Driver 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-ها است.

ویژگی‌های جدید

  • اکنون از انواع برگشتی «نقشه تودرتو» در توابع DAO در Room پشتیبانی می‌شود. (I13f48،‏ 203008711)

تغییرات میانای برنامه‌سازی کاربردی

  • یک نوع جدید از گزارمان به‌نام @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-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 حاوی این تعهدات است.

ویژگی‌های جدید

تغییرات میانای برنامه‌سازی کاربردی

  • ویژگی جدیدی به حاشیه‌نویسی 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 عبارت‌ها، اکنون از انواع برگشتی Rx Completable، Single، Maybe، و نوع برگشتی Guava ListenableFuture پشتیبانی می‌کنند و همچنین می‌توانند توابع تعلیق باشند.
  • ‫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
  • دستور زبان Room SQLite به‌روزرسانی شد تا با 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-ktx‏ withTransaction منسوخ شده است.

رفع اشکال‌ها

  • اشکالی برطرف شد که در آن اگر از تجزیه‌کننده 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 حاشیه‌نویسی شده‌اند اکنون از انواع برگشتی Rx Completable، 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

۵ آوریل ۲۰۱۸

رفع اشکال‌ها

  • اشکال بحرانی در پیاده‌سازی‌های Room Rx Single و 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