Room
آخر تعديل | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار التجريبي الأول |
---|---|---|---|---|
30 تشرين الأول (أكتوبر) 2024 | 2.6.1 | - | - | 2.7.0-alpha11 |
الإعلان عن التبعيات
لإضافة عنصر تبعية إلى Room، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
تشمل التبعيات لـ Room اختبار عمليات نقل البيانات في Room و Room RxJava.
أضِف التبعيات للعناصر التي تحتاج إليها في ملف build.gradle
ل
تطبيقك أو وحدتك:
Kotlin
dependencies { val room_version = "2.6.1" 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.6.1" 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 (أي وحدات Gradle بلغة Java أو Kotlin فقط)، يمكنك الاعتماد على androidx.room:room-common
لاستخدام التعليقات التوضيحية للغرف.
تكوين خيارات برنامج التحويل البرمجي
تتوفّر لـ Room خيارات معالج التعليقات التوضيحية التالية.
room.schemaLocation |
directory
يتيح تصدير مخطّطات قاعدة البيانات إلى ملفات JSON في الدليل المحدّد. اطّلِع على عمليات نقل الغرف للحصول على مزيد من المعلومات. |
room.incremental |
boolean
تفعيل معالج التعليقات التوضيحية المتزايدة في Gradle القيمة التلقائية هي true .
|
room.generateKotlin |
boolean
يمكنك إنشاء ملفات مصدر Kotlin بدلاً من Java. يتطلب KSP. القيمة التلقائية هي false .
اطّلِع على ملاحظات الإصدار 2.6.0 لمزيد من التفاصيل.
|
استخدام المكوّن الإضافي لنظام Gradle للغرفة
باستخدام الإصدار 2.6.0 من Room والإصدارات الأحدث، يمكنك استخدام "مكوّن إضافي لـ Gradle" في Room لمحاولة ضبط خيارات لأداة تجميع Room. يهيئ المكون الإضافي المشروع بحيث يتم بشكل صحيح تهيئة المخططات التي تم إنشاؤها (وهي ناتج مهام التجميع ويتم استخدامها لعمليات الترحيل التلقائية) بحيث تحتوي على بُنى قابلة لإعادة الإنتاج وقابلة للتخزين المؤقت.
لإضافة المكوّن الإضافي، حدِّد المكوّن الإضافي وإصداره في ملف إصدار Gradle ذي المستوى الأعلى.
رائع
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
في ملف تصميم Gradle على مستوى الوحدة، طبِّق المكوِّن الإضافي واستخدِم الامتداد room
.
رائع
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
يلزم ضبط schemaDirectory
عند استخدام المكوّن الإضافي لنظام Gradle للغرفة. سيؤدي ذلك
إلى ضبط مُجمِّع Room ومهام الترجمة المختلفة وعمليات الترجمة المتقدّمة
(javac وKAPT وKSP) لإخراج ملفات المخططات في المجلدات المخصّصة، على سبيل المثال
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. يجب إرسال هذه الملفات
إلى المستودع لاستخدامها في عمليات التحقّق من الصحة والنقل التلقائي.
لا يمكن ضبط بعض الخيارات في جميع إصدارات "مكوّن Room Gradle الإضافي"،
حتى إذا كانت متوافقة مع مُجمِّع Room. يسرد الجدول أدناه كل خيار ويعرض إصدار "مكوّن إضافي لـ Gradle" في Room الذي أضاف إمكانية ضبط هذا الخيار باستخدام إضافة room
. إذا كان الإصدار أقدم أو إذا لم يكن الخيار متاحًا بعد، يمكنك بدلاً من ذلك استخدام خيارات معالج التعليقات التوضيحية.
Option | منذ الإصدار |
---|---|
room.schemaLocation (مطلوب) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
استخدام خيارات معالج التعليقات التوضيحية
إذا لم تكن تستخدِم المكوِّن الإضافي Room Gradle، أو إذا كان الخيار الذي تريده غير متوافق مع إصدار المكوِّن الإضافي، يمكنك ضبط 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... ] } } } }
Kotlin
// 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 من معرفة هذا الدليل عند إجراء عمليات التحقّق من التحديثات.
يعرض الخيار نقل بيانات الغرف
تنفيذًا كاملاً لـ CommandLineArgumentsProvider
يوفّر
موقع المخطط.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.
اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.
الإصدار 2.7
الإصدار 2.7.0-alpha11
30 تشرين الأول (أكتوبر) 2024
تم طرح androidx.room:room-*:2.7.0-alpha11
. يتضمّن الإصدار 2.7.0-alpha11 عمليات الربط هذه.
تغييرات واجهة برمجة التطبيقات
- راجِع توقيع طريقة
convertRows()
المُضافة حديثًا ليكون وظيفة تعليق تتلقّىRawRoomQuery
لفهرسة الغرف. (Ie57b5، b/369136627)
إصلاح الأخطاء
- تم إصلاح المشكلة المتعلقة بتقسيم الصفحة إلى صفحات في الغرف حيث كان يتم إنشاء رمز غير صالح عند استخدام
@Relation
بالاقتران معPagingSource
.
الإصدار 2.7.0-alpha10
16 أكتوبر 2024
تم إصدار androidx.room:room-*:2.7.0-alpha10
. يتضمّن الإصدار 2.7.0-alpha10 هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- إنشاء فئة
ByteArrayWrapper
داخلية لدعم العلاقات مع "ByteBuffer
" على الأنظمة الأساسية التي لا تعمل على Android وخارجها (I75543، b/367205685) - أضِف
SQLiteStatement.getColumnType()
مع الثوابت المختلفة للنتائجSQLITE_DATA_*
لتفعيل استرداد نوع البيانات لعمود معيّن. (I1985c، b/369636251)
الإصدار 2.7.0-alpha09
2 أكتوبر 2024
تم إصدار 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
18 سبتمبر 2024
تم إصدار androidx.room:room-*:2.7.0-alpha08
. يتضمّن الإصدار 2.7.0-alpha08 عمليات الربط هذه.
الميزات الجديدة
- تم نقل عناصر
room-paging
لتكون متوافقة مع KMP. (Ib8756، b/339934824) - تم نشر واجهة برمجة التطبيقات
invalidationTrackerFlow()
كواجهة برمجة تطبيقات للطرف الأول باسمInvalidationTracker.createFlow()
، وهي متوفّرة الآن لمجموعات المصادر التي لا تعمل بنظام التشغيل Android في مشاريع KMP. (I1fbfa، (I8fb29)، b/329291639، b/329315924)
التغييرات في واجهة برمجة التطبيقات
- تمت إزالة أو استبدال جميع التحذيرات ورسائل الخطأ في الغرفة التي تستخدم الكلمة
Cursor
، وذلك لأنّCursor
لم يعُد مصطلحًا عامًا دقيقًا يمكن استخدامه في إصدار KMP من الغرفة. (Id8cd9، b/334087492)
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تحاول من خلالها في الغرفة KMP إصدار رموز باستخدام
UUID
للأنظمة الأساسية بخلاف JVM. (b/362994709) - تم إصلاح مشكلة في مكوّن Room Gradle الإضافي كانت تؤدي إلى ظهور خطأ مثل "لا يمكن تغيير سمات الإعدادات … بعد قفلها للتغيير" عند استخدامه في مشروع KMP مع Compose Multiplatform. (b/343408758)
الإصدار 2.7.0-alpha07
21 آب (أغسطس) 2024
تم إصدار androidx.room:room-*:2.7.0-alpha07
. يتضمّن الإصدار 2.7.0-alpha07 عمليات الربط هذه.
الميزات الجديدة
- سيضيف "المكوّن الإضافي لنظام Gradle المتوافق مع الغرفة" الآن تلقائيًا المخططات التي تم تصديرها إلى مصادر موارد "اختبار قياس حالة أجهزة Android" حتى يمكن استخدامها من خلال "
MigrationTestHelper
".
إصلاح الأخطاء
- تم إصلاح مشكلة في القيمة "الفعلية" التي تم إنشاؤها للدالة
RoomDatabaseConstructor
والتي لا تتضمّن المُعدِّل "الفعلية" في الدالةinitialize
إذا تم إلغاء هذه الدالة أيضًا في بيان "التوقّع". (359631627) - تم إصلاح مشكلة عدم تطابق القيمة "الفعلية" التي تم إنشاؤها للعنصر
RoomDatabaseConstructor
مع مستوى ظهور العنصر "توقّع". (358138953)
الإصدار 2.7.0-alpha06
7 آب (أغسطس) 2024
تم إصدار androidx.room:room-*:2.7.0-alpha06
. يحتوي الإصدار 2.7.0-alpha06 على عمليات التنفيذ هذه.
التغييرات في واجهة برمجة التطبيقات
- تغيير إعداد إنشاء مثيل لـ
RoomDatabase
في مشروع KMP
بسبب نموذج الترجمة في Kotlin 2.0، لم تعُد استراتيجية الإشارة إلى دالة ستتمّ إنشاؤها باسم instantiateImpl()
قابلة للتطبيق. تمّ طرح واجهتَي برمجة تطبيقات جديدتَين، @ConstructedBy
وRoomDatabaseConstructor
، تحلّان محلّ استراتيجية instantiateImpl()
. في ما يلي الاستراتيجية الجديدة:
تحديد كائن متوقع ينفّذ
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
ربط الكائن ببيان
@Database
باستخدام@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
إنشاء مثيل قاعدة بيانات جديد ولكن بدون تمرير وسيطة على الإعدادات الأصلية
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
إصلاحات في b/316978491 و b/338446862 و b/342905180
- توفير
@RawQuery
في Room KMP عن طريق إضافة واجهة برمجة تطبيقات جديدة تُسمىRoomRawQuery
تشبهSupportSQLiteQuery
من حيث الاحتفاظ ببيانات سلسلة SQL الأولية ودالة لربط الوسيطات في عبارة. يمكن الآن لدوال@RawQuery
التي تتضمّن تعليقات توضيحية قبولRoomRawQuery
كمَعلمة واحدة. (Iea844، b/330586815) - يمكنك إضافة حمولة زائدة لـ
setQueryCallback()
تقبلCoroutineContext
. (Id66ff، b/309996304) - تمت إضافة إمكانية استهداف
linuxArm64
Kotlin Multiplatform (I139d3 وb/338268719)
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى إنشاء Room بشكلٍ غير صحيح لطلب
recursiveFetchArrayMap
في استهدافات غير Android. (710c36، b/352482325) - حلّ مشكلة طرحت فيها الغرفة أحيانًا استثناءً بشأن "انتهاء المهلة أثناء محاولة الاتصال" في مشروع KMP. (fa72d0، b/347737870)
- حل مشكلة في عمليات نقل البيانات التلقائية التي تبحث عن المفاتيح الخارجية في وقت مبكر جدًا قبل أن تغير الجداول الأخرى مخططاتها لتتوافق مع المفاتيح الخارجية الجديدة. (7672c0، b/352085724)
الإصدار 2.7.0-alpha05
10 تموز (يوليو) 2024
تم إصدار androidx.room:room-*:2.7.0-alpha05
. يحتوي الإصدار 2.7.0-alpha05 على عمليات التنفيذ هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية "
SQLiteKt
" إلى "SQLite
" و"BundledSQLiteKt
" إلى "BundledSQLite
". (I8b501)
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى حدوث انسداد في
RoomDatabase
أو ظهور خطأ بسبب انتهاء مهلة الاتصال عند استخدامAndroidSQLiteDriver
.
الإصدار 2.7.0-alpha04
12 يونيو 2024
تم إصدار androidx.room:room-*:2.7.0-alpha04
. يحتوي الإصدار 2.7.0-alpha04 على عمليات التنفيذ هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة في معالِج التعليقات التوضيحية في Room التي كانت تؤدي إلى إنشاء رمز KMP غير متوافق عند تحديد نوع إرجاع خارطة متعددة في DAO. (b/340983093)
- تم إصلاح مشكلة تعذُّر العثور على عملية تنفيذ قاعدة البيانات التي تم إنشاؤها في Room إذا لم تكن الفئة التي تمت عليها التعليقات التوضيحية
@Database
تحتوي على حزمة. (b/342097292) - تم إصلاح مشكلة كانت تؤدي أحيانًا إلى ظهور
ConcurrentModificationException
عندما يتم إغلاق قاعدة البيانات تلقائيًا بسبب عدم نشاطها، وذلك عند تفعيل ميزة الإغلاق التلقائي وإيقاف المثيلات المتعددة.
الإصدار 2.7.0-alpha03
29 مايو 2024
تم طرح androidx.room:room-*:2.7.0-alpha03
. يتضمّن الإصدار 2.7.0-alpha03 عمليات الربط هذه.
إصلاح الأخطاء
- إصلاح مشاكل مختلفة متعلّقة بإصدارَي Kotlin 2.0 وKSP 2.0 يُرجى العِلم أنّ الإصدار 2.0 من Kotlin المتوافق مع KSP 2 غير مكتمل، وأنّ الفريق يعمل على واجهات برمجة التطبيقات المختلفة وتغييرات السلوك في المُجمِّع الجديد. (b/314151707)
الإصدار 2.7.0-alpha02
14 مايو 2024
تم إصدار androidx.room:room-*:2.7.0-alpha02
. يتضمّن الإصدار 2.7.0-alpha02 عمليات الربط هذه.
إصلاح الأخطاء
- تم إصلاح مشاكل مختلفة في KSP.
الإصدار 2.7.0-alpha01
1 مايو 2024
تم إصدار androidx.room:room-*:2.7.0-alpha01
. يتضمّن الإصدار 2.7.0-alpha01 هذه المساهمات.
الميزات الجديدة
- التوافق مع Kotlin Multiplatform (KMP): في هذا الإصدار، تمت إعادة صياغة Room لتصبح مكتبة Kotlin Multiplatform (KMP). على الرغم من أنّه لا يزال هناك بعض الأعمال التي يجب إكمالها، يقدّم هذا الإصدار إصدارًا جديدًا من Room تم فيه "توحيد" معظم الوظائف (لتكون متوافقة مع أنظمة التشغيل المتعددة). الأنظمة الأساسية المعتمدة حاليًا هي Android وiOS وJVM (للكمبيوتر المكتبي) وMac الأصلي ونظام التشغيل Linux الأصلي. وسيتم توفير أي وظائف غير متوفّرة في الإصدارات القادمة من Room لتعمل على المنصات التي تمّت إتاحتها حديثًا.
لمزيد من المعلومات عن كيفية بدء استخدام Room KMP، يُرجى الرجوع إلى مستندات Room KMP الرسمية.
- تم تفعيل إنشاء رموز Kotlin على KSP تلقائيًا في حال إجراء المعالجة من خلال KSP. بالنسبة إلى المشاريع التي تستخدم KAPT أو Java فقط، سيظلّ Room ينشئ مصادر Java.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة تحميل زائدة لدالة
Room.databaseBuilder()
تأخذ مَعلمة lambda مخصّصة للاستخدام مع دالة تم إنشاؤها في Room لتجنُّب استخدام ميزة Reflection عند إنشاء مثيل لتنفيذ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
. - تحتوي عمليات معاودة الاتصال ذات الصلة بـ Varios Room الآن على إصدار تم تحميله بشكل زائد ويتلقّى
SQLiteConnection
بدلاً منSupportSQLiteDatabase
. ومن المفترض أن يتم إلغاء هذه الإعدادات عند نقل البيانات إلى مشروع 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
مع جميع واجهات برمجة التطبيقات الخاصة به، وأصبح العنصر فارغًا الآن. يُرجى إزالته من قائمة الاعتمادية.
الإصدار 2.6
الإصدار 2.6.1
29 تشرين الثاني (نوفمبر) 2023
تم إصدار androidx.room:room-*:2.6.1
. يحتوي الإصدار 2.6.1 على هذه المراجعات.
إصلاح الأخطاء
- تم حل المشكلة في الرمز الذي تم إنشاؤه، حيث تم ضبط القيمة التلقائية للأعمدة المزدوجة في
EntityCursorConverter
على 0 بدلاً من 0.0. تم أيضًا تضمين حلّ محتمل لحالة طارئة مشابهة للأعمدة من النوع Float. (Id75f5، b/304584179) - سيتم الآن نشر الاستثناءات التي يتم طرحها من عمليات تحميل
PagingSource
كLoadStateUpdate
منLoadResult.Error
يحتوي على Throwable. يمكن ملاحظة حالة الخطأ هذه من خلالPagingDataAdapter.loadStateFlow(Views)
أوLazyPagingItems.loadState(Compose)
. يُرجى العلم أنّ هذا يشير إلى تغيير في السلوك حيث كانت أخطاء التحميل في السابق تظهر كاستثناء ألقاه أسلوب dao الذي بدأ عملية التحميل. (I93887، b/302708983)
الإصدار 2.6.0
18 تشرين الأول (أكتوبر) 2023
تم إصدار androidx.room:room-*:2.6.0
. يحتوي الإصدار 2.6.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.5.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، تعتبر إمكانية القيم الفارغة لوسيطات النوع مهمة، حيث يتم تجاهل هذا في الغالب في جافا. على سبيل المثال، لنفترض أنّ لديك نوع إرجاع "Flow<foo\>" والجدول فارغ. في Java CodeGen، لن يؤدي ذلك إلى حدوث أي مشاكل، ولكن في Kotlin CodeGen، ستظهر لك رسالة خطأ. لتجنُّب ذلك، عليك استخدام Flow<foo?\>، بافتراض أنّه يتم عرض قيمة فارغة. </foo?\></foo\>
- تمت إضافة العنصر الجديد لواجهة Room Gradle Plugin إلى Room باستخدام المعرّف
androidx.room
، ما يحلّ العديد من المشاكل الحالية في Room المتعلّقة بتوفير مدخلات ومخرجات للمخططات من خلال خيارات معالج التعليقات التوضيحية في Gradle. لمزيد من التفاصيل، يُرجى الاطّلاع على ملاحظات إصدار Room 2.6.0-alpha02. - تتوفّر الآن فئات القيم في كيانات الغرف في برنامج KSP. (4194095)
- تتوفّر الآن أنواع إرجاع "الخرائط المتداخلة" في دوال DAO في الغرفة. (I13f48، 203008711)
الإصدار 2.6.0-rc01
20 أيلول (سبتمبر) 2023
تم طرح androidx.room:room-*:2.6.0-rc01
. يحتوي الإصدار 2.6.0-rc01 على هذه المراجعات.
الإصدار 2.6.0-beta01
23 آب (أغسطس) 2023
تم إصدار androidx.room:room-*:2.6.0-beta01
. يحتوي الإصدار 2.6.0-beta01 على هذه المراجعات.
إصلاح الأخطاء
- التعامل مع الاستثناء الخاص
SQLite
أثناء عملية التحديث/الإضافة التي تحدث عند طرح الاستثناء2067 SQLITE_CONSTRAINT_UNIQUE
أثناء عملية التحديث/الإضافة، من المفترض أن تُجري عملية التحديث/الإضافة تعديلاً. (If2849، b/243039555)
الإصدار 2.6.0-alpha03
9 آب (أغسطس) 2023
تم إصدار androidx.room:room-*:2.6.0-alpha03
. يحتوي الإصدار 2.6.0-alpha03 على هذه عمليات التنفيذ.
الميزات الجديدة
- أصبحت أنواع العناصر المعروضة في الخريطة المتداخلة في وظائف DAO متاحة الآن في Room. (I13f48، 203008711)
تغييرات واجهة برمجة التطبيقات
- تم إنشاء تعليق توضيحي جديد للنوع يُسمى
@MapColumn
ليحلّ محلّ@MapInfo
الذي تم إيقافه نهائيًا. لكل اسم عمود (keyColumnName
أوvalueColumnName
أو كليهما) مقدَّم في تعليق توضيحي@MapInfo
، عليك تحديد تعليق توضيحي@MapColumn
يتضمّنcolumnName
فقط واستخدام التعليق التوضيحي على مَعلمة النوع المحدّدة التي تتم الإشارة إليها (المفتاح أو قيمة Map) في نوع الإرجاع لدالة DAO. ويرجع ذلك إلى أنّ التعليق التوضيحي@MapColumn
يتم استخدامه مباشرةً على وسيطة type ضمن نوع الإرجاع لدالة DAO، بدلاً من استخدام التعليق التوضيحي على الدالة نفسها مثل@MapInfo
. لمزيد من المعلومات، يُرجى الرجوع إلى مستندات@MapColumn
. (Ib0305، b/203008711) - تم تعديل ملفات واجهة برمجة التطبيقات لإضافة تعليقات توضيحية حول إيقاف التوافق (I8e87a، b/287516207)
- تم تعديل واجهات برمجة التطبيقات الخاصة بالمكوّن الإضافي Room Gradle كي لا تتطلّب دائمًا إعدادات لكلّ سعر متغير. وهذا يعني أنّ المكوِّن الإضافي يمكنه قبول مكان عام لجميع الصيغ بدون إنشاء أدلة متعددة، ما يتيح عمليات نقل أكثر سلاسة ومرونة في الوقت نفسه بما يكفي لضبط النكهات أو إنشاء مخططات الأنواع يدويًا مع الاحتفاظ بمزايا المكوّن الإضافي (النُسخ القابلة للتكرار والتخزين المؤقت). (I09d6f، b/278266663)
إصلاح الأخطاء
- تم إصلاح الثغرة الأمنية المحتملة لتسرّب الذاكرة في
QueryInterceptorStatement
. (I193d1) - تم إصلاح السلوك غير الصحيح في دالة
QueryInterceptorDatabase execSQL()
. (Iefdc8)
الإصدار 2.6.0-alpha02
21 حزيران (يونيو) 2023
تم إصدار androidx.room:room-*:2.6.0-alpha02
. يحتوي الإصدار 2.6.0-alpha02 على هذه المراجعات.
المكوّن الإضافي لنظام Gradle الخاص بالغرفة
يحتوي هذا الإصدار الجديد على عنصر جديد لمكوّن إضافي في Gradle لمشروع Room يحمل المعرّف androidx.room
، ما يحلّ العديد من المشاكل الحالية في Room المتعلّقة بتوفير مدخلات ومخرجات للمخططات من خلال خيارات معالج التعليقات التوضيحية في Gradle. يضبط "مكوّن إضافي لـ Gradle في Room" المشروع بحيث يتم ضبط المخططات التي تم إنشاؤها والتي يتم استخدامها لنقل البيانات تلقائيًا وتكون ناتجة عن مهام الترجمة بشكل صحيح للحصول على عمليات إنشاء قابلة للتكرار والتخزين المؤقت. يوفّر المكوّن الإضافي DSL لضبط موقع المخطط الأساسي على النحو التالي:
room {
schemaDirectory("$projectDir/schemas/")
}
سيضبط المكوّن الإضافي بعد ذلك برنامج التحويل البرمجي Room ومهام التحويل البرمجي المختلفة وبرامج التشغيل الخلفية (javac وKAPT وKSP) لإخراج ملفات المخططات في المجلدات المخصّصة للإصدارات المخصّصة، أي schemas/flavorOneDebug/com.package.MyDatabase/1.json
. وكما هو معتاد، يتم تسجيل هذه الملفات في المستودع لاستخدامها في عمليات التحقّق والنقل التلقائي. بعد بدء استخدام المكوِّن الإضافي بدلاً من خيارات معالج التعليقات التوضيحية، يجب نسخ ملفات المخطط الحالية إلى أدلة النكهات التي تم إنشاؤها بواسطة المكوِّن الإضافي، ويتم تنفيذ هذه العملية مرة واحدة فقط ويجب إجراؤها يدويًا. سيتم تعديل مستندات المخطط في developers.android.com في المستقبل بعد معالجة الملاحظات واستقرار المكوّن الإضافي، لذا يُرجى تجربته.
التغييرات في واجهة برمجة التطبيقات
- تم تعريف "
RoomDatabase.QueryCallback
" على أنّه واجهة وظيفية تتيح استخدام الإحالات الناجحة من خلال ميزة "إدارة العلامات من Google". (Iab8ea، b/281008549)
إصلاح الأخطاء
- حلّ المشكلة التي تحدث عند إنشاء مثيل لقاعدة البيانات في Robolectric بعد نقل مصادر Room من Java إلى Kotlin (Ic053c، b/274924903)
الإصدار 2.6.0-alpha01
22 آذار (مارس) 2023
تم إصدار androidx.room:room-*:2.6.0-alpha01
. يحتوي الإصدار 2.6.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- توفير صفوف القيم في الغرفة لـ KSP. يمكن الآن لـ Room إتاحة فئات القيم في "العناصر". (4194095)
- يمكن الآن تفعيل ميزة إنشاء الرموز البرمجية بلغة Kotlin(أو "Kotlin CodeGen") في Room (4297ec0). لتفعيل Kotlin CodeGen في Room، أضِف اسم الخيار
room.generateKotlin
إلى خيارات المعالج في KSP. لمزيد من التفاصيل حول كيفية ضبط خيارات المعالج لـ KSP، يُرجى الاطّلاع على مستندات KSP.
ملاحظة: عند استخدام Kotlin CodeGen، من المهمّ ملاحظة أنّ هناك قيودًا إضافية تمّت إضافتها. لا يُسمح بالسمات المجرّدة مثل استدعاءات DAO أو طلبات بحث DAO في Kotlin CodeGen، ويُتوقع إعادة كتابتها كدوال بدلاً من ذلك لتجنب الاعتقاد الخاطئ بأن قيمة الخاصية غير قابلة للتغيير ولها نتيجة مخزنة ثابتة. تم أيضًا فرض قيد آخر يقضي بعدم السماح بأنواع الإرجاع لمجموعات Nullable في Room for Kotlin CodeGen.
تحذير: قد تجد أنّ مشاريعك أكثر صرامة في ما يتعلق بقابلية القيم الفارغة عند استخدام Kotlin CodeGen. في Kotlin CodeGen، يكون تحديد ما إذا كانت وسيطات النوع بلا قيمة مهمًا، في حين أنّه يتم تجاهل ذلك في Java في معظم الأحيان. على سبيل المثال، لنفترض أنّ لديك نوع إرجاع "Flow<foo\>" والجدول فارغ. لن يتسبب ذلك في أي مشاكل في Java CodeGen، ولكن سيظهر لك خطأ في Kotlin CodeGen. لتجنُّب ذلك، عليك استخدام Flow<foo?\>، بافتراض أنّه يتم عرض قيمة فارغة. </foo?\></foo\>
تغييرات واجهة برمجة التطبيقات
- الحذر من الاستخدام غير المفيد للمجموعات التي يمكن أن تحتوي على قيمة فارغة في أنواع الإرجاع لأسلوب DAO (I777dc وb/253271782 وb/259426907)
- أضِف واجهة برمجة تطبيقات لإنشاء مسار إحالة ناجحة يُرسِل تغييرات خدمة تتبُّع الإبطال. تكون واجهة برمجة التطبيقات مفيدة لإنشاء أحداث البث التي تحتاج إلى الاستجابة لتغييرات قاعدة البيانات. (I8c790، b/252899305)
إصلاح الأخطاء
- عدم السماح بالخصائص المجرّدة كدوال DAO أو استعلامات DAO في برنامج ترميز Kotlin، بل يجب إعادة كتابتها كدوال لتجنُّب الاعتقاد الخاطئ بأنّ قيمة الخاصية غير قابلة للتغيير ولها نتيجة مخزنة ثابتة. (If6a13 وb/127483380 وb/257967987)
الإصدار 2.5.2
الإصدار 2.5.2
21 حزيران (يونيو) 2023
تم إصدار androidx.room:room-*:2.5.2
. يحتوي الإصدار 2.5.2 على هذه الالتزامات.
إصلاح الأخطاء
- إصلاح مشكلة عدم التوافق مع kotlinx-metadata-jvm (386d5c)
- إصلاح مشكلة تؤدي إلى ظهور خطأ في Room عند استخدامها في اختبار Robolectric (f79bea، b/274924903)
الإصدار 2.5.1
الإصدار 2.5.1
22 آذار (مارس) 2023
تم إصدار androidx.room:room-*:2.5.1
. يحتوي الإصدار 2.5.1 على هذه الالتزامات.
إصلاح الأخطاء
- تجنَّب التحقّق من الدليل الرئيسي لقاعدة البيانات في
FrameworkSQLiteHelper
إذا كانت قاعدة البيانات مفتوحة. (5de86b8) - يمكنك استخدام عملية فحص "
isOpenInternal
" عند التأكّد ممّا إذا كانت قاعدة البيانات مفتوحة. (e91fb35) - تتوفّر الآن إمكانية معالجة أفضل لطلب المشترك في
acquireTransactionThread()
في الغرفة. (219f98b). أثناء إجراء معاملة معلّقة، يستخدم Room سلسلة محادثات من منفّذ المعاملة، ويشغّل حلقة أحداث فيها ويرسل إليها عمليات تعليق قاعدة البيانات حتى يتم تجميعها جميعًا في دالة معالجة المهام المتكررة للمعاملة. من المتوقّع عادةً أن تكون سلسلة محادثات المعاملة مختلفة عن سلسلة المحادثات التي تبدأ المعاملة، ولكن في بعض الحالات تكونا متطابقتَين. للتعامل مع هذه الحالات التي تتكرّر فيها المهام، تمت إعادة تنظيمwithTransaction()
لكي لا تعتمد بعد الآن على وظيفة التحكّم، وبدلاً من ذلك ستنفّذ كتلة المعاملات المعلّقة من داخلrunBlocking
في سلسلة محادثات المعاملات.
الإصدار 2.5.0
الإصدار 2.5.0
22 شباط (فبراير) 2023
تم طرح الإصدارات androidx.room:room-paging-guava:2.5.0
وandroidx.room:room-paging-rxjava2:2.5.0
وandroidx.room:room-paging-rxjava3:2.5.0
. يحتوي الإصدار 2.5.0 على هذه المراجعات.
الإصدار
11 كانون الثاني (يناير) 2023
تم إصدار androidx.room:room-*:2.5.0
. يحتوي الإصدار 2.5.0 على هذه المراجعات.
تغييرات مهمة منذ الإصدار 2.4.0
- تم تحويل جميع مصادر
room-runtime
من Java إلى Kotlin. يُرجى العِلم أنّه قد تواجه مشاكل عدم توافق المصدر إذا كان الرمز البرمجي بتنسيق Kotlin بسبب تحويل المكتبة إلى Kotlin. على سبيل المثال، من التغييرات غير المتوافقة مع المصدر المعروف أنّه فيInvalidationTracker
، ستحتاج الآن إلى تحديدonInvalidate()
فيObserver
للحصول على مَعلمة من النوعSet
وليسMutableSet
. بالإضافة إلى ذلك، تم تحويل طرق جلب معيّنة إلى خصائص تتطلّب بنية الوصول إلى الخصائص في ملفات Kotlin. يُرجى الإبلاغ عن أي خلل في حال حدوث أي عدم توافق كبير. - تمت إضافة تعليق توضيحي جديد للاختصار
@Upsert
، ويحاول إدراج كيان في حال عدم وجود تعارض في الاختلاف أو تعديل الكيان في حال وجود تعارض. (I7aaab، b/241964353) - تمت إضافة عناصر جديدة لفهرسة الغرف
room-paging-rxjava2
وroom-paging-rxjava3
وroom-paging-guava
لتصبح متوافقة مع ميزة "فهرسة الغرف". - تمت إضافة واجهات برمجة تطبيقات لتوفير أسماء جداول القيم والمفاتيح لتوضيحها في
@MapInfo
(Icc4b5).
الإصدار 2.5.0-rc01
7 كانون الأول (ديسمبر) 2022
تم إصدار androidx.room:room-*:2.5.0-rc01
. يحتوي الإصدار 2.5.0-rc01 على هذه المراجعات.
- هذا الإصدار مماثل للإصدار
2.5.0-beta02
.
الإصدار 2.5.0-beta02
9 تشرين الثاني (نوفمبر) 2022
تم طرح androidx.room:room-*:2.5.0-beta02
. يحتوي الإصدار 2.5.0-beta02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يجب إصلاح واجهات برمجة التطبيقات المختلفة التي تأخذ وسيطات طلب البحث من القيمة الثابتة (
Array<Any?>
) إلى القيمة المتغيرة (Array<out Any?>
) لمطابقة سلوك صفيف Java. (b/253531073)
الإصدار 2.5.0-beta01
5 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.room:room-*:2.5.0-beta01
. يحتوي الإصدار 2.5.0-beta01 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- يجب أن يكون الإصدار الأدنى المتوافق مع
@Upsert
هو 16 من واجهة برمجة التطبيقات. ويعود السبب في ذلك إلى عدم التمكّن من تحديد تعارض في قيد المفتاح الأساسي في واجهات برمجة التطبيقات القديمة. (I5f67f، b/243039555)
إصلاح الأخطاء
- تم إصلاح مشكلة تصدير الجداول الرمزية بشكل غير صحيح إلى ملفات
.json
للمخطط، ما أدّى إلى إفسادها. (I4f83b، b/246751839)
الإصدار 2.5.0-alpha03
24 آب (أغسطس) 2022
تم إصدار androidx.room:room-*:2.5.0-alpha03
. يحتوي الإصدار 2.5.0-alpha03 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة تعليق توضيحي جديد للاختصار
@Upsert
، الذي يحاول إدراج عنصر عندما لا يكون هناك تعارض في التفرد أو تعديل العنصر في حال حدوث تعارض. (I7aaab، b/241964353)
إصلاح الأخطاء
- سيُظهر الجدول الآن
SQLiteConstraintException
بدلاً منIllegalStateException
أثناء التحقّق من قيد المفتاح الخارجي لعملية نقل البيانات التلقائية. (I328dd) - يجب إصلاح تغيير غير متوافق في مصدر Kotlin لخاصية getter / السمات
getOpenHelper
وgetQueryExecutor
وgetTransactionExecutor
. (Iad0ac)
الإصدار 2.5.0-alpha02
1 حزيران (يونيو) 2022
تم إصدار androidx.room:room-*:2.5.0-alpha02
. يحتوي الإصدار 2.5.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة عناصر
room-paging
جديدةroom-paging-rxjava2
وroom-paging-rxjava3
وroom-paging-guava
لإتاحة استخدام ميزة "التنقّل بين الغرف".(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
التغييرات في واجهة برمجة التطبيقات
- تم تحويل
room-runtime
بالكامل من Java إلى Kotlin. (If2069، b/206859668)،(Ie4b55، b/206859668)، (I697ee، b/206859668)، (I96c25، b/206859668)ملاحظة: قد تواجه مشاكل متعلقة بعدم التوافق مع المصدر بسبب تحويل المكتبة إلى لغة Kotlin. إذا كان الرمز البرمجي بتنسيق Kotlin وكان يستدعي الإصدار القديم من Room، يجب أن يتعامل الإصدار الجديد مع هذه الحالات. على سبيل المثال، من التغييرات غير المتوافقة مع المصدر المعروف أنّه في
InvalidationTracker
، ستحتاج الآن إلى تحديدonInvalidate()
فيObserver
للحصول على مَعلمة من النوعSet
وليسMutableSet
. - تمت إضافة واجهات برمجة تطبيقات لتوفير أسماء جداول القيم والمفاتيح لتوضيحها في
@MapInfo
(Icc4b5). - حلّ مشكلة التوافق مع المصدر لإعادة السماح باستخدام
@Ignore
في أدوات الحصول على المواقع (Ifc2fb)
إصلاح الأخطاء
- خوارزمية استدلالية لحلّ مشكلة الأعمدة المكرّرة سيحاول Room الآن حلّ الأعمدة الغامضة في استعلام الخريطة المتعددة. يتيح ذلك ربط عبارات JOIN مع الجداول التي تحتوي على جداول تحمل الاسم نفسه بشكل صحيح بعنصر بيانات النتيجة. (I4b444، b/201306012، b/212279118)
الإصدار 2.5.0-alpha01
23 شباط (فبراير) 2022
تم إصدار androidx.room:room-*:2.5.0-alpha01
. يحتوي الإصدار 2.5.0-alpha01 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- تم إصلاح مشكلة عدم فرض استخدام الغرفة "
@IntDef
" في مصادر Kotlin. (I75f41، b/217951311) - تم إصلاح مشكلة التوافق مع المصدر لإعادة السماح باستخدام
@Query
في أدوات الحصول على المواقع. (I0a09b) - تم تحويل الغرفة الشائعة من Java إلى Kotlin. (I69c48، b/206858235)
ملاحظة: قد تواجه مشاكل في عدم توافق المصدر بسبب نقل بعض المواقع إلى عناصر مصاحبة أثناء تحويل المكتبة إلى Kotlin. إذا كان الرمز بلغة Kotlin ويطلب من المستخدمين الإصدار القديم من الغرفة، سيحتاج الإصدار الجديد إلى اللاحقة " .Companion" عند الوصول إلى هذه السمات.
- تم تحويل عملية نقل الغرف من Java إلى Kotlin. (I2724b، b/206858622)
- تم تحويل
paging
ملفًا مرتبطًا فيroom-runtime
من Java إلى Kotlin. (I82fc8، b/206859668) - تمت إضافة واجهة برمجة تطبيقات للقفل والاستخدام على مستوى إطار عمل SQLite* متعدد العمليات، وذلك لحماية إنشاء قاعدة البيانات ونقلها بعد إجراء عمليات متعددة. (Ied267، b/193182592)
إصلاح الأخطاء
- تمت إضافة إمكانية استخدام المواقع الداخلية في مصادر Kotlin.
هذا تغيير بسيط في السلوك في Room حيث سيستخدم اسم
المصدر للدوالّ أثناء مطابقتها مع السمات كأدوات جلب/ضبط
(في السابق، كان يستخدم اسم JVM للدالة الذي يختلف
للدوالّ/السمات الداخلية).
إذا كنت تستخدم تعليقات
@JvmName
التوضيحية المخصّصة لمطابقة getters/setters مع الخصائص الخاصة، يُرجى التحقّق جيّدًا من الرمز الذي تمّ إنشاؤه بعد التحديث (If6531، b/205289020).
الإصدار 2.4.3
الإصدار 2.4.3
27 تموز (يوليو) 2022
تم إصدار androidx.room:room-*:2.4.3
. يحتوي الإصدار 2.4.3 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبب في عدم تعرُّف الغرفة على دوال التعليق في الإصدار 1.7 من لغة Kotlin (b/236612358).
الإصدار 2.4.2
الإصدار 2.4.2
23 شباط (فبراير) 2022
تم إصدار androidx.room:room-*:2.4.2
. يحتوي الإصدار 2.4.2 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة في إنشاء رمز لدالة تعليق Dao
@Transaction
مع نص ينشئ طريقة واجهة تلقائية بسبب الترجمة باستخدام-Xjvm-default=all
أو ما يعادله. (Ia4ce5) - حلّ خطأ يؤدي إلى إنشاء Room رمزًا لطريقة طلب نوع الإرجاع
Array<ByteArray>
(If086e، b/213789489)
الإصدار 2.4.1
الإصدار 2.4.1
12 كانون الثاني (يناير) 2022
تم إصدار androidx.room:room-*:2.4.1
. يحتوي الإصدار 2.4.1 على عمليات الالتزام هذه.
إصلاح الأخطاء
- تمت إضافة إمكانية استخدام المواقع الداخلية في مصادر Kotlin.
هذا تغيير بسيط في السلوك في Room حيث سيستخدم مصدر
اسم الدوالّ أثناء مطابقتها مع السمات كأدوات جلب/ضبط
(في السابق، كان يستخدم اسم JVM للدالة الذي يختلف
للدوالّ/السمات الداخلية).
إذا كنت تستخدم تعليقات
@JvmName
التوضيحية المخصّصة لمطابقة getters/setters مع الخصائص الخاصة، يُرجى التحقّق جيّدًا من الرمز الذي تمّ إنشاؤه بعد التحديث (If6531، b/205289020).
الإصدار 2.4.0
الإصدار
15 كانون الأول (ديسمبر) 2021
تم إصدار androidx.room:room-*:2.4.0
. يحتوي الإصدار 2.4.0 على عمليات الإلغاء هذه.
التغييرات المهمة منذ الإصدار 2.3.0
- عمليات نقل البيانات التلقائية: يوفّر Room الآن واجهة برمجة تطبيقات لإنشاء عمليات نقل البيانات تلقائيًا طالما يتم تصدير المخططات. لإعلام Room بأنّه يجب إنشاء عملية نقل بيانات تلقائية، يمكن استخدام موقع جديد
@Database#autoMigrations
للإبلاغ عن الإصدارات المطلوب نقل بياناتها تلقائيًا من وإلى. عندما تحتاج "غرفة" إلى معلومات إضافية بشأن الجداول وعمليات إعادة تسمية الأعمدة أو حذفها، يمكن أن يفصح التعليق التوضيحي@AutoMigration
عن فئة مواصفات تحتوي على هذه البيانات. راجِع مستندات@AutoMigration
للحصول على مزيد من التفاصيل. - حقن التبعيات في عمليات نقل البيانات التلقائية:
@ProvidedAutoMigrationSpec
هي واجهة برمجة تطبيقات جديدة للإعلان عن أنّه سيتم توفيرAutoMigrationSpec
أثناء التشغيل من خلالRoomDatabase.Builder#addAutoMigrationSpec()
. يتيح ذلك لإطار عمل حقن التبعية تقديم هذه المواصفات عندما يحتاج إلى تبعيات معقّدة. - دعم اختبار نقل البيانات لعمليات النقل التلقائية: تم تعديل
MigrationTestHelper
في الغرفة لإتاحة عمليات النقل التلقائي من خلال توفير واجهة برمجة تطبيقات جديدة لأداة الإنشاء تتلقّى فئة قاعدة البيانات قيد الاختبار. ويتيح ذلك للمساعد إضافة عمليات نقل البيانات التلقائية تلقائيًا بالطريقة نفسها أثناءrunMigrationsAndValidate
. - إتاحة ميزة "التنقّل في الغرف": تم إصدار الإصدار
androidx.room:room-paging
، الذي يتيح استخدام ميزة "التنقّل في الغرف" 3.0 الأصلية لطلبات البحث عن الغرف التي تعرضandroidx.paging.PagingSource
. - طرق الاستعلامات ذات الصلة: تتيح Room الآن استخدام طرق
@Dao
لأنواع البيانات المعروضة في الخرائط المتعددة، وهي مفيدة في عبارات JOIN. الأنواع المتوافقة من الخرائط المتعددة هيMap
وSparseArray
وLongSparseArray
، بالإضافة إلىImmutableMap
وImmutableSetMultimap
وImmutableListMultimap
من Java.
الإصدار 2.4.0-rc01
1 كانون الأول (ديسمبر) 2021
تم طرح androidx.room:room-*:2.4.0-rc01
. يحتوي الإصدار 2.4.0-rc01 على هذه المراجعات.
الميزات الجديدة
- تعديل الاعتمادية على KSP في Room إلى
1.6.0-1.0.1
لتتوافق مع Kotlin 1.6
الإصدار 2.4.0-beta02
17 تشرين الثاني (نوفمبر) 2021
تم إصدار androidx.room:room-*:2.4.0-beta02
. يحتوي الإصدار 2.4.0-beta02 على هذه المراجعات.
الميزات الجديدة
- أضفنا دعمًا لـ SparseArray وLongSparseArray في @MapInfo. (Ic91a2b/138910317)
إصلاح الأخطاء
- لقد أضفنا أداة تحليل TypeConverter جديدة تأخذ في الاعتبار معلومات القيم الفارغة وبما أنّ هذه المعلومات متاحة فقط في "شركاء المحتوى في خرائط Google"، يتم تفعيلها تلقائيًا في هذا البرنامج فقط. إذا تسبّبت هذه الميزة في أي مشاكل، يمكنك إيقافها عن طريق ضبط قيمة room.useNullAwareTypeAnalysis=false في معالج التعليقات التوضيحية. إذا حدث ذلك، يُرجى الإبلاغ عن الخطأ الذي حدث، لأنّه ستتم إزالة هذه العلامة في المستقبل. باستخدام هذا المحلّل الجديد لـ TypeConverter، يُنصح بتوفير TypeConverters لتلقّي القيم غير الصفرية فقط لأنّ المحلّل الجديد لديه القدرة على ملفّفتها باستخدام عملية التحقّق من القيمة الخالية. يُرجى العِلم أنّ هذا التغيير لن يؤثر في المستخدمين الذين يستخدمون KAPT أو Java كمُعالجَي التعليقات التوضيحية (على عكس KSP)، ولا يتضمّنون معلومات عن قابلية القيمة الخالية في الأنواع. (Ia88f9، b/193437407)
- تم إصلاح خطأ كان يؤدي إلى تعذُّر تجميع Room بسبب خطأ في SQL عندما يتم الإعلان عن عنصر FTS لاستخدام أداة تقسيم الكلمات ICU. (I00db9، b/201753224)
- تم حلّ مشكلة في عمليات نقل البيانات التلقائية المتعلّقة بعمود جديد تمت إضافته إلى عنصر مضمّن بين الإصدارات. (I5fcb1b/193798291)
- لقد حللنا مشكلة متعلّقة بأنواع النتائج التي تعرِضها طريقة الاستعلام العلائقي في استعلامات LEFT JOIN. مع إجراء هذه التغييرات، في حال توفّر تعيين من عنصر واحد إلى عناصر متعددة، لن تتضمّن المجموعة التي يتم عرضها للمفتاح عنصر القيمة غير الصالحة إذا لم يتم العثور عليه في المؤشر. في حال عدم العثور على قيم صالحة، سيتم ربط مفتاح بمجموعة فارغة. (Id5552b/201946438)
- تم حلّ مشكلة نقل البيانات التلقائي التي تعذّر فيها ترميز الكلمات الرئيسية في SQLite في أسماء الأعمدة. (Idbed4b/197133152)
الإصدار 2.4.0-beta01
13 تشرين الأول (أكتوبر) 2021
تم إصدار androidx.room:room-*:2.4.0-beta01
. يحتوي الإصدار 2.4.0-beta01 على هذه المراجعات.
إصلاح الأخطاء
- تم حلّ مشكلة عدم إضافة عمليات نقل البيانات التلقائية لأعمدة جديدة عندما يتضمّن جدول آخر في عملية النقل التلقائية نفسها عمودًا جديدًا بالاسم نفسه. (Ia5db5، b/200818663)
- يستخدم الآن تنفيذ PagingSource الذي تم إنشاؤه من خلال تقسيم الغرف في الصفحة
queryExecutor
الذي تم تمريره من خلالRoomDatabase.Builder
، لذلك يمكن تجاوزه، بدلاً منDispatchers.IO
سابقًا. (Iae259)
الإصدار 2.4.0-alpha05
29 أيلول (سبتمبر) 2021
تم إصدار androidx.room:room-*:2.4.0-alpha05
. يحتوي الإصدار 2.4.0-alpha05 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة محوِّل أنواع مضمّن لـ UUID. (I671e8، b/73132006)
تغييرات واجهة برمجة التطبيقات
تمت إضافة خاصيّة جديدة إلى التعليق التوضيحي TypeConverters للسماح للمطوّرين بإيقاف محوِّلَي Enum وUUID المضمّنين. تكون هذه المحوِّلات مفعّلة تلقائيًا، ولكن يمكنك إيقافها لنطاق معيّن أو للقاعدة البيانات بأكملها. راجِع مستندات TypeConverters لمعرفة التفاصيل. (36ae9e، b/195413406)
إتاحة مفاتيح/قيم غير POJO لأنواع الإرجاع التي تتضمن خرائط متعددة في DAO من خلال التعليق التوضيحي
@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>
- جعل
room-paging
عنصرًا مطلوبًا عند استخدام Paging 3 مع الغرفة (Ieaffe)
إصلاح الأخطاء
- تم إصلاح مشكلة عدم ترتيب نتائج طلبات البحث عن الخرائط المتعددة بشكل صحيح عندما يتضمّن طلب البحث عبارة ORDER BY لعمود من مفتاح الخريطة. (I6b887)
المساهمة الخارجية
- تمت إضافة واجهة برمجة تطبيقات جديدة لتحديد ترتيب الفهرس في @Index. مع أطيب التحيّات، نيكيتا زيلونكين (I033fc)
الإصدار 2.4.0-alpha04
21 تموز (يوليو) 2021
تم إصدار 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
، ما يتيح استخدام Paging 3.0 الأصلي لطلبات البحث عن الغرف التي تعرض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 في الغرفة يجب أن يأخذ في الاعتبار هذا التغيير في السلوك، بما في ذلك المفتاح الأولي الذي تم تمريره عبر أداة إنشاء جهاز النداء. سيبدأ تحميل الصفحات منKey
، وسيكونKey
هو أول عنصر يتم تحميله. وينحرف ذلك عن السلوك الحالي الذي يتم فيه التعامل معLoadParams.Refresh.Key
كموضع تمرير للمستخدم ويتم تحميل العناصر قبل المفتاح وبعده.العنصر اختياري، وسيؤدي إيقافه إلى الرجوع إلى الإصدار الحالي من Paging 3.0 الذي تم تقديمه في Room 2.3. ومع ذلك، سيصبح هذا العنصر غير اختياري في الإصدارات المستقبلية لأولئك الذين يستخدمون ميزة "الغرفة مع التنقّل في الصفحة" 3.0. للموافقة، أضِف العنصر الجديد ترقيم الصفحات في الغرفة إلى مسار صفك. إذا كنت تستخدم Gradle، يمكنك إضافة المقتطف التالي إلى build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
إصلاح الأخطاء
- إصلاح مشكلة في عمليات نقل البيانات التلقائية في ما يتعلّق بمعالجة انتهاكات المفاتيح الأجنبية (b/190113935)
الإصدار 2.4.0-alpha03
16 حزيران (يونيو) 2021
تم إصدار androidx.room:room-*:2.4.0-alpha03
. يحتوي الإصدار 2.4.0-alpha03 على هذه عمليات التنفيذ.
تغييرات واجهة برمجة التطبيقات
- عدِّل
MigrationTestHelper
في Room لتتمكّن من نقل البيانات تلقائيًا من خلال توفير واجهة برمجة تطبيقات جديدة لإنشاء العناصر تتلقّى فئة قاعدة البيانات التي يتم اختبارها. يتيح ذلك للمساعد إضافة عمليات نقل البيانات التلقائية تلقائيًا بالطريقة نفسها أثناءrunMigrationsAndValidate
.
إصلاح الأخطاء
تم إصلاح مشكلة في مكتبة SQLite الأصلية في Room لتتوافق مع شرائح M1 من Apple. (b/174695268)
تم إصلاح المشكلة المتمثلة في عدم ظهور رسالة خطأ عندما يكون نوع إرجاع دالة @Transaction هو مسار (I56ddd، b/190075899)
إصلاح مشكلة في عمليات نقل البيانات التلقائية المتعلّقة بالفهارس b/177673291
تعديلات على التبعيات
- يعتمد الآن دعم KSP في Room على KSP
1.5.10-1.0.0-beta01
. (1ecb11، b/160322705)
الإصدار 2.4.0-alpha02
5 أيار (مايو) 2021
تم طرح androidx.room:room-*:2.4.0-alpha02
. يحتوي الإصدار 2.4.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
@ProvidedAutoMigrationSpec
هي واجهة برمجة تطبيقات جديدة للإعلان عن أنّه سيتم توفيرAutoMigrationSpec
أثناء التشغيل من خلالRoomDatabase.Builder#addAutoMigrationSpec()
. يتيح ذلك لإطار عمل حقن التبعية تقديم هذه المواصفات عندما يحتاج إلى تبعيات معقّدة.
إصلاح الأخطاء
- تم حلّ مشكلة في عمليات نقل البيانات التلقائية التي لم تتم فيها إعادة إنشاء
@DatabaseView
بشكلٍ صحيح.
المساهمة الخارجية
- تم إصلاح مشكلة في
JournalMode.TRUNCATE
في Room حيث كان يتم أحيانًا استدعاء دالة الاستدعاءInvalidationTracker
بشكل غير صالح أو بعد فوات الأوان أو عدم استدعاؤها على الإطلاق. مع أطيب التحيّات،Uli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
الإصدار 2.4.0-alpha01
21 نيسان (أبريل) 2021
تم إصدار androidx.room:room-*:2.4.0-alpha01
. يحتوي الإصدار 2.4.0-alpha01 على هذه عمليات التنفيذ.
الميزات الجديدة
- عمليات نقل البيانات التلقائية: يوفّر Room الآن واجهة برمجة تطبيقات لإنشاء عمليات نقل البيانات تلقائيًا طالما يتم تصدير المخططات. لإعلام Room بأنّه يجب إنشاء عملية نقل بيانات تلقائية، يمكن استخدام موقع جديد
@Database#autoMigrations
للإبلاغ عن الإصدارات المطلوب نقل بياناتها تلقائيًا من وإلى. عندما تحتاج "غرفة" إلى معلومات إضافية بشأن الجداول وعمليات إعادة تسمية الأعمدة أو حذفها، يمكن أن يفصح التعليق التوضيحي@AutoMigration
عن فئة مواصفات تحتوي على هذه البيانات. اطّلِع على مستندات@AutoMigration
لمزيد من التفاصيل.
إصلاح الأخطاء
- تم إصلاح مشكلة التحقّق بشكل غير صحيح من صحة الرمز
defaultValue
الذي يتضمّن قوسًا إضافيًا من خلال عملية التحقّق من صحة المخطّط في Room. b/182284899
الإصدار 2.3.0
الإصدار 2.3.0
21 نيسان (أبريل) 2021
تم إصدار androidx.room:room-*:2.3.0
. يحتوي الإصدار 2.3.0 على هذه عمليات التنفيذ.
تغييرات مهمة منذ الإصدار 2.2.0
- دعم مضمّن في التعداد: سيتم الآن ضبط الغرفة تلقائيًا على استخدام تعداد التعداد إلى سلسلة، والعكس صحيح إذا لم يتم توفير أي محوّل من نوع التعداد. إذا كان هناك محوِّل أنواع لقائمة أرقام مميزة، ستعطي Room الأولوية لاستخدامه بدلاً من المحوِّل التلقائي.
- استدعاء طلب البحث: توفر الغرفة الآن استدعاء عام لواجهة برمجة التطبيقات RoomDatabase.QueryCallback عندما تكون طلبات البحث على وشك التنفيذ والتي يمكن أن تكون مفيدة لتسجيل الدخول إلى إصدارات تصحيح الأخطاء. يمكن ضبط وقت معاودة الاتصال من خلال
RoomDatabase.Builder#setQueryCallback()
. - تحسين مُعدّ مسبقًا: تتضمّن Room الآن واجهات برمجة تطبيقات لإنشاء قاعدة بيانات باستخدام قاعدة بيانات مُعدّة مسبقًا يتم قراءتها من مصدر إدخال. ويتيح ذلك حالات مثل استخدام تنسيق gzip لضغط قاعدة بيانات الحزمة المُسبقة.
- محوّلات الأنواع المقدَّمة: تحتوي الغرفة الآن على واجهات برمجة تطبيقات لتوفير مثيلات محولات النوع كي يتمكّن التطبيق من التحكّم في إعدادها. لوضع علامة على محوِّل نوع سيتم توفيره لواجهة 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
24 آذار (مارس) 2021
تم إصدار androidx.room:room-*:2.3.0-rc01
. يحتوي الإصدار 2.3.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تمنع استخدام طلبات بحث Coroutine Flow التي أنشأتها Room في كتلة
withTransaction
معلّقة. (I797bf)
الإصدار 2.3.0-beta03
10 آذار (مارس) 2021
تم إصدار androidx.room:room-*:2.3.0-beta03
. يحتوي الإصدار 2.3.0-beta03 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة إمكانية التجميع المتزايد لـ KSP. (I031c1، b/176453350)
إصلاح الأخطاء
- تم إصلاح الخطأ الذي قد يؤدي فيه إنشاء PagingSource في سلسلة التعليمات الرئيسية إلى حدوث خطأ ANR. (I42b74، b/181221318)
- تم إصلاح مستوى رؤية
@ExperimentalRoomApi
ليصبح علنيًا بدلاً من حزمة خاصة. (b/181356119)
المساهمة الخارجية
- اسمح لـ Room بقبول نوع إرجاع POJO في طريقة DAO
@Query
التي تمت عليها تعليقات توضيحية عندما تكون مُعلّقة توضيحيًا أيضًا باستخدام@SkipQueryVerification
. سيبذل Room قصارى جهده لتحويل نتيجة الاستعلام إلى نوع الإرجاع POJO بالطريقة نفسها التي يتم بها تنفيذ@RawQuery
طريقة DAO التي تمت عليها تعليقات توضيحية. مع أطيب التحيّات، "ماركوس ريغل | hey@marcorei.com". (I45acb)
الإصدار 2.3.0-beta02
18 شباط (فبراير) 2021
تم طرح androidx.room:room-*:2.3.0-beta02
. يحتوي الإصدار 2.3.0-beta02 على هذه المراجعات.
الميزات الجديدة
تتوفّر الآن ميزة معالجة الرموز في Kotlin KSP بشكل تجريبي في Room.
ويوفّر KSP بديلاً عن KAPT لتشغيل معالجات التعليقات التوضيحية بشكل أصلي على مُجمِّع Kotlin، ما يؤدي إلى تقليل أوقات الإنشاء بشكل كبير.
لاستخدام الغرفة مع KSP، يمكنك تطبيق المكوّن الإضافي KSP Gradle واستبدال إعدادات
kapt
في ملف الإصدار بـksp
. على سبيل المثال، استخدِمksp 'androidx.room:room-compiler:2.3.0-beta02'
بدلاً منkapt 'androidx.room:room-compiler:2.3.0-beta02'
. راجِع مستندات KSP للحصول على مزيد من التفاصيل.يُرجى العِلم أنّه بما أنّ KSP لا يزال في مرحلة تجريبية، يُنصح بمواصلة استخدام KAPT لرمز الإنتاج. لا ينطبق تقليل أوقات الإنشاء إلا في حال عدم توفّر معالجات أخرى تستخدم KAPT. راجِع b/160322705 للاطّلاع على المشاكل المعروفة.
الإصدار 2.3.0-beta01
27 كانون الثاني (يناير) 2021
تم إصدار androidx.room:room-*:2.3.0-beta01
. يحتوي الإصدار 2.3.0-beta01 على هذه المراجعات.
الميزات الجديدة
- قواعد البيانات القابلة للإغلاق تلقائيًا: يمكن الآن للغرفة إغلاق قواعد البيانات التي لم يتم الوصول إليها بعد فترة زمنية معيّنة. هذه ميزة تجريبية ويمكن تفعيلها من خلال طلب الرقم
RoomDatabase.Builder#setAutoCloseTimeout()
. هذه الميزة مفيدة للتطبيقات التي تحتوي على قواعد بيانات متعددة.
إصلاح الأخطاء
- تم حلّ مشكلة تؤدي إلى أنّ أساليب Dao التي تحتوي على أساليب
@Update
أو@Delete
متعددة مع استراتيجيات تعارض مختلفة تُنشئ رمزًا باستخدام استراتيجية واحدة فقط، ما يؤدي إلى تجاهل الاستراتيجية المحدّدة بشكل فعّال. (/I0b90d، b/176138543)
الإصدار 2.3.0-alpha04
16 كانون الأول (ديسمبر) 2020
تم إصدار androidx.room:room-*:2.3.0-alpha04
. يحتوي الإصدار 2.3.0-alpha04 على هذه المراجعات.
الميزات الجديدة
- يوفّر Room الآن واجهة برمجة تطبيقات عامة للرجوع
RoomDatabase.QueryCallback
، وذلك عندما تكون طلبات البحث على وشك التنفيذ، ما قد يكون مفيدًا لتسجيل عمليات تسجيل الدخول في إصدارات تصحيح الأخطاء. يمكن ضبط وقت معاودة الاتصال من خلالRoomDatabase.Builder#setQueryCallback()
. (Iaa513، وb/174478034، وb/74877608) - سيستخدم Room الآن بشكل تلقائي محوِّلًا من النوع "قائمة بقيم محدّدة" إلى النوع "سلسلة" والعكس إذا لم يتم توفير أيّ محوِّل. إذا كان هناك محوِّل أنواع لقائمة أرقام مميزة، ستعطي Room الأولوية لاستخدامه بدلاً من المحوِّل التلقائي. (b/73132006)
مشكلة معروفة
- إذا كان هناك محوِّل نوع أحادي الاتجاه للقراءة متوفرًا للتعداد، قد يستخدم Room عن طريق الخطأ محوِّل String إلى Enum المضمّن الذي قد لا يكون مطلوبًا. هذه مشكلة معروفة ويمكن حلّها من خلال تحويلها إلى محوِّل ثنائي الاتجاه. راجِع: b/175707691
إصلاح الأخطاء
- تم إصلاح مشكلة إيقاف الغرفة لمعالجة التعليقات التوضيحية التزايدية بشكل غير صحيح في إصدارات JDK الأحدث. (b/171387388)
- تم إصلاح مشكلة في Room تتعلّق بالعثور على الفئة التي تم إنشاؤها عند استخدام أدوات تحميل فئات متعددة. نشكرك على الإصلاح الذي قدّمه "صُدفة" | 892449346@qq.com (b/170141113).
- تم إصلاح مشكلة كانت تؤدي إلى إنشاء Room لرمز برمجي غير صحيح عندما يتضمّن
@Dao
في Kotlin فئة أساسية تكون أنواعها العامة عناصر أساسية في Java Virtual Machine. (b/160258066)
مساهمة خارجية
- سيتم الآن استخدام
beginTransactionNonExclusive
تلقائيًا في الغرفة إذا كان وضع WAL مفعّلاً وكان حجم واجهة برمجة التطبيقات 16 أو أكثر. مع أطيب التحيّات، خليل | ahmedibrahimkhali@gmail.com’! (b/126258791)
الإصدار 2.3.0-alpha03
14 تشرين الأول (أكتوبر) 2020
تم إصدار androidx.room:room-*:2.3.0-alpha03
. يحتوي الإصدار 2.3.0-alpha03 على هذه المراجعات.
الميزات الجديدة
تتضمّن Room الآن واجهات برمجة تطبيقات لتوفير نُسخ من محوِّلات الأنواع حتى يتمكّن التطبيق من التحكّم في عملية بدء تشغيلها. لوضع علامة على محوِّل أنواع سيتم توفيره للغرفة، استخدِم التعليق التوضيحي الجديد
@ProvidedTypeConverter
. مع أطيب التحيّات، "mzgreen yairobbe@gmail.com". (Ie4fa5، b/121067210)تتضمّن Room الآن واجهات برمجة تطبيقات لإنشاء قاعدة بيانات باستخدام قاعدة بيانات مُجمَّعة مسبقًا يتم قراءتها من مصدر إدخال. يسمح هذا بحالات مثل ضغط قاعدة بيانات ما قبل الحزمة بشكل gzip. شكرًا لـ "أحمد الحلو ahmedre@gmail.com" (3e6792، وb/146911060)
تغييرات واجهة برمجة التطبيقات
تمت إضافة هدف غير متوفّر إلى التعليق التوضيحي
@ForeignKey
لمنع استخدامه خارج التعليق التوضيحي@Entity
. (Iced1e)أصبح الحقل
mCallbacks
فيRoomDatabase.java
مخفيًا الآن. (d576cb وb/76109329)
إصلاح الأخطاء
تعديل على مستندات TypeConverters لتوضيح أنّه يمكن استخدام TypeConverters فقط لتحويل الأعمدة / الحقول وليس الصفوف (I07c56، b/77307836)
يمكنك التحديث إلى DaoProcessor لإصلاح خطأ التجميع على Dao بنوع مميز عام يتضمن "المبادئ الأساسية" للغة Kotlin. (Ice6bb، b/160258066)
تعديل مستندات طرق إضافة/إزالة المراقبين لتوضيح التسلسل (Ifd1d9، b/153948821)
حلّ مشكلة في الغرفة تتحقّق بشكل غير صحيح من جداول FTS التي أعلنت عن عمود معرّف الصف الخاص بها (d62ebc، b/145858914)
المساهمات الخارجية
حل مشاكل اللغة التركية الكبيرة/الصغيرة (5746e3) وb/68159494
استبدِل
ConcurrentHashMap
داخلRoomDatabase
بـCollections.synchronizedMap()
لتجنُّب حدوث مشاكل على نظام التشغيل Android Lollipop (d1cfc7، b/162431855)أضف استدعاء onOpenPrepackagedDatabase عند نسخ قاعدة بيانات مُعبأة مسبقًا. (I1ba74، b/148934423)
الإصدار 2.3.0-alpha02
22 تموز (يوليو) 2020
تم إصدار androidx.room:room-*:2.3.0-alpha02
. يحتوي الإصدار 2.3.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- التوافق مع RxJava3: تتيح أداة Room الآن أنواع RxJava3. على غرار RxJava2، يمكنك تعريف طرق DAO التي يكون نوع إرجاعها قابلاً للتدفق أو فرديًا أو ربما وقابلاً للإكمال. بالإضافة إلى ذلك، يتوفّر عنصر جديد
androidx.room:room-rxjava3
لدعم RxJava3. (b/152427884)
تغييرات واجهة برمجة التطبيقات
- تتوفّر الآن إمكانية الإعلان عن
@TypeConverter
في فئة كائن Kotlin. (b/151110764) - أصبح خيار معالجة التعليقات التوضيحية المتزايدة للغرفة مفعّلاً تلقائيًا. (b/112110217)
الإصدار 2.3.0-alpha01
10 حزيران (يونيو) 2020
تم إصدار androidx.room:room-*:2.3.0-alpha01
. يحتوي الإصدار 2.3.0-alpha01 على هذه المراجعات.
الميزات الجديدة
إتاحة التنقّل في الصفحة 3.0: ستتيح أداة 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 المستخدَم لتفعيل معالج التعليقات التوضيحية المتزايدة بشكل صحيح. مع أطيب التحيّات، "بلاز سولار" (me@blaz.solar) (b/155215201)
- تضمِّن أداة Room الآن تبعية ANTLR مع معالج التعليقات التوضيحية لتجنُّب تعارضات الإصدارات مع المعالجات الأخرى التي تستخدم ANTLR أيضًا. (b/150106190)
الإصدار 2.2.6
الإصدار 2.2.6
16 كانون الأول (ديسمبر) 2020
تم إصدار androidx.room:room-*:2.2.6
. يحتوي الإصدار 2.2.6 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى إيقاف Room لمعالجة التعليقات التوضيحية المتزايدة بشكل غير صحيح في إصدارات JDK الأحدث. (b/171387388)
الإصدار 2.2.5
الإصدار 2.2.5
18 آذار (مارس) 2020
تم إصدار androidx.room:room-*:2.2.5
. يحتوي الإصدار 2.2.5 على هذه المراجعات.
إصلاح الأخطاء
- اجعل
MultiInstanceInvalidationService
directBootAware. مع أطيب التحيّات، "مايجود" contact-git@mygod.be (b/148240967) - تم إصلاح خطأ كان يؤدي إلى حدوث عطل عند تفعيل إيقاف العناصر غير الصالحة في النُسخ المتعددة واحتواء قاعدة البيانات على عنصر FTS. (b/148969394)
- تم إصلاح مشكلة عند تحميل المكتبات المجمّعة من رموز برمجية أصلية لـ SQLite في معالج التعليقات التوضيحية في Room، والتي كانت تؤدي إلى تعطُّل المُجمِّع بسبب عمليات الترجمة المجمّعة المتوازيّة. (b/146217083)
الإصدار 2.2.4
الإصدار 2.2.4
19 شباط (فبراير) 2020
يتم إصدار 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
. يحتوي الإصدار 2.2.4 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة في تعليق المعاملات التي كانت ستؤدي إلى حدوث مشكلة في الأداء إذا تم إلغاء دالة coroutine بسرعة قبل بدء المعاملة فعليًا. (b/148181325)
- تم إصلاح مشكلة استخدام العلامة @Generated بشكل خاطئ عند الإنشاء باستخدام JDK 9. (b/146538330)
- تم إصلاح المشكلة التي كانت تتسبب في إنشاء رمز غير صحيح لغرفة DAO في لغة البرمجة Kotlin. (b/146825845)
الإصدار 2.2.3
الإصدار 2.2.3
18 كانون الأول (ديسمبر) 2019
تم إصدار androidx.room:room-*:2.2.3
. يحتوي الإصدار 2.2.3 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى تعذُّر Room في التحقّق من قاعدة بيانات لم تخضع لأي عملية نقل بيانات وكانت تحتوي على تجزئة قديمة تتضمّن فهارس في مخطّطها. (b/139306173)
الإصدار 2.2.2
الإصدار 2.2.2
20 تشرين الثاني (نوفمبر) 2019
تم إصدار androidx.room:room-*:2.2.2
. يحتوي الإصدار 2.2.2 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى عرض عناصر ذات صلة فارغة في Room عند جمع علاقة تقابلية تضم أكثر من 999 صفًا. (b/143105450)
الإصدار 2.2.1
الإصدار 2.2.1
23 تشرين الأول (أكتوبر) 2019
تم طرح androidx.room:room-*:2.2.1
. يحتوي الإصدار 2.2.1 على عمليات الالتزام هذه.
إصلاح الأخطاء
- تم إصلاح خلل كان يؤدي إلى تحذير Room بشكل غير صحيح بشأن
CURSOR_MISMATCH
عند تفعيل خيار المُجمِّعexpandProjection
. (b/140759491) - تمت إضافة آلية إعادة المحاولة للتعامل مع المكتبة الأصلية غير المتوفّرة المستخدَمة للتحقّق من طلبات البحث أثناء وقت الترجمة.
الإصدار 2.2.0
الإصدار 2.2.0
9 تشرين الأول (أكتوبر) 2019
تم إصدار androidx.room:room-*:2.2.0
. يحتوي الإصدار 2.2.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.1.0
- قاعدة بيانات مجمعة مسبقًا: يتوفر الآن واجهتا برمجة تطبيقات جديدتان في
RoomDatabase.Builder
لإنشاءRoomDatabase
باستخدام ملف قاعدة بيانات سبق أن تمت تعبئته. يُستخدَم الرمزcreateFromAsset()
عندما يكون ملف قاعدة البيانات المعبّأة مسبقًا في مجلد مواد العرض في حزمة APK، بينما يُستخدَم الرمزcreateFromFile()
عندما يكون الملف في موقع عشوائي. تؤدي استخدامات واجهة برمجة التطبيقات هذه إلى تغيير سلوك عمليات النقل المدمرة، بحيث يحاول تطبيق 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 - مسار الكوروتينات: يمكن الآن أن تكون طرق
@Query
DAO من نوع الإرجاعFlow<T>
. ستعيد عملية بث البيانات التي تم عرضها مجموعة جديدة من القيم في حال إلغاء صلاحية الجداول المراقبة في طلب البحث. يُعدّ تعريف دالة DAO باستخدام نوعChannel<T>
للعائد خطأً، ويشجّعك Room بدلاً من ذلك على استخدامFlow
ثم استخدام الدوال المجاورة لتحويلFlow
إلىChannel
. b/130428884 - معالج التعليقات التوضيحية المتزايدة في Gradle: أصبح Room الآن معالجًا لتعليقات Gradle
التوضيحية، ويمكن تفعيل إمكانية الزيادة من خلال خيار
room.incremental
في المعالج. يمكنك الاطّلاع على خيارات "مجمع الغرف" للحصول على مزيد من المعلومات. إذا واجهت أي مشاكل، يُرجى الإبلاغ عن الخطأ هنا. ونخطّط لإتاحة إمكانية الزيادة تلقائيًا في إصدار مستقبلي مستقر. b/112110217 - توسيع الإسقاطات: تمت إضافة خيار تجميع تجريبي جديد
room.expandProjection
يتسبب في إعادة كتابة طلب بحث باستخدام إسقاط نجمة ليحتوي فقط على الأعمدة في النوع المكرّر من النوع POJO. على سبيل المثال، بالنسبة إلى طريقة DAO التي تحتوي على@Query("SELECT * FROM Song")
والتي تعرض ملفSongIdAndTitle
POJO الذي يحتوي على حقلَين فقط. بعد ذلك، ستعيد Room كتابة query ليكونSELECT id, title FROM Song
بحيث يتم جلب الحد الأدنى من مجموعة الأعمدة لتلبية نوع الإرجاع. يؤدي ذلك إلى إزالة تحذيرCURSOR_MISMATCH
الذي يظهر عندما يعرض الطلب عمودًا إضافيًا لا يتطابق مع أي حقل في نوع POJO الذي يتم عرضه.
الإصدار 2.2.0-rc01
5 أيلول (سبتمبر) 2019
تم إصدار androidx.room:room:2.2.0-rc01
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
لم يتم إجراء أي تغييرات علنية منذ الغرفة 2.2.0-beta01
.
الإصدار 2.2.0-beta01
22 آب (أغسطس) 2019
تم إصدار androidx.room:room-*:2.2.0-beta01
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى إيقاف إعادة إصدار قيم جديدة بعد فترة زمنية معيّنة في طلب بحث Coroutine Flow. (b/139175786)
- تم إصلاح خطأ كان يمنع Room من قبول رمز تجزئة مخطط قديم أثناء فتح قاعدة بيانات لم يتم نقلها منذ الإصدار 1.0 من Room، ما يؤدي إلى حدوث عطل أثناء التشغيل بسبب مخطط غير صالح. (b/139306173)
الإصدار 2.2.0-alpha02
7 آب (أغسطس) 2019
تم إصدار androidx.room:room-*:2.2.0-alpha02
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الميزات الجديدة
- مسار الكوروتينات: يمكن الآن أن تكون طرق
@Query
DAO من نوع الإرجاعFlow<T>
. ستعيد عملية بث البيانات التي تم عرضها مجموعة جديدة من القيم في حال إلغاء صلاحية الجداول التي يتم رصدها في طلب البحث. يُعدّ تعريف دالة DAO باستخدام نوعChannel<T>
للعائد خطأً، ويشجّعك Room بدلاً من ذلك على استخدامFlow
ثم استخدام الدوال المجاورة لتحويلFlow
إلىChannel
. b/130428884 - توسيع الإسقاطات: تمت إضافة خيار تجميع تجريبي جديد
room.expandProjection
يتسبب في إعادة كتابة طلب بحث باستخدام إسقاط نجمة ليحتوي فقط على الأعمدة في النوع المكرّر من النوع POJO. على سبيل المثال، بالنسبة إلى طريقة DAO مع@Query("SELECT * FROM Song")
التي تعرض POJO باسمSongIdAndTitle
مع حقلين فقط. بعد ذلك، ستعيد Room كتابة query ليكونSELECT id, title FROM Song
بحيث يتم جلب الحد الأدنى من مجموعة الأعمدة لتلبية نوع الإرجاع. يزيل هذا الإجراء بشكل أساسي تحذيرCURSOR_MISMATCH
الذي يظهر عندما يعرض الطلب عمودًا إضافيًا لا يتطابق مع أي حقل في نوع POJO الذي يتم عرضه. -
onDestructiveMigrate
هي واجهة برمجة تطبيقات جديدة للرجوع تمت إضافتها إلىRoomDatabase.Callback
لحالات نقل Room لقاعدة بيانات بشكل مدمِّر. b/79962330
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يؤدي فيه الغرفة إلى إنشاء رمز غير صحيح باستخدام طريقة كإعداد الحقل عند حماية الحقل. b/136194628
- تم إصلاح الخطأ الذي تسبَّب في وضع أداة ValueTrack (NPE) في عملية ثانية عند تفعيل خيار إلغاء المثيلات المتعددة وإيقاف الخدمة. b/137454915
- تم إصلاح الخطأ الذي كان يؤدي إلى عدم التعرّف بشكل صحيح على نوع العرض لدالة تعليق مكتسبة تم التعليق عليها باستخدام
@RawQuery
. b/137878827 - تم تعديل الرمز الذي تم إنشاؤه لـ
@Relation
عندما يكون المفتاح ذا الصلة من النوع BLOB لاستخدامByteBuffer
مشابه. b/137881998 - تم إصلاح خطأ كان يؤدي إلى تحذير Room بشأن عدم توفّر وظائف الإعداد في الكيانات البسيطة التي يتم استخدامها كمَعلمات لكيانات جزئية من
@Insert
و@Update
و@Delete
. b/138664463 - تم إصلاح خطأ كان يؤدي إلى تحذير Room بشأن عدم توفّر وظيفتَي التقديم والحصول لأحد
الأعمدة التي تم تجاهلها من خلال
@Entity
عند استخدام فئة العنصر في طُرق DAO معيّنة. b/138238182 - تم إصلاح الخطأ الذي كان يؤدي إلى عدم تحويل الغرفة بشكل صحيح وسيطات الربط المُسمّاة إلى وسيطات موضعية تؤدي إلى استثناء وقت التشغيل عند تنفيذ طلب بحث باستخدام معلَمات مُعاد استخدامها. b/137254857
الإصدار 2.2.0-alpha01
10 تموز (يوليو) 2019
الميزات الجديدة
- قاعدة بيانات مجمعة مسبقًا: يتوفر الآن واجهتا برمجة تطبيقات جديدتان في
RoomDatabase.Builder
لإنشاءRoomDatabase
باستخدام ملف قاعدة بيانات سبق أن تمت تعبئته. يُستخدمcreateFromAsset()
عندما يكون ملف قاعدة البيانات الذي تمت تعبئته تلقائيًا في مجلد مواد العرض لملف APK، بينما يُستخدَمcreateFromFile()
عندما يكون الملف في موقع عشوائي. تؤدي استخدامات واجهة برمجة التطبيقات هذه إلى تغيير سلوك عمليات النقل المدمرة، بحيث يحاول تطبيق Room أثناء عملية النقل الاحتياطية إعادة نسخ قاعدة البيانات المعبّأة تلقائيًا إن توفّرت، وإلا سيلجأ إلى إسقاط جميع الجداول وإعادة إنشائها. 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: أصبحت الغرفة الآن معالجًا للتعليقات التوضيحية من خلال Gradle، ويمكن تفعيل إمكانية الزيادة من خلال خيار المعالِج
room.incremental
. يمكنك الاطّلاع على خيارات "مجمع الغرف" للحصول على مزيد من المعلومات. إذا واجهت أي مشاكل، يُرجى إرسال بلاغ بشأن خطأ. نخطّط لتفعيل إمكانية الزيادة تلقائيًا في إصدار مستقبلي ثابت. b/112110217
إصلاح الأخطاء
- لن تنشر Room الرمز البرمجي
EmptySetResultException
إلى معالج الأخطاء العام عند التخلص من بث Rx للاستعلام قبل اكتماله. b/130257475 - تم إصلاح خلل كان يؤدي إلى ظهور رسالة خطأ غير صحيحة في Room عندما لا يكون لدالّة suspend
DAO التي تمت إضافة تعليق توضيحي إليها باستخدام
@RawQuery
نوع إرجاع. b/134303897 - لن تنشئ الغرفة بعد الآن محوِّلات DAO بأنواع أولية. b/135747255
الإصدار 2.1.0
الإصدار 2.1.0
13 حزيران (يونيو) 2019
تم إلغاء حجز الغرفة 2.1.0 بدون أي تغييرات من "2.1.0-rc01
". يمكن العثور على عمليات الربط المضمّنة في الإصدار هنا.
التغييرات المهمة منذ الإصدار 2.0.0
- FTS: تتيح الغرفة الآن الكيانات التي لديها جدول
FTS3 أو FTS4 للربط. يمكن الآن إضافة تعليقات توضيحية أيضًا باستخدام
@Fts3
أو@Fts4
للفئات التي تحتوي على تعليقات توضيحية باستخدام@Entity
، وذلك للإعلان عن إحدى الفئات باستخدام جدول بحث في النص الكامل للربط. وتتوفّر خيارات FTS لمزيد من التخصيص من خلال طرق التعليق التوضيحي. - المشاهدات: تتيح Room الآن الإفصاح عن فئة كطلب بحث محفوظ، والمعروف أيضًا باسم
عرض، باستخدام التعليق التوضيحي
@DatabaseView
. - Couroutines: يمكن الآن أن تكون طرق DAO دوال معلّقة. أدرِج
room-ktx
في التبعيات للاستفادة من هذه الوظيفة. يقدّم عنصر ktx أيضًا دالة الإضافةRoomDatabase.withTransaction
لأداء معاملات قاعدة البيانات ضمن دالة معالجة متعدّدة المهام. - القيمة التلقائية: يتيح Room الآن تعريف الفصول المُشارَك فيها AutoValue
ككائنات وعناصر POJO. يمكن الآن الإعلان عن التعليقات التوضيحية للغرفة
@PrimaryKey
و@ColumnInfo
و@Embedded
و@Relation
بالطرق المجرّدة للصف الذي يتضمّن تعليقات توضيحية للقيم. يُرجى العِلم أنّ هذا التعليق التوضيحي يجب أيضًا أن يصاحبه@CopyAnnotations
حتى يتسنى للغرفة فهمها بشكل صحيح. - دعم إضافي للوظائف غير المتزامنة: تتيح الآن طرق DAO التي تمّت إضافة تعليقات توضيحية إليها باستخدام
@Insert
أو@Delete
أو@Update
، بالإضافة إلى@Query
التي تحتوي على عباراتINSERT
أوDELETE
أوUPDATE
، استخدام أنواع النتائج RxCompletable
وSingle
وMaybe
ونوع النتيجة GuavaListenableFuture
، ويمكن أيضًا استخدامها كوظائف متوقفة مؤقتًا. enableMultiInstanceInvalidation
هي واجهة برمجة تطبيقات جديدة فيRoomDatabase.Builder
لتفعيل عمليات الإيقاف في مثيلات متعددة من RoomDatabase باستخدام ملف قاعدة البيانات نفسه.fallbackToDestructiveMigrationOnDowngrade
هي واجهة برمجة تطبيقات جديدة فيRoomDatabase.Builder
لإعادة إنشاء قاعدة البيانات تلقائيًا في حال هبوط الإصدار.ignoredColumns
هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي@Entity
يمكن استخدامها ل listing ignored fields by name.- سيستخدم Room الآن بشكلٍ صحيح المنشئ الأساسي في Kotlin في فئات البيانات، وبالتالي لن يكون عليك تحديد السمات على أنّها
vars
.
الإصدار 2.1.0-rc01
29 أيار (مايو) 2019
إصلاح الأخطاء
- تم إصلاح خطأ في إعداد Room قد يحدث بسبب إعداد temp_store الذي سبق ضبطه. b/132602198
- تم إصلاح تحذير بشأن استخدام علامات الاقتباس المزدوجة للمستخدمين الذين يستخدمون SQLite 3.27.0 والإصدارات الأحدث. b/131712640
- تم إصلاح الخطأ الذي يمكن أن يتسبب فيه SmallationTracker في التسبب في تعطُّل عندما تحدث عمليات تحقق متعددة للإبطال بالتوازي. b/133457594
الإصدار 2.1.0-beta01
7 أيار (مايو) 2019
تم إصدار الإصدار androidx.room 2.1.0-beta01
بدون أي تغييرات عن الإصدار 2.1.0-alpha07. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الإصدار 2.1.0-alpha07
25 نيسان (أبريل) 2019
تغييرات واجهة برمجة التطبيقات / السلوك
- تم تغيير الدالة
RoomDatabase.withTransaction
لإضافةCoroutineScope
كمستلِم بدلاً من استخدام كتلة دالة. ويمنع ذلك تخطّي الغلافcoroutineScope { }
الإضافي الذي يُستخدَم لتشغيل الإجراءات في مجموعة المعاملات بشكل متزامن.
إصلاح الأخطاء
- تم إصلاح الخطأ الذي يفشل في الغرفة في مطابقة TypeConverter لدالة Kotlin DAO التي تحتوي على معلمة من نوع المجموعة. b/122066791
الإصدار 2.1.0-alpha06
22 آذار (مارس) 2019
تغييرات واجهة برمجة التطبيقات / السلوك
- يتم الآن تسلسل طلبات بحث المعاملات غير المتزامنة بحيث لا تستخدم Room
أكثر من سلسلة محادثات واحدة لتنفيذ معاملات قاعدة البيانات.
تمت إضافة
RoomDatabase.Builder.setTransactionExecutor(Executor)
للسماح بضبط المنفِّذ لاستخدامه في المعاملات. - لن يلتف
RoomDatabase.runInTransaction(Callable)
الاستثناءات المحددة في RuntimeExceptions. b/128623748
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى إيقاف أداة تتبُّع الإبطال عن مراقبة جدول محتوى في حال إضافة مراقبين لكل من جدول المحتوى وجدول FTS محتوى خارجي. b/128508917
- تم تعديل قواعد SQLite في Room لتتطابق مع SQLite 3.24.0. b/110883668
الإصدار 2.1.0-alpha05
13 آذار (مارس) 2019
الميزات الجديدة
- تسمح لك دالة الإضافة
RoomDatabase.withTransaction
بإجراء معاملات قاعدة البيانات بأمان داخل الكوروتين. تتوفّر وظائف إضافات الغرف مع دعم وحدات معالجة المهام المتزامنة في العنصرroom-ktx
. - يمكن الآن أن تكون طرق DAO غير المجردة التي تمت إضافة تعليقات توضيحية إليها باستخدام
@Transaction
وظائف تعليق. b/120241587
تغييرات واجهة برمجة التطبيقات / السلوك
- تمت إعادة تسمية العنصر
room-coroutines
إلىroom-ktx
وفقًا لنظام التسمية نفسه المستخدَم في عناصر androidx الأخرى. - تم إيقاف
beginTransaction
وsetTransactionSuccessful
وendTransaction
فيRoomDatabase
نهائيًا واستبدالها بـrunInTransaction
ووظيفة الإضافةroom-ktx
withTransaction
.
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى إسقاط مَعلمات أداة تقسيم النصوص إذا كانت أداة التقسيم المستخدَمة هي SIMPLE. b/125427014
- تم إصلاح الخطأ الذي كان يفشل في الغرفة في التعرّف بشكل صحيح على دوال التعليق التي تتضمن معلمات من نوعها فئة داخلية. b/123767877
- تم إصلاح الخطأ الذي كان يؤدي إلى إعداد طلب البحث في سلسلة البيانات الرئيسية بشكل متحمّس أثناء إعداد طريقة
@Query
DAO المؤجلة باستخدام عباراتINSERT
أوUPDATE
أوDELETE
. b/123695593 - تم إصلاح أخطاء متنوعة كانت تؤدي إلى إنشاء Room لرمز غير صحيح لبعض وظائف التعليق. b/123466702 وb/123457323
- تم إصلاح خلل كان يؤدي إلى عدم إيقاف استخدام الطرق المتوقّفة نهائيًا بشكل صحيح في الرمز الذي تم إنشاؤه. b/117602586
- تم تعديل الإصدار المتوافق مع Room من androidx.sqlite إلى 1.0.2 الذي يحتوي على إصلاحات للتعامل بشكل صحيح مع قواعد البيانات التالفة. b/124476912
المشاكل المعروفة
- تعتمد الغرفة من 2.1.0 -alpha05 على عنصر
kotlinx-metadata-jvm
غير المتوفّر حاليًا في Maven Central (KT-27991). يمكن حلّ هذه المشكلة من خلال إضافةmaven { url "https://kotlin.bintray.com/kotlinx/" }
إلى مستودعات المشاريع.
الإصدار 2.1.0-alpha04
25 كانون الثاني (يناير) 2019
الميزات الجديدة
- يمكن الآن لطرق DAO التي تمت إضافة تعليقات توضيحية لها باستخدام
@Query
وتتضمن عباراتINSERT
أوUPDATE
أوDELETE
عرض أنواع غير متزامنةSingle
وMayble
وCompletable
وListenableFuture
. بالإضافة إلى ذلك، يمكن أن تكون هذه الوظائف معلّقة. b/120227284
تغييرات واجهة برمجة التطبيقات / السلوك
- ستعرض الغرفة الآن رسالة خطأ إذا كانت طريقة DAO غير المجردة التي تم التعليق عليها باستخدام
@Transaction
تعرض نوعًا غير متزامن مثلSingle
أوMayble
أوCompletable
أوLiveData
أوListenableFuture
. نظرًا لحصر سلسلة المعاملات، من المستحيل حاليًا على الغرفة بدء أو إنهاء معاملة حول دالة قد تؤدي إلى تنفيذ طلبات بحث في سلاسل محادثات مختلفة. b/120109336 - كان
OnConflictStrategy.FAIL
وOnConflictStrategy.ROLLBACK
@Deprecated
لأنّهما لا يعملان على النحو المطلوب مع روابط SQLite الحالية في Android. b/117266738
إصلاح الأخطاء
- تم إصلاح الخطأ المتمثل في عدم استخدام Room بشكل صحيح لـ TypeConverter من نوع الرجوع إذا كانت طريقة DAO دالة تعليق. b/122988159
- تم إصلاح خطأ كان يؤدي إلى تحديد Room بشكل غير صحيح لوظائف تعليق الأداء المُكتسَبة على أنّها غير معلّقة. b/122902595
- تم إصلاح خطأ كان يؤدي إلى إنشاء Room لرمز برمجي غير صحيح عندما كان حقل
@Embedded
في فئة رئيسية وكان يتم استخدامه في فئات فرعية متعددة. b/121099048 - تم إصلاح مشكلة توقُّف قاعدة البيانات عن العمل عند استدعاء DAO دوالّ تعليق بين
beginTransaction()
وendTransaction()
. b/120854786
الإصدار 2.1.0-alpha03
4 كانون الأول (ديسمبر) 2018
التغييرات في واجهة برمجة التطبيقات
- تأخذ FTS
tokenizer
في@Fts3
/@Fts4
الآن سلسلة بدلاً من تعداد. يتيح ذلك استخدام أدوات تقسيم الكلمات المخصّصة من خلال Room. لا تزال أدوات تقسيم السلسلة المضمّنة محدّدة فيFtsOptions
كسلاسل ثابتة. b/119234881
الميزات الجديدة
- Couroutines: يمكن الآن أن تكون طرق DAO دوال تعليق. لإتاحة وظائف التعليق في الغرفة، تم إصدار عنصر جديد، وهو
room-coroutines
. b/69474692 - تتيح الآن طرق DAO التي تمت عليها تعليقات توضيحية باستخدام
@Insert
أو@Delete
أو@Update
استخدامListenableFuture
كنوع الإرجاع. b/119418331
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى محاولة Room العثور بشكلٍ غير صحيح على مُنشئ يحتوي على أعمدة في سمة
ignoredColumns
من@Entity
. b/119830714 - تم إصلاح الخطأ الذي كان لا يؤدي فيه الغرفة إلى وضع علامة على معلَمات طريقة DAO باعتبارها نهائية في التنفيذ الذي تم إنشاؤه. b/118015483
- تم إصلاح خلل كان يؤدي إلى تعطُّل معالج Room عند الإبلاغ عن خطأ في طلب بحث يتضمّن رموزًا خاصة. b/119520136
- تم إصلاح خطأ كان يؤدي إلى رفض Room لتنفيذات
Collection
المختلفة الأخرى كوسيطات لتعبيرIN
. b/119884035 - تم إصلاح خلل كان يؤدي إلى جمع البيانات غير الصالحة في LiveData التي تم إرجاعها من Room عند مراقبتها إلى الأبد، ما يؤدي إلى إيقاف إصدار بيانات جديدة. b/74477406
- تم تعديل رمز الإغلاق في
RoomDatabase
لتقليل تزايد الطلب على القفل. b/117900450
الإصدار 2.1.0-alpha02
30 تشرين الأول (أكتوبر) 2018
الميزات الجديدة
- تمت إضافة إمكانية الإشارة إلى
@DatabaseView
في@Relation
. b/117680932
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يؤدي فيه الغرفة إلى تنفيذ عمليات إدخال/إخراج القرص في سلسلة التعليمات الرئيسية عند الاشتراك والتخلص من نوع إرجاع Rx. b/117201279
- تم إصلاح خطأ كان يؤدي إلى تعذُّر العثور على محوِّل أنواع مناسب لحقل في فئة عنصر Kotlin. b/111404868
- تم إصلاح خلل كان يؤدي إلى إنشاء Room لرمز غير صحيح لتنفيذ واجهة
DAO
يحتوي على طريقة Kotlin تلقائية لا تحتوي على وسيطات. b/117527454 - تم تعديل معالج قواعد لغة SQLite في Room، ما أدى إلى حلّ مشكلة في الأداء كانت تؤدي إلى زيادة وقت الإنشاء. b/117401230
الإصدار 2.1.0-alpha01
8 تشرين الأول (أكتوبر) 2018
الميزات الجديدة
- البحث التام في النصوص: يتيح Room الآن استخدام الكيانات التي تحتوي على جدول ربط FTS3 أو FTS4. يمكن الآن إضافة تعليقات توضيحية أيضًا باستخدام
@Fts3
أو@Fts4
للفئات التي تحتوي على تعليقات توضيحية باستخدام@Entity
، وذلك للإعلان عن فئة باستخدام جدول بحث في النص الكامل للتعيين. تتوفّر خيارات البحث التام في النصوص لإجراء المزيد من التخصيص من خلال طرق التعليق التوضيحي. 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
: كانت الغرفة تتطلّب في السابق أن تكون الحقول التي تحتوي على تعليقات توضيحية@Relation
قابلة للضبط، ولكن يمكن الآن أن تكون مَعلمات دالة الإنشاء. -
enableMultiInstanceInvalidation
: هي واجهة برمجة تطبيقات جديدة فيRoomDatabase.Builder
لتفعيل إلغاء الصلاحية في عدّة نُسخ من RoomDatabase باستخدام ملف قاعدة البيانات نفسه. تعمل آلية إلغاء صلاحية النُسخ المتعددة هذه أيضًا على مستوى عمليات متعدّدة. 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
الإصدار 2.0.0
الإصدار 2.0.0
1 أكتوبر 2018
تم طرح الإصدار androidx.room 2.0.0
بدون أي تغييرات عن الإصدار 2.0.0-rc01.
الإصدار 2.0.0-rc01
20 أيلول (سبتمبر) 2018
تم طرح الإصدار androidx.room 2.0.0-rc01
بدون أي تغييرات عن الإصدار 2.0.0-beta01.
الإصدار 2.0.0-beta01
2 تموز (يوليو) 2018
تغييرات واجهة برمجة التطبيقات / السلوك
- تمت إضافة السمة
RoomDatabase.Builder.setQueryExecutor()
للسماح بتخصيص مكان تنفيذ طلبات البحث - تمت إضافة دعم RxJava2
Observable
- أصبحت عمليات تنفيذ DAO وقاعدة البيانات التي تم إنشاؤها نهائية الآن
إصلاح الأخطاء
- تحديد اسم الفئة/الحقل في خطأ "لا يمكن العثور على getter للحقل" b/73334503
- تم إصلاح التوافق مع الإصدارات القديمة من RoomOpenHelper في الإصدار b/110197391
التبعيات التي تم استخدامها قبل AndroidX
بالنسبة إلى الإصدارات الأقدم من Room التي تسبق AndroidX، يجب تضمين التبعيات التالية:
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
19 حزيران (يونيو) 2018
الغرفة 1.1.1
متطابقة مع الغرفة 1.1.1-rc1
.
الإصدار 1.1.1-rc1
16 أيار (مايو) 2018
ننصح بشدة
باستخدام المساحة 1.1.1-rc1
بدلاً من 1.1.0
إذا كنت تستخدم عمليات نقل البيانات.
تم إصلاح خطأ كان يؤدي إلى عدم معالجة Room لعمليات الإعداد بعد نقل البيانات بشكل صحيح b/79362399
الإصدار 1.1.0
الإصدار 1.1.0-beta3
19 نيسان (أبريل) 2018
إصلاح الأخطاء
- إصلاح خطأ الترجمة عندما يشير عنصر Kotlin POJO إلى عنصر علاقة تم تحديده في Java b/78199923
الإصدار 1.1.0-beta2
5 نيسان (أبريل) 2018
إصلاح الأخطاء
تم إصلاح خطأ فادح في عمليات تنفيذ Rx
Single
وMaybe
في الغرفة حيث كان يُعيد استخدام طلب البحث مسبقًا، ما يتسبّب في حدوث مشاكل إذا أضفت أكثر من مراقب واحد إلى النتائج المعروضةSingle
أوMaybe
. b/76031240لن يؤدي [RoomDatabase.clearAllTables][ref-clearAllTables] إلى
VACUUM
قاعدة البيانات إذا تم استدعاؤه داخل معاملة. b/77235565
الإصدار 1.1.0-beta1
21 آذار (مارس) 2018
تغييرات واجهة برمجة التطبيقات
- استنادًا إلى الملاحظات المتعلّقة بمراجعة واجهة برمجة التطبيقات، لم يعُد
@RawQuery
يقبل ضبطString
كمَعلمة طلب بحث. عليك استخدام [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (اطّلِع على [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] لإنشاء مثيل من [SupportSQLiteQuery][ref-SupportSQLiteQuery] بسهولة مع إمكانية استخدام الوسيطة). - تقبل الآن طريقة [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] في RoomDatabase.Builder القيمة
vararg int
بدلاً منvararg Integer
.
إصلاح الأخطاء
- يحاول [RoomDatabase.clearAllTables][ref-clearAllTables] الآن إعادة المساحة إلى نظام التشغيل من خلال ضبط نقطة تفتيش WAL و
VACUUM
قاعدة البيانات. - يقبل [
@RawQuery
][ref-RawQuery] الآن أيّ عنصر Pojo للموقعobservedEntities
طالما أنّ عنصر Pojo يشير إلى عنصر واحد أو أكثر من خلال حقولEmbedded
أوRelation
. b/74041772 - الفهرسة: يعالج الآن تنفيذ DataSource في Room بشكل صحيح التبعيات في الجداول المتعددة (مثل العلاقات والدمج). في السابق، كان من الممكن ألا تؤدي هذه الطلبات إلى عرض نتائج جديدة أو قد يتعذّر تجميعها. b/74128314
الإصدار 1.1.0-alpha1
22 كانون الثاني (يناير) 2018
الميزات الجديدة
RawQuery
: تسمح واجهة برمجة التطبيقات الجديدة هذه لطرق@Dao
بتلقّي لغة الاستعلامات البنيوية (SQL) كمَعلمة طلب بحث. b/62103290، b/71458963fallBackToDestructiveMigrationsFrom
: تتيح واجهة برمجة التطبيقات الجديدة هذه فيRoomDatabase.Builder
التحكّم بشكل أدق في إصدارات المخططات التي تبدأ عندها عمليات نقل البيانات الهدّامة (مقارنةً بـ fallbackToDestructiveMigration) b/64989640- لا تتيح Room الآن سوى واجهات برمجة تطبيقات Paging API الأحدث (الإصدار التجريبي 4 والإصدارات الأحدث)، ما يعني إيقاف استخدام واجهة برمجة التطبيقات
LivePagedListProvider
التي سيتم إيقافها نهائيًا. لاستخدام الإصدار التجريبي من Room الجديد، عليك استخدام الإصدارalpha-4
أو إصدار أحدث، والتبديل من الإصدارLivePagedListProvider
إلى الإصدارLivePagedListBuilder
إذا لم يسبق لك ذلك.
إصلاح الأخطاء
- تم تحسين التوافق مع أنواع Kotlin Kapt. b/69164099
- لا يؤدي ترتيب الحقول إلى إلغاء صلاحية المخطط بعد الآن. b/64290754