חדר

ספריית Room לשמירת נתונים מספקת שכבת הפשטה מעל SQLite כדי לאפשר גישה חזקה יותר למסדי נתונים, תוך ניצול מלוא העוצמה של SQLite.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
30 באוקטובר 2024 2.6.1 - - 2.7.0-alpha11

הצהרה על יחסי תלות

כדי להוסיף תלות ב- Room, אתם צריכים להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאגר Maven של Google.

יחסי התלות של Room כוללים בדיקת העברות של Room ו-Room RxJava.

מוסיפים את יחסי התלות של פריטי המידע הנדרשים בקובץ build.gradle של האפליקציה או המודול:

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

מידע נוסף על השימוש בפלאגין KAPT זמין במסמכי העזרה של KAPT.

מידע נוסף על השימוש בפלאגין KSP זמין במסמכי העזרה למתחילים בנושא KSP.

מידע על שימוש בתוספים של Kotlin זמין במסמכי התיעוד של ktx.

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.

לחלופין, בספריות שאינן ל-Android (כלומר מודולים של Gradle ל-Java או ל-Kotlin בלבד), אפשר להשתמש ב-androidx.room:room-common כדי להשתמש בהערות של Room.

הגדרת אפשרויות של מהדר

אלה האפשרויות של מעבד ההערות במרחב המשותף.

room.schemaLocation directory
מאפשרת לייצא סכימות של מסדי נתונים לקובצי JSON בספרייה שצוינה. מידע נוסף זמין במאמר העברת חדרים.
room.incremental boolean
הפעלת מעבד ההערות המצטבר של Gradle. ערך ברירת המחדל הוא true.
room.generateKotlin boolean
יוצרים קובצי מקור של Kotlin במקום ב-Java. נדרש KSP. ערך ברירת המחדל הוא false. פרטים נוספים זמינים בהערות לגרסה 2.6.0.

שימוש בפלאגין Room Gradle

בגרסה 2.6.0 ואילך של Room, אפשר להשתמש בפלאגין של Room ל-Gradle כדי להגדיר אפשרויות למהדר של Room. הפלאגין מגדיר את הפרויקט כך שהסכמות שנוצרות (שהן פלט של משימות הידור ומשמשות להעברות אוטומטיות) מוגדרות בצורה נכונה כך שאפשר יהיה ליצור מהן גרסאות build שניתנות לשכפול ולשמירה במטמון.

כדי להוסיף את הפלאגין, מגדירים את הפלאגין ואת הגרסה שלו בקובץ ה-build ברמה העליונה של Gradle.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

בקובץ ה-build של Gradle ברמת המודול, מחילים את הפלאגין ומשתמשים בסיומת 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, למרות שהן נתמכות על ידי מהדר (compiler) Room. בטבלה הבאה מפורטות כל האפשרויות, ומוצגת הגרסה של פלאגין Room Gradle שנוספה לה תמיכה בהגדרת האפשרות הזו באמצעות התוסף room. אם הגרסה שלכם נמוכה יותר או אם האפשרות עדיין לא נתמכת, תוכלו להשתמש באפשרויות לעיבוד הערות.

אפשרות מגרסה
room.schemaLocation (שדה חובה) 2.6.0
room.incremental -
room.generateKotlin -

שימוש באפשרויות של מעבד האנוטציות

אם אתם לא משתמשים בפלאגין של Room ל-Gradle, או אם הגרסה של הפלאגין לא תומכת באפשרות הרצויה, תוכלו להגדיר את Room באמצעות אפשרויות של מעבדי הערות, כפי שמתואר בקטע הוספת יחסי תלות ל-build. האופן שבו מציינים את אפשרויות ההערה תלוי בשימוש ב-KSP או ב-KAPT ל-Room.

Groovy

// 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. נשמח לשמוע אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.

דיווח על בעיה חדשה

מידע נוסף זמין במסמכי התיעוד של Issue Tracker.

גרסה 2.7

גרסה 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 כדי לתמוך ביחסים עם 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 מכילה את התחייבויות אלה.

תיקוני באגים

  • תוקנה בעיה בהטמעת KMP של room-paging שגרמה ל-Error code: 8, message: attempt to write a readonly database בגלל התחלת עסקת כתיבה בחיבור לקריאה. (b/368380988)

גרסה 2.7.0-alpha08

18 בספטמבר 2024

androidx.room:room-*:2.7.0-alpha08 משוחרר. גרסת 2.7.0-alpha08 כוללת את ההוספות האלה.

תכונות חדשות

  • פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של room-paging הועברו כך שיתאימו ל-KMP. (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)

תיקוני באגים

  • תוקנה בעיה שבה מערכת KMP של Room ניסתה לפלוט קוד באמצעות UUID בפלטפורמות שהן לא JVM. (b/362994709)
  • תוקנה בעיה בפלאגין Room Gradle שגרמה לשגיאה כמו 'לא ניתן לשנות את המאפיינים של ההגדרות ... אחרי שהוא ננעל עקב מוטציה' במהלך שימוש בפרויקט KMP ב-Compose Multiplatform. (b/343408758)

גרסה 2.7.0-alpha07

21 באוגוסט 2024

androidx.room:room-*:2.7.0-alpha07 משוחרר. הגרסה 2.7.0-alpha07 מכילה את ההוספות האלה.

תכונות חדשות

  • הפלאגין של Room ל-Gradle יוסיף עכשיו באופן אוטומטי את הסכימות המיוצאות למקורות המשאבים של Android Instrumentation Test, כדי שאפשר יהיה להשתמש בהן ב-MigrationTestHelper.

תיקוני באגים

  • תוקנה בעיה ב'בפועל' שנוצר על ידי RoomDatabaseConstructor שחסרה בו התכונה 'בפועל' בפונקציה initialize אם הפונקציה הזו בוטלה גם בהצהרה 'צפוי'. (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)

תיקוני באגים

  • אפשר לפתור בעיה שבה החדר יוצר בטעות שיחה אל 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 לא היה חבילת קוד. (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() שמקבל פרמטר lambda שנועד לשימוש עם פונקציה שנוצרה על ידי Room, כדי להימנע משימוש בהשתקפות (reflection) בזמן יצירת מופע של ההטמעה של RoomDatabase שנוצרה. דוגמה לשימוש:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • הוספנו ל-builder: RoomDatabase.Builder.setQueryCoroutineContext ממשק API להגדרת Room עם CoroutineContext. הערה: אפשר להגדיר RoomDatabase רק עם מפעילים שמשתמשים ב-setQueryExecutor או עם הקשר של Coroutine, אבל לא עם שניהם.
  • הוספנו ממשק API להגדרת Room באמצעות מנהל SQLite: RoomDatabase.Builder.setDriver(). מידע נוסף על SQLite Driver API זמין במסמכי התיעוד של SQLite KMP.
  • נוספו ממשקי API לגישה ל-SQLiteConnection הבסיסי מממשקי ה-API של הנהגים: RoomDatabase.useReaderConnection ו-RoomDatabase.useWriterConnection.
  • לחלק מהקריאות החוזרות הקשורות ל-Room יש עכשיו גרסה עם עומס יתר שמקבלת את הערך SQLiteConnection במקום SupportSQLiteDatabase. צריך לשנות את ההגדרות האלה במהלך מעבר לפרויקט KMP. לקבלת מידע נוסף על העברת שימושים בחדרים באפליקציה ל-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 שמכילים את התוכן שאפשר להשליך עליו. ניתן לראות את מצב השגיאה הזה באמצעות PagingDataAdapter.loadStateFlow(Views) או LazyPagingItems.loadState(Compose). חשוב לזכור שמדובר בשינוי התנהגותי. בעבר, שגיאות טעינה היו מופיעות כחריגה (Exception) שנזרקה על ידי שיטת ה-DAO שהפעילה את הטעינה. (I93887, ‏ b/302708983)

גרסה 2.6.0

18 באוקטובר 2023

androidx.room:room-*:2.6.0 משוחרר. גרסה 2.6.0 כוללת את השמירות האלה.

שינויים חשובים מאז גרסה 2.5.0

  • האפשרות להפעיל יצירת קוד ב-Kotlin (או 'Kotlin CodeGen') זמינה עכשיו ב-Room KSP. (4297ec0). כדי להפעיל את Kotlin CodeGen ב-Room, מוסיפים את שם האפשרות room.generateKotlin לאפשרויות המעבד של KSP. פרטים נוספים על העברת אפשרויות מעבד ל-KSP זמינים במסמכי התיעוד של KSP.

הערה: כשמשתמשים ב-Kotlin CodeGen, חשוב לזכור שיש הגבלות נוספות שנוספו. אסור להשתמש במאפיינים מופשטים כ-DAO getters או כשאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לכתוב אותם מחדש כפונקציות כדי למנוע את ההנחה השגויה שערכו של המאפיין לא ניתן לשינוי ויש לו תוצאה קבועה ששמורה. הגבלה נוספת שנוספה היא שאי אפשר יותר להשתמש בסוגי ההחזרה של Nullable לאיסוף ב- Room ל-Kotlin CodeGen.

אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך null כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, חשוב לדעת אם ארגומנטי הטיפוס יכולים להיות null, בעוד שב-Java המערכת מתעלמת ברוב המקרים מהאפשרות הזו. לדוגמה, נניח שיש לכם טיפוס החזרה Flow<foo\> והטבלה ריקה. ב-CodeGen של Java, הדבר לא יגרום לבעיות, אבל ב-CodeGen של Kotlin תופיע שגיאה. כדי למנוע זאת, צריך להשתמש ב-`Flow<foo?\>`, בהנחה שהמערכת פולטת ערך null. </foo?\></foo\>

  • הארטיפקט החדש של הפלאגין של Room ל-Gradle נוסף ל-Room עם המזהה androidx.room, והוא פותר בעיות קיימות שונות ב-Room שקשורות להזנת קלט ופלט של סכימות באמצעות אפשרויות של מעבדי הערות ב-Gradle. פרטים נוספים זמינים בהערות המוצר של Room בגרסה 2.6.0-alpha02.
  • מעכשיו יש תמיכה ב-KSP בסוגי ערכים בישויות של חדרים. (4194095)
  • סוגי ההחזרה של מפות בתוך פונקציות בפונקציות DAO נתמכים עכשיו ב'חדר'. (I13f48, ‏ 203008711)

גרסה 2.6.0-rc01

20 בספטמבר 2023

androidx.room:room-*:2.6.0-rc01 משוחרר. גרסה 2.6.0-rc01 מכילה את שמירות האלה.

גרסה 2.6.0-beta01

23 באוגוסט 2023

androidx.room:room-*:2.6.0-beta01 משוחרר. גרסה 2.6.0-beta01 מכילה את ההתחייבויות האלה.

תיקוני באגים

  • טיפול בחריגה המיוחדת SQLite במהלך עלייה שהתרחשה כשהחריגה 2067 SQLITE_CONSTRAINT_UNIQUE מושלכת במהלך עלייה בעלייה, צריך לבצע עדכון. (If2849, ‏ b/243039555)

גרסה 2.6.0-alpha03

9 באוגוסט 2023

androidx.room:room-*:2.6.0-alpha03 משוחרר. גרסה 2.6.0-alpha03 מכילה את ההוספות האלה.

תכונות חדשות

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

room {
    schemaDirectory("$projectDir/schemas/")
}

לאחר מכן, הפלאגין יגדיר את המהדר של Room ואת משימות ה-compile השונות ואת הקצוות העורפיים שלו (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, חשוב לשים לב שנוספו גם הגבלות נוספות. אסור להשתמש במאפיינים מופשטים כמו מקבלי DAO או שאילתות DAO ב-Kotlin CodeGen, ובמקום זאת הם צפויים להיכתב מחדש כפונקציות כדי להימנע מהמושג השקרי שערך הנכס לא ניתן לשינוי ושיש לו תוצאה שמורה קבועה. הגבלה נוספת שנוספה היא שאסור יותר להשתמש בחזרי Nullable collection ב-Room ל-Kotlin CodeGen.

אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך null כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, יכולת ה-null של ארגומנטים מסוג היא חשובה, Wheras ב-Java מתעלמת ממנו בדרך כלל. לדוגמה, נניח שיש לכם טיפוס החזרה 'Flow<foo\>' והטבלה ריקה. ב-Java CodeGen, המצב הזה לא יגרום לבעיות, אבל ב-Kotlin CodeGen תופיע שגיאה. כדי למנוע את זה, צריך להשתמש ב-'Flow<foo?\>', בהנחה שנוצר ערך null. </foo?\></foo\>

שינויים ב-API

  • הגנה מפני שימוש לא מובן באוספים עם אפשרות לאפס (nullable) בסוגי ההחזרה של שיטות DAO. (I777dc, ‏ b/253271782, ‏ b/259426907)
  • מוסיפים API ליצירת תהליך שמפיק שינויים במעקב אחר ביטול התוקף. ה-API שימושי ליצירת סטרימינג שצריך להגיב לשינויים במסדי נתונים. (I8c790, ‏ b/252899305)

תיקוני באגים

  • אסור להשתמש במאפיינים מופשטים כ-getters של DAO או כשאילתות של 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)
  • עכשיו יש טיפול טוב יותר במקרה של קריאה חוזרת (reentrant) ב-acquireTransactionThread() של Room. (219f98b). במהלך עסקה בהשהיה, Room משתמשת בשרשור מהמבצע של העסקה, מפעילה בו לולאת אירועים ומפנה אליו פעולות השהיה של מסדי נתונים, כך שכולן מוקפות בתוך פונקציית ה-coroutine של העסקה. בדרך כלל, חוט העסקה שונה מחוט העסקה שהתחיל את העסקה, אבל במקרים מסוימים הם זהים. כדי לטפל במקרים כאלה של קריאה חוזרת (reentrant), 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)

תיקוני באגים

  • מעכשיו, בזמן בדיקת אילוץ של מפתח זר בהעברה אוטומטית, תופיע הודעת השגיאה 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 ב-getters של נכסים. (Ifc2fb)

תיקוני באגים

  • אלגוריתם היוריסטי לפתרון עמודות כפולות. מעכשיו, Room ינסה לפתור עמודות לא ברורות בשאילתה של מפה מרובה. כך אפשר למפות בצורה נכונה אובייקטים של נתוני תוצאה לאוספי טבלאות עם טבלאות בעלות אותו שם. (I4b444, ‏ b/201306012, ‏ b/212279118)

גרסה 2.5.0-alpha01

23 בפברואר 2022

androidx.room:room-*:2.5.0-alpha01 משוחרר. גרסה 2.5.0-alpha01 מכילה את התחייבויות אלה.

שינויים ב-API

  • תוקנה בעיה שבה השימוש ב-@IntDef של Room לא נאכף במקורות Kotlin. (I75f41, ‏ b/217951311)
  • תוקנה בעיית תאימות מקור כדי לאפשר מחדש @Query במקבלי נכסים. (I0a09b)
  • חדר שהוסב מג'אווה לקוטלין. (I69c48, ‏ b/206858235)

    הערה: יכול להיות שתתקלו בבעיות של חוסר תאימות למקור, כי חלק מהנכסים הועברו לאובייקטים נלווים במהלך ההמרה של הספרייה ל-Kotlin. אם הקוד היה ב-Kotlin והפעלתם את הגרסה הישנה של Room, בגרסה החדשה תצטרכו להוסיף את הסיומת ‎.Companion כדי לגשת לנכסים האלה.

  • המרת room-migration מ-Java ל-Kotlin. (I2724b, b/206858622)
  • הומרו קבצים קשורים של paging ב-room-runtime מ-Java ל-Kotlin. (I82fc8, ‏ b/206859668)
  • נוספו ממשקי API לנעילת תהליכים מרובים ולשימוש בהם ברמת FrameworkSQLite*, כדי להגן על יצירה והעברות של מסדי נתונים בפעם הראשונה בתהליכים מרובים. (Ied267, ‏ b/193182592)

תיקוני באגים

  • נוספה תמיכה בנכסים פנימיים במקורות של Kotlin. זהו שינוי התנהגות קל ב-Room, שבו המערכת תשתמש בשם המקור של הפונקציות בזמן ההתאמה שלהן למאפיינים כ-getters/setters (בעבר, המערכת השתמשה בשם הפונקציה ב-JVM, שהוא שונה לפונקציות או למאפיינים פנימיים). אם אתם משתמשים בהערות מותאמות אישית מסוג @JvmName כדי להתאים בין פונקציות getter/setter לבין מאפיינים פרטיים, עליכם לבדוק שוב את הקוד שנוצר אחרי העדכון (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 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה ביצירת קוד של פונקציית השהיה @Transaction של Dao עם גוף שיוצר שיטת ממשק ברירת מחדל בגלל הידור עם -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 כדי להתאים בין פונקציות getter/setter לבין מאפיינים פרטיים, עליכם לבדוק שוב את הקוד שנוצר אחרי העדכון (If6531, ‏ b/205289020)

גרסה

גרסה

15 בדצמבר 2021

androidx.room:room-*:2.4.0 משוחרר. גרסה 2.4.0 כוללת את השמירות האלה.

שינויים חשובים מאז 2.3.0

  • העברות אוטומטיות: Room מציע עכשיו ממשק API ליצירת העברות באופן אוטומטי, כל עוד מתבצע ייצוא של סכימות. כדי ליידע את החדר, צריך ליצור העברה אוטומטית של נכס חדש @Database#autoMigrations, שבעזרתו אפשר להצהיר על הגרסאות להעברה אוטומטית מהנכס ושאליו. כשמערכת Room זקוקה למידע נוסף לגבי שינוי שמות של טבלאות ועמודות או מחיקה שלהן, ההערה @AutoMigration יכולה להצהיר על סיווג מפרט שמכיל את הקלטות האלה. פרטים נוספים זמינים במסמכי התיעוד של @AutoMigration.
  • החדרת תלות בהעברות אוטומטיות: @ProvidedAutoMigrationSpec הוא API חדש שבו אפשר להצהיר ש-AutoMigrationSpec יסופק בזמן הריצה דרך RoomDatabase.Builder#addAutoMigrationSpec(). כך אפשר לספק מפרט כזה באמצעות מסגרת להזרקת יחסי תלות כשיש צורך ביחסי תלות מורכבים.
  • תמיכה של Migration Test Helper בהעברות אוטומטיות: MigrationTestHelper של Room עודכן כדי לתמוך בהעברות אוטומטיות באמצעות ממשק API חדש של קונסטרוקטור שמקבל את הכיתה של מסד הנתונים שנמצאת בבדיקה. כך כלי העזר יכול להוסיף העברות אוטומטיות באופן אוטומטי באותו אופן במהלך runMigrationsAndValidate.
  • תמיכה בחלוקה לדפים של חדרים: androidx.room:room-paging זמין עכשיו, ומספק תמיכה מקורית בחלוקה לדפים 3.0 לשאילתות על חדרים שמחזירות את הערך 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 מכילה את ההתחייבויות האלה.

תכונות חדשות

  • מעדכנים את התלות של Room ב-KSP ל-1.6.0-1.0.1 כדי לתמוך ב-Kotlin 1.6

גרסה 2.4.0-beta02

17 בנובמבר 2021

androidx.room:room-*:2.4.0-beta02 משוחרר. גרסה 2.4.0-beta02 כוללת את ההתחייבויות האלה.

תכונות חדשות

  • הוספנו תמיכה ב-SparseArray וב-LongSparseArray ב- @MapInfo. (Ic91a2b/138910317)

תיקוני באגים

  • הוספנו ניתוח TypeConverter חדש שמביא בחשבון את המידע על יכולת האפסולנס של סוגי נתונים. המידע הזה זמין רק ב-KSP, ולכן הוא מופעל כברירת מחדל רק ב-KSP. אם הוא יגרום לבעיות, תוכלו להשבית אותו על ידי העברת הערך room.useNullAwareTypeAnalysis=false למעבד ההערות. במקרה כזה, יש לגרום לבאג בקובץ, כי הדגל הזה יוסר בעתיד. באמצעות מנתח ה-TypeConverter החדש הזה, מומלץ לספק רק טיפוסים של ממירים שאינם null, כי למנתח החדש יש אפשרות לארוז אותם בבדיקת null. חשוב לזכור שלמשתמשים שמשתמשים ב-KAPT או ב-Java כמעבדי ההערות (בניגוד ל-KSP) אין מידע על יכולת האפסולנס (nullability) בסוגי הנתונים. (Ia88f9, ‏ b/193437407)
  • תיקון באג שבו ה-Room לא הצליח להיערך עם שגיאת SQL כשישות FTS הצהירה על שימוש במפַתח ICU. (I00db9, b/201753224)
  • פתרון בעיה בהעברות אוטומטיות לגבי עמודה חדשה שנוספה לישות מוטמעת בין גרסאות. (I5fcb1b/193798291)
  • פתרנו בעיה לגבי סוגי ההחזרה של שיטת השאילתה היחסית בשאילתות LEFT JOIN. בעקבות השינויים האלה, במקרה של מיפוי של מספר אחד, האוסף שיוחזר עבור מפתח לא יכלול את האובייקט של הערך הלא חוקי אם הוא לא נמצא בסמן. אם לא יימצאו ערכים תקינים, המפתח ימופה לאוסף ריק. (Id5552b/201946438)
  • תוקנה בעיה בהעברה האוטומטית שבה לא ניתן היה להימנע מהצגת תווים מיוחדים במילות מפתח של SQLite בשמות עמודות. (Idbed4b/197133152)

גרסה 2.4.0-beta01

13 באוקטובר 2021

androidx.room:room-*:2.4.0-beta01 משוחרר. גרסה 2.4.0-beta01 מכילה את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה שבה העמודות החדשות לא נוספו להעברות אוטומטיות כשלטבלה אחרת באותה העברה אוטומטית הייתה גם עמודה חדשה עם אותו שם. (Ia5db5, b/200818663)
  • הטמעת PagingSource שנוצרת על ידי חלוקה לדפים של חדרים משתמשת עכשיו ב-queryExecutor שמוענק דרך RoomDatabase.Builder, כך שאפשר לשנות את הערך שלו, במקום Dispatchers.IO שהיה בעבר. (Iae259)

גרסה 2.4.0-alpha05

29 בספטמבר 2021

androidx.room:room-*:2.4.0-alpha05 משוחרר. גרסה 2.4.0-alpha05 מכילה את ההצהרות האלה.

תכונות חדשות

שינויים ב-API

  • נוסף מאפיין חדש להערה TypeConverters כדי לאפשר למפתחים להשבית את ממירי Enum ו-UUID המובנים. הממירים האלה מופעלים כברירת מחדל, אבל אפשר להשבית אותם ברמת היקף מסוים או ברמת מסד הנתונים כולו. לפרטים נוספים, אפשר לעיין במסמכי התיעוד של TypeConverters. (36ae9e, ‏ b/195413406)

  • תמיכה במפתחות/ערכים שאינם POJO לסוגי החזרה של Multimap ב-DAOs באמצעות ההערה @MapInfo. (I4d704)

השדה @MapInfo יהיה נדרש כאשר עמודת המפתח או עמודת הערך במפה יהיו מעמודה אחת. לדוגמה:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • צריך להגדיר את room-paging כארטיפקט נדרש כשמשתמשים ב-Paging3 עם Room. (Ieaffe)

תיקוני באגים

  • תוקנה בעיה שבה תוצאות של שאילתות של מפות מרובות לא היו מסודרות בצורה נכונה כשהשאילתה הכילה תנאי ORDER BY של עמודה ממפתח המפה. (I6b887)

תרומה חיצונית

  • נוספה ממשק API חדש לציון סדר האינדקס ב-@Index. תודה ל-Nikita Zhelonkin. (I033fc)

גרסה 2.4.0-alpha04

21 ביולי 2021

androidx.room:room-*:2.4.0-alpha04 משוחרר. גרסה 2.4.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו יש ב-Room תמיכה בשיטות @Dao עם סוגי החזרים של מפות מרובות, ששימושיות לביטויי JOIN. סוגי המיפויים המרובים הנתמכים הם Map, וגם ImmutableMap,‏ ImmutableSetMultimap ו-ImmutableListMultimap של Guava.

    דוגמאות לשאילתות של מפות מרובות:

    מפה של יחס אחד-לאחד

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    מפת יחסים מסוג אחד-ל-רבים (מפת-על רגילה)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    אפשר לכלול את התוצאה של ריבוי מפות גם בסוגי ההחזרה האסינכרוניים הנתמכים כמו LiveData, Observable של Rx או קורוטינים Flow.

מעבר לחדר

  • androidx.room:room-paging שוחרר, ומספק תמיכה מקומית ב-Paging 3.0 לשאילתות Room שמחזירות את הערך androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • הארטיפקט הזה מחליף את ההטמעה של androidx.paging.PagingSource שנוצרה על ידי Room בהטמעה שנוצרה על גבי ממשקי ה-API של Paging 3.0. ההטמעה החדשה של PagingSource מפענחת מפתחות בצורה שונה, כך שכל מפתח שסופק באופן ידני ל-PagingSource של Room צריך להביא בחשבון את שינוי ההתנהגות הזה, כולל initialKey שהוענק באמצעות המבנה הגנרטיבי של Pager. הדפים יתחילו להיטען מה-Key, כאשר Key הוא הפריט הראשון שנטען. ההתנהגות הזו שונה מההתנהגות הקיימת, שבה LoadParams.Refresh.Key נחשב למיקום הגלילה של המשתמש והפריטים נטענים גם לפני וגם אחרי המקש.

  • הארטיפקט הוא אופציונלי, וביטול ההסכמה יוביל לשימוש בתמיכה הקיימת ב-Paging 3.0 שהוצגה ב-Room 2.3. עם זאת, פריט המידע הזה שנוצר בתהליך הפיתוח (Artifact) לא יהיה אופציונלי בגרסה עתידית למשתמשים שמשתמשים בחדר עם חלוקה לדפים 3.0. כדי להביע הסכמה, מוסיפים את הארטיפקט החדש של דפדוף בין חדרים לנתיב הספריות. אם משתמשים ב-Gradle, אפשר להוסיף את קטע הקוד הבא לקובץ build.gradle:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

תיקוני באגים

  • תיקון בעיה בהעברות אוטומטיות לגבי טיפול בהפרות של מפתחות זרים. (b/190113935)

גרסה 2.4.0-alpha03

16 ביוני 2021

androidx.room:room-*:2.4.0-alpha03 משוחרר. גרסה 2.4.0-alpha03 מכילה את התחייבויות אלה.

שינויים ב-API

  • צריך לעדכן את MigrationTestHelper של Room כך שיתמוך בהעברות אוטומטיות באמצעות API חדש של constructor שמקבל את המחלקה של מסד הנתונים בבדיקה. כך, הכלי יוכל להוסיף באופן אוטומטי העברות אוטומטיות באותו אופן במהלך runMigrationsAndValidate.

תיקוני באגים

  • תוקנה בעיה בספרייה המקורית של Room ל-SQLite כדי לתמוך בצ'יפים מסוג 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.

תרומה חיצונית

  • תוקנה בעיה ב-JournalMode.TRUNCATE של Room, שבה לפעמים ההפעלה החוזרת (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 מכילה את ההצהרות האלה.

תכונות חדשות

  • העברות אוטומטיות: Room מציע עכשיו ממשק API ליצירת העברות באופן אוטומטי, כל עוד מתבצע ייצוא של סכימות. כדי להודיע ל-Room שהוא צריך ליצור העברה אוטומטית, אפשר להשתמש בנכס חדש @Database#autoMigrations כדי להצהיר על הגרסאות שצריך להעביר אוטומטית ממנה ואליה. במקרים שבהם נדרש מידע נוסף לחדר על טבלאות ושמות של עמודות או עמודות, יש אפשרות להצהיר על רמת מפרט שמכילה את הנתונים האלה בהערה @AutoMigration. פרטים נוספים זמינים במסמכי התיעוד של @AutoMigration.

תיקוני באגים

  • תוקנה בעיה שבה defaultValue עם סוגריים מרובעים נוספים אומתו באופן שגוי על ידי אימות הסכימה של Room. b/182284899

גרסה 2.3.0

גרסה 2.3.0

21 באפריל 2021

androidx.room:room-*:2.3.0 משוחרר. גרסה 2.3.0 כוללת את ההצהרות האלה.

שינויים חשובים מאז גרסה 2.2.0

  • תמיכה מובנית ב-Enum: אם לא יסופק ממיר, Room ישתמש עכשיו כברירת מחדל בממיר מסוג Enum למחרוזת ולהפך. אם כבר קיים ממיר טיפוסים של enum, המערכת של Room תעדיף להשתמש בו על פני ממיר ברירת המחדל.
  • החזרה (callback) לשאילתות: מעכשיו, ב-Room יש ממשק API כללי להחזרה (callback) בשם RoomDatabase.QueryCallback, שמופעל כששאילתות עומדות להריץ. החזרה כזו יכולה להיות שימושית לרישום ביומן ב-builds לצורך ניפוי באגים. אפשר להגדיר את הקריאה החוזרת באמצעות RoomDatabase.Builder#setQueryCallback().
  • שיפור מובנה: ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות מסד נתונים מובנה מראש שנקרא ממקור קלט. כך אפשר לטפל במקרים שבהם מסד הנתונים שנארז מראש עבר דחיסת GZIP.
  • ממירי סוגים שסופקו: בחדר יש עכשיו ממשקי API שמאפשרים לספק מופעים של ממירים מסוגים מסוימים, כדי שהאפליקציה תוכל לשלוט באתחול שלהם. כדי לסמן ממיר טיפוסים שיסופק ל-Room, משתמשים בהערה החדשה @ProvidedTypeConverter.
  • תמיכה ב-RxJava3: מעכשיו אפשר להשתמש בסוגי RxJava3 ב-Room. בדומה ל-RxJava2 אפשר להצהיר על שיטות DAO שסוג ההחזרה שלהן הוא Flowable, Single, אולי ו-Comletable. בנוסף, פריט מידע שנוצר בתהליך פיתוח (Artifact) חדש 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)

תרומה חיצונית

  • מאפשרים ל-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, וכך לקצר משמעותית את זמני ה-build.

    כדי להשתמש ב-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 לקוד בסביבת הייצור. קיצור זמני ה-build רלוונטי רק אם אין מעבדים אחרים שמשתמשים ב-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 כללי להודעות חזרה (callback) RoomDatabase.QueryCallback, לשימוש כששאילתות עומדות להתבצע. ה-API הזה יכול להיות שימושי לצורך רישום ביומן בגרסאות build לצורך ניפוי באגים. אפשר להגדיר את הקריאה החוזרת באמצעות RoomDatabase.Builder#setQueryCallback(). (Iaa513, ‏ b/174478034, ‏ b/74877608)
  • אם לא תספקו ממיר, Room ישתמש עכשיו כברירת מחדל בממיר מסוג Enum למחרוזת ולהפך. אם כבר קיים ממיר טיפוסים של enum, המערכת של Room תעדיף להשתמש בו על פני ממיר ברירת המחדל. (b/73132006)

בעיה ידועה

  • אם כבר קיים ממיר מסוג חד-כיווני לקריאה עבור ה-Enum, יכול להיות ש- Room ישתמש בטעות במחרוזת המובנית לממיר Enum, וזה לא מה שרציתם. זו בעיה ידועה, ואפשר לפתור אותה על ידי הפיכת הממיר לממיר דו-כיווני. מידע נוסף זמין בb/175707691

תיקוני באגים

  • תוקנה בעיה שבה Room השביתה באופן שגוי את העיבוד המצטבר של הערות בגרסאות JDK חדשות יותר. (b/171387388)
  • תוקנה בעיה ב-Room בנוגע לאיתור הכיתה שנוצרה כשמשתמשים בכמה מעמיסי הכיתות. תודה על התיקון: 'Serendipity | 892449346@qq.com'! (b/170141113)
  • תוקנה בעיה שבה Room יצר קוד שגוי כשב-@Dao Kotlin הייתה מחלקה בסיסית שהגנרית שלה היא פרימיטיביות ב-JVM. (b/160258066)

תרומה חיצונית

  • עכשיו ברירת המחדל של Room היא להשתמש ב-beginTransactionNonExclusive אם מצב WAL מופעל וה-API הוא 16 או יותר. תודה ל-'Ahmed I. 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)

  • עדכון המסמך בנושא שיטות להוספה/הסרה של משגיחים כדי להבהיר את הנושא של יצירת שרשור (Ifd1d9, ‏ b/153948821)

  • תוקנה בעיה ב-Room שבה מתבצע אימות שגוי של טבלאות FTS שהוצהרה עליהן עמודת rowid. (d62ebc, ‏ b/145858914)

תרומות חיצוניות

  • פתרון בעיות שקשורות ללוקאל של אותיות רישיות/קטנות שקשורות לטורקית (5746e3), b/68159494

  • מחליפים את ConcurrentHashMap בתוך RoomDatabase ב-Collections.synchronizedMap() כדי למנוע בעיות ב-Android Lollipop‏ (d1cfc7, ‏ b/162431855)

  • הוספת קריאה חוזרת (callback) של onOpenPrepackagedDatabase להעתקת DB ארוז מראש. (I1ba74, ‏ b/148934423)

גרסה 2.3.0-alpha02

22 ביולי 2020

androidx.room:room-*:2.3.0-alpha02 משוחרר. גרסה 2.3.0-alpha02 מכילה את ההוספות האלה.

תכונות חדשות

  • תמיכה ב-RxJava3: החדר תומך עכשיו בסוגי RxJava3. בדומה ל-RxJava2, אפשר להצהיר על שיטות DAO שהסוג המוחזר שלהן הוא Flowable,‏ Single,‏ Maybe ו-Completable. בנוסף, פריט מידע שנוצר בתהליך פיתוח (Artifact) חדש androidx.room:room-rxjava3 זמין לתמיכה ב-RxJava3. (b/152427884)

שינויים ב-API

  • עכשיו יש תמיכה בהצהרה על @TypeConverter במחלקה של Kotlin. (b/151110764)
  • האפשרות 'עיבוד הערות מצטבר' בחדר מופעלת עכשיו כברירת מחדל. (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)
  • מעכשיו, החדר מטמיע את התלות שלו ב-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 כוללת את ההתחייבויות האלה.

תיקוני באגים

  • הגדרת DirectBootAware ל-MultiInstanceInvalidationService. תודה ל-Mygod contact-git@mygod.be (b/148240967)
  • תוקן באג שגרם לקריסה כשהשבתת השגיאות בכמה מכונות הייתה מופעלת ומסד הנתונים הכיל ישות FTS. (b/148969394)
  • תוקנה בעיה בטעינה של הספריות הילידיות של SQLite במעבד ההערות של Room, שגרמה לקריסה של המהדר בגלל הידור במקביל. (b/146217083)

גרסה 2.2.4

גרסה 2.2.4

19 בפברואר 2020

המשתנים androidx.room:room-common:2.2.4,‏ androidx.room:room-compiler:2.2.4,‏ androidx.room:room-guava:2.2.4,‏ androidx.room:room-ktx:2.2.4,‏ androidx.room:room-migration:2.2.4,‏ androidx.room:room-runtime:2.2.4,‏ androidx.room:room-rxjava2:2.2.4 ו-androidx.room:room-testing:2.2.4 משוחררים. גרסה 2.2.4 מכילה את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה בהשעיית טרנזקציות, שבה הם היו מסתיימים בקפדנות אם הקורוקטין בוטל זמן קצר לפני שהעסקה התחילה בפועל. (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 מכילה את ההוספות האלה.

תיקוני באגים

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

גרסה

גרסה

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, שמשמשת להצהרה על קשר שצריך להתקיים דרך טבלת צומת (שנקראת גם טבלת צירוף). b/69201917
  • יחסים מסוג אחד לאחד: ההגבלה בשדות של POJO עם הערות מסוג @Relation להיות מסוג List או Set הוסרה, כך שאפשר באופן יעיל ייצוג של קשרים מסוג יחיד. b/62905145
  • ישות יעד: להערות DAO @Insert, @Update ו-@Delete יש עכשיו מאפיין חדש targetEntity, שמאפשר לציין את טבלת היעד ששיטת DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506
  • Coroutines Flow: עכשיו אפשר להגדיר לסוג ההחזרה של שיטות DAO מסוג @Query את הערך Flow<T>. אם הנתונים בטבלאות שבשאילתה לא יהיו תקפים, המערכת תפיק מחדש קבוצת ערכים חדשה. הצהרה על פונקציית DAO עם סוג החזרה Channel<T> היא שגיאה. במקום זאת, מומלץ להשתמש ב-Flow ואז להשתמש בפונקציות הסמוכות כדי להמיר את ה-Flow ל-Channel. b/130428884
  • Gradle Incremental Annotation Processor: Room הוא עכשיו מעבד הערות מבודד של Gradle, ואפשר להפעיל את היכולת להגדיל את הערות באמצעות אפשרות המעבד room.incremental. מידע נוסף זמין במאמר אפשרויות של Room Compiler. אם נתקלתם בבעיות, אתם יכולים לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. b/112110217
  • Expanding Projections: נוספה אפשרות מהדר ניסיונית חדשה 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 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

לא בוצעו שינויים גלויים לכולם מאז שידור 2.2.0-beta01.

גרסה 2.2.0-beta01

22 באוגוסט 2019

androidx.room:room-*:2.2.0-beta01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תיקוני באגים

  • תוקן באג שבו שאילתה של Coroutine Flow הפסיקה לשדר ערכים חדשים אחרי זמן מסוים. (b/139175786)
  • תוקן באג שבו Room לא קיבל קוד גיבוב של סכימה מדור קודם בזמן פתיחת מסד נתונים שלא עבר העברה מאז Room 1.0, מה שגרם לקריסה בסביבת זמן הריצה בגלל סכימה לא חוקית. (b/139306173)

גרסה 2.2.0-alpha02

7 באוגוסט 2019

androidx.room:room-*:2.2.0-alpha02 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

  • Coroutines Flow: עכשיו אפשר להגדיר לסוג ההחזרה של שיטות DAO מסוג @Query את הערך Flow<T>. אם הטבלאות למעקב בשאילתה לא יהיו תקינות, תהליך ה-Flow המוחזר ישדר מחדש קבוצה חדשה של ערכים. הצהרה על פונקציית DAO עם סוג החזרה Channel<T> היא שגיאה. במקום זאת, מומלץ להשתמש ב-Flow ואז להשתמש בפונקציות הסמוכות כדי להמיר את ה-Flow ל-Channel. b/130428884
  • Expanding Projections: נוספה אפשרות מהדר ניסיונית חדשה room.expandProjection שגורמת ל- Room לשכתב שאילתה עם היטל כוכב כך שתכיל רק את העמודות מהסוג החוזר POJO. לדוגמה, לשיטת DAO עם @Query("SELECT * FROM Song") שמחזירה POJO בשם SongIdAndTitle עם שני שדות בלבד. לאחר מכן, Room תכתוב מחדש את השאילתה ל-SELECT id, title FROM Song כך שתתבצע אחזור של קבוצת העמודות המינימלית שתוביל לסוג ההחזרה הרצוי. כך אפשר למנוע את ההצגה של האזהרה CURSOR_MISMATCH שמופיעה כשהשאילתה מחזירה עמודות נוספות שלא תואמות לשום שדה בסוג ה-POJO המוחזר.
  • onDestructiveMigrate הוא ממשק API חדש להודעות חזרה (callback) שנוסף ל-RoomDatabase.Callback במקרים שבהם Room מעביר באופן הרסני מסד נתונים. b/79962330

תיקוני באגים

  • תוקן באג שבו Room יוצר קוד שגוי באמצעות שיטה כ-setter של שדה כשהשדה מוגן. b/136194628
  • תוקן באג שגרם ל-InvalidationTracker להפעיל NPE בתהליך שני כשהשבתת הכפילויות הופעלה והשירות להשבתה הושבת. b/137454915
  • תוקן באג שבו Room לא זיהה בצורה נכונה את סוג ההחזרה של פונקציית השהיה שעברה בירושה עם הערה @RawQuery. b/137878827
  • הקוד שנוצר עבור @Relation עודכן כשהמפתח הקשור הוא מסוג BLOB, כדי להשתמש ב-ByteBuffer דומה ל-b/137881998
  • תוקנה באג שבו מערכת Room התלוננה על חסרים setters ב-POJOs ששימשו כפרמטרים חלקיים של ישויות של @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, שמשמשת להצהרה על קשר שצריך למלא באמצעות טבלת צמתים (שנקראת גם טבלת איחוד). b/69201917
  • יחסים אחד-לאחד: ההגבלה בשדות POJO עם הערה @Relation שהם מסוג List או Set בוטלה, וכך אפשר לייצג יחסים עם ערך יחיד. b/62905145
  • Target Entity: להערות ה-DAO @Insert,‏ @Update ו-@Delete יש עכשיו מאפיין חדש, targetEntity, שמאפשר לציין את טבלת היעד ששיטת ה-DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506
  • מעבד הערות מצטברות ב-Gradle: עכשיו Room הוא מעבד הערות מבודד ב-Gradle, ואפשר להפעיל את האפשרות להוסיף הערות באמצעות אפשרות המעבד room.incremental. למידע נוסף, ראו אפשרויות של מהדר החדר. אם תיתקלו בבעיות, תוכלו לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. b/112110217

תיקוני באגים

  • Room לא יעביר יותר את EmptySetResultException לבורר השגיאות הגלובלי כשזרם ה-Rx של שאילתה מסוימת יוסר לפני שהשאילתה תושלם. b/130257475
  • תוקן באג שבו הודעה שגויה על שגיאה הוצגה ב-Room כשלפונקציית DAO מושהית עם הערה @RawQuery לא היה סוג החזרה. b/134303897
  • Room לא ייצור יותר מתאמי DAO עם סוגי נתונים גולמיים. b/135747255

גרסה 2.1.0

גרסה 2.1.0

13 ביוני 2019

גרסת Room 2.1.0 פורסמה ללא שינויים מ-2.1.0-rc01. אפשר למצוא את ההצהרות על השינויים שכלולות בגרסה כאן.

שינויים חשובים מאז גרסה 2.0.0

  • FTS: מעכשיו אפשר להשתמש ב-Room עם ישויות עם טבלת מיפוי של FTS3 או FTS4. עכשיו אפשר להוסיף הערות לכיתות עם @Entity באמצעות @Fts3 או @Fts4, כדי להצהיר על כיתה עם טבלת חיפוש של טקסט מלא במיפוי. אפשרויות נוספות להתאמה אישית של FTS זמינות באמצעות השיטות של ההערה.
  • תצוגות: עכשיו אפשר להצהיר על כיתה כעל שאילתה שמאוחסנת, שנקראת גם תצוגה, באמצעות ההערה @DatabaseView.
  • קורסים: שיטות DAO יכולות עכשיו להיות פונקציות השעיה. כדי לנצל את הפונקציונליות הזו, צריך לכלול את room-ktx ביחסי התלות. הארטיפקט של ktx מספק גם את פונקציית התוסף RoomDatabase.withTransaction לביצוע טרנזקציות במסד נתונים בתוך פונקציית קורוטין.
  • Auto Value: עכשיו אפשר להצהיר על כיתות עם הערות של 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 נעשה שימוש נכון ב-constructor הראשי של Kotlin ב-data classes, וכך אין צורך להצהיר על המאפיינים כ-vars.

גרסה 2.1.0-rc01

29 במאי 2019

תיקוני באגים

  • תוקנה שגיאה באינטליגנציה של Room שעלולה להתרחש בגלל הגדרה של 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. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

גרסה 2.1.0-alpha07

25 באפריל 2019

שינויים ב-API או בהתנהגות

  • פונקציית התוסף RoomDatabase.withTransaction השתנתה כך שלא תקבל יותר בלוק פונקציה עם CoroutineScope בתור נמען. כך אפשר למנוע דילוג על העטיפה הנוספת של coroutineScope { } שנדרשת כדי להריץ דברים בבלוק העסקה בו-זמנית.

תיקוני באגים

  • תוקן באג שבו Room לא מצליח להתאים TypeConverter לפונקציית DAO ב-Kotlin שמכילה פרמטר מסוג Collection.‏ b/122066791

גרסה 2.1.0-alpha06

22 במרץ 2019

שינויים ב-API או בהתנהגות

  • שאילתות עסקאות אסינכררוניות מסודרות עכשיו בסדרה, כך ש-Room לא ישתמש ביותר משרשור אחד לביצוע עסקאות במסדי נתונים. הוספנו את RoomDatabase.Builder.setTransactionExecutor(Executor) כדי לאפשר להגדיר את הביצוע לשימוש בטרנזקציות.
  • RoomDatabase.runInTransaction(Callable) לא יכסה יותר חריגות מאומתות ב-RuntimeExceptions.‏b/128623748

תיקוני באגים

  • תוקן באג שבו מעקב הפסילה הפסיק לעקוב אחרי טבלת תוכן אם נוספו משגיחים גם לטבלת התוכן וגם לטבלת FTS חיצונית של תוכן. b/128508917
  • עדכנו את הדקדוק של SQLite ב-Room כך שיתאים ל-SQLite 3.24.0. b/110883668

גרסה 2.1.0-alpha05

13 במרץ 2019

תכונות חדשות

  • פונקציית התוסף RoomDatabase.withTransaction מאפשרת לבצע עסקאות בבטחה במסגרת פונקציית קורוטין. הפונקציות של תוספים ל-Room, יחד עם תמיכה ב-coroutines, זמינות בארטיפקט room-ktx.
  • עכשיו אפשר להשהות פונקציות של שיטות DAO לא מופשטות עם הערה @Transaction. b/120241587

שינויים ב-API או בהתנהגות

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

תיקוני באגים

  • תוקן באג שבו ארגומנטים של מחוללי תווים הושמטו אם השתמשו במחולל התווים SIMPLE. b/125427014
  • תוקן באג שבו מערכת Room לא הצליחה לזהות כראוי פונקציות השהיה עם פרמטרים שהסוג שלהם היה כיתה פנימית. b/123767877
  • תוקנה באג שבו שיטת DAO @Query מושהית עם הצהרות INSERT, ‏ UPDATE או DELETE הכינה את השאילתה בצורה נמרצת בשרשור הראשי. b/123695593
  • תוקנו באגים שונים שגרמו לחדרים ליצור קוד שגוי לפונקציות השעיה מסוימות. b/123466702 ו-b/123457323
  • תוקן באג שבו השימוש בשיטות שהוצאו משימוש לא נדחק כראוי בקוד שנוצר. b/117602586
  • עדכנו את יחסי התלות של Room ב-androidx.sqlite לגרסה 1.0.2, שמכילה תיקונים לטיפול נכון במסדי נתונים פגומים. b/124476912

בעיות מוכרות

  • חדר 2.1.0-alpha05 תלוי בארטיפקט kotlinx-metadata-jvm, שלא זמין כרגע ב-Maven Central (KT-27991). כדי לפתור את התלות הזו, צריך להוסיף את maven { url "https://kotlin.bintray.com/kotlinx/" } למאגרי הפרויקטים.

גרסה 2.1.0-alpha04

25 בינואר 2019

תכונות חדשות

  • שיטות DAO עם הערה @Query שמכילות הצהרות INSERT, ‏ UPDATE או DELETE יכולות עכשיו להחזיר את הסוגים האסינכרוניים Single, ‏ Mayble, ‏ Completable ו-ListenableFuture. בנוסף, הן יכולות להיות גם פונקציות השהיה. b/120227284

שינויים ב-API או בהתנהגות

  • מעכשיו, אם method של DAO לא מופשט עם הערה @Transaction מחזיר סוג אסינכרוני כמו Single,‏ Mayble,‏ Completable,‏ LiveData או ListenableFuture, תופיע שגיאה ב-Room. מאחר שהטרנזקציות מוגבלות לשרשור, כרגע אי אפשר ל-Room להתחיל ולסיים טרנזקציה סביב פונקציה שעשויה לבצע שאילתות בשרשור אחר. b/120109336
  • הערכים של OnConflictStrategy.FAIL ו-OnConflictStrategy.ROLLBACK הוגדרו כ-@Deprecated כי הם לא פועלים כמצופה עם קישורי ה-SQLite הנוכחיים של Android. b/117266738

תיקוני באגים

  • תוקן באג שבו Room לא השתמש בצורה נכונה ב-TypeConverter של סוג ההחזרה אם שיטת ה-DAO הייתה פונקציית השהיה. b/122988159
  • תוקן באג שגרם לכך שחדר המודעות מזהה בטעות פונקציות השעיה שעברו בירושה כפונקציות שאינן ממתינות. b/122902595
  • תוקנה באג שבו Room יוצר קוד שגוי כששדה @Embedded נמצא בכיתה הורה ומשומש בכמה כיתות צאצא. b/121099048
  • תוקנה בעיה שגרמה לניתוק מסד הנתונים כשמפעילים פונקציות השעיה של DAO בין beginTransaction() ל-endTransaction(). b/120854786

גרסה 2.1.0-alpha03

4 בדצמבר 2018

שינויים ב-API

  • ה-FTS tokenizer ב-@Fts3/@Fts4 מקבל עכשיו מחרוזת במקום Enum. כך אפשר להשתמש ב-Room ב-tokenizers מותאמים אישית. כלים מובנים לאסימונים עדיין מוגדרים ב-FtsOptions כקבועים של מחרוזות. b/119234881

תכונות חדשות

  • פונקציות עורכות: עכשיו אפשר להשהות פונקציות של שיטות DAO. כדי לתמוך בפונקציות השהיה ב-Room, הושק נכס room-coroutines חדש. b/69474692
  • שיטות DAO עם הערה @Insert, ‏ @Delete או @Update תומכות עכשיו ב-ListenableFuture כסוג ההחזרה. b/119418331

תיקוני באגים

  • תוקן באג שגרם ל'חדר' מנסה למצוא באופן שגוי בנאי עם עמודות בנכס 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 הראשי כשנרשמתם למינוי והשלכתם מ-type return של Rx. b/117201279
  • תוקן באג שגרם ל'חדר' לא מצא ממיר מסוג מתאים לשדה במחלקה של ישות Kotlin. b/111404868
  • תוקן באג שבו Room יוצר קוד שגוי להטמעת ממשק DAO שמכיל שיטת ברירת מחדל של Kotlin ללא ארגומנטים. b/117527454
  • עדכנו את מנתח הדקדוק של SQLite ב-Room, ותוקנה בעיית ביצועים שגרמה לזמני build ארוכים. b/117401230

גרסה 2.1.0-alpha01

8 באוקטובר 2018

תכונות חדשות

  • FTS: מעכשיו אפשר להשתמש ב-Room עם ישויות עם טבלת מיפוי של FTS3 או FTS4. עכשיו אפשר להוסיף הערות לכיתות עם התווית @Entity באמצעות התווית @Fts3 או @Fts4 כדי להצהיר על כיתה עם טבלת חיפוש של טקסט מלא שממופה. אפשרויות נוספות להתאמה אישית של FTS זמינות באמצעות השיטות של ההערה. b/62356416
  • תצוגות: מעכשיו אפשר להצהיר על כיתה כעל שאילתה שמאוחסנת, שנקראת גם תצוגה, באמצעות ההערה ‎ @DatabaseView. b/67033276
  • Auto Value: מעכשיו אפשר להצהיר ב-Room על כיתות עם הערות של AutoValue כישות וכ-POJO. עכשיו אפשר להצהיר על הערות החדר @PrimaryKey, @ColumnInfo, @Embedded ו-@Relation בשיטות מופשטות של סיווג אוטומטי עם הערות. חשוב לזכור שצריך להוסיף את התווית @CopyAnnotations כדי שמערכת Room תבין את ההערות האלה בצורה נכונה. b/62408420
  • תמיכה בסוגים נוספים של חזרי Rx: שיטות DAO עם הערות @Insert, ‏ @Delete או @Update תומכות עכשיו בסוגים Completable, ‏ Single<T> ו-Maybe<T> של חזרי Rx. b/63317956
  • סוגים שאינם ניתנים לשינוי עם @Relation: בעבר היה צורך ב-@Relation שדות עם הערות כדי להגדיר חדר, אבל עכשיו הם יכולים להיות פרמטרים של constructor.
  • enableMultiInstanceInvalidation: ממשק API חדש ב-RoomDatabase.Builder שמאפשר לבטל את התוקף של כמה מכונות של RoomDatabase באמצעות אותו קובץ מסד נתונים. מנגנון ביטול התוקף של מספר מכונות פועל גם בתהליכים מרובים. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: ממשק API חדש ב-RoomDatabase.Builder ליצירה מחדש אוטומטית של מסד הנתונים במקרה של הורדה לאחור. b/110416954
  • ignoredColumns: מדובר ב-API חדש בהערה @Entity שאפשר להשתמש בו כדי להציג את רשימת השדות שהמערכת מתעלמת מהם לפי שם. שימושי להתעלמות משדות שעברו בירושה לישות. b/63522075

שינויים ב-API או בהתנהגות

  • mCallback ו-mDatabase ב-RoomDatabase הם עכשיו @Deprecated, והם יוסרו בגרסה הראשית הבאה של Room. b/76109329

תיקוני באגים

  • תוקנו שתי בעיות שבהן Room לא התאושש כראוי ממסד נתונים פגום או מהעברה שגויה במהלך האימות. b/111504749 ו-b/111519144
  • מעכשיו, Room ישתמש כראוי ב-constructor הראשי של Kotlin ב-data classes, וכך לא תצטרכו להצהיר על השדות כ-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 או בהתנהגות

  • נוספה RoomDatabase.Builder.setQueryExecutor() כדי לאפשר התאמה אישית של המיקום שבו השאילתות פועלות
  • נוספה תמיכה ב-Observable של RxJava2
  • ההטמעות של DAO ושל מסדי הנתונים שנוצרו הן סופיות עכשיו

תיקוני באגים

  • צריך לציין את שם המחלקה/השדה בשגיאה 'לא ניתן למצוא את getter בשדה' b/73334503
  • תוקנה תאימות לאחור של RoomOpenHelper לגרסאות ישנות של Room b/110197391

יחסי תלות מהתקופה שלפני AndroidX

בגרסאות של Room שקדמו ל-AndroidX, צריך לכלול את יחסי התלות הבאים:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

גרסה 1.1.1

גרסה 1.1.1

19 ביוני 2018

החדר 1.1.1 זהה לחדר 1.1.1-rc1.

גרסה 1.1.1-rc1

16 במאי 2018 אנחנו ממליצים מאוד להשתמש ב-Room 1.1.1-rc1 במקום ב-1.1.0 אם אתם משתמשים בהעברות.

תוקן באג שבו Room לא מטפל כראוי בהפעלה הראשונית לאחר ההעברה b/79362399

גרסה 1.1.0

גרסה 1.1.0-בטא3

19 באפריל 2018

תיקוני באגים

  • תיקון שגיאת הידור כש-POJO של Kotlin מפנה לישות יחס שהוגדרה ב-Java b/78199923

גרסה 1.1.0-beta2

5 באפריל 2018

תיקוני באגים

  • תוקנה באג קריטי בהטמעות של Rx Single ו-Maybe ב-Room, שבו השאילתה הייתה עוברת מיחזור מראש, מה שגרם לבעיות אם מוסיפים יותר ממבצע מעקב אחד למופעי 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
  • דפים: הטמעת DataSource של Room מטפלת עכשיו בצורה נכונה ביחסי תלות בין טבלאות מרובות (כמו יחסי גומלין וחיבורים). בעבר, פעולות כאלה לא היו מפעילות תוצאות חדשות או שהן לא היו מצליחות להיערך. b/74128314

גרסה 1.1.0-alpha1

22 בינואר 2018

תכונות חדשות

  • RawQuery: ממשק ה-API החדש הזה מאפשר לשיטות @Dao לקבל את ה-SQL כפרמטר של שאילתה b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: ה-API החדש ב-RoomDatabase.Builder מאפשר שליטה פרטנית יותר על האופן שבו מותרות העברות הרסניות החל מגרסאות סכימה (בהשוואה ל-fallbackToDestructive Migration) b/64989640
  • מעכשיו, אפשר להשתמש ב-Room רק בממשקי API חדשים יותר של דפים (alpha-4 ואילך), והתמיכה ב-LivePagedListProvider הוצאה משימוש. כדי להשתמש בגרסת האלפא החדשה של Room, צריך לעבור מ-alpha-4 ואילך ולעבור מ-LivePagedListProvider ל-LivePagedListBuilder אם עדיין לא עשית זאת.

תיקוני באגים

  • תמיכה משופרת בסוגי Kotlin Kapt. ‏ b/69164099
  • סדר השדות לא מבטל יותר את התקינות של הסכימה. b/64290754