הגרסה הראשונה של אלפא של Room 3.0 יצאה! Room 3.0 היא גרסה פורצת דרך של הספרייה שמתמקדת ב-Kotlin Multiplatform (KMP) ומוסיפה תמיכה ב-JavaScript וב-WebAssembly (WASM) בנוסף לתמיכה הקיימת ב-Android, ב-iOS וב-JVM למחשב.
בפוסט הזה בבלוג נפרט את השינויים שעלולים לשבור את התאימות, נסביר את ההיגיון מאחורי 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) בלבד, שמאפשר עיבוד טוב יותר של בסיסי קוד של 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 First
בנוסף, בגרסה Room 3.0 לא מתבצע יותר יצירת קוד Java, ולכן נדרשים KSP והקומפיילר של Kotlin גם אם בסיס הקוד שמקיים אינטראקציה עם Room הוא ב-Java. מומלץ להשתמש בפרויקט מרובה מודולים שבו השימוש ב-Room מרוכז, ואפשר להחיל את Kotlin Gradle Plugin ו-KSP בלי להשפיע על שאר בסיס הקוד.
בנוסף, כדי להשתמש ב-Room 3.0 צריך Coroutines, ובאופן ספציפי, פונקציות DAO צריכות להיות suspending, אלא אם הן מחזירות סוג תגובתי, כמו Flow. ב-Room 3.0 אי אפשר לחסום פונקציות של DAO. במאמר Coroutines on Android מוסבר איך מתחילים לשלב שגרות משנה באפליקציה.
מעבר ל-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 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 בהתאמה אישית
ב-Room 3.0 נוספה האפשרות להוסיף שילובים בהתאמה אישית ל-Room, בדומה ל-RxJava ול-Paging. באמצעות API חדש של הערות בשם @DaoReturnTypeConverter, אפשר ליצור שילוב משלכם כך שהקוד שנוצר על ידי Room יהיה נגיש בזמן הריצה. כך אפשר להשתמש בפונקציות @Dao עם סוגי החזרה מותאמים אישית בלי לחכות שצוות Room יוסיף את התמיכה. השילובים הקיימים מועברים לשימוש בפונקציונליות הזו, ולכן מי שמסתמך עליהם יצטרך להוסיף את המרות להגדרות של @Database או @Dao.
לדוגמה, הממיר Paging ימוקם בארטיפקט 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. אנחנו ממשיכים במסע הזה, אז כדאי לעקוב אחרי עדכונים נוספים.
-
חדשות על מוצריםהיום אנחנו מציינים באופן רשמי חמש שנים מאז ההשקה של Jetpack Compose 1.0. מאז גרסה 1.0, שהשקתה הוכרזה ב-28 ביולי 2021, ועד לגרסה 1.11 האחרונה, ראינו את ממשקי ה-API מתפתחים באופן משמעותי במהלך השנים, ואנחנו רוצים לעצור לרגע ולחגוג את זה.
Rebecca Franks, Nick Butcher, Loryn Hairston • 5 min read -
חדשות על מוצריםגרסת Android Studio Quail 2 יציבה ומוכנה לשימוש בסביבת ייצור. היא מביאה שינוי לסביבת הפיתוח המשולבת (IDE) עם תהליכי עבודה מקבילים של סוכנים, פרופילים של דליפות זיכרון שמשולבים באופן מקורי ותיקון קריסות בהתאם להקשר.
Amman Asfaw • משך הקריאה: 3 דקות -
חדשות על מוצריםבחודש מרץ השקנו את Android Bench – טבלת ההשוואה של מודלי LLM למשימות פיתוח של Android בעולם האמיתי. מאז, שיפרנו את ההשוואה לשוק על סמך המשוב שלכם, כולל הערכה של מודלים עם משקל פתוח והוספה של מדדי עלות ויעילות לטבלת ההשוואה.
Zoe Lopez-Latorre • משך הקריאה: 3 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?