AndroidStudioでサンプルを作っていて、2種類のbuild.gradleがあって、どっちがどうなの?って調べていたら、他にも.gradleファイル(setting.gradle)があったので、違いについて調べてみた。
プロジェクトビューで見ると、ルート直下に「build.gradle」と「setting.gradle」の2つ、そして、ルート > appフォルダの中にも「build.gradle」があります。
それぞれについて調べていくと、これらの.gradleファイルは、Android Studioで開発をおこなう際に、すごく重要なもので、すごく奥が深いことは分りました。とてもじゃないけど、1回で説明するのは無理ぼよなので、自分の理解が進んだ範囲でちょろちょろ書いていきます。
ルート直下の「build.gradle」
以下、サンプル作成時に自動生成された「build.gradle(ルート直下)」の初期内容です。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
コメントに書かれているように「build.gradle(ルート直下)」は、すべてのサブプロジェクトとモジュールに共通する設定項目を追加することができる最上位のビルドファイルです。そして、注意書きとして「ここには、個別のアプリケーションの依存関係を記述しないでください。それらを記述する場所は、個々のモジュール(サブプロジェクト)に属する「build.gradle」となります。」と書かれています。
今回、サンプル作成時に外部ライブラリを利用することになったので、dependencies(依存関係)に記述をおこなうことになったんですが、どちらのbuild.gradleに書けば良いのか迷ったことが今回のメモを書くことになった発端で、答えとしては、appフォルダ配下の「build.gradle」に記載すればいいということがわかりました。
appフォルダ配下の「build.gradle」
というわけで、こちらは、サブプロジェクトごとに必要な依存関係やビルド設定を記述する場所になります。
以下、サンプル作成時に自動生成された「build.gradle(appフォルダ配下)」の初期内容です。
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.hogehoge.test"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
}
最後の方の dependencies {}に追加すればいいようです。
setting.gradle
知りたかった答えが見つかっってしまったので、「setting.gradle」については、簡単にどんなものかメモしておきます。
以下、サンプル作成時に自動生成された「setting.gradle(ルート直下)」の初期内容です。
include ':app'
このサンプルでは、「appというサブプロジェクトを含んでいる」ことが記載されていて、「app」フォルダ以下がひとつのサブプロジェクトという扱いになっています。
自分なりのまとめ
つまり、こんな感じなのかな。
- setting.gradle(ルート直下)–> プロジェクト全体の設定を記述
- build.gradle(ルート直下)–> サブプロジェクト全体の設定を記述
- build.gradle(appフォルダ配下)–> サブプロジェクト個々の設定を記述
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)