はじめに
Androidアプリのdependenciesを下記のように記述していないでしょうか?
...
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
このように記述すると、バージョン変更時に一つずつ編集しなければならなかったり、そもそも可読性が低いように感じます。
そこで、buildSrcでこれらを保持する方法が良さそうだったのでメモしておきます。
参考:
Kotlin + buildSrc for Better Gradle Dependency Management
やり方
1. buildSrcフォルダを作成
モジュールと同じようにプロジェクトルートにbuildSrc
という名前のフォルダを作成します。
2. build.gradle.ktsを作成
作成したbuildSrc
フォルダにbuild.gradle.kts
という名前のkotlin-scriptファイルを作成します。
この段階ではまだ何も記述しなくていいです。
3. Sync Gradle !
sync gradle
しましょう。buildSrc
内に以下のようなファイルが生成されれば成功です。
4. dslを記述
build.gradle.kts
に以下を記述してsync gradle
しましょう。
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
5. Dependencyを保持するオブジェクトクラスを作成
buildSrc
内にsrc/main/java/Dependencies.ktを作成します。
一旦今のDependencyを全て保持させておきたいので、下記のようにします。
object Dependencies {
object Version {
val kotlin = "1.2.71"
val support = "28.0.0"
val constraint = "1.1.3"
val runner = "1.0.2"
val espresso = "3.0.2"
}
val kotlinLib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Version.kotlin}"
val appCompat = "com.android.support:appcompat-v7:${Version.support}"
val constraintLayout = "com.android.support.constraint:constraint-layout:${Version.constraint}"
val junit = "junit:junit:4.12"
val testRunner = "com.android.support.test:runner:${Version.runner}"
val espressoCore = "com.android.support.test.espresso:espresso-core:${Version.espresso}"
}
6. 実際に使う
これで使えるようになりました! 実際にbuild.gradle
に適用しましょう!
...
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation Dependencies.kotlinLib
implementation Dependencies.appCompat
implementation Dependencies.constraintLayout
testImplementation Dependencies.junit
androidTestImplementation Dependencies.testRunner
androidTestImplementation Dependencies.espressoCore
}
以前と比べて何を読み込んでいるか分かりやすくなり、IDE補完が効くので編集もしやすくなったかと思います。
サンプル
今回のプロジェクトをGitHubに上げたので、よければ参考にしてください。
https://github.com/TaigaNatto/BuildSorceSample