AndroidStudioの.gradleファイルがいっぱいあってよくわからんのでそのメモ。
#setting.gradle
これはアプリケーションに対して、一つしかないはず。そのアプリケーション全体で必要なプロジェクトや依存関係を管理する。デフォルトでは
include ':app'
のみ書かれているが、これはもちろんappプロジェクト、すなわちアプリケーション本体のプロジェクトをincludeしている。たとえば外部ライブラリプロジェクトを使用する場合は、適当なディレクトリに配置したあと、そのディレクトリもincludeしなければならない。たとえばvolleyをmodules/volleyみたいな感じで引っ張ってきたとすれば、新しくincludeするために
include ':app',':modules/volley'
とする必要がある。プロジェクトじゃなくjarファイルをそのまま配置する場合は別に不要だと思う。あくまでビルド設定なので。
#build.gradle(ルート直下)
大体一行目に書かれている英語がすべてな気がする。
Top-level build file where you can add configuration options common to all sub-projects/modules.
ざっくり読むと、全部のサブプロジェクト(これにはメインプロジェクト、すなわちappも含まれる)に共通の設定を書く場所やで~ってことらしい。つまりそういうことだ。
デフォルトで書いてある部分を読むと、
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.12.2' // NOTE: Do not place your application dependencies here;they belong // in the individual module build.gradle files } }
buildscriptはgradleのプロジェクトのビルド自体の設定。repozitories{}
にはインポートする外部jarファイルのリポジトリを書く。dependencies{}
は依存するファイルのパスやurlを書く。この場合、依存するビルドツールのverが書いてある、ということっぽい。
注意書きにあるように、ここには個別のプロジェクトの依存ファイルを書くな、それは各々のプロジェクト内のbuild.gradleに書けと書かれている。ここはあくまでプロジェクト全体についてのビルド設定を書くところのようだ。
下のallproject{}
も大体直感的でわかると思う。もし各種プロジェクトでビルドツールを使い分けたい場合はこれを消してそれぞれのプロジェクトについて、そのように書く。もちろんそれは上でも言われた通り本来各種プロジェクトファイル中のbuild.gradleに書くべきなのだが、そうしたくないときは以下のように書ける(例えば対象のプロジェクトファイルがgit submoduleで引っ張ってきた外部ライブラリで、buld.gradleにビルドツールの指定が書かれていなくてビルドが通らない、けどsubmoduleだからローカルで変更を加えたくない、みたいなシチュエーションもあるだろう。)
project(':<project name>') { buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.2' } } }
ちなみに衝突させた場合、全体の方が優先されているように見える(プロジェクト内のbuld.gradleでunsuportedなgradleのバージョンを指定してもこっちで指定してたらビルドは通っているので)。非直観的な気もするけど、ほんとかな。
#build.gradle(各種プロジェクト)
こっちはプロジェクトレベルの依存関係やらビルド設定やらを書く。主にライブラリを使用する際編集することになるのはここなのでなじみは深いと思う。
apply plugin:
適用するプラグインが指定できる。詳しくはわからないが、それぞれに対応したpluginを適用する必要があるようだ。アプリケーションプロジェクトであればapply plugin: 'com.android.application'
となっているし、ライブラリプロジェクトであればapply plugin: 'com.android.application'
となっている。一般のjavaアプリケーションプロジェクトであればapply plugin: 'java'
とかもあるらしい。
android{}
内のパラメータは、最低限compileSdkVersion
があればいいようだ。その他の設定(例えばminSdkVersionなど)はウィザードでアプリケーションを新規作成する際に行った設定などが反映されている。他にどういう設定があるかはhttp://tools.android.com/tech-docs/new-build-system/user-guide に詳しい(と思う。まだちゃんと読んでない……)
これで少なくとも、各種.gradleファイルの役割が少しは整理できた気がする。間違ってたらご指摘お願いします。
#追記
ここがgradleを使ったbiuldTypeの使い分けに詳しい。