目次

02.uiモジュールの作成

各表示画面ごとにモジュールを作成します。

プロジェクトのトップディレクトリで右クリック➡『新規(N)』➡『ディレクトリ』でuiディレクトリを作成します。

空のディレクトリ内にはモジュールを新規作成できないので、トップディレクトリでモジュールを作成します。

android:studio:application:android-app0201.png

uiモジュールの作成

プロジェクト直下に新規モジュールを作成します。

android:studio:application:android-app0202.png

uiモジュール情報の入力

画面(Activity)は不要なのでAndroid Libraryを選択します。

Module nameは『home』にしています。

Package nameuiディレクトリ内に移動させますので末尾は『ui.home』にします。

完了(F)』でモジュールが作成されます。

android:studio:application:android-app0203.png

モジュールの移動

作成したhomeモジュールを『リファクタリング(R)』で『ディレクトリの移動…』させます。

android:studio:application:android-app0204.png

移動先の入力

宛先ディレクトリに移動先の『ui』ディレクトリを入力します。

リファクタリング(R)』でモジュールが移動されます。

プロジェクト直下のsettings.gradle.ktsを編集して、プロジェクトパスを移動します。

   :
include(":ui:home")

2行目
“:home”を“:ui:home”に変更します。


編集後、『同期アイコン』で内容をプロジェクトに反映させます。

Composite Buildへの対応

/build-logic/src/main/kotlin内にライブラリモジュールのbuild.gradle.ktsで使用するビルドプラグインを作成します。
ファイル名をLibraryConfigurePlugin.ktにしています。

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 LibraryConfigurePlugin: Plugin<Project> {
  override fun apply(project: Project) {
    with(project) {
      with(pluginManager) {
        apply("com.android.library")
        apply("com.google.devtools.ksp")
        apply("com.google.dagger.hilt.android")
      }
      extensions.configure<LibraryExtension> {
        configureCommonExtension(this)
        defaultConfig.consumerProguardFiles("consumer-rules.pro")
        buildFeatures.compose = true
        buildTypes {
          release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
          }
        }
      }
      dependencies {
        add("implementation", catalog.findLibrary("androidx.core.ktx").get())
        add("implementation", catalog.findLibrary("androidx.appcompat").get())
        add("implementation", catalog.findLibrary("google-android-material").get())
        add("implementation", catalog.findLibrary("hilt.android").get())
        add("testImplementation", catalog.findLibrary("junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.test.ext.junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.test.espresso.core").get())
        add("ksp", catalog.findLibrary("hilt.compiler").get())
      }
    }
  }
}

11行目~14行目(pluginManager)
ライブラリモジュールで使用するプラグインを定義しています。
17行目
ConfigureExtension.ktで作成した全モジュールの共通定義を呼び出しています。
18行目~26行目
/data/model/build.gradle.kts内のandroidブロックを参照して指定します。
29行目~31行目、33行目~35行目
/data/model/build.gradle.kts内のdependenciesブロックの依存ライブラリを定義しています。
バージョンカタログを参照しています。
32行目、36行目
Hiltの依存ライブラリをバージョンカタログを参照して定義しています。

作成したビルドプラグインをライブラリモジュールのbuild.gradle.ktsで使用できるようにbuild-logic直下のbuild.gradle.ktsに追加します。

   :
gradlePlugin {
   :
  plugins {
    register("LibraryConfigurePlugin") {
      id = "build.logic.library.configure"
      implementationClass = "LibraryConfigurePlugin"
    }
  }
}

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

最上位のbuild.gradle.ktsにライブラリモジュールプラグインの使用宣言が自動的に追記されていますので、必要に応じて修正します。

plugins {
   :
  alias(libs.plugins.com.android.library) apply false
  alias(libs.plugins.android.library) apply false
}

3行目
修正前の内容です。
4行目に修正しました。

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

data/modelモジュールのbuild.gradle.ktsをComposite Buildへ対応させます。

plugins {
  alias(libs.plugins.com.android.library)
  alias(libs.plugins.kotlin.android)
  id("build.logic.library.configure")
}

android {
  namespace = "jp.co.example.android01.data.model"
  compileSdk = 33

  defaultConfig {
    minSdk = 27

    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_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
  }
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

dependencies {

  implementation(libs.androidx.core.ktx)
  implementation(libs.appcompat)
  implementation(libs.material)
  testImplementation(libs.junit)
  androidTestImplementation(libs.androidx.test.ext.junit)
  androidTestImplementation(libs.androidx.test.espresso.core)
}

2行目~3行目、9行目~30行目、35行目~40行目
ビルドプラグインで定義しているので削除します。
4行目
/build-logic/build.gradle.ktsで定義したライブラリモジュール用ビルドプラグインのidを指定します。

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

ソースコードディレクトリの変更

ソースコードの配置ディレクトリがjavaになっていますのので、kotlinに変更します。
※変更しなくても問題ありません。

appモジュールと同様に/ui/home/src/main/javaディレクトリ、/ui/home/src/androidTest/javaディレクトリ、および/ui/home/src/test/javaディレクトリの名前を変更します。