הגרסה הראשונה של אלפא של 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: גרסה Room 3.0 יוצרת קוד Kotlin בלבד. הגישה הזו תואמת לפרדיגמה המתפתחת של Kotlin-first, אבל היא גם מפשטת את בסיס הקוד ואת תהליך הפיתוח, ומאפשרת לבצע איטרציות מהר יותר.
- התמקדות ב-KSP: אנחנו גם מפסיקים את התמיכה ב-Java Annotation Processing (AP) וב-KAPT. Room 3.0 הוא מעבד KSP (Kotlin Symbol Processing) בלבד, שמאפשר עיבוד טוב יותר של בסיסי קוד של 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, גרסה 3.0 של Room דורשת KSP ומהדר Kotlin גם אם בסיס הקוד שמתקשר עם Room הוא ב-Java. מומלץ להשתמש בפרויקט מרובה מודולים שבו השימוש ב-Room מרוכז, ואפשר להחיל את התוסף Kotlin Gradle ואת KSP בלי להשפיע על שאר בסיס הקוד.
בנוסף, כדי להשתמש ב-Room 3.0 צריך Coroutines, ובאופן ספציפי, פונקציות DAO צריכות להיות suspending, אלא אם הן מחזירות סוג תגובתי, כמו 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 API, המעבר ל-Room 3.0 קל יותר כי השינוי בחבילה כולל בעיקר עדכון של הפניות לסמלים (ייבוא) ועשוי לדרוש שינויים מינימליים במיקומי הקריאה.
סקירה כללית קצרה של ממשקי SQLiteDriver API זמינה במאמרי העזרה של SQLiteDriver API.
לפרטים נוספים על העברה של 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 ב-Room 3.0 הם פונקציות השהיה, כי התמיכה הנכונה באחסון באינטרנט היא אסינכרונית. ממשקי ה-API של SQLiteDriver עודכנו גם הם כדי לתמוך באינטרנט, ומנהל התקן אסינכרוני חדש לאינטרנט זמין ב-androidx.sqlite:sqlite-web. זהו דרייבר שמבוסס על Web Worker ומאפשר לשמור את מסד הנתונים במערכת הקבצים הפרטית של המקור (OPFS).
פרטים נוספים על הגדרת Room בדפדפן זמינים בהערות הגרסה של Room 3.0.
סוגי החזרה של DAO בהתאמה אישית
בגרסה 3.0 של Room נוספה האפשרות להוסיף שילובים בהתאמה אישית ל-Room, בדומה ל-RxJava ול-Paging. באמצעות API חדש של הערות שנקרא @DaoReturnTypeConverter, אפשר ליצור שילוב משלכם כך שהקוד שנוצר על ידי Room יהיה נגיש בזמן הריצה. כך אפשר להשתמש בפונקציות @Dao עם סוגי החזרה מותאמים אישית בלי לחכות שצוות Room יוסיף את התמיכה. השילובים הקיימים מועברים לשימוש בפונקציונליות הזו, ולכן מי שמסתמך עליה יצטרך להוסיף את המרות ל-@Database או להגדרות @Dao.
לדוגמה, ממיר הדפים ימוקם בארטיפקט androidx.room3:room3-paging ויקרא PagingSourceDaoReturnTypeConverter. בינתיים, ב-LiveData, הממיר נמצא ב-androidx.room3:room3-livedata והוא נקרא LiveDataDaoReturnTypeConverter.
פרטים נוספים זמינים בקטע DAO Return Type Converters בנתוני הגרסה של Room 3.0.
מצב תחזוקה של Room 2.x
הפיתוח של Room יתמקד ב-Room 3, ולכן גרסת Room 2.x הנוכחית תעבור למצב תחזוקה. המשמעות היא שלא יפותחו תכונות חדשות, אבל עדיין יהיו גרסאות תיקון (2.8.1, 2.8.2 וכו') עם תיקוני באגים ועדכוני תלות. הצוות מחויב לעבודה הזו עד ש-Room 3 יהיה יציב.
מחשבות אחרונות
אנחנו מאוד מתרגשים מהפוטנציאל של Room 3.0 ומההזדמנויות שהוא פותח בסביבת Kotlin. אנחנו ממשיכים במסע הזה, אז כדאי לעקוב אחרי עדכונים נוספים.
-
חדשות על מוצריםב-Google Play, אנחנו מרחיבים כל הזמן את פלטפורמת המינויים שלנו כדי לעזור לכם להגדיל את הצמיחה, להתאים את עצמכם למודלים עסקיים חדשים ולהגיע למשתמשים שלכם בדיוק במקום שבו הם נמצאים.
Sheenam Mittal • משך הקריאה: 4 דקות -
חדשות על מוצריםבשנה שעברה, פתחנו את Android Studio לכל מודל AI. היום אנחנו עושים את הצעד הבא ומשיקים תמיכה בסוכני קידוד לפי בחירתכם.
Matthew Warner • משך הקריאה: 3 דקות -
חדשות על מוצריםGooglebook הוא קטגוריה חדשה של מחשבים ניידים שמבוססת על פלטפורמת Android משותפת. חומרה עם ביצועים גבוהים של שותפים כמו HP, Dell, Lenovo, Acer ו-Asus משלבת בין הנוחות של מכשיר נייד לבין העוצמה של מחשב.
Fahd Imtiaz, Loryn Hairston • משך הקריאה: 4 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?