חדר
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
16 ביולי 2025 | 2.7.2 | - | - | 2.8.0-alpha01 |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Room, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
התלויות של Room כוללות בדיקות של העברות נתונים ב-Room ו-Room RxJava
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle
של האפליקציה או המודול:
Kotlin
dependencies { val room_version = "2.7.2" 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.7.2" 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.
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות של Build.
לחלופין, בספריות שאינן של Android (כלומר, מודולים של Gradle ב-Java או ב-Kotlin בלבד), אפשר להסתמך על androidx.room:room-common
כדי להשתמש בהערות של Room.
הגדרת אפשרויות של Compiler
ל-Room יש את האפשרויות הבאות לעיבוד הערות.
room.schemaLocation |
directory
מאפשר לייצא סכימות של מסדי נתונים לקובצי JSON בספרייה שצוינה. מידע נוסף זמין במאמר בנושא העברת חדרים. |
room.incremental |
boolean
הפעלת מעבד ההערות המצטבר של Gradle. ערך ברירת המחדל הוא true .
|
room.generateKotlin |
boolean
Generate Kotlin source files instead of Java. נדרש KSP. ערך ברירת המחדל הוא true החל מגרסה 2.7.0.
פרטים נוספים זמינים בהערות לגבי גרסה 2.6.0, שבה הוצגה התכונה.
|
שימוש בפלאגין Room Gradle
בגרסה 2.6.0 ואילך של Room, אפשר להשתמש ב-Room Gradle Plugin כדי להגדיר אפשרויות עבור Room compiler. התוסף מגדיר את הפרויקט כך שסכימות שנוצרו (שהן פלט של משימות ההידור ומשמשות להעברות אוטומטיות) מוגדרות בצורה נכונה כדי ליצור בנייה שניתן לשחזר ולשמור במטמון.
כדי להוסיף את הפלאגין, מגדירים את הפלאגין ואת הגרסה שלו בקובץ ה-build של Gradle ברמה העליונה.
מגניב
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
בקובץ ה-Gradle build ברמת המודול, מפעילים את הפלאגין ומשתמשים בתוסף room
.
מגניב
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
חובה להגדיר schemaDirectory
כשמשתמשים ב-Room Gradle Plugin. הפעולה הזו תגדיר את קומפיילר Room ואת משימות הקומפילציה השונות ואת הקצוות העורפיים שלו (javac, KAPT, KSP) כך שקבצי הסכימה יופקו לתיקיות עם טעמים שונים, לדוגמה schemas/flavorOneDebug/com.package.MyDatabase/1.json
. צריך להכניס את הקבצים האלה למאגר כדי להשתמש בהם לאימות ולהעברות אוטומטיות.
אי אפשר להגדיר חלק מהאפשרויות בכל הגרסאות של Room Gradle Plugin, למרות שהן נתמכות על ידי Room compiler. בטבלה שלמטה מפורטת כל אפשרות, ומוצגת הגרסה של Room Gradle Plugin שבה נוסף תמיכה בהגדרת האפשרות הזו באמצעות התוסף room
. אם הגרסה שלכם נמוכה יותר, או אם האפשרות עדיין לא נתמכת, אתם יכולים להשתמש במקום זאת באפשרויות של מעבד הערות.
אפשרות | מגרסה |
---|---|
room.schemaLocation (שדה חובה) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
שימוש באפשרויות של מעבד אנוטציות
אם אתם לא משתמשים ב-Room Gradle Plugin, או אם האפשרות שאתם רוצים לא נתמכת בגרסה של הפלאגין, אתם יכולים להגדיר את Room באמצעות אפשרויות של מעבד הערות, כמו שמתואר במאמר הוספת תלות ב-build. האופן שבו מציינים אפשרויות של הערות תלוי בשאלה אם משתמשים ב-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 ידע על הספרייה הזו כשהוא מבצע בדיקות עדכניות.
העברת מסד נתונים של Room
מציגה הטמעה מלאה של CommandLineArgumentsProvider
שמספקת
את מיקום הסכימה.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.
גרסה 2.8
גרסה 2.8.0-alpha01
16 ביולי 2025
androidx.room:room-*:2.8.0-alpha01
משוחרר. גרסה 2.8.0-alpha01 מכילה את הקומטים האלה.
תכונות חדשות
- נוסף ארטיפקט חדש
androidx.room:room-sqlite-wrapper
שמכיל ממשקי API לקבלתSupportSQLiteDatabase
wrapper של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)
גרסה 2.7
גרסה 2.7.2
18 ביוני 2025
androidx.room:room-*:2.7.2
משוחרר. גרסה 2.7.2 מכילה את ההתחייבויות האלה.
תיקוני באגים
- תוקנה בעיה שבה ערכי ההערות נקראו בצורה שגויה כשמעבדים מקורות מקומיים באמצעות KSP, ולפעמים ייצוא הסכימה היה חסר. (b/416549580)
- תוקן באג שבו הערות מובילות ב-SQL גרמו להצהרות להתבצע כאילו היו שאילתות לא קריאות. (b/413061402)
- תוקנה בעיה שבה פלאגין Gradle של Room לא מצליח לבצע הגדרה בגלל שספריית הסכימה ריקה. (b/417823384)
- הספרייה לא תציג יותר את השגיאה
SQLiteException
אם לוקח יותר מדי זמן ליצור חיבור, אלא תשלח הודעה ליומן. רישום ביומן במקום הפעלה של חריגה מאפשר לעקוף את ההשעיה של לולאות ב-iOS שגורמת ל-Room לפרש בצורה שגויה את הזמן הקצוב לתפוגה שמתרחש ב-Kotlin Coroutine בזמן קבלת החיבור, וכך למנוע את הפעלת החריגה כשמעבירים אפליקציית iOS לרקע ואחר כך מפעילים אותה מחדש באמצע פעולת מסד נתונים. (b/422448815)
גרסה 2.7.1
23 באפריל 2025
androidx.room:room-*:2.7.1
משוחרר. גרסה 2.7.1 מכילה את התחייבויות האלה.
תיקוני באגים
- תוקן באג
IndexOutOfBoundsException
במהלך אימות של ממיר סוג שסופק. (b/409804755). - תמיכה ב-
RoomDatabase.runInTransaction()
כש-SQLiteDriver
מוגדר עם חדר. (b/408364828).
גרסה 2.7.0
9 באפריל 2025
androidx.room:room-*:2.7.0
משוחרר. גרסה 2.7.0 מכילה את הקומטים האלה.
שינויים חשובים מאז גרסה 2.6.0
- תמיכה ב-Kotlin Multiplatform (KMP): בגרסה הזו, בוצע רפקטורינג ב-Room כדי להפוך אותה לספריית Kotlin Multiplatform (KMP). הפלטפורמות הנתמכות כרגע הן Android, iOS, JVM (מחשב), Mac מקורי ו-Linux מקורי. למידע נוסף על תחילת השימוש ב-Room KMP, אפשר לעיין במסמכים הרשמיים של Room KMP. במסגרת התמיכה ב-KMP, אפשר גם להגדיר את Room עם
SQLiteDriver
. כדי לקבל מידע על העברת אפליקציה קיימת לממשקי ה-API של מנהל ההתקן ול-Room KMP, אפשר לעיין במסמכי ההעברה. - יצירת קוד Kotlin ב-KSP מופעלת כברירת מחדל אם העיבוד מתבצע באמצעות KSP. בפרויקטים של KAPT או Java בלבד, Room עדיין ייצור מקורות Java.
- Kotlin 2.0 ו-KSP2: Room מכוונת עכשיו לשפת Kotlin 2.0, ולכן הפרויקטים יצטרכו גם לעבור קומפילציה עם Kotlin 2.0 וגרסה שפה ששווה לה או גבוהה ממנה. נוסף גם תמיכה ב-KSP2, ומומלץ להשתמש בו כשמשתמשים ב-Room עם Kotlin 2.0 ומעלה.
גרסה 2.7.0-rc03
26 במרץ 2025
androidx.room:room-*:2.7.0-rc03
משוחרר. גרסה 2.7.0-rc03 מכילה את הקומטים האלה.
תיקוני באגים
- האפליקציה לא זורקת יותר
InterruptedException
כששרשור מופרע במהלך ההפעלה של ממשקי API חוסמים של Room, כולל פונקציות חוסמות של DAO (b/400584611). - מיישמים מחדש את מאגר החיבורים של Room בניסיון להקל על
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
ובעיות דומות (b/380088809).
גרסה 2.7.0-rc02
12 במרץ 2025
androidx.room:room-*:2.7.0-rc02
משוחרר. גרסה 2.7.0-rc02 מכילה את הקומטים האלה.
תיקוני באגים
- תיקון של העברות אוטומטיות שטיפלו באופן שגוי בעמודה חדשה בטבלת FTS. (b/348227770, Ic53f3)
- תיקון קריסה של מהדר Room בגלל
NullPointerException
במהלך עיבוד מקורות שאינם JVM באמצעות KSP. (b/396607230, I693c9) - תוקנה הבעיה שבה Room לא מבטל את התוקף של טבלאות בסיום השימוש בחיבור הכתיבה. (b/340606803, I73ef6)
גרסה 2.7.0-rc01
26 בפברואר 2025
androidx.room:room-*:2.7.0-rc01
משוחרר. גרסה 2.7.0-rc01 מכילה את הקומטים האלה.
תיקוני באגים
- נפתרה בעיה שגרמה לכך ש-Room לא הגדיר את
busy_timeout
בחיבור הראשוני למסד הנתונים, מה שהוביל לבעיות ב-SQLException: Error code: 5, message: database is locked
(I93208, b/380088809). - תוקנה בעיה בקומפיילר של Room שגרמה לקריסת המעבד של KSP כשעיבד ערכות מקוריות (כמו iOS) ב-Kotlin 2.1.x וב-KSP1 (I883b8, b/396607230).
גרסה 2.7.0-beta01
12 בפברואר 2025
androidx.room:room-*:2.7.0-beta01
משוחרר. גרסה 2.7.0-beta01 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה בעיה שגרמה לכך ש-
RoomDatabase.inTransaction()
פתח מסד נתונים סגור כשהוא לא היה אמור לעשות זאת, והיה אמור להחזיר במהירות את הערך false אם מסד הנתונים סגור (b/325432967). - תוקנה קריסה (
IllegalArgumentException: not a valid name
) בקומפיילר של Room במהלך עיבוד פונקציות DAO עם מחלקות מוטבעות / מחלקות ערכים של Kotlin (b/388299754). - כוללים כללי Proguard בפריט המידע שנוצר בתהליך פיתוח (Artifact) של JVM ב-
room-runtime
, כדי שהבונה שמוגדר כברירת מחדל של הטמעת מסד הנתונים שנוצר לא יוסר, כי הוא משמש לאתחול ברירת המחדל של Room שמשתמשת בהשתקפות (b/392657750).
גרסה 2.7.0-alpha13
29 בינואר 2025
androidx.room:room-*:2.7.0-alpha13
משוחרר. גרסה 2.7.0-alpha13 מכילה את ההתחייבויות האלה.
שינויים ב-API
- ספריית Room מכוונת עכשיו לשפת Kotlin 2.0, ולכן הפרויקטים יצטרכו לעבור קומפילציה גם עם Kotlin 2.0 וגרסה שוות ערך או גבוהה יותר של השפה. (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 Plugin, כדי לפתור בעיה שבה ספריית הסכימה לא הוגדרה כראוי על ידי הפלאגין. (Iec3c4, b/379159770)
External Contribution
- תוקנה בעיה בשילוב של
Room
חלוקה לדפים שגרמה לקפיצות בממשק המשתמש כשהמפתח הראשוני לרענון היה קרוב מדי לסוף הרשימה. תודה לאווה! (I2abbe, b/389729367)
גרסה 2.7.0-alpha12
11 בדצמבר 2024
androidx.room:room-*:2.7.0-alpha12
משוחרר. גרסה 2.7.0-alpha12 מכילה את הקומטים האלה.
שינויים ב-API
- מוסיפים את ה-API הניסיוני
RoomDatabase.Builder.setInMemoryTrackingMode()
כדי להגדיר אם Room ישתמש בטבלה בזיכרון או לא למעקב אחר ביטול תוקף. (I2a9b2, b/185414040)
תיקוני באגים
- העברות הרסניות משמיטות עכשיו תצוגות כדי להבטיח שהן נוצרות מחדש, וכך מתאימות את ההתנהגות כשההגדרה
allowDestructiveMigrationForAllTables
מופעלת (ברירת המחדל של KMP) להתנהגות הקיימת כשהיא מושבתת. (0a3e83, b/381518941)
גרסה 2.7.0-alpha11
30 באוקטובר 2024
androidx.room:room-*:2.7.0-alpha11
משוחרר. גרסה 2.7.0-alpha11 מכילה את הקומטים האלה.
שינויים ב-API
- צריך לחזור לחתימת השיטה
convertRows()
שהוספתם כדי להפוך אותה לפונקציית השהיה שמקבלתRawRoomQuery
לזימון חדרים. (Ie57b5, b/369136627)
תיקוני באגים
- תוקנה הבעיה שבה נוצר קוד לא תקין בהודעות לכל החדר כשמשתמשים ב-
@Relation
בשילוב עםPagingSource
.
גרסה 2.7.0-alpha10
16 באוקטובר 2024
androidx.room:room-*:2.7.0-alpha10
משוחרר. גרסה 2.7.0-alpha10 מכילה את הקומטים האלה.
שינויים ב-API
- יצירת מחלקה פנימית
ByteArrayWrapper
כדי לתמוך ב-Relations עםByteBuffer
בפלטפורמות שאינן Android ו-JVM. (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 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה בעיה בהטמעה של
room-paging
ב-KMP שגרמה ל-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 מכילה את הקומטים האלה.
תכונות חדשות
- העברנו את פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) כך שיהיו תואמים ל-KMP.
room-paging
(Ib8756, b/339934824) - ה-API
invalidationTrackerFlow()
עבר המרה ל-API צד ראשון בשםInvalidationTracker.createFlow()
, ועכשיו הוא זמין לערכות מקור שאינן Android בפרויקטים של KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
שינויים ב-API
- הסרנו או החלפנו את כל האזהרות והודעות השגיאה ב-Room שבהן נעשה שימוש במילה
Cursor
, כיCursor
היא כבר לא מונח כללי מדויק לשימוש בגרסת ה-KMP של Room. (Id8cd9, b/334087492)
תיקוני באגים
- תוקנה בעיה שבה Room KMP ניסה להפיק קוד באמצעות
UUID
לפלטפורמות שאינן JVM. (b/362994709) - תוקנה בעיה ב-Room Gradle Plugin שגרמה לשגיאה כמו 'Cannot change attributes of configuration … after it has been locked for mutation' (אי אפשר לשנות מאפיינים של הגדרה … אחרי שהיא ננעלה לשינוי) כשנעשה בו שימוש בפרויקט KMP עם Compose Multiplatform. (b/343408758)
גרסה 2.7.0-alpha07
21 באוגוסט 2024
androidx.room:room-*:2.7.0-alpha07
משוחרר. גרסה 2.7.0-alpha07 מכילה את התחייבויות האלה.
תכונות חדשות
- התוסף Room Gradle יוסיף עכשיו באופן אוטומטי את הסכימות המיוצאות למקורות המשאבים של בדיקת המכשור של Android, כדי שאפשר יהיה להשתמש בהן על ידי
MigrationTestHelper
.
תיקוני באגים
- תוקנה בעיה שגרמה לכך שהערך 'actual' שנוצר של
RoomDatabaseConstructor
לא כלל את התוסף 'actual' בפונקציהinitialize
אם הפונקציה הזו גם בוטלה בהצהרה 'expect'. (359631627) - תוקנה בעיה שגרמה לכך שהערך 'בפועל' שנוצר של
RoomDatabaseConstructor
לא תאם לערך הנראות של ההצהרה 'צפוי'. (358138953)
גרסה 2.7.0-alpha06
7 באוגוסט 2024
androidx.room:room-*:2.7.0-alpha06
משוחרר. גרסה 2.7.0-alpha06 מכילה את הקומטים האלה.
שינויים ב-API
- שינוי הגדרת יצירת המופע של
RoomDatabase
בפרויקט KMP.
בגלל מודל הקומפילציה של Kotlin 2.0, אי אפשר יותר להשתמש באסטרטגיה של הפניה לפונקציה שעומדת להיווצר, בשם instantiateImpl()
. השקנו שני ממשקי API חדשים, @ConstructedBy
ו-RoomDatabaseConstructor
, שמחליפים את האסטרטגיה instantiateImpl()
. זו השיטה החדשה:
מגדירים אובייקט expect שמטמיע את
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
מקושרים את האובייקט להצהרת
@Database
באמצעות@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
יצירת מופע חדש של מסד נתונים, אבל בלי להעביר ארגומנט של יצרן
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
תיקונים של b/316978491, b/338446862 ושל b/342905180
- תמיכה ב-
@RawQuery
ב-Room KMP על ידי הוספת API חדש בשם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) - תוקנה בעיה שבה לפעמים Room זורק חריגה לגבי 'פג הזמן הקצוב לניסיון ליצור חיבור' בפרויקט KMP. (fa72d0, b/347737870)
- תיקון בעיה בהעברות אוטומטיות שגרמה לבדיקה של מפתחות זרים מוקדם מדי, לפני שסכימות של טבלאות אחרות השתנו בהתאם למפתחות הזרים החדשים. (7672c0, b/352085724)
גרסה 2.7.0-alpha05
10 ביולי 2024
androidx.room:room-*:2.7.0-alpha05
משוחרר. גרסה 2.7.0-alpha05 מכילה את הקומטים האלה.
שינויים ב-API
- השם של
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
annotated class לא היה חבילה. (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. שימו לב: התמיכה ב-Kotlin 2.0 עם KSP 2 עדיין לא מלאה, והצוות עובד על ממשקי ה-API השונים ועל שינויים בהתנהגות של הקומפיילר החדש. (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.
שינויים ב-API
- נוספה עומס יתר של
Room.databaseBuilder()
שמקבל פרמטר למבדה שנועד לשימוש עם פונקציה שנוצרה על ידי Room כדי להימנע משימוש בהשתקפות כשיוצרים מופע של ההטמעה שנוצרהRoomDatabase
. דוגמה לשימוש:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- הוספנו לבונה API להגדרת חדר עם
CoroutineContext
:RoomDatabase.Builder.setQueryCoroutineContext
. הערה: אפשר להגדירRoomDatabase
רק עם פונקציות הרצה באמצעותsetQueryExecutor
או עם הקשר של Coroutine, אבל לא עם שניהם. - נוסף API להגדרת חדר עם
SQLite
נהג:RoomDatabase.Builder.setDriver()
. מידע נוסף עלSQLite
Driver API זמין במסמכי התיעוד של SQLite KMP - הוספנו ממשקי API לגישה ל-
SQLiteConnection
הבסיסי מממשקי API של מנהלי התקנים:RoomDatabase.useReaderConnection
ו-RoomDatabase.useWriterConnection
. - ל-callbacks שקשורים לחדרים יש עכשיו גרסה עם עומס יתר שמקבלת
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
יחד עם כל ממשקי ה-API שלו, ועכשיו הארטיפקט ריק. צריך להסיר אותו מרשימת התלות.
גרסה 2.6
גרסה 2.6.1
29 בנובמבר 2023
androidx.room:room-*:2.6.1
משוחרר. גרסה 2.6.1 מכילה את הקומיטים האלה.
תיקוני באגים
- נפתרה בעיה בקוד שנוצר, שבה ערך ברירת המחדל של עמודות Double ב-
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, חשוב לזכור שיש הגבלות נוספות. אסור להשתמש במאפיינים מופשטים בתור פונקציות get של DAO או שאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לשכתב אותם כפונקציות כדי למנוע את התפיסה השגויה שלפיה ערך המאפיין הוא קבוע וכולל תוצאה קבועה שמאוחסנת. הגבלה נוספת שנוספה היא שאסור יותר להשתמש ב-Room ב-Kotlin CodeGen בסוגי החזרה של אוספים שניתן להגדיר כ-Nullable.
אזהרה: יכול להיות שהפרויקטים שלכם יהיו מחמירים יותר מבחינת האפשרות להגדיר ערך null כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, הערך nullability של ארגומנטים מסוג type חשוב, בעוד שב-Java המערכת מתעלמת ממנו ברוב המקרים. לדוגמה, נניח שיש לכם סוג החזרה `Flow<foo\>` והטבלה ריקה. ב-Java CodeGen, זה לא יגרום לבעיות, אבל ב-Kotlin CodeGen, תקבלו שגיאה. כדי להימנע מכך, תצטרכו להשתמש ב-`Flow<foo?\>`, בהנחה שערך null מוחזר. </foo?\></foo\>
- הוספנו ל-Room את הארטיפקט החדש של Room Gradle Plugin עם המזהה
androidx.room
, שפותר בעיות שונות שקיימות ב-Room בנוגע לקלט ולפלט של סכימות באמצעות אפשרויות של מעבד הערות Gradle. פרטים נוספים זמינים בהערות המוצר של Room גרסה 2.6.0-alpha02. - יש עכשיו תמיכה ב-KSP במחלקות ערכים בישויות Room. (4194095)
- יש עכשיו תמיכה ב-Room בסוגי החזרה של מפות מקוננות בפונקציות 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
במהלך פעולת upsert: אם החריגה2067 SQLITE_CONSTRAINT_UNIQUE
מופעלת במהלך פעולת upsert, הפעולה צריכה לבצע עדכון. (If2849, b/243039555)
גרסה 2.6.0-alpha03
9 באוגוסט 2023
androidx.room:room-*:2.6.0-alpha03
משוחרר. גרסה 2.6.0-alpha03 מכילה את הקומיטים האלה.
תכונות חדשות
שינויים ב-API
- נוצרה הערת סוג חדשה בשם
@MapColumn
כדי להחליף את@MapInfo
, שיצאה משימוש. לכל שם עמודה (keyColumnName
, valueColumnName
או שניהם) שמופיע בהערה@MapInfo
, צריך להצהיר על הערה@MapColumn
עםcolumnName
בלבד, ולהשתמש בהערה בארגומנט הספציפי של הטיפוס שאליו מתבצעת ההפניה (המפתח או הערך של המיפוי) בסוג ההחזרה של פונקציית ה-DAO. הסיבה לכך היא שההערה@MapColumn
משמשת ישירות בארגומנט מסוג בתוך סוג ההחזרה של פונקציית DAO, במקום בפונקציה עצמה כמו@MapInfo
. מידע נוסף זמין ב@MapColumn
מאמרי העזרה. (Ib0305, b/203008711) - קובצי API עודכנו כדי להוסיף הערות על השבתת תאימות (I8e87a, b/287516207)
- ממשקי ה-API של Room Gradle plugin עודכנו כך שלא תמיד נדרשות הגדרות לכל וריאנט. המשמעות היא שהפלאגין יכול לקבל מיקום גלובלי לכל הווריאציות בלי ליצור כמה ספריות, וכך מאפשר העברות חלקות יותר. בנוסף, הוא גמיש מספיק כדי לאפשר הגדרה ידנית של טעמים או של סכימות של סוגי build, ועדיין לשמור על היתרונות של הפלאגין (builds שניתנים לשחזור ולשמירה במטמון). (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 מכילה את הקומיטים האלה.
פלאגין Room Gradle
הגרסה החדשה הזו מכילה ארטיפקט חדש לתוסף Room Gradle עם המזהה androidx.room
, שפותר בעיות קיימות שונות ב-Room בנוגע לקלט ולפלט של סכימות באמצעות אפשרויות של מעבד הערות Gradle. התוסף Room Gradle מגדיר את הפרויקט כך שהסכימות שנוצרות, שמשמשות להעברות אוטומטיות ומופקות ממשימות ההידור, מוגדרות בצורה נכונה כדי ליצור גרסאות build שניתנות לשחזור ולשמירה במטמון. הפלאגין מציע DSL להגדרת המיקום של סכימת הבסיס:
room {
schemaDirectory("$projectDir/schemas/")
}
התוסף יגדיר את קומפיילר Room ואת משימות הקומפילציה השונות ואת קצה העורף שלו (javac, KAPT, KSP) כדי ליצור קובצי סכימה בתיקיות עם טעמים, כלומר schemas/flavorOneDebug/com.package.MyDatabase/1.json
. כמו תמיד, הקבצים האלה נשמרים במאגר כדי לשמש לאימות ולהעברות אוטומטיות. כשעוברים לשימוש בתוסף במקום באפשרויות של מעבד ההערות, צריך להעתיק את קובצי הסכימה הקיימים לספריות הטעמים שנוצרו על ידי התוסף. זו פעולת העברה חד-פעמית שצריך לבצע באופן ידני. התיעוד של הסכימה בכתובת developers.android.com יעודכן בעתיד אחרי שנקבל משוב והפלאגין יגיע למצב יציב, אז כדאי לנסות אותו.
שינויים ב-API
-
RoomDatabase.QueryCallback
הוגדר כממשק פונקציונלי כדי לאפשר שימושים בהמרת SAM. (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 מכילה את הקומיטים האלה.
תכונות חדשות
- תמיכה במחלקות ערכים ב-Room ל-KSP. מעכשיו אפשר להשתמש ב-Room כדי לתמוך במחלקות ערכים ביישות. (4194095)
- מעכשיו אפשר להפעיל את יצירת קוד Kotlin(או Kotlin CodeGen) ב-Room (4297ec0). כדי להפעיל את Kotlin CodeGen ב-Room, מוסיפים את שם האפשרות
room.generateKotlin
לאפשרויות המעבד של KSP. פרטים נוספים על העברת אפשרויות מעבד ל-KSP זמינים במסמכי התיעוד של KSP.
הערה: כשמשתמשים ב-Kotlin CodeGen, חשוב לזכור שיש הגבלות נוספות. אסור להשתמש במאפיינים מופשטים בתור פונקציות get של DAO או שאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לשכתב אותם כפונקציות כדי למנוע את התפיסה השגויה שלפיה ערך המאפיין הוא קבוע וכולל תוצאה קבועה שמאוחסנת. הגבלה נוספת שנוספה היא שאסור יותר להשתמש ב-Room ב-Kotlin CodeGen בסוגי החזרה של אוספים שניתן להגדיר כ-Nullable.
אזהרה: יכול להיות שהפרויקטים שלכם יהיו מחמירים יותר מבחינת האפשרות להגדיר ערך null כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, הערך nullability של ארגומנטים מסוג type חשוב, בעוד שב-Java המערכת מתעלמת ממנו ברוב המקרים. לדוגמה, נניח שיש לכם סוג החזרה `Flow<foo\>` והטבלה ריקה. ב-Java CodeGen, זה לא יגרום לבעיות, אבל ב-Kotlin CodeGen, תקבלו שגיאה. כדי להימנע מכך, תצטרכו להשתמש ב-`Flow<foo?\>`, בהנחה שערך null מוחזר. </foo?\></foo\>
שינויים ב-API
- הגנה מפני שימוש חסר משמעות באוספים שניתנים לערך Null בסוגי ההחזרה של שיטות DAO. (I777dc, b/253271782, b/259426907)
- הוספנו API ליצירת Flow שפולט שינויים ב-Tracker לביטול תוקף. ה-API שימושי ליצירת זרמים שצריכים להגיב לשינויים במסד הנתונים. (I8c790, b/252899305)
תיקוני באגים
- לא מאפשרים מאפיינים מופשטים בתור DAO getters או שאילתות DAO ב-Kotlin codegen, במקום זאת צריך לשכתב אותם כפונקציות כדי למנוע את התפיסה השגויה שלפיה ערך המאפיין הוא קבוע וכולל תוצאה מאוחסנת קבועה. (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()
שלRoom
. (219f98b). במהלך השהיית טרנזקציה, Room משתמש בשרשור מתוך מפעיל הטרנזקציות, מתחיל בו לולאת אירועים ושולח אליו פעולות השהיה של מסד הנתונים, כך שכולן מוכללות בתוך קורוטינת הטרנזקציה. בדרך כלל, השרשור של העסקה שונה מהשרשור שמתחיל את העסקה, אבל במקרים מסוימים הם זהים. כדי לטפל במקרים כאלה של כניסה חוזרת, בוצע רפקטורינג ב-withTransaction()
כך שהוא לא מסתמך יותר על משימת בקרה, ובמקום זאת הוא יבצע את בלוק העסקאות של ההשעיה מתוך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 מכילה את הקומיטים האלה.
גרסה 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
. בנוסף, שיטות מסוימות של getter הומרו למאפיינים שנדרש בהם תחביר גישה למאפיינים בקובצי Kotlin. אם יש בעיות משמעותיות של חוסר תאימות, אפשר לשלוח דוח על באג. - נוספה הערה חדשה של קיצור דרך,
@Upsert
, שמנסה להוסיף ישות אם אין התנגשות ייחודיות או לעדכן את הישות אם יש התנגשות. (I7aaab, b/241964353) - נוספו פריטים חדשים של החלפת דפים בחדר
room-paging-rxjava2
,room-paging-rxjava3
ו-room-paging-guava
לתמיכה בהחלפת דפים בחדר. - נוספו ממשקי API לאספקת שמות של טבלאות מפתח וערך לצורך הסרת דו-משמעות ב-
@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 מכילה את הקומיטים האלה.
שינויים ב-API
- תיקון של ממשקי API שונים שמקבלים ארגומנטים של שאילתות מאינווריאנט (
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 מכילה את הקומיטים האלה.
שינויים ב-API
- הגבלת הגרסה המינימלית שתומכת ב-
@Upsert
ל-API 16. הסיבה לכך היא שלא ניתן לזהות התנגשות של אילוץ מפתח ראשי בממשקי API ישנים יותר. (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)
תיקוני באגים
- החל מגרסה 2.4.0, Room יציג
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)
שינויים ב-API
- כל הקוד של
room-runtime
הומר מ-Java ל-Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)הערה: יכול להיות שתיתקלו בבעיות של חוסר תאימות למקור בגלל ההמרה של הספרייה ל-Kotlin. אם הקוד שלכם היה ב-Kotlin והוא קרא לגרסה הישנה של Room, הגרסה החדשה תצטרך לטפל במקרים האלה. לדוגמה, שינוי ידוע במקור שגורם לאי-תאימות הוא שב-
InvalidationTracker
צריך עכשיו להצהיר עלonInvalidate()
ב-Observer
כדי לקבל פרמטר מסוגSet
ולאMutableSet
. - נוספו ממשקי API לאספקת שמות של טבלאות מפתח וערך לצורך הסרת דו-משמעות ב-
@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 מכילה את הקומיטים האלה.
שינויים ב-API
- תוקנה בעיה שבה השימוש ב-Room
@IntDef
לא נאכף במקורות של Kotlin. (I75f41, b/217951311) - תוקנה בעיית תאימות למקור כדי לאפשר שוב שימוש ב-
@Query
בפונקציות get של מאפיינים. (I0a09b) - המרנו את room-common מ-Java ל-Kotlin. (I69c48, b/206858235)
הערה: יכול להיות שתיתקלו בבעיות של חוסר תאימות למקור, כי חלק מהמאפיינים הועברו לאובייקטים נלווים במהלך ההמרה של הספרייה ל-Kotlin. אם הקוד שלכם היה ב-Kotlin והוא קרא לגרסה הישנה של Room, בגרסה החדשה תצטרכו להוסיף את הסיומת .Companion כשאתם ניגשים למאפיינים האלה.
- המרנו את ההעברה של Room מ-Java ל-Kotlin. (I2724b, b/206858622)
- הומרו
paging
קבצים שקשורים ל-room-runtime
מ-Java ל-Kotlin. (I82fc8, b/206859668) - נוסף API לנעילה ולשימוש מרובי תהליכים ברמה FrameworkSQLite*, כדי להגן על יצירה והעברות של מסד נתונים בפעם הראשונה מרובי תהליכים. (Ied267, b/193182592)
תיקוני באגים
- נוספה תמיכה בנכסים פנימיים במקורות Kotlin.
זהו שינוי קל בהתנהגות של Room, שבו נעשה שימוש בשם המקור של הפונקציות בזמן ההתאמה שלהן למאפיינים בתור getters/setters (בעבר, נעשה שימוש בשם ה-JVM של הפונקציה, ששונה עבור פונקציות/מאפיינים פנימיים).
אם אתם משתמשים בהערות מותאמות אישית
@JvmName
כדי להתאים בין getters/setters לבין מאפיינים פרטיים, כדאי לבדוק שוב את הקוד שנוצר אחרי העדכון (If6531, b/205289020)
גרסה 2.4.3
גרסה 2.4.3
27 ביולי 2022
androidx.room:room-*:2.4.3
משוחרר. גרסה 2.4.3 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנה בעיה שגרמה לכך ש-Room לא זיהה פונקציות השהיה ב-Kotlin 1.7 (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, שבו נעשה שימוש בשם המקור של הפונקציות בזמן ההתאמה שלהן למאפיינים בתור getters/setters (בעבר, נעשה שימוש בשם ה-JVM של הפונקציה, ששונה עבור פונקציות/מאפיינים פנימיים).
אם אתם משתמשים בהערות מותאמות אישית
@JvmName
כדי להתאים בין getters/setters לבין מאפיינים פרטיים, כדאי לבדוק שוב את הקוד שנוצר אחרי העדכון (If6531, b/205289020)
גרסה 2.4.0
גרסה 2.4.0
15 בדצמבר 2021
androidx.room:room-*:2.4.0
משוחרר. גרסה 2.4.0 מכילה את הקומיטים האלה.
שינויים חשובים מאז גרסה 2.3.0
- העברות אוטומטיות: מעכשיו אפשר להשתמש ב-API של Room כדי ליצור העברות באופן אוטומטי, בתנאי שמייצאים סכימות. כדי להודיע ל-Room שעליו ליצור העברה אוטומטית, אפשר להשתמש במאפיין חדש
@Database#autoMigrations
כדי להצהיר על הגרסאות שמהן יתבצע מעבר אוטומטי ועל הגרסאות שאליהן יתבצע מעבר אוטומטי. אם Room צריך מידע נוסף לגבי טבלאות ושינוי שמות של עמודות או מחיקה שלהן, אפשר להשתמש בהערת@AutoMigration
כדי להצהיר על מחלקת מפרטים שמכילה את הקלטים האלה. פרטים נוספים זמינים ב@AutoMigration
מאמרי העזרה. - הזרקת תלות במיגרציות אוטומטיות:
@ProvidedAutoMigrationSpec
הוא API חדש להצהרה ש-AutoMigrationSpec
יסופק בזמן הריצה באמצעותRoomDatabase.Builder#addAutoMigrationSpec()
. כך אפשר להשתמש במסגרת הזרקת תלות כדי לספק מפרטים כאלה כשנדרשות תלויות מורכבות. - תמיכה במיגרציות אוטומטיות בכלי Migration Test Helper: בוצע עדכון ב-Room
MigrationTestHelper
כדי לתמוך במיגרציות אוטומטיות. במסגרת העדכון נוסף API חדש של בנאי שמקבל את מחלקת מסד הנתונים שנבדקת. כך, הכלי יכול להוסיף באופן אוטומטי מעברים אוטומטיים באותו אופן במהלךrunMigrationsAndValidate
. - תמיכה בהחלפת דפים ב-Room: הגרסה
androidx.room:room-paging
יצאה לאור, והיא מספקת תמיכה מובנית ב-Paging 3.0 לשאילתות Room שמחזירותandroidx.paging.PagingSource
. - שיטות לשאילתות יחסיות: Room תומך עכשיו בשיטות
@Dao
להחזרת סוגי נתונים של מיפויים מרובים, שימושיות להצהרות JOIN. סוגי המפות המרובות הנתמכים הםMap
, SparseArray
, LongSparseArray
, וגםImmutableMap
, ImmutableSetMultimap
ו-ImmutableListMultimap
של Guava.
גרסה 2.4.0-rc01
1 בדצמבר 2021
androidx.room:room-*:2.4.0-rc01
משוחרר. גרסה 2.4.0-rc01 מכילה את הקומיטים האלה.
תכונות חדשות
- כדי לתמוך ב-Kotlin 1.6, צריך לעדכן את התלות של Room ב-KSP ל-
1.6.0-1.0.1
גרסה 2.4.0-beta02
17 בנובמבר 2021
androidx.room:room-*:2.4.0-beta02
משוחרר. גרסה 2.4.0-beta02 מכילה את הקומיטים האלה.
תכונות חדשות
- הוספנו תמיכה ב-SparseArray וב-LongSparseArray ב- @MapInfo. (Ic91a2b/138910317)
תיקוני באגים
- הוספנו כלי חדש לניתוח TypeConverter, שמתחשב במידע על האפשרות של סוגים להכיל ערך null. המידע הזה זמין רק ב-KSP, ולכן הוא מופעל כברירת מחדל רק ב-KSP. אם זה גורם לבעיות, אפשר להשבית את האפשרות הזו על ידי העברת room.useNullAwareTypeAnalysis=false למעבד ההערות. במקרה כזה, צריך לדווח על באג כי הדגל הזה יוסר בעתיד. בעזרת הכלי החדש לניתוח TypeConverter, מומלץ לספק רק TypeConverter מקבלים שאינם null, כי לכלי החדש יש אפשרות לעטוף אותם בבדיקת null. שימו לב: אין לכך השפעה על משתמשים ב-KAPT או ב-Java, כי מעבדי ההערות (בניגוד ל-KSP) לא כוללים מידע על ערכי null בסוגים. (Ia88f9, b/193437407)
- תיקון באג שגורם לכך שהקומפילציה של Room נכשלת עם שגיאת SQL כשמצהירים על ישות FTS לשימוש ב-tokenizer של ICU. (I00db9, b/201753224)
- נפתרה בעיה בהעברות אוטומטיות שקשורה לעמודה חדשה שנוספה לישות מוטמעת בין גרסאות. (I5fcb1b/193798291)
- פתרנו בעיה שקשורה לסוגי ההחזרה של שיטת השאילתה הרלציונית בשאילתות LEFT JOIN. בעקבות השינויים האלה, במקרה של מיפוי מסוג 1-לרבים, האוסף שמוחזר עבור מפתח לא יכלול את אובייקט הערך הלא תקין אם הוא לא נמצא בסמן. אם לא נמצאים ערכים תקינים, מפתח ימופה לאוסף ריק. (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 שנוצרה על ידי room-paging משתמשת עכשיו ב-
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)
שינויים ב-API
הוספנו מאפיין חדש להערה TypeConverters כדי לאפשר למפתחים להשבית המרות מובנות של Enum ו-UUID. כברירת מחדל, המרות האלה מופעלות, אבל אפשר להשבית אותן בהיקף מסוים או בכל מסד הנתונים. פרטים נוספים זמינים במסמכי התיעוד בנושא TypeConverters. (36ae9e, b/195413406)
תמיכה במפתחות או בערכים שאינם POJO עבור סוגי החזרה של Multimap ב-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>
- כשמשתמשים ב-Paging3 עם Room, צריך להגדיר את
room-paging
כארטיפקט חובה. (Ieaffe)
תיקוני באגים
- תוקנה בעיה שבה התוצאות של שאילתות multimap לא סודרו בצורה נכונה כשהשאילתה הכילה פסוקית ORDER BY של עמודה מהמפתח של המפה. (I6b887)
External Contribution
- נוסף API חדש לציון סדר האינדקס ב- @Index. תודה לניקיטה ז'לונקין. (I033fc)
גרסה 2.4.0-alpha04
21 ביולי 2021
androidx.room:room-*:2.4.0-alpha04
משוחרר. גרסה 2.4.0-alpha04 מכילה את הקומיטים האלה.
תכונות חדשות
Room תומך עכשיו בשיטות של סוגי החזרה של multimap
@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 לשאילתות של Room שמחזירות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 APIs. ההטמעה החדשה של PagingSource מנתחת מפתחות בצורה שונה, ולכן כל מפתח שמועבר באופן ידני ל-PagingSource של Room צריך להתאים לשינוי הזה בהתנהגות, כולל initialKey שמועבר דרך הבונה של Pager. הדפים יתחילו להיטען מ-Key
, כאשרKey
הוא הפריט הראשון שנטען. ההתנהגות הזו שונה מההתנהגות הקיימת, שבהLoadParams.Refresh.Key
נחשב למיקום הגלילה של המשתמש ופריטים נטענים לפני המקש ואחריו.הארטיפקט הוא אופציונלי, ואם לא משתמשים בו, המערכת חוזרת לתמיכה הקיימת ב-Paging 3.0 שהושקה ב-Room 2.3. עם זאת, בגרסה עתידית, הארטיפקט הזה יהפוך לחובה למי שמשתמש ב-Room עם Paging 3.0. כדי להצטרף, מוסיפים את ארטיפקט הדפים החדש של Room לנתיב המחלקות. אם משתמשים ב-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 מכילה את הקומיטים האלה.
שינויים ב-API
- כדי לתמוך בהעברות אוטומטיות, צריך לעדכן את Room
MigrationTestHelper
ולספק API חדש של בנאי שמקבל את מחלקת מסד הנתונים שנבדקת. כך, הכלי יכול להוסיף באופן אוטומטי מעברים אוטומטיים באותו אופן במהלךrunMigrationsAndValidate
.
תיקוני באגים
תוקנה בעיה בספריית SQLite המקורית של Room כדי לתמוך בשבבי M1 של Apple. (b/174695268
תוקנה הבעיה שבה Room לא הציגה שגיאה כשסוג ההחזרה של פונקציית @Transaction היה Flow (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 מכילה את הקומיטים האלה.
שינויים ב-API
-
@ProvidedAutoMigrationSpec
הוא API חדש להצהרה ש-AutoMigrationSpec
יסופק בזמן הריצה באמצעותRoomDatabase.Builder#addAutoMigrationSpec()
. כך אפשר להשתמש במסגרת הזרקת תלות כדי לספק מפרטים כאלה כשנדרשות תלויות מורכבות.
תיקוני באגים
- תוקנה בעיה בהעברות אוטומטיות שבה
@DatabaseView
s לא נוצרו מחדש בצורה תקינה.
External Contribution
- תוקנה בעיה ב-Room
JournalMode.TRUNCATE
שבה הקריאה החוזרת (callback) של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 מכילה את הקומיטים האלה.
תכונות חדשות
- העברות אוטומטיות: מעכשיו אפשר להשתמש ב-API של Room כדי ליצור העברות באופן אוטומטי, בתנאי שמייצאים סכימות. כדי להודיע ל-Room שעליו ליצור העברה אוטומטית, אפשר להשתמש במאפיין חדש
@Database#autoMigrations
כדי להצהיר על הגרסאות שמהן יתבצע מעבר אוטומטי ועל הגרסאות שאליהן יתבצע מעבר אוטומטי. אם Room צריך מידע נוסף לגבי טבלאות ושינוי שמות של עמודות או מחיקה שלהן, אפשר להשתמש בהערת@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
- תמיכה מובנית ב-Enum: אם לא מסופק ממיר, Room ישתמש עכשיו כברירת מחדל בממיר מסוג Enum ל-String ולהפך. אם כבר קיים ממיר סוגים ל-enum, Room תעדיף להשתמש בו במקום בממיר ברירת המחדל.
- Query Callback: בספריית Room יש עכשיו API כללי של קריאה חוזרת RoomDatabase.QueryCallback, שמופעל כששאילתות עומדות להתבצע. ה-API הזה יכול להיות שימושי לרישום ביומנים בגרסאות של ניפוי באגים. אפשר להגדיר את הקריאה החוזרת דרך
RoomDatabase.Builder#setQueryCallback()
. - שיפור מוכן מראש: ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות קריאה של מסד נתונים מוכן מראש ממקור נתונים. כך אפשר לטפל במקרים כמו דחיסת מסד הנתונים לפני האריזה באמצעות gzip.
- המרות סוגים שסופקו: ל-Room יש עכשיו ממשקי API לאספקת מופעים של המרות סוגים, כך שהאפליקציה יכולה לשלוט בהפעלה שלהם. כדי לסמן ממיר סוגים שיועבר ל-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 ב-thread הראשי עלולה להפעיל ANR. (I42b74, b/181221318)
- תוקנה בעיה שבה סטטוס החשיפה של
@ExperimentalRoomApi
היה פרטי במקום גלוי לכולם. (b/181356119)
External Contribution
- אפשר לאפשר ל-Room לקבל סוג החזרה של POJO בשיטת DAO עם ההערה
@Query
, כשהיא גם מסומנת בהערה@SkipQueryVerification
. Room ינסה כמיטב יכולתו להמיר את תוצאת השאילתה לסוג ההחזרה POJO, באותו אופן שבו היא מומרת עבור שיטת DAO עם הערה@RawQuery
. תודה ל-Markus Riegel | hey@marcorei.com. (I45acb)
גרסה 2.3.0-beta02
18 בפברואר 2021
androidx.room:room-*:2.3.0-beta02
משוחרר. גרסה 2.3.0-beta02 מכילה את הקומיטים האלה.
תכונות חדשות
ב-Room יש עכשיו תמיכה ניסיונית ב-Kotlin Symbol Processing KSP.
KSP הוא תחליף ל-KAPT, והוא מאפשר להריץ מעבדי הערות באופן מקורי בקומפיילר של Kotlin, וכך לקצר משמעותית את זמני הבנייה.
כדי להשתמש ב-Room עם KSP, אפשר להחיל את פלאגין KSP Gradle ולהחליף את ההגדרה
kapt
בקובץ ה-build בהגדרה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
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 כוללת עכשיו API כללי של קריאה חוזרת
RoomDatabase.QueryCallback
, שמופעל כששאילתות עומדות להתבצע. ה-API הזה יכול להיות שימושי לרישום ביומן בגרסאות build של ניפוי באגים. אפשר להגדיר את הקריאה החוזרת דרךRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - אם לא מסופק ממיר, החדר יוגדר כברירת מחדל לשימוש בממיר מסוג Enum ל-String ולהפך. אם כבר קיים ממיר סוגים ל-enum, Room תעדיף להשתמש בו במקום בממיר ברירת המחדל. (b/73132006)
בעיה ידועה
- אם כבר קיים ממיר חד-כיווני לקריאה של Enum, יכול להיות ש-Room ישתמש בטעות בממיר המובנה String ל-Enum, וזה לא רצוי. זו בעיה מוכרת, ואפשר לפתור אותה על ידי הפיכת הממיר לממיר דו-כיווני. פרטים נוספים מופיעים בכתובת b/175707691
תיקוני באגים
- תוקנה בעיה שבה Room השבית באופן שגוי את העיבוד של הערות מצטברות בגרסאות חדשות יותר של JDK. (b/171387388)
- תוקנה בעיה שקשורה לחיפוש הכיתה שנוצרה ב-Room כשנעשה שימוש בכמה טועני כיתות. תודה על התיקון 'Serendipity | 892449346@qq.com'! (b/170141113)
- תוקנה הבעיה שבה Room יצר קוד שגוי כש-Kotlin
@Dao
כלל מחלקת בסיס שהגנריות שלה הן פרימיטיבים ב-JVM. (b/160258066)
External Contribution
- Room ישתמש עכשיו ב-
beginTransactionNonExclusive
כברירת מחדל אם מצב WAL מופעל ורמת ה-API היא 16 ומעלה. תודה ל'אחמד א. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
גרסה 2.3.0-alpha03
14 באוקטובר 2020
androidx.room:room-*:2.3.0-alpha03
משוחרר. גרסה 2.3.0-alpha03 מכילה את הקומיטים האלה.
תכונות חדשות
ל-Room יש עכשיו ממשקי API לאספקת מופעים של ממירים מסוגים שונים, כך שהאפליקציה יכולה לשלוט באתחול שלהם. כדי לסמן ממיר סוגים שיועבר ל-Room, משתמשים באנוטציה החדשה
@ProvidedTypeConverter
. תודה ל-mzgreen yairobbe@gmail.com. (Ie4fa5, b/121067210)ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות קריאה של מסד נתונים ארוז מראש מזרם קלט. כך אפשר לטפל במקרים כמו דחיסת מסד הנתונים לפני האריזה באמצעות gzip. תודה ל-Ahmed El-Helw ahmedre@gmail.com (3e6792, b/146911060)
שינויים ב-API
נוסף יעד חסר להערה
@ForeignKey
, כדי למנוע את השימוש בה מחוץ להערה@Entity
. (Iced1e)השדה
mCallbacks
בטבלהRoomDatabase.java
מוסתר עכשיו. (d576cb, b/76109329)
תיקוני באגים
עדכון של מסמכי התיעוד בנושא TypeConverters כדי להבהיר שאפשר להשתמש ב-TypeConverters רק כדי להמיר עמודות או שדות, ולא שורות. (I07c56, b/77307836)
עדכון של DaoProcessor כדי לתקן שגיאת קומפיילר ב-Dao עם סוג סופר גנרי עם 'פרימיטיבים' של Kotlin. (Ice6bb, b/160258066)
עדכון התיעוד של השיטות להוספה או להסרה של observer כדי להבהיר את נושא ה-threading (Ifd1d9, b/153948821)
תוקנה בעיה שבה Room לא אימתה בצורה נכונה טבלאות FTS שהוגדרה בהן עמודת rowid. (d62ebc, b/145858914)
פריטי תוכן חיצוניים שהוספת
תיקון בעיות של אותיות רישיות/קטנות בלוקאל שקשורות לטורקית (5746e3), b/68159494
כדי למנוע בעיות ב-Android Lollipop (d1cfc7, b/162431855), צריך להחליף את
ConcurrentHashMap
בתוךRoomDatabase
ב-Collections.synchronizedMap()
.מוסיפים קריאה חוזרת (callback) מסוג 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 שסוג ההחזרה שלהן הוא Flowable, Single, Maybe ו-Completable. בנוסף, יש ארטיפקט חדש
androidx.room:room-rxjava3
לתמיכה ב-RxJava3. (b/152427884)
שינויים ב-API
- יש עכשיו תמיכה בהצהרה על
@TypeConverter
במחלקת אובייקט של Kotlin. (b/151110764) Room
האפשרות לעיבוד מצטבר של הערות מופעלת עכשיו כברירת מחדל. (b/112110217)
גרסה 2.3.0-alpha01
10 ביוני 2020
androidx.room:room-*:2.3.0-alpha01
משוחרר. גרסה 2.3.0-alpha01 מכילה את הקומיטים האלה.
תכונות חדשות
תמיכה ב-Paging 3.0: מעכשיו, Room תתמוך ביצירת הטמעות לשיטות עם ההערה
@Query
שסוג ההחזרה שלהן הואandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
שינויים ב-API
-
@RewriteQueriesToDropUnusedColumns
היא הערה חדשה ונוחה שגורמת ל-Room לשכתב את ההטלה '*' בשאילתה כך שהעמודות שלא נעשה בהן שימוש בתוצאה יוסרו. - האפשרות למעבד
room.expandProjection
הוצאה משימוש. אפשר להשתמש ב-@RewriteQueriesToDropUnusedColumns
במקום בשאילתות לאופטימיזציה של חדרים עם הקרנות כוכבים. שימו לב:@RewriteQueriesToDropUnusedColumns
לא מחליף את הפתרון לבעיות שקשורות לעמודותroom.expandProjection
שמוצע לגבי סוגי החזרה שמכילים שדות@Embedded
.
תיקוני באגים
- תוקן באג שגרם לכך ש-Room לא זיהה נכון את גרסת ה-JDK ששימשה להפעלת מעבד ההערות המצטבר. תודה ל-Blaz Solar (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. תודה ל-Mygod contact-git@mygod.be (b/148240967) - תוקן באג שגרם לקריסה כשההגדרה 'ביטול תוקף של כמה מופעים' הופעלה ומסד הנתונים הכיל ישות FTS. (b/148969394)
- תוקנה בעיה בטעינה של ספריות SQLite Native במעבד ההערות של 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 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנה בעיה בהשעיית עסקאות שגרמה לקיפאון אם הקורוטינה בוטלה במהירות לפני שהעסקה התחילה בפועל. (b/148181325)
- תוקנה בעיה שבה נעשה שימוש שגוי ב-@Generated כשמבצעים בנייה באמצעות JDK 9. (b/146538330)
- תוקנה הבעיה שבה Room יצר קוד שגוי כשממשק 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 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקן באג שבו איסוף של קשר גומלין עם יותר מ-999 שורות גרם ל-Room להחזיר פריטים קשורים מסוג null. (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
- מסד נתונים מוכן מראש: שני ממשקי API חדשים ב-
RoomDatabase.Builder
זמינים עכשיו ליצירתRoomDatabase
על סמך קובץ מסד נתונים שכבר אוכלס. הפרמטרcreateFromAsset()
משמש כשהקובץ של מסד הנתונים שאוכלס מראש נמצא בתיקיית הנכסים של קובץ ה-APK, והפרמטרcreateFromFile()
משמש כשהקובץ נמצא במיקום שרירותי. השימוש ב-API האלה משנה את ההתנהגות של העברות הרסניות, כך שבמהלך העברה חלופית, Room ינסה להעתיק מחדש את מסד הנתונים שאוכלס מראש אם הוא זמין, אחרת הוא יחזור למצב של מחיקה ויצירה מחדש של כל הטבלאות. b/62185732 - ערכי ברירת מחדל של סכימה: ל-
@ColumnInfo
יש עכשיו מאפיין חדשdefaultValue
שאפשר להשתמש בו כדי לציין את ערך ברירת המחדל של עמודה. ערכי ברירת מחדל הם חלק מסכימת מסד נתונים, והם יעברו אימות במהלך העברות אם הם צוינו. b/64088772 - קשרים מסוג רבים לרבים: ל-
@Relation
יש עכשיו מאפיין חדש,associateBy
, שמקבל הערה חדשה,@Junction
, שמשמשת להצהרה על קשר שצריך להתקיים באמצעות טבלת צומת (junction table, נקראת גם join table). 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 Incremental Annotation Processor: Room הוא עכשיו Gradle isolating annotation processor, ואפשר להפעיל את האפשרות incrementability דרך האפשרות
room.incremental
של המעבד. מידע נוסף זמין במאמר בנושא אפשרויות של Room Compiler. אם נתקלתם בבעיות, אתם יכולים לדווח על באג כאן. אנחנו מתכננים להפעיל את התכונה 'הגדלה מצטברת' כברירת מחדל בגרסה יציבה עתידית. 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
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 לא קיבל קוד hash של סכימה מדור קודם בזמן פתיחת מסד נתונים שלא עבר העברה מאז Room 1.0, מה שגרם לקריסת זמן ריצה בגלל סכימה לא תקינה. (b/139306173)
גרסה 2.2.0-alpha02
7 באוגוסט 2019
androidx.room:room-*:2.2.0-alpha02
משוחרר. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
תכונות חדשות
- Coroutines Flow:
@Query
עכשיו אפשר להגדיר את השיטות של DAO כסוג ההחזרה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
הוא API חדש של קריאה חוזרת שנוסף ל-RoomDatabase.Callback
כאשר Room מעביר מסד נתונים באופן הרסני. b/79962330
תיקוני באגים
- תוקן באג שבו Room יצר קוד שגוי באמצעות שיטה כ-setter של שדה, כשהשדה מוגן. b/136194628
- תוקן באג שגרם ל-InvalidationTracker להפעיל NPE בתהליך שני כשביטול תוקף של כמה מופעים הופעל ושירות ביטול התוקף הופסק. b/137454915
- תוקן באג שבו Room לא זיהה נכון את סוג ההחזרה של פונקציית השהיה שעברה בירושה וסומנה באמצעות
@RawQuery
. b/137878827 - עדכנו את הקוד שנוצר עבור
@Relation
כשמפתח היחס הוא מסוג BLOB, כדי להשתמש ב-ByteBuffer
שדומה לו. b/137881998 - תוקן באג שבו Room התלונן על חוסר בשיטות setter ב-POJO שמשמשות כפרמטרים חלקיים של ישויות ב-
@Insert
, ב-@Update
וב-@Delete
. b/138664463 - תוקן באג שגרם ל-Room להתלונן על חוסר בשיטות getter ו-setter עבור עמודה שהמערכת התעלמה ממנה באמצעות
@Entity
, כשנעשה שימוש במחלקת הישות בשיטות DAO מסוימות. b/138238182 - תוקן באג שבו Room לא המיר בצורה נכונה ארגומנטים של קשירה עם שם לארגומנטים מיקומיים, מה שגרם לחריגה בזמן הריצה כשמבצעים שאילתה עם פרמטרים שנעשה בהם שימוש חוזר. b/137254857
גרסה 2.2.0-alpha01
10 ביולי 2019
תכונות חדשות
- מסד נתונים מוכן מראש: שני ממשקי API חדשים ב-
RoomDatabase.Builder
זמינים עכשיו ליצירתRoomDatabase
על סמך קובץ מסד נתונים שכבר אוכלס. הפרמטרcreateFromAsset()
משמש כשהקובץ של מסד הנתונים שאוכלס מראש נמצא בתיקיית הנכסים של קובץ ה-APK, והפרמטרcreateFromFile()
משמש כשהקובץ נמצא במיקום שרירותי. השימוש ב-API האלה משנה את ההתנהגות של העברות הרסניות, כך שבמהלך העברה חלופית, Room ינסה להעתיק מחדש את מסד הנתונים שאוכלס מראש אם הוא זמין, אחרת הוא יחזור למצב של מחיקה ויצירה מחדש של כל הטבלאות. b/62185732 - ערכי ברירת מחדל של סכימה: ל-
@ColumnInfo
יש עכשיו מאפיין חדשdefaultValue
שאפשר להשתמש בו כדי לציין את ערך ברירת המחדל של עמודה. ערכי ברירת מחדל הם חלק מסכימת מסד נתונים, והם יעברו אימות במהלך העברות אם הם צוינו. b/64088772הערה: אם בסכימת מסד הנתונים שלכם כבר יש ערכי ברירת מחדל, כמו אלה שנוספו באמצעות
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, ואתם מחליטים להגדיר ערכי ברירת מחדל באמצעות@ColumnInfo
לאותן עמודות, יכול להיות שתצטרכו לספק העברה כדי לאמת את ערכי ברירת המחדל שלא נכללו בחשבון. מידע נוסף זמין במאמר בנושא העברת חדרים. - קשרים מסוג רבים לרבים: ל-
@Relation
יש עכשיו מאפיין חדש,associateBy
, שמקבל הערה חדשה,@Junction
, שמשמשת להצהרה על קשר שצריך להתקיים באמצעות טבלת צומת (junction table, נקראת גם join table). b/69201917 - קשרים מסוג אחד לאחד: הוסרה ההגבלה בשדות POJO עם ההערה
@Relation
להיות מסוגList
אוSet
, וכעת אפשר לייצג קשרים עם ערך יחיד. b/62905145 - ישות היעד: להערות ה-DAO
@Insert
,@Update
ו-@Delete
יש עכשיו מאפיין חדש,targetEntity
, שמאפשר לציין את טבלת היעד שהשיטה של ה-DAO אמורה לפעול עליה. כך אפשר להגדיר את הפרמטרים של שיטות ה-DAO האלה כ-POJO שרירותיות, שיפורשו כישויות חלקיות. בפועל, זה מאפשר הוספות, מחיקות ועדכונים חלקיים. b/127549506 - Gradle Incremental Annotation Processor: Room הוא עכשיו Gradle isolating annotation processor, ואפשר להפעיל את האפשרות incrementability דרך האפשרות
room.incremental
של המעבד. מידע נוסף זמין במאמר בנושא אפשרויות של Room Compiler. אם נתקלתם בבעיות, אתם יכולים לדווח על באג כאן. אנחנו מתכננים להפעיל את התכונה 'הגדלה מצטברת' כברירת מחדל בגרסה יציבה עתידית. b/112110217
תיקוני באגים
- הפונקציה Room לא תפיץ יותר את
EmptySetResultException
ל-global error handler אם ה-Rx stream של שאילתה נסגר לפני שהשאילתה הושלמה. b/130257475 - תוקן באג שבו ב-Room הוצגה הודעת שגיאה שגויה כשפונקציית DAO של השהיה עם ההערה
@RawQuery
לא כללה סוג החזרה. b/134303897 - החדר לא ייצור יותר מתאמי DAO עם סוגים גולמיים. b/135747255
גרסה 2.1.0
גרסה 2.1.0
13 ביוני 2019
גרסה 2.1.0 של Room הושקה ללא שינויים מגרסה 2.1.0-rc01
. כאן אפשר לראות את הקומיטים שנכללים בגרסה.
שינויים חשובים מאז גרסה 2.0.0
- FTS: Room תומך עכשיו בישויות עם מיפוי לטבלת FTS3 או FTS4. אפשר להוסיף לשיעורים שמוערים באמצעות התג
@Entity
הערות נוספות באמצעות התגים@Fts3
או@Fts4
כדי להצהיר על שיעור עם טבלת מיפוי של חיפוש טקסט מלא. אפשר להשתמש באפשרויות של FTS כדי לבצע התאמה אישית נוספת באמצעות השיטות של ההערה. - תצוגות: מעכשיו אפשר להגדיר מחלקה ב-Room כשאילתה מאוחסנת, שנקראת גם תצוגה, באמצעות ההערה
@DatabaseView
. - קורוטינות: עכשיו אפשר להשתמש בפונקציות השעיה בשיטות DAO. כדי להשתמש בפונקציונליות הזו, צריך לכלול את
room-ktx
בהגדרות התלות. ארטיפקט ה-ktx מספק גם את פונקציית התוסףRoomDatabase.withTransaction
לביצוע טרנזקציות במסד נתונים בתוך קורוטינה. - Auto Value: Room תומך עכשיו בהצהרה על מחלקות עם הערות AutoValue כעל ישויות ו-POJO. אפשר עכשיו להצהיר על ההערות של Room
@PrimaryKey
,@ColumnInfo
, @Embedded
ו-@Relation
בשיטות מופשטות של מחלקה עם הערה של ערך אוטומטי. חשוב לזכור שההערות האלה צריכות להיות מלוות ב-@CopyAnnotations
כדי ש-Room יבין אותן בצורה נכונה. - תמיכה נוספת באסינכרוני: שיטות DAO עם הערות
@Insert
,@Delete
או@Update
, יחד עם@Query
שמכיל הצהרותINSERT
,DELETE
אוUPDATE
, תומכות עכשיו בסוגי החזרה של RxCompletable
,Single
,Maybe
, ובסוג ההחזרה של GuavaListenableFuture
, והן יכולות להיות גם פונקציות השהיה. -
enableMultiInstanceInvalidation
הוא API חדש ב-RoomDatabase.Builder
שמאפשר ביטול תוקף במספר מופעים של RoomDatabase באמצעות אותו קובץ מסד נתונים. -
fallbackToDestructiveMigrationOnDowngrade
הוא API חדש ב-RoomDatabase.Builder
שמאפשר ליצור מחדש את מסד הנתונים באופן אוטומטי אם מתבצעת הורדת גרסה. -
ignoredColumns
הוא API חדש בהערה@Entity
שאפשר להשתמש בו כדי להציג רשימה של שדות שהמערכת התעלמה מהם לפי שם. - Room ישתמש עכשיו בצורה תקינה בבונה הראשי של Kotlin במחלקות נתונים
כדי להימנע מהצורך להצהיר על המאפיינים כ-
vars
.
גרסה 2.1.0-rc01
29 במאי 2019
תיקוני באגים
- תוקנה שגיאת אתחול של חדרים שיכולה להתרחש בגלל הגדרה קיימת של temp_store. b/132602198
- תוקנה אזהרה לגבי שימוש במירכאות כפולות למשתמשים ב-SQLite מגרסה 3.27.0 ואילך. b/131712640
- תוקן באג שבו InvalidationTracker גרם לקריסה כשכמה בדיקות ביטול תוקף התרחשו במקביל. b/133457594
גרסה 2.1.0-beta01
7 במאי 2019
androidx.room 2.1.0-beta01
יוצא ללא שינויים מגרסה 2.1.0-alpha07. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
גרסה 2.1.0-alpha07
25 באפריל 2019
API / Behavior Changes
- הפונקציה להרחבת
RoomDatabase.withTransaction
השתנתה, ועכשיו היא לא מקבלת יותר בלוק פונקציה עםCoroutineScope
כנמען. כך מונעים דילוג על רכיב העטיפהcoroutineScope { }
הנוסף שנדרש להרצת פעולות במקביל בבלוק העסקאות.
תיקוני באגים
- תוקן באג שגרם לכך ש-Room לא הצליח להתאים TypeConverter לפונקציית Kotlin DAO שמכילה פרמטר מסוג Collection. b/122066791
גרסה 2.1.0-alpha06
22 במרץ 2019
API / Behavior Changes
- שאילתות אסינכרוניות של עסקאות עוברות עכשיו סריאליזציה, כך ש-Room לא ישתמש ביותר משרשור אחד להרצת עסקאות במסד הנתונים.
נוספה האפשרות
RoomDatabase.Builder.setTransactionExecutor(Executor)
כדי לאפשר הגדרה של רכיב ההפעלה שישמש לעסקאות. - הפונקציה
RoomDatabase.runInTransaction(Callable)
לא תעטוף יותר חריגים מסומנים ב-RuntimeExceptions. b/128623748
תיקוני באגים
- תוקן באג שבו מעקב הביטול היה מפסיק לעקוב אחרי טבלת תוכן אם נוספו משתנים למעקב גם לטבלת התוכן וגם לטבלת תוכן חיצונית של FTS. b/128508917
- עודכן
Room
SQLite grammar כך שיתאים ל-SQLite 3.24.0. b/110883668
גרסה 2.1.0-alpha05
13 במרץ 2019
תכונות חדשות
- הפונקציה
RoomDatabase.withTransaction
של התוסף מאפשרת לבצע עסקאות במסד נתונים בתוך קורוטינה בצורה בטוחה. פונקציות של תוספים לחדרים זמינות ב-artifactroom-ktx
, יחד עם תמיכה ב-coroutines. - שיטות DAO לא מופשטות עם ההערה
@Transaction
יכולות להיות עכשיו פונקציות השהיה. b/120241587
API / Behavior Changes
- שם הארטיפקט
room-coroutines
שונה ל-room-ktx
בהתאם לאופן מתן השם לארטיפקטים אחרים של androidx. - הפסקנו את התמיכה ב-
beginTransaction
, ב-setTransactionSuccessful
וב-endTransaction
ב-RoomDatabase
. במקום זאת, אפשר להשתמש ב-runInTransaction
ובפונקציית ההרחבהroom-ktx
withTransaction
.
תיקוני באגים
- תוקן באג שגרם להשמטת ארגומנטים של טוקנייזר אם הטוקנייזר שבו נעשה שימוש היה SIMPLE. b/125427014
- תוקן באג שגרם לכך ש-Room לא הצליחה לזהות נכון פונקציות השהיה עם פרמטרים שהסוג שלהם היה מחלקה פנימית. b/123767877
- תוקן באג שבו הכנה של שאילתה בשרשור הראשי בוצעה באופן מיידי עבור שיטת
@Query
DAO עם הצהרותINSERT
, UPDATE
אוDELETE
שההפעלה שלהן נדחתה. b/123695593 - תוקנו באגים שונים שבהם Room יצר קוד שגוי עבור פונקציות השהיה מסוימות. b/123466702 ו-b/123457323
- תוקן באג שבו שימוש בשיטות שהוצאו משימוש לא הוסתר בצורה נכונה בקוד שנוצר. b/117602586
- עדכנו את התלות של androidx.sqlite ב-Room לגרסה 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
25 בינואר 2019
תכונות חדשות
- שיטות DAO עם הערה
@Query
שמכילה הצהרותINSERT
, UPDATE
אוDELETE
יכולות עכשיו להחזיר סוגים אסינכרונייםSingle
, Mayble
, Completable
ו-ListenableFuture
. בנוסף, הן יכולות גם להשעות פונקציות. b/120227284
API / Behavior Changes
- מעכשיו, Room יציג שגיאה אם method של DAO שאינה מופשטת ומסומנת ב-
@Transaction
מחזירה סוג אסינכרוני כמוSingle
,Mayble
,Completable
,LiveData
אוListenableFuture
. מכיוון שעסקאות מוגבלות לשרשור, אי אפשר כרגע להגדיר ב-Room התחלה וסיום של עסקה סביב פונקציה שעשויה לבצע שאילתות בשרשורים שונים. 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
שינויים ב-API
- הפונקציה FTS
tokenizer
ב-@Fts3
/@Fts4
מקבלת עכשיו מחרוזת במקום Enum. כך אפשר להשתמש בטוקנייזרים מותאמים אישית ב-Room. עדיין מוגדרים ב-FtsOptions
טוקנייזרים מובנים כקבועים של מחרוזות. b/119234881
תכונות חדשות
- קורוטינות: עכשיו אפשר להשתמש בפונקציות השעיה בשיטות DAO. כדי לתמוך בפונקציות השהיה ב-Room, פרסמנו ארטיפקט חדש,
room-coroutines
. b/69474692 - שיטות DAO עם ההערות
@Insert
,@Delete
או@Update
תומכות עכשיו ב-ListenableFuture
כסוג החזרה. b/119418331
תיקוני באגים
- תוקן באג שבו Room ניסה באופן שגוי למצוא בנאי עם עמודות במאפיין
ignoredColumns
של@Entity
. b/119830714 - תוקן באג שבו Room לא סימן פרמטרים של שיטת 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
תיקוני באגים
- תוקן באג שבו Room ביצע קלט/פלט של דיסק ב-thread הראשי כשנרשמים למינוי ומבטלים אותו מסוג החזרה של Rx. b/117201279
- תוקן באג שבו Room לא הצליחה למצוא ממיר סוג מתאים לשדה במחלקת ישויות של Kotlin. b/111404868
- תוקן באג שבו Room יצר קוד שגוי להטמעה של ממשק
DAO
שמכיל שיטת ברירת מחדל של Kotlin ללא ארגומנטים. b/117527454 - עודכן
Room
מנתח הדקדוק של SQLite, ותוקנה בעיית ביצועים שגרמה לזמני בנייה ארוכים. b/117401230
גרסה 2.1.0-alpha01
8 באוקטובר 2018
תכונות חדשות
- FTS: Room תומכת עכשיו בישויות עם מיפוי של טבלת FTS3 או FTS4. עכשיו אפשר להוסיף הערות לכיתות עם
@Entity
גם עם@Fts3
או@Fts4
כדי להצהיר על כיתה עם טבלת מיפוי של חיפוש טקסט מלא. אפשר להשתמש בשיטות של ההערה כדי להתאים אישית את האפשרויות של FTS. b/62356416 - תצוגות: עכשיו אפשר להגדיר מחלקה ב-Room כשאילתה מאוחסנת, שנקראת גם תצוגה, באמצעות ההערה @DatabaseView. b/67033276
- Auto Value: Room תומך עכשיו בהצהרה על מחלקות עם הערות AutoValue כעל ישויות ו-POJO. אפשר עכשיו להצהיר על הערות של Room
@PrimaryKey
, @ColumnInfo
, @Embedded
ו-@Relation
בשיטות מופשטות של מחלקה עם הערה של ערך אוטומטי. שימו לב שצריך להוסיף לכל הערה כזו גם את התג@CopyAnnotations
כדי ש-Room יבין אותה כמו שצריך. b/62408420 - תמיכה נוספת בסוגי החזרה של Rx: שיטות DAO עם ההערות
@Insert
, @Delete
או@Update
תומכות עכשיו בסוגי החזרה של RxCompletable
, Single<T>
ו-Maybe<T>
. b/63317956 - סוגים שלא ניתן לשנות עם
@Relation
: בעבר, כדי להגדיר שדות עם הערות@Relation
ב-Room היה צריך להגדיר אותם כניתנים להגדרה, אבל עכשיו אפשר להגדיר אותם כפרמטרים של בנאי. -
enableMultiInstanceInvalidation
: ממשק API חדש ב-RoomDatabase.Builder
שמאפשר לבטל תוקף במספר מופעים של RoomDatabase באמצעות אותו קובץ מסד נתונים. מנגנון הביטול הזה של כמה מופעים פועל גם בכמה תהליכים. b/62334005 -
fallbackToDestructiveMigrationOnDowngrade
: API חדש ב-RoomDatabase.Builder
שיוצר מחדש את מסד הנתונים באופן אוטומטי אם מתבצעת הורדת גרסה. b/110416954 -
ignoredColumns
: זהו API חדש בהערה@Entity
שאפשר להשתמש בו כדי להציג רשימה של שדות שהמערכת מתעלמת מהם לפי שם. הפרמטר הזה שימושי להתעלמות משדות שעוברים בירושה בישות. b/63522075
API / Behavior Changes
- השיטות
mCallback
ו-mDatabase
ב-RoomDatabase
הן עכשיו@Deprecated
ויוסרו בגרסה הראשית הבאה של Room. b/76109329
תיקוני באגים
- תוקנו שתי בעיות שבהן Room לא הצליחה להתאושש כראוי ממסד נתונים פגום או מהעברה לא תקינה במהלך האתחול. b/111504749 ו-b/111519144
- החל מגרסה 2.6.0, 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
API / Behavior Changes
- נוספה האפשרות
RoomDatabase.Builder.setQueryExecutor()
להתאמה אישית של המיקום שבו השאילתות מופעלות - נוספה תמיכה ב-RxJava2
Observable
- ההטמעות של DAO ושל מסד הנתונים שנוצרו הן סופיות
תיקוני באגים
- צריך לציין את שם המחלקה או השדה בשגיאה 'לא ניתן למצוא getter לשדה' b/73334503
- תוקנה התאימות לאחור של RoomOpenHelper לגרסאות ישנות יותר של Room b/110197391
Pre-AndroidX Dependencies
בגרסאות 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
אם אתם משתמשים בהעברות, מומלץ מאוד להשתמש ב-Room 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
תיקוני באגים
תוקן באג קריטי בהטמעות של
Room
RxSingle
ו-Maybe
, שגרם למיחזור של השאילתה לפני הזמן. הבאג הזה גרם לבעיות אם מוסיפים יותר מ-1 observer למופעים שלSingle
אוMaybe
שמוחזרים. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] לא
VACUUM
את מסד הנתונים אם הקריאה מתבצעת בתוך טרנזקציה. b/77235565
גרסה 1.1.0-beta1
21 במרץ 2018
שינויים ב-API
- על סמך משוב על API Review,
@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 - החלוקה לדפים: ההטמעה של Room ב-DataSource מטפלת עכשיו בצורה נכונה בתלות מרובת טבלאות (כמו יחסים וצירופים). בעבר, הפעולות האלה לא היו מפעילות תוצאות חדשות, או שהן היו נכשלות בהידור. b/74128314
גרסה 1.1.0-alpha1
22 בינואר 2018
תכונות חדשות
-
RawQuery
: ה-API החדש הזה מאפשר ל-methods@Dao
לקבל את ה-SQL כפרמטר של שאילתה b/62103290, b/71458963 -
fallBackToDestructiveMigrationsFrom
: ה-API החדש הזה ב-RoomDatabase.Builder
מאפשר שליטה מדויקת יותר בגרסאות הסכימה הראשוניות שמהן מותרות העברות הרסניות (בהשוואה ל-fallbackToDestructiveMigration) b/64989640 - החל מעכשיו, חדרים תומכים רק בממשקי API חדשים יותר של החלפת דפים (alpha-4 ואילך), והתמיכה ב-
LivePagedListProvider
שהוצא משימוש הופסקה. כדי להשתמש בגרסת האלפא החדשה של החדר, צריך להשתמש בגרסהalpha-4
ואילך של פייג'ינגalpha-4
או לעבור מ-LivePagedListProvider
ל-LivePagedListBuilder
אם עדיין לא עשיתם את זה.
תיקוני באגים
- שיפור התמיכה בסוגי Kotlin Kapt. b/69164099
- סדר השדות לא פוסל יותר את הסכימה. b/64290754