שימוש בשטר חומרים

באמצעות Compose Bill of Materials (BOM) אפשר לנהל את כל הגרסאות של ספריית Compose, על ידי ציון הגרסה של ה-BOM בלבד. ב-BOM עצמו יש קישורים לגרסאות היציבות של ספריות Compose השונות, כך שהן פועלות יחד בצורה טובה. כשמשתמשים ב-BOM באפליקציה, אין צורך להוסיף גרסה כלשהי ליחסי התלות של ספריות Compose עצמן. כשמעדכנים את גרסת ה-BOM, כל הספריות שבהן אתם משתמשים מתעדכנות באופן אוטומטי לגרסאות החדשות שלהן.

Kotlin

dependencies {
    // Specify the Compose BOM with a version definition
    val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
    implementation(composeBom)
    testImplementation(composeBom)
    androidTestImplementation(composeBom)

    // Specify Compose library dependencies without a version definition
    implementation("androidx.compose.foundation:foundation")
    // ..
    testImplementation("androidx.compose.ui:ui-test-junit4")
    // ..
    androidTestImplementation("androidx.compose.ui:ui-test")
}

Groovy

dependencies {
    // Specify the Compose BOM with a version definition
    Dependency composeBom = platform('androidx.compose:compose-bom:2024.10.01')
    implementation composeBom
    testImplementation composeBom
    androidTestImplementation composeBom

    // Specify Compose library dependencies without a version definition
    implementation 'androidx.compose.foundation:foundation'
    // ..
    testImplementation 'androidx.compose.ui:ui-test-junit4'
    // ..
    androidTestImplementation 'androidx.compose.ui:ui-test'
}

כדי לבדוק אילו גרסאות של ספריות Compose מותאמות לגרסה ספציפית של BOM, תוכלו לעיין במאמר מיפוי של גרסת BOM לגרסת ספרייה.

למה ספריית Compose Compiler לא כלולה ב-BOM?

התוסף של קומפילטור Kotlin ל-Compose‏ (androidx.compose.compiler) לא מקושר לגרסאות של ספריית Compose. במקום זאת, הוא מקושר לגרסאות של הפלאגין של קומפילר Kotlin, והוא משוחרר בקצב נפרד משאר Compose.

החל מגרסה 2.0 של Kotlin, ה-compiler של אפליקציות Compose מנוהל לצד ה-compiler של Kotlin, והוא משתמש באותה גרסה כמו ה-compiler של Kotlin. פרטי ההגדרה מפורטים במאמר Compose Compiler Gradle plugin.

לפני Kotlin 2.0, צריך לוודא שמשתמשים בגרסה שתואמת לגרסה של Kotlin. אתם יכולים למצוא את גרסת Kotlin שמתאימה לכל גרסה של הפלאגין במפת התאימות של Compose ל-Kotlin, ואת הוראות ההגדרה במרכז הקומפיילרים של Compose.

איך משתמשים בגרסה אחרת של ספרייה מזו שצוינה ב-BOM?

בקטע build.gradle dependencies, משאירים את הייבוא של פלטפורמת ה-BOM. בייבוא של יחסי התלות בספרייה, מציינים את הגרסה שתחליף את הגרסה הקודמת. לדוגמה, כך מגדירים יחסי תלות אם רוצים להשתמש בגרסה חדשה יותר של ספריית האנימציה, ללא קשר לגרסה שצוינה ב-BOM:

Kotlin

dependencies {
    // Specify the Compose BOM with a version definition
    val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
    implementation(composeBom)

    // Override the BOM version when needed
    implementation("androidx.compose.animation:animation:1.8.0-alpha05")

    // ..
}

Groovy

dependencies {
    // Specify the Compose BOM with a version definition
    Dependency composeBom = platform("androidx.compose:compose-bom:2024.10.01")
    implementation composeBom

    // Override the BOM version when needed
    implementation 'androidx.compose.animation:animation:1.8.0-alpha05'

    // ..
}

האם ה-BOM מוסיף באופן אוטומטי את כל ספריות Compose לאפליקציה שלי?

לא. כדי להוסיף ספריות של Compose לאפליקציה ולהשתמש בהן, צריך להצהיר על כל ספרייה כקו תלות נפרד בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל מדובר בקובץ app/build.gradle).

השימוש ב-BOM מבטיח שהגרסאות של כל ספריות Compose באפליקציה תואמות, אבל ה-BOM לא מוסיף את ספריות Compose האלה לאפליקציה.

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

האם חייבים להשתמש ב-BOM?

לא. עדיין אפשר להוסיף כל גרסה של יחסי התלות באופן ידני. עם זאת, מומלץ להשתמש ב-BOM כי כך יהיה קל יותר להשתמש בכל הגרסאות היציבות העדכניות בו-זמנית.

האם ה-BOM פועל עם קטלוגים של גרסאות?

כן. אפשר לכלול את ה-BOM עצמו בקטלוג הגרסאות, ולהשמיט את הגרסאות האחרות של ספריית Compose:

[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" }
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }

חשוב לא לשכוח לייבא את ה-BOM ב-build.gradle של המודול:

Kotlin

dependencies {
    val composeBom = platform(libs.androidx.compose.bom)
    implementation(composeBom)
    androidTestImplementation(composeBom)

    // import Compose dependencies as usual
}

Groovy

dependencies {
    Dependency composeBom = platform(libs.androidx.compose.bom)
    implementation composeBom
    androidTestImplementation(composeBom)

    // import Compose dependencies as usual
}

מה קורה אם רוצים לנסות גרסאות אלפא או בטא של ספריות Compose?

יש שלושה קבצים של BOM ב-Compose. כל BOM הוא קובץ snapshot של הגרסאות העדכניות ביותר של ספריות Compose.

  • יציב – מכיל את הגרסאות היציבות האחרונות של כל ספרייה
  • בטא – מכילה את הגרסאות העדכניות ביותר של כל ספרייה, בגרסאות בטא, גרסאות מועמדות להשקה (RC) או גרסאות יציבות
  • אלפא – מכילה את הגרסאות העדכניות ביותר של כל ספרייה בגרסאות אלפא, בטא, RC או יציבות

כדי לציין את הגרסאות Alpha ו-Beta של ה-BOM, מוסיפים את הערכים -alpha ו--beta לשם של פריט המידע שנוצר בתהליך הפיתוח (artifact) של ה-BOM. לגרסה היציבה אין סיומת.

Kotlin

dependencies {
    // Specify the Compose BOM with a version definition
    val composeBom = platform("androidx.compose:compose-bom-alpha:2024.10.01")
    //            or platform("androidx.compose:compose-bom-beta:2024.10.01")
    implementation(composeBom)
    // ..
}

Groovy

dependencies {
    // Specify the Compose BOM with a version definition
    Dependency composeBom = platform('androidx.compose:compose-bom-alpha:2024.10.01')
    //                   or platform('androidx.compose:compose-bom-beta:2024.10.01')
    implementation composeBom
    // ..
}

איך מדווחים על בעיה או שולחים משוב על ה-BOM?

אפשר לדווח על בעיות במעקב אחר בעיות.