חדר
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסה אלפא |
---|---|---|---|---|
11 בדצמבר 2024 | 2.6.1 | - | - | 2.7.0-alpha12 |
הצהרת יחסי תלות
כדי להוסיף תלות ב-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, אפשר להשתמש בפלאגין של Gradle ל-Room כדי להגדיר אפשרויות למהדר של 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
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
צריך להגדיר schemaDirectory
כשמשתמשים בפלאגין Room Gradle. כך תוכלו להגדיר את המהדר של Room ואת משימות הידור השונות ואת הקצוות העורפיים שלו (javac, KAPT, KSP) כך שיפיקו קובצי סכימה לתיקיות עם טעמים, למשל schemas/flavorOneDebug/com.package.MyDatabase/1.json
. צריך להטמיע את הקבצים האלה במאגר כדי להשתמש בהם לאימות ולמיגרציות אוטומטיות.
אי אפשר להגדיר חלק מהאפשרויות בכל הגרסאות של הפלאגין Room Gradle, למרות שהן נתמכות על ידי המהדר של Room. בטבלה הבאה מפורטות כל האפשרויות, ומוצגת הגרסה של פלאגין Room Gradle שנוספה לה תמיכה בהגדרת האפשרות הזו באמצעות התוסף room
. אם הגרסה שלכם נמוכה יותר, או אם האפשרות עדיין לא נתמכת, תוכלו להשתמש במקום זאת באפשרויות של מעבד התווית.
אפשרות | מגרסה |
---|---|
room.schemaLocation (שדה חובה) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
שימוש באפשרויות של מעבד האנוטציות
אם אתם לא משתמשים בפלאגין של Room ל-Gradle, או אם הגרסה של הפלאגין לא תומכת באפשרות הרצויה, תוכלו להגדיר את 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-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
כדי לתמוך ביחסים עם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 כוללת את ההוספות האלה.
תכונות חדשות
- ארטיפקטים של
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)
תיקוני באגים
- תוקנה בעיה שבה Room KMP ניסה להפיק קוד באמצעות
UUID
בפלטפורמות שאינן JVM. (b/362994709) - תוקנה בעיה ב-Room Gradle Plugin שגרמה לשגיאה כמו 'לא ניתן לשנות מאפיינים של הגדרה… אחרי שהיא ננעלה לשינוי' כשמשתמשים בה בפרויקט 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
.
תיקוני באגים
- תוקנה בעיה ב-'actual' שנוצר ב-
RoomDatabaseConstructor
בלי המשתנה 'actual' בפונקציהinitialize
, אם הפונקציה הזו הוגדרה מחדש גם בהצהרה 'expect'. (359631627) - תוקנה בעיה שבה הערך 'הערך בפועל' שנוצר של
RoomDatabaseConstructor
לא תואם לחשיפה של ההצהרה 'צפוי'. (358138953)
גרסה 2.7.0-alpha06
7 באוגוסט 2024
androidx.room:room-*:2.7.0-alpha06
משוחרר. גרסת 2.7.0-alpha06 כוללת את ההוספות האלה.
שינויים ב-API
- שינוי ההגדרה של היצירה של
RoomDatabase
בפרויקט KMP.
בגלל מודל הידור של Kotlin 2.0, האסטרטגיה של הפניה לפונקציה שצריך ליצור, בשם instantiateImpl()
, כבר לא תקפה. אנחנו משיקים שני ממשקי API חדשים, @ConstructedBy
ו-RoomDatabaseConstructor
, שמחליפים את האסטרטגיה instantiateImpl()
. השיטה החדשה היא:
הגדרת אובייקט expect שמטמיע את
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
קישור האובייקט להצהרה
@Database
באמצעות@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
יצירת מכונה חדשה של מסד נתונים בלי להעביר ארגומט של מפעל
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
תיקונים של b/316978491, b/338446862 ו-b/342905180
- תמיכה ב-
@RawQuery
ב-Room KMP באמצעות הוספת ממשק API חדש בשםRoomRawQuery
, הדומה ל-SupportSQLiteQuery
מבחינת שמירה על מחרוזת ה-SQL הגולמית ופונקציה לקישור ארגומנטים לתוך משפט. פונקציות עם הערות@RawQuery
יכולות עכשיו לקבלRoomRawQuery
כפרמטר היחיד שלהן. (Iea844, b/330586815) - מוסיפים עומס יתר של
setQueryCallback()
שמקבלCoroutineContext
. (Id66ff, b/309996304) - הוספנו תמיכה ביעדים של
linuxArm64
Kotlin Multiplatform (I139d3, b/338268719)
תיקוני באגים
- תוקנה בעיה שבה Room יוצר קריאה שגויה ל-
recursiveFetchArrayMap
ביעדים שאינם Android. (710c36, b/352482325) - תוקנה בעיה שבה לפעמים Room גורם להחרגה לגבי 'פג הזמן המוקצב להתחברות' בפרויקט KMP. (fa72d0, b/347737870)
- תיקון בעיה בהעברות אוטומטיות שבהן מתבצעת בדיקה של מפתחות זרים מוקדם מדי, לפני שסכמות של טבלאות אחרות משתנות בהתאם למפתחות הזרים החדשים. (7672c0, b/352085724)
גרסה 2.7.0-alpha05
10 ביולי 2024
androidx.room:room-*:2.7.0-alpha05
משוחרר. גרסת 2.7.0-alpha05 כוללת את ההוספות האלה.
שינויים ב-API
- השם של
SQLiteKt
השתנה ל-SQLite
והשם שלBundledSQLiteKt
השתנה ל-BundledSQLite
. (I8b501)
תיקוני באגים
- תוקן באג שבו
RoomDatabase
נכנס למצב נעילה מרומזת או גורם לשגיאה עם זמן קצוב לתפוגה של חיבור כשמשתמשים ב-AndroidSQLiteDriver
.
גרסה 2.7.0-alpha04
12 ביוני 2024
androidx.room:room-*:2.7.0-alpha04
משוחרר. גרסת 2.7.0-alpha04 מכילה את ההוספות האלה.
תיקוני באגים
- תוקנה בעיה במעבד ההערות של Room, שגרמה ליצירת קוד KMP לא תואם כשהוגדר ב-DAO סוג החזרה של מפות מרובות. (b/340983093)
- תוקנה בעיה שבה Room לא מצליח למצוא את הטמעת מסד הנתונים שנוצרה אם לכיתה עם ההערה
@Database
אין חבילת קוד. (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
או עם הקשר של קורוטין, אבל לא עם שניהם. - הוספנו ממשק API להגדרת Room באמצעות מנהל
SQLite
:RoomDatabase.Builder.setDriver()
. מידע נוסף עלSQLite
Driver API זמין במסמכי התיעוד של SQLite KMP. - נוספו ממשקי API לגישה ל-
SQLiteConnection
הבסיסי מממשקי ה-API של הנהגים:RoomDatabase.useReaderConnection
ו-RoomDatabase.useWriterConnection
. - לחלק מהקריאות החוזרות הקשורות ל-Room יש עכשיו גרסה עם עומס יתר שמקבלת את הערך
SQLiteConnection
במקוםSupportSQLiteDatabase
. ההגדרות האלה מיועדות לשינוי במהלך המעבר לפרויקט KMP. מידע נוסף על העברת שימושים של Room באפליקציית Android למודול KMP נפוץ זמין במדריך ההעברה. מספרי החזרה הם:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- הארטיפקט של KTX
androidx.room:room-ktx
מוזג ל-androidx.room:room-runtime
יחד עם כל ממשקי ה-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)
. חשוב לזכור שזוהי שינוי בהתנהגות. בעבר, שגיאות טעינה היו מופיעות כחריגה (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 collection ב-Room ל-Kotlin CodeGen.
אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך (nullability) כשמשתמשים ב-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)
- יש עכשיו תמיכה ב-Room בסוגים של מפות בתצוגת עץ שמוחזרים בפונקציות DAO. (I13f48, 203008711)
גרסה 2.6.0-rc01
20 בספטמבר 2023
androidx.room:room-*:2.6.0-rc01
משוחרר. גרסה 2.6.0-rc01 כוללת את ההצהרות האלה.
גרסה 2.6.0-beta01
23 באוגוסט 2023
androidx.room:room-*:2.6.0-beta01
משוחרר. גרסה 2.6.0-beta01 מכילה את ההצהרות האלה.
תיקוני באגים
- טיפול במקרה המיוחד של חריגה מסוג
SQLite
במהלך הוספה/עדכון (upsert). אם חריגה מסוג2067 SQLITE_CONSTRAINT_UNIQUE
מתרחשת במהלך הוספה/עדכון (upsert), המערכת צריכה לבצע עדכון. (If2849, b/243039555)
גרסה 2.6.0-alpha03
9 באוגוסט 2023
androidx.room:room-*:2.6.0-alpha03
משוחרר. גרסה 2.6.0-alpha03 מכילה את ההוספות האלה.
תכונות חדשות
שינויים ב-API
- נוצרה הערה חדשה לגבי סוג שנקראת
@MapColumn
כדי להחליף את הערה@MapInfo
, שיוצאת משימוש. לכל שם עמודה (keyColumnName
,valueColumnName
או שניהם) שצוין בהערה@MapInfo
, צריך להצהיר על הערה@MapColumn
עםcolumnName
בלבד ולהשתמש בהערה על ארגומנט הסוג הספציפי שאליו מתייחסים (המפתח או הערך של המפה) בסוג ההחזרה של פונקציית ה-DAO. הסיבה לכך היא שההערה@MapColumn
משמשת ישירות בארגומנט הטיפוס בתוך סוג ההחזרה של פונקציית DAO, במקום בפונקציה עצמה כמו@MapInfo
. מידע נוסף זמין במסמכי העזרה של@MapColumn
. (Ib0305, b/203008711) - עדכנו את קובצי ה-API כדי להוסיף הערות לגבי השמטת תאימות (I8e87a, b/287516207)
- ממשקי ה-API של הפלאגין של Room ל-Gradle עודכנו כך שלא תמיד נדרשות הגדרות לכל וריאנט. פירוש הדבר הוא שהפלאגין יכול לקבל מיקום גלובלי לכל הווריאציות בלי ליצור כמה ספריות, וכך מאפשר העברות חלקות יותר, אבל הוא גם מספיק גמיש כדי להגדיר באופן ידני תבניות של סוגים של גרסאות 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 getters או כשאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לכתוב אותם מחדש כפונקציות כדי למנוע את ההנחה השגויה שערכו של המאפיין לא ניתן לשינוי ויש לו תוצאה קבועה ששמורה. הגבלה נוספת שנוספה היא שאסור יותר להשתמש בחזרי Nullable collection ב-Room ל-Kotlin CodeGen.
אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך (nullability) כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, חשוב לדעת אם ארגומנטי הטיפוס יכולים להיות null, בעוד שב-Java המערכת מתעלמת ברוב המקרים מהאפשרות הזו. לדוגמה, נניח שיש לכם טיפוס החזרה Flow<foo\> והטבלה ריקה. ב-CodeGen של Java, המצב הזה לא יגרום לבעיות, אבל ב-CodeGen של Kotlin תופיע שגיאה. כדי למנוע זאת, צריך להשתמש ב-`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 שונים שמעבירים את הארגומנטים של השאילתות מ-invariant (
Array<Any?>
) ל-contravariant (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 כוללת את ההוספות האלה.
תכונות חדשות
- נוספו פריטים חדשים של
room-paging
–room-paging-rxjava2
, room-paging-rxjava3
ו-room-paging-guava
– לתמיכה בחלוקה של חדרים.(41a1d4,b/203666906), (eb6098,b/203666906), (1b9ae4,b/203666906)
שינויים ב-API
- כל
room-runtime
הומר מ-Java ל-Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)הערה: יכול להיות שתתקלו בבעיות של חוסר תאימות למקור בגלל המרת הספרייה ל-Kotlin. אם הקוד שלכם היה ב-Kotlin והפעלתם את הגרסה הישנה של Room, הגרסה החדשה תצטרך לטפל במקרים האלה. לדוגמה, שינוי ידוע שלא תואם למקור הוא שב-
InvalidationTracker
צריך עכשיו להצהיר עלonInvalidate()
ב-Observer
שיש לו פרמטר מסוגSet
ולאMutableSet
. - נוספו ממשקי API שמספקים שמות של טבלאות מפתחות וערכים לצורך הסרת עמימות ב-
@MapInfo
(Icc4b5) - תיקון בעיה בתאימות של מקור כדי לאפשר שוב את השימוש ב-
@Ignore
ב-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
ב-getters של נכסים. (I0a09b) - המרת room-common מ-Java ל-Kotlin. (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)
גרסה 2.4.0
גרסה 2.4.0
15 בדצמבר 2021
androidx.room:room-*:2.4.0
משוחרר. גרסה 2.4.0 כוללת את ההצהרות האלה.
שינויים חשובים מאז גרסה 2.3.0
- העברות אוטומטיות: Room מציע עכשיו ממשק API ליצירת העברות באופן אוטומטי, כל עוד מתבצע ייצוא של סכימות. כדי להודיע ל-Room שהוא צריך ליצור העברה אוטומטית, אפשר להשתמש בנכס חדש
@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 חדש שמביא בחשבון מידע על יכולת החזקה של ערכים null בסוגי נתונים. המידע הזה זמין רק ב-KSP, ולכן הוא מופעל כברירת מחדל רק ב-KSP. אם הוא יגרום לבעיות, תוכלו להשבית אותו על ידי העברת הערך room.useNullAwareTypeAnalysis=false למעבד ההערות. אם זה יקרה, יש לדווח על באג כי הדגל הזה יוסר בעתיד. עם הניתוח החדש של TypeConverter, מומלץ לספק רק TypeConverters מקבלים שאינם null, כי לניתוח החדש יש אפשרות לעטוף אותם בבדיקת null. חשוב לזכור שלמשתמשים שמשתמשים ב-KAPT או ב-Java כמעבדי ההערות (בניגוד ל-KSP) אין מידע על יכולת החזקה של משתנים מסוגים שונים. (Ia88f9, b/193437407)
- תיקון באג שבו ה-Room לא הצליח להיערך עם שגיאת SQL כשישות FTS הצהירה על שימוש במפַתח ICU. (I00db9, b/201753224)
- פתרון בעיה בהעברות אוטומטיות לגבי עמודה חדשה שנוספה לישות מוטמעת בין גרסאות. (I5fcb1b/193798291)
- פתרנו בעיה בקשר לסוגים של חזרות של שיטות של שאילתות יחסיות בשאילתות LEFT JOIN. בעקבות השינויים האלה, במקרה שבו יש מיפוי אחד-לרבים, האוסף שמוחזר למפתח לא יכלול את אובייקט הערך הלא חוקי אם הוא לא נמצא בסמן. אם לא יימצאו ערכים תקינים, המפתח ימופה לאוסף ריק. (Id5552b/201946438)
- תוקנה בעיה בהעברה האוטומטית שבה לא ניתן היה להימנע מהצגת מילות מפתח של SQLite בשמות עמודות. (Idbed4b/197133152)
גרסה 2.4.0-beta01
13 באוקטובר 2021
androidx.room:room-*:2.4.0-beta01
משוחרר. גרסה 2.4.0-beta01 מכילה את ההתחייבויות האלה.
תיקוני באגים
- תוקנה בעיה שבה לא נוספו עמודות חדשות במעברים אוטומטיים, אם לטבלה אחרת באותו מעבר אוטומטי הייתה גם עמודה חדשה עם אותו שם. (Ia5db5, b/200818663)
- ההטמעה של PagingSource שנוצרת על ידי דפדוף בין חדרים משתמשת עכשיו ב-
queryExecutor
שמוענק דרךRoomDatabase.Builder
, כך שאפשר לשנות אותה, במקוםDispatchers.IO
בעבר. (Iae259)
גרסה 2.4.0-alpha05
29 בספטמבר 2021
androidx.room:room-*:2.4.0-alpha05
משוחרר. גרסה 2.4.0-alpha05 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
תכונות חדשות
- הוספנו ממיר טיפוסים מובנה ל-UUID. (I671e8, b/73132006)
שינויים ב-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. עם זאת, במהדורה עתידית, האפשרות הזו תהיה חובה למי שמשתמש ב-Room עם דפדוף 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 חדש ליצירת אובייקטים שמקבל את הכיתה של מסד הנתונים שנמצאת בבדיקה. כך, הכלי יוכל להוסיף באופן אוטומטי העברות אוטומטיות באותו אופן במהלך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()
. כך אפשר לספק מפרט כזה באמצעות מסגרת להזרקת יחסי תלות כשיש צורך ביחסי תלות מורכבים.
תיקוני באגים
- תוקנה בעיה בהעברות אוטומטיות שבהן לא נוצרו מחדש כראוי
@DatabaseView
s.
תרומה חיצונית
- תוקנה בעיה ב-
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
כדי להצהיר על הגרסאות שצריך להעביר אוטומטית ממנה ואליה. כשמערכת 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 למחרוזת ולהפך. אם כבר קיים ממיר טיפוסים של enum, המערכת של Room תעדיף להשתמש בו על פני ממיר ברירת המחדל.
- החזרה (callback) לשאילתות: מעכשיו, ב-Room יש ממשק API כללי להחזרה (callback) בשם RoomDatabase.QueryCallback, שמופעל כששאילתות עומדות להריץ. החזרה כזו יכולה להיות שימושית לרישום ביומן ב-builds לניפוי באגים. אפשר להגדיר את הקריאה החוזרת באמצעות
RoomDatabase.Builder#setQueryCallback()
. - שיפור מובנה: ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות מסד נתונים מובנה מראש שנקרא ממקור קלט. כך אפשר לטפל במקרים שבהם מסד הנתונים שנארז מראש עבר דחיסת GZIP.
- ממירי טיפוסים שסופקו: ל-Room יש עכשיו ממשקי API לצורך מתן מופעים של ממירי טיפוסים, כך שהאפליקציה יכולה לשלוט בהפעלה שלהם. כדי לסמן ממיר טיפוסים שיסופק ל-Room, משתמשים בהערה החדשה @ProvidedTypeConverter.
- תמיכה ב-RxJava3: מעכשיו אפשר להשתמש בסוגי RxJava3 ב-Room. בדומה ל-RxJava2, אפשר להצהיר על שיטות DAO שהסוג המוחזר שלהן הוא Flowable, Single, Maybe ו-Completable. בנוסף, יש ארטיפקט חדש
androidx.room:room-rxjava3
שזמין לתמיכה ב-RxJava3. - תמיכה ב-Paging 3.0: מעכשיו, ב-Room תהיה תמיכה ביצירת הטמעות לשיטות עם הערות מסוג
@Query
, שהסוג המוחזר שלהן הואandroidx.paging.PagingSource
.
גרסה 2.3.0-rc01
24 במרץ 2021
androidx.room:room-*:2.3.0-rc01
משוחרר. גרסה 2.3.0-rc01 כוללת את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה שמונעת שימוש בשאילתות Coroutine Flow שנוצרו על ידי Room בבלוק
withTransaction
מושהה. (I797bf)
גרסה 2.3.0-beta03
10 במרץ 2021
androidx.room:room-*:2.3.0-beta03
משוחרר. גרסה 2.3.0-beta03 מכילה את ההצהרות האלה.
תכונות חדשות
- נוספה תמיכה בתכנות KSP עם הידור מצטבר. (I031c1, b/176453350)
תיקוני באגים
- תוקן באג שגרם לכך שיצירת PagingSource ב-thread הראשי עלולה לגרום ל-ANR. (I42b74, b/181221318)
- תוקנה החשיפה של
@ExperimentalRoomApi
כך שתהיה 'גלויה לכולם' במקום 'פרטית לחבילה'. (b/181356119)
תרומה חיצונית
- מאפשרים ל-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 מכילה את ההצהרות האלה.
תכונות חדשות
- מסדי נתונים שאפשר לסגור אוטומטית: עכשיו יש ל-Room אפשרות לסגור מסדי נתונים שלא ניגשים אליהם אחרי פרק זמן מסוים. זוהי תכונה ניסיונית שאפשר להפעיל באמצעות קריאה ל-
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 ישתמש בטעות בממיר המובנה של String ל-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 למקרה שמעתיקים מסד נתונים ארוז מראש. (I1ba74, b/148934423)
גרסה 2.3.0-alpha02
22 ביולי 2020
androidx.room:room-*:2.3.0-alpha02
משוחרר. גרסה 2.3.0-alpha02 מכילה את ההוספות האלה.
תכונות חדשות
- תמיכה ב-RxJava3: מעכשיו אפשר להשתמש בסוגי RxJava3 ב-Room. בדומה ל-RxJava2, אפשר להצהיר על שיטות DAO שהסוג המוחזר שלהן הוא Flowable, Single, Maybe ו-Completable. בנוסף, יש ארטיפקט חדש
androidx.room:room-rxjava3
שזמין לתמיכה ב-RxJava3. (b/152427884)
שינויים ב-API
- עכשיו יש תמיכה בהצהרה על
@TypeConverter
בכיתה Object של 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)
- עכשיו, 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 במעבד ההערות של 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 במהלך ה-build עם 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
, שמשמשת להצהרה על קשר שצריך להתקיים דרך טבלת צומת (שנקראת גם טבלת צירוף). b/69201917 - יחסים אחד-לאחד: ההגבלה בשדות POJO עם הערה
@Relation
שהם מסוגList
אוSet
בוטלה, וכך אפשר לייצג יחסים עם ערך יחיד. b/62905145 - ישות היעד: להערות ה-DAO
@Insert
,@Update
ו-@Delete
יש עכשיו מאפיין חדש,targetEntity
, שמאפשר לציין את טבלת היעד ששיטת ה-DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506 - Coroutines Flow: עכשיו אפשר להגדיר לסוג ההחזרה של שיטות DAO מסוג
@Query
את הערךFlow<T>
. אם הטבלאות למעקב בשאילתה לא יהיו תקינות, תהליך ה-Flow המוחזר ישדר מחדש קבוצה חדשה של ערכים. הצהרה על פונקציית DAO עם סוג החזרהChannel<T>
היא שגיאה. במקום זאת, מומלץ להשתמש ב-Flow
ואז להשתמש בפונקציות הסמוכות כדי להמיר את ה-Flow
ל-Channel
. b/130428884 - Gradle Incremental Annotation Processor: Room הוא עכשיו מעבד הערות מבודד של Gradle, ואפשר להפעיל את היכולת להגדיל את הערות באמצעות אפשרות המעבד
room.incremental
. מידע נוסף זמין במאמר אפשרויות של Room Compiler. אם תיתקלו בבעיות, תוכלו לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. b/112110217 - הרחבת הקרנות (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 - הרחבת הקרנות (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 - ישות היעד: להערות ה-DAO
@Insert
,@Update
ו-@Delete
יש עכשיו מאפיין חדש,targetEntity
, שמאפשר לציין את טבלת היעד ששיטת ה-DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506 - Gradle Incremental Annotation Processor: Room הוא עכשיו מעבד הערות מבודד של Gradle, ואפשר להפעיל את היכולת להגדיל את הערות באמצעות אפשרות המעבד
room.incremental
. מידע נוסף זמין במאמר אפשרויות של Room Compiler. אם תיתקלו בבעיות, תוכלו לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. 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. עכשיו אפשר להוסיף הערות עם
@Fts3
או@Fts4
לכיתות עם הערות@Entity
כדי להצהיר על כיתה עם טבלת חיפוש של טקסט מלא שממופה. אפשרויות נוספות להתאמה אישית של FTS זמינות באמצעות השיטות של ההערה. - תצוגות: עכשיו יש תמיכה ב-Room בהצהרה על כיתה כשאילתה שמאוחסנת, שנקראת גם תצוגה, באמצעות ההערה
@DatabaseView
. - פונקציות עורכות: עכשיו אפשר להשהות פונקציות של שיטות DAO. כדי לנצל את הפונקציונליות הזו, צריך לכלול את
room-ktx
ביחסי התלות. הארטיפקט של ktx מספק גם את פונקציית התוסףRoomDatabase.withTransaction
לביצוע טרנזקציות במסד נתונים בתוך פונקציית קורוטין. - Auto Value: עכשיו אפשר להצהיר על כיתות עם הערות של AutoValue כישות ו-POJO. עכשיו אפשר להצהיר על ההערות של Room
@PrimaryKey
,@ColumnInfo
, @Embedded
ו-@Relation
בשיטות המופשטות של הכיתה עם ההערה על הערך האוטומטי. חשוב לזכור שגם הערות כאלה צריכות להיות מלוות ב-@CopyAnnotations
כדי שמערכת Room תוכל להבין אותן בצורה נכונה. - תמיכה נוספת ב-Async: שיטות DAO עם הערות של
@Insert
,@Delete
או@Update
, יחד עם@Query
שמכיל משפטים שלINSERT
,DELETE
אוUPDATE
, תומכות עכשיו בסוגי ההחזרה של RxCompletable
,Single
,Maybe
ובסוג ההחזרה של GuavaListenableFuture
, והן יכולות גם להיות פונקציות של suspend. 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-ktx
withTransaction
.
תיקוני באגים
- תוקן באג שבו ארגומנטים של מחוללי תווים הושמטו אם השתמשו במחולל התווים SIMPLE. b/125427014
- תוקן באג שבו מערכת Room לא הצליחה לזהות כראוי פונקציות השהיה עם פרמטרים שהסוג שלהם היה כיתה פנימית. b/123767877
- תוקנה באג שבו שיטת DAO
@Query
מושהית עם הצהרותINSERT
, UPDATE
אוDELETE
הכינה את השאילתה בחיפזון בשרשור הראשי. b/123695593 - תוקנו באגים שונים שבהם Room יצר קוד שגוי לפונקציות השהיה מסוימות. b/123466702 ו-b/123457323
- תוקן באג שבו השימוש בשיטות שהוצאו משימוש לא נדחק כראוי בקוד שנוצר. b/117602586
- עדכנו את התלות של Room ב-androidx.sqlite לגרסה 1.0.2, שמכילה תיקונים לטיפול נכון במסדי נתונים פגומים. b/124476912
בעיות מוכרות
- Room 2.1.0-alpha05 תלוי באובייקט
kotlinx-metadata-jvm
שאינו זמין כרגע ב-Maven Central (KT-27991). כדי לפתור את התלות הזו, צריך להוסיף אתmaven { url "https://kotlin.bintray.com/kotlinx/" }
למאגרי הפרויקטים.
גרסה 2.1.0-alpha04
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
- תוקן באג שבו Room זיהה באופן שגוי פונקציות השהיה שעברו בירושה כפונקציות שלא משהות. b/122902595
- תוקנה באג שבו Room יוצר קוד שגוי כששדה
@Embedded
נמצא בכיתה הורה ומשומש בכמה כיתות צאצא. b/121099048 - תוקנה בעיה שבה מסגרת הנעילה (deadlock) של מסד הנתונים הייתה מתרחשת כשמפעילים פונקציות השהיה של 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
תיקוני באגים
- תוקנה באג שבו 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 ביצע פעולות קלט/פלט (I/O) בדיסק ב-thread הראשי כשנרשמתם למינוי והשלכתם מ-type return של Rx. b/117201279
- תוקן באג שבו מערכת Room לא מצליחה למצוא ממיר טיפוסים מתאים לשדה בכיתה של ישות ב-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. עכשיו אפשר להצהיר על ההערות של Room
@PrimaryKey
, @ColumnInfo
, @Embedded
ו-@Relation
בשיטות המופשטות של הכיתה עם הערות של ערך אוטומטי. חשוב לזכור שצריך להוסיף את התווית@CopyAnnotations
כדי שמערכת Room תבין את ההערות האלה. b/62408420 - תמיכה בסוגים נוספים של חזרי Rx: שיטות DAO עם הערות
@Insert
, @Delete
או@Update
תומכות עכשיו בסוגיםCompletable
, Single<T>
ו-Maybe<T>
של חזרי Rx. b/63317956 - סוגים לא ניתנים לשינוי עם
@Relation
: בעבר, ב-Room היה צורך להגדיר שדות עם הערה@Relation
, אבל עכשיו הם יכולים להיות פרמטרים של קונסטרוקטור. enableMultiInstanceInvalidation
: ממשק API חדש ב-RoomDatabase.Builder
שמאפשר לבטל את התוקף של כמה מכונות של RoomDatabase באמצעות אותו קובץ מסד נתונים. מנגנון ביטול התוקף בכמה מופעים פועל גם במספר תהליכים. b/62334005fallbackToDestructiveMigrationOnDowngrade
: ממשק API חדש ב-RoomDatabase.Builder
ליצירה מחדש אוטומטית של מסד הנתונים במקרה של הורדה לאחור. b/110416954ignoredColumns
: ממשק 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 ושל מסדי הנתונים שנוצרו הן סופיות עכשיו
תיקוני באגים
- ציון שם הכיתה/השדה בשגיאה 'cannot find getter for field' 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-beta3
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/71458963fallBackToDestructiveMigrationsFrom
: ממשק ה-API החדש הזה ב-RoomDatabase.Builder
מאפשר לשלוט ברמת פירוט גבוהה יותר בגרסאות ההתחלתיות של הסכימות שמהן מותר לבצע העברות הרסניות (בהשוואה ל-fallbackToDestructiveMigration) b/64989640- מעכשיו, אפשר להשתמש ב-Room רק בממשקי API חדשים יותר של דפים (alpha-4 ואילך), והתמיכה ב-
LivePagedListProvider
הוצאה משימוש. כדי להשתמש בגרסת ה-alpha החדשה של Room, תצטרכו להשתמש ב-pagingalpha-4
ואילך, ולעבור מ-LivePagedListProvider
ל-LivePagedListBuilder
אם עדיין לא עשיתם זאת.
תיקוני באגים
- תמיכה משופרת בסוגי Kotlin Kapt. b/69164099
- סדר השדות לא מבטל יותר את התקינות של הסכימה. b/64290754