ניהול גרסאות של אריחים

במכשירי Wear OS, שני רכיבים מרכזיים עם ניהול גרסאות עצמאיים מבצעים את העיבוד של המשבצות. כדי לוודא ששיבוטי האפליקציות יפעלו בצורה תקינה בכל המכשירים, חשוב להבין את הארכיטקטורה הבסיסית הזו.

  • ספריות שקשורות ל-Jetpack Tiles: הספריות האלה (כולל Wear Tiles ו-Wear ProtoLayout) מוטמעות באפליקציה, ואתם, בתור מפתחים, שולטים בגרסאות שלהן. האפליקציה משתמשת בספריות האלה כדי ליצור אובייקט TileBuilder.Tile (מבנה הנתונים שמייצג את המשבצת) בתגובה לקריאה onTileRequest() של המערכת.
  • ProtoLayout Renderer: רכיב המערכת הזה אחראי לעיבוד הגרפי של האובייקט Tile במסך ולטיפול באינטראקציות של המשתמשים. מפתח האפליקציה לא יכול לשלוט בגרסה של המרת הווידאו, והיא יכולה להשתנות בין מכשירים שונים, גם אם יש להם חומרה זהה.

המראה או ההתנהגות של המשבצת יכולים להשתנות בהתאם לגרסאות של ספריית Jetpack Tiles באפליקציה ולגרסה של ProtoLayout Renderer במכשיר של המשתמש. לדוגמה, מכשיר אחד עשוי לתמוך ברוטציה או בהצגת נתוני דופק, ומכשיר אחר לא.

במסמך הזה מוסבר איך לוודא שהאפליקציה תואמת לגרסאות שונות של ספריית Tiles ושל ProtoLayout Renderer, ואיך לעבור לגרסאות מתקדמות יותר של ספריות Jetpack.

התאמה

כדי ליצור משבצת שתעבוד בצורה תקינה במגוון מכשירים, כדאי לשקול את הדברים הבאים.

זיהוי גרסת המרינר

  • משתמשים בשיטה getRendererSchemaVersion() של האובייקט DeviceParameters שמוענק לשיטה onTileRequest()‎. השיטה הזו מחזירה את מספרי הגרסה הראשית והמשנית של ה-ProtoLayout Renderer במכשיר.
  • לאחר מכן תוכלו להשתמש בלוגיקה מותנית בהטמעה של onTileRequest() כדי להתאים את העיצוב או ההתנהגות של המשבצת על סמך גרסת המרינר שזוהתה.
    • לדוגמה, אם אנימציה מסוימת לא נתמכת, תוכלו להציג תמונה סטטית במקום זאת.

ההערה @RequiresSchemaVersion

  • ההערה @RequiresSchemaVersion בשיטות ProtoLayout מציינת את גרסת הסכימה המינימלית של ה-renderer שנדרשת כדי שהשיטה תתנהג כפי שמתואר (דוגמה).
    • קריאה ל-method שדורשת גרסת עיבוד גבוהה יותר מזו שזמינה במכשיר לא תגרום לקריסה של האפליקציה, אבל היא עלולה לגרום לכך שהתוכן לא יוצג או שהתכונה תתעלם.

דוגמה

override fun onTileRequest(
    requestParams: TileService.TileRequest
): ListenableFuture<Tile> {
    val rendererVersion =
        requestParams.deviceConfiguration.rendererSchemaVersion
    val tile = Tile.Builder()

    if (
        rendererVersion.major > 1 ||
            (rendererVersion.major == 1 && rendererVersion.minor >= 300)
    ) {
        // Use a feature supported in renderer version 1.300 or later
        tile.setTileTimeline(/* ... */ )
    } else {
        // Provide fallback content for older renderers
        tile.setTileTimeline(/* ... */ )
    }

    return Futures.immediateFuture(tile.build())
}

בדיקה עם גרסאות שונות של המנגן

כדי לבדוק את המשבצות בגרסאות שונות של המרתן, צריך לפרוס אותן בגרסאות שונות של אמולטור Wear OS. (במכשירים פיזיים, עדכוני ה-ProtoLayout Renderer מועברים על ידי חנות Play או עדכוני מערכת. אי אפשר לאלץ התקנה של גרסה ספציפית של המנגן.)

התכונה 'תצוגה מקדימה של משבצות' ב-Android Studio משתמשת בנגן מוטמע בספריית Jetpack ProtoLayout שהקוד שלכם תלוי בה. לכן, גישה אחרת היא להסתמך על גרסאות שונות של ספריית Jetpack כשבודקים משבצות.

שדרוג ספריות Jetpack

כדאי לעדכן את ספריות Jetpack Tile כדי ליהנות מהשיפורים האחרונים, כולל שינויים בממשק המשתמש שיעזרו לשלב את ה-Tiles בצורה חלקה במערכת.

מעבר לגרסה 1.2 של Tiles או לגרסה 1.0 של ProtoLayout

החל מגרסה 1.2, רוב ממשקי ה-API של פריסת המשבצות נמצאים במרחב השמות androidx.wear.protolayout. כדי להשתמש בממשקי ה-API העדכניים ביותר, צריך לבצע את שלבי ההעברה הבאים בקוד.

עדכון יחסי התלות

מבצעים את השינויים הבאים בקובץ ה-build של מודול האפליקציה:

Groovy

  // Remove
  implementation 'androidx.wear.tiles:tiles-material:version'

  // Include additional dependencies
  implementation "androidx.wear.protolayout:protolayout:1.2.1"
  implementation "androidx.wear.protolayout:protolayout-material:1.2.1"
  implementation "androidx.wear.protolayout:protolayout-expression:1.2.1"

  // Update
  implementation "androidx.wear.tiles:tiles:1.4.1"

Kotlin

  // Remove
  implementation("androidx.wear.tiles:tiles-material:version")

  // Include additional dependencies
  implementation("androidx.wear.protolayout:protolayout:1.2.1")
  implementation("androidx.wear.protolayout:protolayout-material:1.2.1")
  implementation("androidx.wear.protolayout:protolayout-expression:1.2.1")

  // Update
  implementation("androidx.wear.tiles:tiles:1.4.1")

עדכון מרחבי שמות

מבצעים את העדכונים הבאים בקובצי הקוד של האפליקציה שמבוססים על Kotlin ועל Java. לחלופין, אפשר להריץ את הסקריפט לשינוי שם של מרחב שמות.

  1. מחליפים את כל הייבוא של androidx.wear.tiles.material.* ב-androidx.wear.protolayout.material.*. צריך להשלים את השלב הזה גם בספרייה androidx.wear.tiles.material.layouts.
  2. מחליפים את רוב ייבוא ה-androidx.wear.tiles.* ב-androidx.wear.protolayout.*.

    הייבוא של androidx.wear.tiles.EventBuilders,‏ androidx.wear.tiles.RequestBuilders,‏ androidx.wear.tiles.TileBuilders ו-androidx.wear.tiles.TileService לא אמור להשתנות.

  3. שינוי השם של כמה שיטות שהוצאו משימוש מהכיתות TileService ו-TileBuilder:

    1. TileBuilders: מ-getTimeline() עד getTileTimeline() ומ-setTimeline() עד setTileTimeline()
    2. TileService: onResourcesRequest() עד onTileResourcesRequest()
    3. RequestBuilders.TileRequest: מ-getDeviceParameters() עד getDeviceConfiguration(), מ-setDeviceParameters() עד setDeviceConfiguration(), מ-getState() עד getCurrentState() ומ-setState() עד setCurrentState()