はじめに
- Jetpack Compose に関する依存関係について、時々確認することがあるのでまとめました
- 記事を作成した時点での Android Studio のバージョンは「Koala | 2024.1.1」です
- ちなみに Build は「#AI-241.15989.150.2411.11948838, built on June 11, 2024」でした
- 依存関係は Gradle version catalogs を使って設定しています
- カタログを使えない事情がありましたら、従来通りの記法に読み替えて頂ければと思います
-
version.ref
には適当な値が設定されているとお考えください
- 不備や認識違いがありましたら、指摘頂けると大変助かります
プロジェクト作成直後に設定されている依存関係
- プロジェクト作成時のウィザードで [Phone and Tablet] > [Empty Activity] を選択した場合のデフォルト設定です
-
libs.androidx.compose.ui
があるので、libs.androidx.compose.ui.graphics
は削っても問題はないと思います- 下記の build.gradle ではコメントアウトしていますが、これでも問題なく動作します(コメントアウトしなくても勿論大丈夫です)
ビルド設定
- バージョンカタログ
# Compose BOM (部品表)
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
# Material Design 3
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
# レイアウト・描画・入力など、デバイス操作に必要な Compose UI の基本コンポーネント
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
# Android Studio での Preview サポート
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
# UIテスト
androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
# Activity との統合
# ガイドでは Optional だが、作成時点では設定された状態になっている
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
# プロジェクト作成時に設定されているが androidx.compose.ui に含まれているので実は不要。入っている理由は謎
androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
- build.gradle.kts
implementation(platform(libs.androidx.compose.bom))
androidTestImplementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.ui)
// implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.test.manifest)
implementation(libs.androidx.activity.compose)
Material 関連
- プロジェクト作成直後は、現時点(2024.07)で最新の Material3 に依存関係が設定された状態でプロジェクトが作成されています
- Material3 を使わない(使えない)場合、
libs.androidx.compose.material3
でなく下記の依存関係を定義することで対応できるようです
ビルド設定
- Material3 でなく Material2 を適用したい場合のバージョンカタログ
androidx-compose-material = { group = "androidx.compose.material", name = "material" }
- Material ライブラリは不要だが Compose は使いたい場合のバージョンカタログ
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
ConstraintLayout
- デフォルトでは Compose で ConstraintLayout を利用するための設定が無いので、そのための依存関係を追加する必要があります
ビルド設定
- バージョンカタログ
androidx-constraintlayout-compose = { group = "androidx.constraintlayout", name = "constraintlayout-compose", version.ref = "constraintLayoutCompose" }
- build.gradle.kts
implementation(libs.androidx.constraintlayout.compose)
設定しておいた方がよさそうな依存関係
Fragment
や Lifecycle 関連( ViewModel
や LiveData
)と統合させる場合に必要です
ビルド設定
- バージョンカタログ
# Fragment との統合(Activity.setContent に相当する Fragment.content 拡張関数を提供する)
androidx-fragment-compose = { group = "androidx.fragment", name = "fragment-compose", version.ref = "fragmentCompose" }
# ViewModel との統合
androidx-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycleCompose" }
# LiveData との統合
androidx-livedata-compose = { group = "androidx.compose.runtime", name = "runtime-livedata" }
- build.gradle.kts
implementation(libs.androidx.fragment.compose)
implementation(libs.androidx.viewmodel.compose)
implementation(libs.androidx.livedata.compose)
composeOptions のバージョンについて (Kotlin 2.0 未満の場合)
Kotlin のバージョンが2.0以降なら Compose Compiler Gradle plugin を使うことになるので、この内容は2.0未満のとき参考にして貰えるかと思います
- Compose を使うためには build.gradle に
composeOptions
を設定しますが、そこに指定するバージョンと Kotlin のバージョンには互換性があります - 互換性の無いバージョンの組み合わせを設定すると、ビルドエラーが発生します
- 詳細は Compose Compiler と Kotlin の互換性についてのリンク をご確認ください
カタログと依存関係の一例
Compose Compiler Version 1.5.14 に対して互換性のある Compatible Kotlin Version は、上記のリンクによると 1.9.24 なので、以下の設定でビルドに成功します
- バージョンカタログ
[versions]
kotlin = "1.9.24"
[plugins]
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
- build.gradle.kts
android {
composeOptions {
kotlinCompilerExtensionVersion = "1.5.14"
}
}