列車の発車予定を表示する画面を:feature:trainモジュールに作成します。
各feature画面は画面の表示データがありますのでViewModelを使用します。
Hiltと連携してViewModelを使用するためhilt-navigation-composeを導入します。
※navigation-composeは必要ありません。
バージョンカタログファイルにhilt-navigation-composeの定義を追記します。
[versions] : hilt-navigation-compose = "1.3.0" # https://mvnrepository.com/artifact/androidx.hilt/hilt-navigation-compose : lifecycleRuntimeKtx = "2.9.4" lifecycle = "2.9.4" : [libraries] : hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" } : androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" } :
追記後、『Sync Now』で内容をプロジェクトに反映させます。
:core:uiモジュールで作成したLibraryConfigurePlugin.ktを使用してもいいのですが、画面が複数ありますので、画面用のビルドプラグインを作成することにします。
/build-logic/src/main/kotlin内に画面ライブラリモジュールのbuild.gradle.ktsで使用するビルドプラグインを作成します。
ファイル名をFeatureConfigurePlugin.ktにしています。
package jp.co.progress_llc.buildlogic import com.android.build.api.dsl.LibraryExtension import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies class FeatureConfigurePlugin: Plugin<Project> { override fun apply(project: Project) = with(project) { with(pluginManager) { apply("com.android.library") apply("org.jetbrains.kotlin.android") apply("com.google.devtools.ksp") apply("com.google.dagger.hilt.android") apply("org.jetbrains.kotlin.plugin.compose") } extensions.configure<LibraryExtension> { configureCommonExtension(this) defaultConfig.consumerProguardFiles("consumer-rules.pro") buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } buildFeatures.compose = true } dependencies { add("implementation", project.libs().findLibrary("androidx-core-ktx").get()) add("implementation", project.libs().findLibrary("androidx-appcompat").get()) add("implementation", project.libs().findLibrary("material").get()) add("implementation", project.libs().findLibrary("hilt-android").get()) add("implementation", project.libs().findLibrary("hilt-navigation-compose").get()) add("implementation", project.libs().findLibrary("androidx-lifecycle-runtime-ktx").get()) add("implementation", project.libs().findLibrary("androidx-lifecycle-viewmodel-compose").get()) add("implementation", platform(project.libs().findLibrary("androidx-compose-bom").get())) add("implementation", project.libs().findLibrary("compose-ui").get()) add("implementation", project.libs().findLibrary("compose-ui-tooling").get()) add("implementation", project.libs().findLibrary("compose-ui-tooling-preview").get()) add("implementation", project.libs().findLibrary("compose-material").get()) add("ksp", project.libs().findLibrary("hilt-compiler").get()) } } }
作成したビルドプラグインをモジュールのbuild.gradle.ktsで使用できるようにbuild-logic直下のbuild.gradle.ktsに追記します。
: gradlePlugin { : plugins { register("FeatureConfigurePlugin") { id = "build.logic.feature.configure" implementationClass = "jp.co.progress_llc.buildlogic.FeatureConfigurePlugin" } } } dependencies { :
追記後、『Sync Now』で内容をプロジェクトに反映させます。
:feature:trainモジュールのbuild.gradle.ktsに作成したビルドプラグインを適用します。
plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) id("build.logic.feature.configure") } android { namespace = "jp.co.progress_llc.portal.feature.train" compileSdk { version = release(36) } defaultConfig { minSdk = 28 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } buildTypes { release { isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) }
適用後、『Sync Now』で内容をプロジェクトに反映させます。