各表示画面ごとにモジュールを作成します。
プロジェクトのトップディレクトリで右クリック➡『新規(N)』➡『ディレクトリ』でuiディレクトリを作成します。
空のディレクトリ内にはモジュールを新規作成できないので、トップディレクトリでモジュールを作成します。
uiモジュールの作成プロジェクト直下に新規モジュールを作成します。
uiモジュール情報の入力画面(Activity)は不要なのでAndroid Libraryを選択します。
Module nameは『home』にしています。
Package nameはuiディレクトリ内に移動させますので末尾は『ui.home』にします。
『完了(F)』でモジュールが作成されます。
モジュールの移動作成したhomeモジュールを『リファクタリング(R)』で『ディレクトリの移動…』させます。
移動先の入力宛先ディレクトリに移動先の『ui』ディレクトリを入力します。
『リファクタリング(R)』でモジュールが移動されます。
プロジェクト直下のsettings.gradle.ktsを編集して、プロジェクトパスを移動します。
: include(":ui:home")
/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()) } } } }
作成したビルドプラグインをライブラリモジュールのbuild.gradle.ktsで使用できるようにbuild-logic直下のbuild.gradle.ktsに追加します。
: gradlePlugin { : plugins { register("LibraryConfigurePlugin") { id = "build.logic.library.configure" implementationClass = "LibraryConfigurePlugin" } } }
最上位のbuild.gradle.ktsにライブラリモジュールプラグインの使用宣言が自動的に追記されていますので、必要に応じて修正します。
plugins { : alias(libs.plugins.com.android.library) apply false alias(libs.plugins.android.library) apply false }
追記後、『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) }
変更後、『Sync Now』で内容をプロジェクトに反映させます。
ソースコードの配置ディレクトリがjavaになっていますのので、kotlinに変更します。
※変更しなくても問題ありません。
appモジュールと同様に/ui/home/src/main/javaディレクトリ、/ui/home/src/androidTest/javaディレクトリ、および/ui/home/src/test/javaディレクトリの名前を変更します。