ユーザ用ツール

サイト用ツール


サイドバー

プログレス合同会社

広告

android:studio:application:feature-train-01

05.列車画面の作成(1)

列車の発車予定を表示する画面を:feature:trainモジュールに作成します。

ViewModelの準備

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" }
   :

3行目
コメント部分のURLを参照して、Kotlinバージョンに適した最新安定バージョンを指定します。
5行目~6行目
lifecycleRuntimeKtxを他のlifecycleライブラリでも使い、バージョンを統一したいのでlifecycleに変更します。
10行目
HiltNavigation Compose依存ライブラリを追記します。
12行目~13行目
lifecycleRuntimeKtxlifecycleに変更します。
併せて、module表記に変更します。
14行目
ViewModelの依存ライブラリを追記します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

Composite Buildへの対応

: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())
    }
  }
}

12行目~13行目
Featureモジュールで使用するプラグインを定義しています。
/core/ui/build.gradle.kts内のpluginsブロックを参照して指定します。
14行目
KSPのプラグインを定義しています。
15行目
Hiltのプラグインを定義しています。
16行目
Jetpack Composeのプラグインを定義しています。
19行目
ConfigureExtension.ktで作成した全モジュールの共通定義を呼び出しています。
20行目
/feature/settings/build.gradle.kts内のandroid/defaultConfigブロックを参照して指定します。
minSdkConfigureExtension.ktで定義済です。
testInstrumentationRunnerはビルドプラグインでは定義しません。
21行目~29行目
/feature/settings/build.gradle.kts内のandroid/buildTypesブロックを参照して指定します。
30行目
Jetpack Composeを有効にします。
33行目~35行目
dependenciesブロックの依存ライブラリを定義しています。
/feature/train/build.gradle.kts内のdependenciesブロックを参照して指定します。
テスト関連の依存ライブラリはビルドプラグインでは定義しません。
テストの必要に応じて、各モジュールのbuild.gradle.ktsで定義します。
バージョンカタログを参照しています。
36行目~37行目
Hiltの依存ライブラリをバージョンカタログを参照して定義しています。
38行目~44行目
Jetpack Composeの依存ライブラリをバージョンカタログを参照して定義しています。
45行目
kspの依存ライブラリをバージョンカタログを参照して定義しています。

FeatureConfigurePluginの適用

作成したビルドプラグインをモジュールの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 {
   :

5行目
任意の名前で名称を定義しています。
6行目
任意の名前でプラグインのidを定義しています。
7行目
プラグインを実装しているクラスを指定します。
/build-logic/src/main/kotlin内に作成したFeatureConfigurePlugin.ktで定義しているクラス名です。

追記後、『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)
}

2行目~3行目、9行目~15行目、17行目~32行目、37行目~39行目
ビルドプラグインで定義しているので削除します。
3行目
/build-logic/build.gradle.ktsで定義したビルドプラグインのidを指定します。
16行目、40行目~42行目
テストを行うときまで削除します。

適用後、『Sync Now』で内容をプロジェクトに反映させます。

android/studio/application/feature-train-01.txt · 最終更新: by 管理者