
こんにちは、kiyokawaです。
Androidアプリをマルチモジュールで作った時に、ライブラリの情報が各モジュールのbuild.gradleに散らばってしまい
ライブラリのバージョン更新が入るたびにすべてのモジュールを一々確認して修正する羽目になりました。
そのような苦痛をもう受けたくはないので、Kotlin + buildSrcで一元管理してみました。
従来の書き方
1 2 3 4 5 6 7 |
dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.1.0' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50' implementation 'org.koin:koin-android:2.0.1' } |
Kotlin + buildSrc
1 2 3 4 5 6 |
dependencies { implementation Dep.AndroidX.appCompat implementation Dep.AndroidX.coreKtx implementation Dep.Kotlin.stblib implementation Dep.Koin.android } |
ぱっと見でわかりやすくなりましたし、補完も効いていい感じです。
目次
利用方法
1. buildSrcフォルダを作成する
appモジュールと同じようにルートの階層にbuildSrcフォルダを作成します。
2. build.gradle.ktsを作成する
作成したbuildSrcフォルダに、build.gradle.ktsを作成します。
ここまで行ったら一度gradle syncを行います。
buildSrcフォルダ内が以下のようになっていればOKです。
3. build.gradle.ktsを記載する
先ほど作成したbuild.gradle.ktsを開き、以下のように記載してください。
1 2 3 4 5 6 7 |
plugins { `kotlin-dsl` } repositories { jcenter() } |
記載が完了したら、再度gradle syncを実行します。
4. ライブラリ情報を記載するobjectを作成する
次に、ライブラリの情報を記載するKotlinのobjectを作成します。
今回はDep.ktとしました。
注意点
私の環境だけなのか分かりませんが、src/main/java直下にDep.ktを作成しても別モジュールのbuild.gradleから参照することができませんでした。
dependenciesというフォルダを作成して一段階階層を増やしたところ参照できるようになったので今回は階層を増やした状態で説明します。
5. Dep.ktにライブラリ情報を記載する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package dependencies object Dep { object AndroidX { val appCompat = "androidx.appcompat:appcompat:1.1.0" val coreKtx = "androidx.core:core-ktx:1.1.0" } object Kotlin { val version = "1.3.50" val stdLib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version" object Coroutines { val version = "1.3.1" val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version" val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version" } } object Koin { val version = "2.0.1" val android = "org.koin:koin-android:$version" val viewModel = "org.koin:koin-android-viewmodel:$version" } } |
6. build.gradleで使う
これで準備完了です!早速使ってみましょう!
依存関係を定義したいモジュールのbuild.gradleを開き、先頭に「import dependencies.Dep」を追記して
1 2 3 4 5 6 7 8 |
dependencies { implementation Dep.Kotlin.stdLib implementation Dep.AndroidX.appCompat implementation Dep.AndroidX.coreKtx implementation Dep.AndroidX.constraint implementation Dep.Koin.android implementation Dep.Koin.viewModel } |
Dep.ktに定義した定数を使って置き換えます。
置き換えたら、sync nowをクリックして成功すれば完了です!お疲れ様でした!
現在確認している問題
1つ自分が確認している問題があって、Android Studio(version 3.5)で新しくActivityを作成すると勝手にbuild.gradleに以下のような依存関係が記載されてしまいます。。
1 2 3 4 5 6 7 8 9 10 |
dependencies { implementation Dep.Kotlin.stdLib implementation Dep.AndroidX.appCompat implementation Dep.AndroidX.coreKtx implementation Dep.AndroidX.constraint implementation Dep.Koin.android implementation Dep.Koin.viewModel implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' } |
Activityを作成するたびに毎回消しているのでなかなか面倒臭いです。
まとめ
ライブラリの情報を一箇所に、Kotlinで定義できたのでマルチモジュールにする時は楽になりそうです。
ただ、上記に挙げたようにまだ問題もあるようなのでマルチモジュールにするわけでは無い時などは、無理に急いで導入する必要も無いのかなという感じだと思っています。