前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Jetpack Compose:BOMによるバージョン指定

内容

Jetpack Compose関連のライブラリのバージョン指定をこれまで個別に行なってきたが、Firebaseと同様にBOM(Bill of Materials)が提供されるようになった。依存関係をカバーしてくれるので早速使っていきたい。

対応

基本となる設定を確認。既に書いてあると思う。

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.2"
    }
}

こんな感じでこれまで記載していたライブラリ群がある。

// 変更前
    implementation("androidx.compose.compiler:compiler:1.3.2")
    implementation("androidx.compose.foundation:foundation:1.3.0-rc01")
    implementation("androidx.compose.material:material:1.3.0-rc01")
    implementation("androidx.compose.material3:material3:1.0.0-rc01")
    implementation("androidx.compose.material3:material3-window-size-class:1.0.0-rc01")
    implementation("androidx.compose.material:material-icons-core:1.3.0-rc01")
    implementation("androidx.compose.material:material-icons-extended:1.3.0-rc01")
    implementation("androidx.compose.runtime:runtime-livedata:1.3.0-rc01")
    implementation("androidx.compose.ui:ui:1.3.0-rc01")
    implementation("androidx.compose.ui:ui-tooling:1.3.0-rc01")
    androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.2.1")

これを以下のように書き換える

// 変更後
    val composeBom = platform("androidx.compose:compose-bom:2022.11.00")
    implementation(composeBom)
    androidTestImplementation(composeBom)
    // compilerはkotlin compilerプラグインにリンクされているためBOMの対象外
    implementation("androidx.compose.compiler:compiler:1.3.2")
    implementation("androidx.compose.animation:animation")
    implementation("androidx.compose.foundation:foundation")
    implementation("androidx.compose.material:material")
    implementation("androidx.compose.material:material-icons-core")
    implementation("androidx.compose.material:material-icons-extended")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.compose.material3:material3-window-size-class")
    implementation("androidx.compose.runtime:runtime-livedata")
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-tooling")
    androidTestImplementation("androidx.compose.ui:ui-test-junit")

個別のバージョン指定が不要になり、かなり楽になった。compiler:compiler だけはBOMに含まれないので注意。
BOMのバージョンと個別のライブラリのバージョンの対応付けは以下で確認できる。

BOM - ライブラリ間バージョンマッピング

ここに含まれているライブラリがBOMのサポート範囲ということだ。BOMのバージョンはライブラリのリリースノートには書いてなかったので、しばらくは都度こちらを見る必要がありそう。

参考

developer.android.com

developer.android.com