ใช้ Bill of Materials

ข้อมูลผลิตภัณฑ์ (BOM) ของ Compose ช่วยให้คุณจัดการเวอร์ชันของไลบรารี 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 จึงไม่ได้รวมอยู่ใน BOM

ส่วนขยายคอมไพเลอร์ Kotlin ของ Compose (androidx.compose.compiler) ไม่ได้ลิงก์กับเวอร์ชันไลบรารี Compose แต่ลิงก์กับเวอร์ชันของปลั๊กอินคอมไพเลอร์ Kotlin และเผยแพร่ตามช่วงเวลาที่แยกจาก Compose ที่เหลือ

ตั้งแต่ Kotlin 2.0 เป็นต้นไป ระบบจะจัดการคอมไพเลอร์แอป Compose ควบคู่ไปกับคอมไพเลอร์ Kotlin และใช้เวอร์ชันเดียวกับคอมไพเลอร์ Kotlin ดูรายละเอียดการกําหนดค่าได้ที่ปลั๊กอิน Gradle ของคอมไพเลอร์ Compose

ก่อน Kotlin 2.0 คุณต้องตรวจสอบว่าใช้เวอร์ชันที่เข้ากันได้กับ Kotlin ของคุณ คุณดูเวอร์ชัน Kotlin ที่จับคู่กับปลั๊กอินแต่ละเวอร์ชันได้ที่แผนที่ความเข้ากันได้ของ Compose กับ Kotlin และดูวิธีกำหนดค่าได้ที่ คอมไพเลอร์ Compose

ฉันจะใช้ไลบรารีเวอร์ชันอื่นที่ไม่ใช่เวอร์ชันที่ระบุไว้ใน BOM ได้อย่างไร

ในส่วนbuild.gradle dependencies ให้นำเข้าแพลตฟอร์ม BOM ต่อไป ในการนําเข้าทรัพยากร Dependency ของไลบรารี ให้ระบุเวอร์ชันที่ลบล้าง ตัวอย่างเช่น วิธีประกาศข้อกําหนดเบื้องต้นหากต้องการใช้ไลบรารีภาพเคลื่อนไหวเวอร์ชันใหม่ ไม่ว่าเวอร์ชันใดจะระบุไว้ใน 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 ในแอปจริงๆ คุณต้องประกาศไลบรารีแต่ละรายการเป็นบรรทัด Dependency แยกต่างหากในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็นไฟล์ app/build.gradle)

การใช้ BOM ช่วยให้มั่นใจได้ว่าไลบรารี Compose ทั้งหมดในแอปของคุณจะใช้ร่วมกันได้ แต่ BOM ไม่ได้เพิ่มไลบรารี Compose เหล่านั้นลงในแอป

นับจากนี้ไป ไลบรารี Compose จะมีเวอร์ชันเป็นของตัวเอง ซึ่งหมายความว่าหมายเลขเวอร์ชันจะเริ่มเพิ่มขึ้นตามจังหวะของแต่ละไลบรารี ระบบจะทดสอบไลบรารีแต่ละรายการในรุ่นล่าสุดที่เสถียรร่วมกัน อย่างไรก็ตาม การค้นหาไลบรารีแต่ละรายการในเวอร์ชันเสถียรล่าสุดอาจเป็นเรื่องยาก และ BOM จะช่วยให้คุณใช้เวอร์ชันล่าสุดเหล่านี้โดยอัตโนมัติได้

ฉันต้องใช้ BOM ไหม

ไม่ คุณยังคงเลือกเพิ่มเวอร์ชันของ Dependency แต่ละรายการด้วยตนเองได้ อย่างไรก็ตาม เราขอแนะนำให้ใช้ BOM เนื่องจากจะช่วยให้ใช้เวอร์ชันล่าสุดที่เสถียรทั้งหมดพร้อมกันได้ง่ายขึ้น

BOM ทำงานร่วมกับแคตตาล็อกเวอร์ชันได้ไหม

ได้ คุณสามารถใส่ BOM ไว้ในแคตตาล็อกเวอร์ชันและละเว้นเวอร์ชันอื่นๆ ของไลบรารีคอมโพสิทได้ ดังนี้

[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 มี 3 ประเภท BOM แต่ละรายการคือภาพรวม ณ เวลาหนึ่งๆ ของไลบรารี Compose เวอร์ชันล่าสุดที่ใช้ได้

  • เสถียร - มีไลบรารีแต่ละรายการในเวอร์ชันเสถียรล่าสุด
  • เบต้า - มีไลบรารีแต่ละรายการเวอร์ชันเบต้า เวอร์ชันที่พร้อมใช้งาน (RC) หรือเวอร์ชันเสถียรล่าสุด
  • อัลฟ่า - มีไลบรารีแต่ละรายการเวอร์ชันอัลฟ่า เบต้า RC หรือเสถียรล่าสุด

คุณสามารถระบุ BOM เวอร์ชันอัลฟ่าและเบต้าได้โดยเพิ่ม -alpha และ -beta ต่อท้ายชื่ออาร์ติแฟกต์ 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 ได้อย่างไร

คุณสามารถรายงานปัญหาในเครื่องมือติดตามปัญหาของเรา