חדר

ספריית Room persistence מספקת שכבת הפשטה מעל SQLite כדי לאפשר גישה חזקה יותר למסד הנתונים, תוך ניצול מלוא העוצמה של SQLite.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫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(). זו השיטה החדשה:

  1. מגדירים אובייקט expect שמטמיע את RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. מקושרים את האובייקט להצהרת @Database באמצעות @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. יצירת מופע חדש של מסד נתונים, אבל בלי להעביר ארגומנט של יצרן

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

תיקונים של b/316978491, b/338446862 ושל b/342905180

  • תמיכה ב-@RawQuery ב-Room KMP על ידי הוספת 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 מכילה את הקומיטים האלה.

תכונות חדשות

  • יש עכשיו תמיכה ב-Room בסוגי החזרה של מפות מקוננות בפונקציות DAO. (I13f48, ‏ 203008711)

שינויים ב-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 מכילה את הקומיטים האלה.

תכונות חדשות

שינויים ב-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 מכילה את הקומיטים האלה.

תכונות חדשות

שינויים ב-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(). כך אפשר להשתמש במסגרת הזרקת תלות כדי לספק מפרטים כאלה כשנדרשות תלויות מורכבות.

תיקוני באגים

  • תוקנה בעיה בהעברות אוטומטיות שבה @DatabaseViews לא נוצרו מחדש בצורה תקינה.

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 מכילה את הקומיטים האלה.

תכונות חדשות

תיקוני באגים

  • תוקן באג שבו יצירת 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, תומכות עכשיו בסוגי החזרה של Rx‏ Completable, Single, Maybe, ובסוג ההחזרה של Guava‏ ListenableFuture, והן יכולות להיות גם פונקציות השהיה.
  • 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 של התוסף מאפשרת לבצע עסקאות במסד נתונים בתוך קורוטינה בצורה בטוחה. פונקציות של תוספים לחדרים זמינות ב-artifact‏ room-ktx, יחד עם תמיכה ב-coroutines.
  • שיטות DAO לא מופשטות עם ההערה @Transaction יכולות להיות עכשיו פונקציות השהיה. b/120241587

API / Behavior Changes

  • שם הארטיפקט room-coroutines שונה ל-room-ktx בהתאם לאופן מתן השם לארטיפקטים אחרים של androidx.
  • הפסקנו את התמיכה ב-beginTransaction, ב-setTransactionSuccessful וב-endTransaction ב-RoomDatabase. במקום זאת, אפשר להשתמש ב-runInTransaction ובפונקציית ההרחבה room-ktxwithTransaction.

תיקוני באגים

  • תוקן באג שגרם להשמטת ארגומנטים של טוקנייזר אם הטוקנייזר שבו נעשה שימוש היה 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 תומכות עכשיו בסוגי החזרה של Rx‏ Completable, ‏ 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 Rx Single ו-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