גרסת האלפא הראשונה של Room 3.0 שוחררה. גרסה 3.0 של Room היא גרסה ראשית של הספרייה שמתמקדת ב-Kotlin Multiplatform (KMP) ומוסיפה תמיכה ב-JavaScript וב-WebAssembly (WASM) בנוסף לתמיכה הקיימת ב-Android, ב-iOS וב-JVM למחשב.
בפוסט הזה בבלוג אנחנו מתארים את השינויים שעלולים לגרום לכשל, את הסיבות לפיתוח של Room 3.0 ואת הפעולות השונות שאפשר לבצע כדי לעבור מ-Room 2.0.
שינויים בתוכנה שעלולים לגרום לכשלים
Room 3.0 כולל את השינויים הבאים ב-API שעלולים לגרום לכשל:
- הפסקת התמיכה בממשקי SupportSQLite API: גרסה 3.0 של Room נתמכת באופן מלא על ידי ממשקי ה-API של מנהל ההתקן androidx.sqlite. ממשקי ה-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) בלבד, שמאפשר עיבוד טוב יותר של בסיסי קוד של Kotlin בלי להיות מוגבל על ידי שפת Java.
- קודם כל שגרות המשך: ב-Room 3.0 יש תמיכה בשגרות המשך ב-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) קודם
בלי יצירת קוד Java, גרסה 3.0 של Room דורשת גם KSP וגם את המהדר של Kotlin, גם אם בסיס הקוד שמקיים אינטראקציה עם Room הוא ב-Java. מומלץ להשתמש בפרויקט עם כמה מודולים שבו השימוש ב-Room מרוכז, ואפשר להחיל את הפלאגין של Kotlin ל-Gradle ואת KSP בלי להשפיע על שאר בסיס הקוד.
בנוסף, ב-Room 3.0 נדרשות פונקציות Coroutines, ובאופן ספציפי יותר, פונקציות DAO צריכות להיות מושהות, אלא אם הן מחזירות סוג ריאקטיבי, כמו Flow. ב-Room 3.0 אי אפשר לחסום פונקציות DAO. במסמכי התיעוד של שגרות המשך ב-Android מוסבר איך מתחילים לשלב שגרות המשך באפליקציה.
מעבר לממשקי SQLiteDriver API
במסגרת המעבר מ-SupportSQLite, האפליקציות יצטרכו לעבור לממשקי ה-API של SQLiteDriver. ההעברה הזו חיונית כדי ליהנות מכל היתרונות של Room 3.0, כולל האפשרות להשתמש בספריית SQLite הכלולה דרך BundledSQLiteDriver. אתם יכולים להתחיל להעביר את ממשקי ה-API של מנהלי ההתקנים כבר היום באמצעות Room 2.7.0 ואילך. מומלץ מאוד להימנע משימוש נוסף ב-SupportSQLite. אם תעבירו את השילובים של Room לממשקי SQLiteDriver API, המעבר ל-Room 3.0 יהיה קל יותר כי השינוי בחבילה כולל בעיקר עדכון של הפניות לסמלים (ייבוא) ויכול להיות שיידרשו שינויים מינימליים באתרי הקריאה.
סקירה קצרה על ממשקי ה-API של SQLiteDriver זמינה במאמרי העזרה של ממשקי ה-API של SQLiteDriver.
כדי לקבל פרטים נוספים על העברת Room לשימוש בממשקי SQLiteDriver API, אפשר לעיין במסמכים הרשמיים בנושא העברה מ-SupportSQLite.
Room SupportSQLite wrapper
אנחנו מבינים שלא בכל הפרויקטים אפשר להסיר את SupportSQLite באופן מיידי. כדי להקל על המעבר הזה, ב-Room 2.8.0, הגרסה העדכנית של סדרת 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 for the Web זמינים בנתוני הגרסה של Room 3.0.
סוגי החזרה מותאמים אישית של DAO
ב-Room 3.0 יש אפשרות להוסיף ל-Room שילובים בהתאמה אישית, בדומה ל-RxJava ול-Paging. באמצעות ממשק API חדש להערות שנקרא @DaoReturnTypeConverter, אתם יכולים ליצור שילוב משלכם כך שהקוד שנוצר על ידי Room יהיה נגיש בזמן הריצה. כך פונקציות @Dao יכולות לקבל את סוגי ההחזרה המותאמים אישית שלהן בלי שתצטרכו לחכות שצוות Room יוסיף את התמיכה. השילובים הקיימים מועברים לשימוש בפונקציונליות הזו, ולכן מי שמסתמך עליה יצטרך להוסיף את הממירים להגדרות של @Database או @Dao.
לדוגמה, הממיר של Paging נמצא ב-artifact 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 XR מאפשר לכם להגיע למשתמשים בכל רגע, בכל מגוון האפליקציות המרחביות. במפגש של מפתחי Android, ציינו אבן דרך מרגשת עם ההשקה של XREAL AURA.
Amy Zeppenfeld, Vinny DaSilva • משך הקריאה: 3 דקות -
חדשות על המוצרבעידן הבינה המלאכותית, המשתמשים כבר לא רק מקישים על אפליקציות, אלא מבטאים יעדים ברמה גבוהה ומצפים מסוכני AI כמו Gemini להשלים תהליכי עבודה מרובי שלבים, לפעמים בכמה אפליקציות במכשירים שלהם.
Jingyu Shi • משך הקריאה: 4 דקות -
חדשות על המוצרהיום, במפגש של מפתחי Android, אנחנו מכריזים על הזמינות הרחבה של הרבה כלים וממשקי API שנועדו להסיר את החיכוך היומיומי ולתת לכם יותר גמישות ליצור אפליקציות Android נהדרות.
Matthew McCullough • משך הקריאה: 4 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?