הגרסה הראשונה של אלפא של Room 3.0 יצאה! Room 3.0 היא גרסה פורצת דרך של הספרייה שמתמקדת ב-Kotlin Multiplatform (KMP) ומוסיפה תמיכה ב-JavaScript וב-WebAssembly (WASM) בנוסף לתמיכה הקיימת ב-Android, ב-iOS וב-JVM desktop.
בפוסט הזה בבלוג נפרט את השינויים שעלולים לשבור את התאימות, נסביר את ההיגיון מאחורי Room 3.0 ונציג את הפעולות השונות שאפשר לבצע כדי לעבור מ-Room 2.0.
שינויי תוכנה שעלולים לגרום לכשלים
גרסה 3.0 של Room כוללת את שינויי ה-API הבאים שעלולים לגרום לכשל:
- הוצאה משימוש של SupportSQLite APIs: גרסה 3.0 של Room נתמכת באופן מלא על ידי androidx.sqlite driver APIs. ממשקי ה-API של SQLiteDriver תואמים ל-KMP, והסרת התלות של Room ב-API של Android מפשטת את משטח ה-API של Android, כי היא מונעת מצב שבו יש שני קצוות עורפיים אפשריים.
- אין יותר יצירת קוד Java: גרסה 3.0 של Room יוצרת קוד Kotlin בלבד. הגישה הזו תואמת לפרדיגמה המתפתחת של Kotlin-first, אבל היא גם מפשטת את בסיס הקוד ואת תהליך הפיתוח, ומאפשרת לבצע איטרציות מהר יותר.
- התמקדות ב-KSP: אנחנו מפסיקים גם את התמיכה ב-Java Annotation Processing (AP) וב-KAPT. Room 3.0 הוא מעבד KSP (עיבוד סמלים ב-Kotlin) בלבד, שמאפשר עיבוד טוב יותר של בסיסי קוד ב-Kotlin בלי להיות מוגבל על ידי שפת Java.
- שגרות משנה (coroutines) קודמות לכל: ב-Room 3.0 נעשה שימוש בשגרות משנה (coroutines) ב-Kotlin, ולכן ממשקי ה-API שלו מבוססים על שגרות משנה. שגרות משנה הן מסגרת אסינכרונית שתואמת ל-KMP, והפיכת Room לאסינכרוני מטבעו היא דרישה קריטית לתמיכה בפלטפורמות אינטרנט.
חבילה חדשה
כדי למנוע בעיות תאימות עם הטמעות קיימות של Room 2.x ועם ספריות שיש להן יחסי תלות טרנזיטיביים ב-Room (לדוגמה, WorkManager), Room 3.0 נמצא בחבילה חדשה, מה שאומר שיש לו גם קבוצת Maven חדשה ומזהי ארטיפקט חדשים. לדוגמה, androidx.room:room-runtime הפך ל-androidx.room3:room3-runtime, ושיעורים כמו androidx.room.RoomDatabase נמצאים עכשיו בכתובת androidx.room3.RoomDatabase.
Kotlin ו-Coroutines First
בנוסף, מאחר שאין יותר יצירת קוד Java, גרסה Room 3.0 דורשת KSP ומהדר Kotlin גם אם בסיס הקוד שמתקשר עם Room הוא ב-Java. מומלץ להשתמש בפרויקט מרובה מודולים שבו השימוש ב-Room מרוכז, ואפשר להחיל את התוסף Kotlin Gradle ואת KSP בלי להשפיע על שאר בסיס הקוד.
בנוסף, ב-Room 3.0 נדרשות קורוטינות, ובאופן ספציפי, פונקציות DAO צריכות להיות פונקציות השהיה, אלא אם הן מחזירות סוג תגובתי, כמו Flow. ב-Room 3.0 אי אפשר לחסום פונקציות של DAO. במאמר Coroutines on Android documentation מוסבר איך מתחילים לשלב שגרות משנה באפליקציה.
מעבר ל-SQLiteDriver APIs
בגלל המעבר מ-SupportSQLite, האפליקציות יצטרכו לעבור ל-SQLiteDriver APIs. המיגרציה הזו חיונית כדי ליהנות מכל היתרונות של Room 3.0, כולל האפשרות להשתמש בספריית SQLite שכלולה בחבילה באמצעות BundledSQLiteDriver. אתם יכולים להתחיל במיגרציה ל-Driver APIs כבר היום באמצעות Room 2.7.0 ואילך. אנחנו ממליצים מאוד להימנע משימוש נוסף ב-SupportSQLite. אם מעבירים את השילובים של Room אל SQLiteDriver APIs, המעבר ל-Room 3.0 קל יותר כי השינוי בחבילה כולל בעיקר עדכון של הפניות לסמלים (ייבוא) ועשוי לדרוש שינויים מינימליים במיקומי הקריאה.
סקירה כללית קצרה של ממשקי SQLiteDriver API זמינה במאמרי העזרה של SQLiteDriver APIs.
לפרטים נוספים על העברה של Room לשימוש בממשקי SQLiteDriver API, אפשר לעיין במסמכי התיעוד הרשמיים בנושא העברה מ-SupportSQLite.
Room SupportSQLite wrapper
אנחנו מבינים שלא תמיד אפשר להסיר את SupportSQLite מכל הפרויקטים באופן מיידי. כדי להקל על המעבר הזה, בגרסה 2.8.0 של Room, הגרסה העדכנית בסדרת Room 2.0, הושק ארטיפקט חדש בשם androidx.room:room-sqlite-wrapper. הארטיפקט הזה מציע API של תאימות שמאפשר להמיר RoomDatabase ל-SupportSQLiteDatabase, גם אם ממשקי ה-API של SupportSQLite במסד הנתונים הושבתו בגלל התקנה של SQLiteDriver. האפשרות הזו מספקת פתרון זמני למפתחים שצריכים עוד זמן כדי להעביר את בסיס הקוד שלהם באופן מלא. הארטיפקט הזה ממשיך להתקיים ב-Room 3.0 בתור androidx.room3:room3-sqlite-wrapper כדי לאפשר את המעבר ל-Room 3.0, תוך המשך תמיכה בשימוש קריטי ב-SupportSQLite.
לדוגמה, אפשר להחליף קריאות של roomDatabase.openHelper.writableDatabase ב-roomDatabase.getSupportWrapper(), ויינתן wrapper גם אם מתבצעת קריאה של setDriver() ב-builder של Room.
פרטים נוספים זמינים בתיעוד של room-sqlite-wrapper.
תמיכה ב-Room וב-SQLite באינטרנט
הגרסה הזו תומכת ביעדים של Kotlin Multiplatform JS ו-WasmJS, וכוללת כמה מהשינויים המשמעותיים ביותר ב-API. בפרט, הרבה ממשקי API בגרסה 3.0 של Room הם פונקציות השהיה, כי התמיכה המתאימה באחסון אינטרנט היא אסינכרונית. בנוסף, ממשקי ה-API של SQLiteDriver עודכנו כדי לתמוך באינטרנט, ומנהל התקן אסינכרוני חדש לאינטרנט זמין ב-androidx.sqlite:sqlite-web. זהו מנהל התקן שמבוסס על Web Worker ומאפשר לשמור את מסד הנתונים במערכת הקבצים הפרטית של המקור (OPFS).
פרטים נוספים על הגדרת Room בדפדפן זמינים בהערות על הגרסה Room 3.0.
סוגי החזרה של DAO בהתאמה אישית
ב-Room 3.0 נוספה האפשרות להוסיף שילובים בהתאמה אישית ל-Room, בדומה ל-RxJava ול-Paging. באמצעות API חדש של הערות בשם @DaoReturnTypeConverter, אפשר ליצור שילוב משלכם כך שהקוד שנוצר על ידי Room יהיה נגיש בזמן הריצה. כך אפשר להשתמש בפונקציות @Dao עם סוגי החזרה מותאמים אישית בלי לחכות שצוות Room יוסיף את התמיכה. השילובים הקיימים מועברים לשימוש בפונקציונליות הזו, ולכן מי שמסתמך עליהם יצטרך להוסיף את ההמרות להגדרות של @Database או @Dao.
לדוגמה, ממיר ההחלפה ימוקם בארטיפקט androidx.room3:room3-paging ויקרא PagingSourceDaoReturnTypeConverter. בינתיים, הממיר של LiveData נמצא בandroidx.room3:room3-livedata והשם שלו הוא LiveDataDaoReturnTypeConverter.
פרטים נוספים זמינים בקטע בנושא ממירים של סוג החזרה של DAO בנתוני הגרסה של Room 3.0.
מצב תחזוקה של Room 2.x
הפיתוח של Room יתמקד ב-Room 3, ולכן גרסת Room 2.x הנוכחית תעבור למצב תחזוקה. המשמעות היא שלא יפותחו תכונות חדשות, אבל עדיין יתבצעו עדכוני תיקון (2.8.1, 2.8.2 וכו') עם תיקוני באגים ועדכוני תלות. הצוות מחויב לעבודה הזו עד שחדר 3 יהיה יציב.
מחשבות אחרונות
אנחנו מאוד נרגשים מהפוטנציאל של Room 3.0 ומההזדמנויות שהוא פותח לאקוסיסטם של Kotlin. אנחנו ממשיכים במסע הזה, אז כדאי לעקוב אחרי עדכונים נוספים.
להמשך הקריאה
-
חדשות על מוצרים
הסביבה העסקית של הנייד מתפתחת כל הזמן, ומביאה איתה הזדמנויות חדשות וגם איומים חדשים. בעקבות השינויים האלה, אנחנו ב-Android וב-Google Play ממשיכים לפעול כדי להבטיח שמיליארדי משתמשים יוכלו להמשיך ליהנות מהאפליקציות שלהם בביטחון, ושהמפתחים יוכלו להמשיך לחדש.
Vijaya Kaza • משך הקריאה: 3 דקות
-
חדשות על מוצרים
גרסת Jetpack פיתוח נייטיב מאפריל 2026 היא יציבה. הגרסה הזו מכילה את גרסה 1.11 של מודולי הליבה של Compose (ראו את מיפוי ה-BOM המלא), כלי ניפוי באגים של רכיבים משותפים, אירועים של משטח מגע ועוד.
Meghan Mehta • משך הקריאה: 5 דקות
-
חדשות על מוצרים
גרסה Panda 4 של Android Studio יציבה ומוכנה לשימוש בייצור. הגרסה הזו כוללת את מצב התכנון, את התחזית לגבי העריכה הבאה ועוד, וכך קל יותר מאי פעם ליצור אפליקציות Android באיכות גבוהה.
Matt Dyor • משך הקריאה: 5 דקות
כדאי תמיד להיות בעניינים
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?