חדר
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
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()
. השיטה החדשה היא:
הגדרת אובייקט 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)
תיקוני באגים
- אפשר לפתור בעיה שבה החדר יוצר בטעות שיחה אל
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 מכילה את ההוספות האלה.
תכונות חדשות
שינויים ב-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 מכילה את ההצהרות האלה.
תכונות חדשות
- נוספו פריטים חדשים של
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
במקבלי נכסים. (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 מכילה את ההצהרות האלה.
תכונות חדשות
- הוספנו ממיר טיפוסים מובנה ל-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. עם זאת, פריט המידע הזה שנוצר בתהליך הפיתוח (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()
. כך אפשר לספק מפרט כזה באמצעות מסגרת להזרקת יחסי תלות כשיש צורך ביחסי תלות מורכבים.
תיקוני באגים
- תוקנה בעיה בהעברות אוטומטיות שבהן לא נוצרו מחדש כראוי
@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
כדי להצהיר על הגרסאות שצריך להעביר אוטומטית ממנה ואליה. במקרים שבהם נדרש מידע נוסף לחדר על טבלאות ושמות של עמודות או עמודות, יש אפשרות להצהיר על רמת מפרט שמכילה את הנתונים האלה בהערה@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
, תומכות עכשיו בסוגי ההחזרה RxCompletable
,Single
,Maybe
ובסוג ההחזרה של GuavaListenableFuture
, וגם יכולות להיות פונקציות השעיה. 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 - תוקנו באגים שונים שגרמו לחדרים ליצור קוד שגוי לפונקציות השעיה מסוימות. 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/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 ושל מסדי הנתונים שנוצרו הן סופיות עכשיו
תיקוני באגים
- צריך לציין את שם המחלקה/השדה בשגיאה 'לא ניתן למצוא את 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/71458963fallBackToDestructiveMigrationsFrom
: ה-API החדש ב-RoomDatabase.Builder
מאפשר שליטה פרטנית יותר על האופן שבו מותרות העברות הרסניות החל מגרסאות סכימה (בהשוואה ל-fallbackToDestructive Migration) b/64989640- מעכשיו, אפשר להשתמש ב-Room רק בממשקי API חדשים יותר של דפים (alpha-4 ואילך), והתמיכה ב-
LivePagedListProvider
הוצאה משימוש. כדי להשתמש בגרסת האלפא החדשה של Room, צריך לעבור מ-alpha-4
ואילך ולעבור מ-LivePagedListProvider
ל-LivePagedListBuilder
אם עדיין לא עשית זאת.
תיקוני באגים
- תמיכה משופרת בסוגי Kotlin Kapt. b/69164099
- סדר השדות לא מבטל יותר את התקינות של הסכימה. b/64290754