🎉

App モジュールの BuildConfig をプロジェクト全体で使う (android, hilt)

2023/01/09に公開

はじめに

マルチモジュールのアプリで App モジュールの BuildConfig などの設定をプロジェクト全体で使用する方法のメモです。

アプリ構成

  • app モジュールが各機能モジュールに依存します。
  • 各機能モジュールは repository モジュールに依存します。
  • repository モジュールは databse,network モジュールに依存します。

実装

resource モジュールを作成、 AppConfig データクラスを作成する

設定値を保持するクラスを持つモジュールとして、resources を作成します。
その中に下記のような AppConfig というデータクラスを定義します。
今回は API アクセスの URL を app モジュールで定義してみます。なので baseUrlというプロパティを定義してみました。

data class AppConfig(
    val isDebug: Boolean,
    val baseUrl: String
)

app:build.gradle に設定値を追加し、BuildConfig に入れる。

android {
    buildTypes {
        debug {
            buildConfigField("String", "BASE_URL", '"https://debug"')
        }
        release {
            buildConfigField("String", "BASE_URL", '"https://release"')
        }
    }
}

app モジュール内に hilt のモジュールとして定義する。

app モジュールが AppConfigを知らないと行けないので依存に追加します。

// app:build.gradle
dependencies {
    implementation(project(":util"))
}

hilt のモジュールを定義し、必要な値を BuildConfig から設定します。

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    @Singleton
    fun appConfig(): AppConfig {
        return AppConfig(
            isDebug = BuildConfig.DEBUG,
            baseUrl = BuildConfig.BASE_URL
        )
    }
}

以上で AppConfig を使う準備が完了しました。

AppConfig を使う

例えば netowork モジュールで使用したい場合を考えます。

まずは network モジュールの build.gradle に resources モジュールの依存を追加します。

// network:build.gradle
dependencies {
    implementation(project(":util"))
}

network モジュール内の hilt では下記のように記述すれば AppConcig のデータを使用できます。

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {

    @Singleton
    @Provides
    fun provideRetrofit(
        appConfig: AppConfig // DIされる
    ): Retrofit {
        return Retrofit.Builder()
            .baseUrl(appConfig.baseUrl)
            .build()
    }
}

モジュールの依存関係は以下のようになります。

まとめ

Gradle のマルチモジュール構成にて、Hilt を使用して app モジュールの設定値をプロジェクト全体で使用する方法の解説をしました。

モジュール毎に設定値がある場合、例えば network モジュールや databse モジュールで必要な場合はそれぞれ、NetworkConfig, DatabaseConfig のように定義してみても良いかもしれません。

マルチモジュールのビルドロジックをまとめる記事も作成しているので、是非読んでみてください。(Qiita ですが。。😂)
https://qiita.com/gotlin/items/67ee341fb379b5d58af6

参考

GitHubで編集を提案

Discussion