こんにちは、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 }