こんにちは、Androidエンジニアのニコです。
最近、AndroidのGradleビルドファイルをより良いものにする方法を考えてました。
GradleビルドファイルのDependenciesはGradleビルドファイルの中に一番よく変わるところと思いますが、
プロジェクトが分かれていれば、Dependenciesの管理が難しくなります。例えば、MVPデザインパターンの場合にModel, ViewとPresenterで分けて、各プロジェックトに別のbuild.gradleを作らないといけないです。
調べてみたところ、GradleのDependenciesが独立したGradleファイルで管理できる方法を見つけました。
その為に、新しいGradleファイルが必要です。私の場合はdependecies.gradleという名前を作って、buildconfigフォルダーの中に入れました。
そしてそのファイルでDependenciesを管理します。
allprojects {
repositories {
jcenter()
}
}
ext {
//Libraries
androidSupportLibraryVersion = '23.0.1'
butterKnifeVersion = '7.0.1'
rxJavaVersion = '1.0.14'
rxAndroidVersion = '1.0.1'
//Test
espressoVersion = '2.2.1'
androidTestSupportLibraryVersion = '0.1'
uiDependencies = [
androidSupportLibraryV4: "com.android.support:support-v4:${androidSupportLibraryVersion}",
androidSupportAppcompatV7: "com.android.support:appcompat-v7:${androidSupportLibraryVersion}",
recyclerView: "com.android.support:recyclerview-v7:${androidSupportLibraryVersion}",
androidSupportDesign: "com.android.support:design:${androidSupportLibraryVersion}",
butterKnife: "com.jakewharton:butterknife:${butterKnifeVersion}",
rxJava: "io.reactivex:rxjava:${rxJavaVersion}",
rxAndroid: "io.reactivex:rxandroid:${rxAndroidVersion}",
]
uiTestDependencies = [
espresso: "com.android.support.test.espresso:espresso-core:${espressoVersion}",
androidTestRunner: "com.android.support.test:runner:${androidTestSupportLibraryVersion}",
androidTestRules: "com.android.support.test:rules:${androidTestSupportLibraryVersion}",
]
}
そして、それを自分のビルドファイルに統合するために、下記のコードをトップレベルのbuild.gradleファイルに入れて下さい。
apply from: 'buildconfig/dependencies.gradle'
そうすると、build.gradleファイルの中で下記のように使えます。
dependencies {
def uiDependencies = rootProject.ext.uiDependencies
def uiTestDependencies = rootProject.ext.uiTestDependencies
compile uiDependencies.androidSupportLibraryV4
compile uiDependencies.androidSupportAppcompatV7
compile uiDependencies.recyclerView
compile uiDependencies.androidSupportDesign
compile uiDependencies.butterKnife
compile uiDependencies.rxJava
compile uiDependencies.rxAndroid
compile uiTestDependencies.espresso
compile uiTestDependencies.androidTestRunner
compile uiTestDependencies.androidTestRules
}

