build.gradle ファイルの役割
一、Gradle ビルドシステム概要
Android Studio はプロジェクトのビルドに Gradle を使用します。Gradle は非常に先進的なビルドツールで、従来の XML ではなく、Groovy ベースのドメイン固有言語(DSL)を使ってプロジェクト設定を宣言します。
HelloWorld プロジェクトには2つの
build.gradleファイルがあります。外側(プロジェクトレベル)と内側(モジュールレベル)です。
二、外側の build.gradle(プロジェクトレベル)
パス:プロジェクトのルートディレクトリ/build.gradle
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// 注意:アプリケーションの依存関係はここに記述しないでください。
// 各モジュールの build.gradle ファイルに記述してください。
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}Code language: JavaScript (javascript)
主要な設定の解説
| 設定項目 | 説明 |
|---|---|
jcenter() | JCenter コードホスティングリポジトリを使用するよう宣言します。多くのオープンソース Android プロジェクトが JCenter でホストされており、宣言することでこれらのライブラリを直接参照できます。 |
google() | Android Support Library や Constraint Layout などの Google 公式ライブラリを取得するための Google Maven リポジトリ を使用するよう宣言します。 |
classpath 'com.android.tools.build:gradle:3.1.2' | Gradle の Android プラグイン を宣言します。Gradle 自体は Java や C++ などのプロジェクトをビルドできますが、Android プロジェクトをビルドするにはこのプラグインが必要です。 |
allprojects | すべてのモジュール(サブモジュールを含む)に対してリポジトリのアドレスを統一して設定します。 |
task clean | クリーンタスクを定義し、実行時にプロジェクト全体の build ディレクトリを削除します。 |
外側の
build.gradleは 基本的に変更する必要はありません。グローバルなリポジトリを追加したり、Gradle プラグインのバージョンを上げたりする場合のみ変更します。
三、内側の build.gradle(モジュールレベル / app ディレクトリ)
パス:app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}Code language: PHP (php)
以下、各部分を順に解説します。
四、apply plugin —— プラグインの宣言
apply plugin: 'com.android.application'Code language: JavaScript (javascript)
| 値 | 意味 |
|---|---|
com.android.application | アプリケーションモジュール。直接実行可能です。 |
com.android.library | ライブラリモジュール。単独では実行できず、他のモジュールから依存されて呼び出されます。 |
モジュールが「App」なのか「Library」なのかを見分ける重要な設定です。
五、android ブロック —— コアビルド設定
1. コンパイルバージョンとビルドツール
compileSdkVersion 27
buildToolsVersion "27.0.3"Code language: CSS (css)
| 設定 | 説明 |
|---|---|
compileSdkVersion | プロジェクトのコンパイルに使用する Android SDK バージョンを指定します。27 は Android 8.1 に対応します。 |
buildToolsVersion | ビルドツールのバージョン番号です。新しいバージョンが利用可能な場合、Android Studio が更新を促します。 |
2. defaultConfig —— デフォルト設定
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Code language: JavaScript (javascript)
| プロパティ | 説明 |
|---|---|
applicationId | アプリの一意のパッケージ名。アプリの一意識別子として使用されます(Google Play への公開時など)。 |
minSdkVersion | サポートする最低の Android バージョン。14 は Android 4.0 に対応します。 |
targetSdkVersion | そのバージョンで十分にテストされたことを示します。システムはこれに基づいてバージョン固有の機能(7.0 のマルチウィンドウモードなど)を有効にします。 |
versionCode | バージョン番号。整数値で、アプリストアがアップデートを判断するために使用します。 |
versionName | バージョン名。文字列で、ユーザーに表示されます。 |
testInstrumentationRunner | Android 自動テストのランナーを指定します。 |
3. buildTypes —— ビルドタイプ
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}Code language: JavaScript (javascript)
| 設定 | 説明 |
|---|---|
debug | デバッグ版の設定(省略可能。デフォルト値が適用されます)。 |
release | リリース版の設定。 |
minifyEnabled | コード難読化を有効にするかどうか。false = 難読化しない、true = 難読化する。 |
proguardFiles | 難読化ルールファイルを指定します: • 1つ目:SDK ディレクトリ内の一般的な難読化ルール • 2つ目: proguard-rules.pro。プロジェクト固有のルールを記述できます。 |
Android Studio がデフォルトで実行するのは debug(テスト)ビルド です。正式なリリースビルドの生成方法については後述します。
六、dependencies —— 依存関係の管理
これは 最も頻繁に変更される 部分で、プロジェクトが依存するすべてのライブラリを宣言します。
3つの依存関係のタイプ
| タイプ | 説明 | 例 |
|---|---|---|
| ローカル依存 | ローカルの jar ファイルやディレクトリに依存 | compile fileTree(dir: 'libs', include: ['*.jar']) |
| ライブラリ依存 | プロジェクト内のライブラリモジュールに依存 | compile project(':library') |
| リモート依存 | JCenter / Google リポジトリ上のオープンソースライブラリに依存 | compile 'com.android.support:appcompat-v7:27.+' |
行ごとの解説
// ローカル依存:libs ディレクトリ内のすべての .jar ファイルをビルドパスに追加
compile fileTree(dir: 'libs', include: ['*.jar'])Code language: PHP (php)
// リモート依存:AppCompat 互換ライブラリ
// フォーマット:ドメイン:グループ:バージョン
compile 'com.android.support:appcompat-v7:27.+'Code language: JavaScript (javascript)
// リモート依存:ConstraintLayout レイアウトライブラリ
compile 'com.android.support.constraint:constraint-layout:1.0.2'Code language: JavaScript (javascript)
// テスト依存:JUnit 単体テスト
testCompile 'junit:junit:4.12'Code language: JavaScript (javascript)
// Android テスト依存:Espresso UI テスト
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})Code language: JavaScript (javascript)
リモート依存のワークフロー:Gradle はまずローカルにライブラリがキャッシュされているか確認します → あればそれを使用 → なければ自動的にネットワーク経由でダウンロード → ダウンロード後にビルドパスに追加します。
七、まとめと比較
| ファイル | 役割 | 変更頻度 |
|---|---|---|
外側の build.gradle | グローバルリポジトリ設定、Gradle プラグインバージョン | ほとんど変更しない |
内側の app/build.gradle | モジュールのビルド設定、依存関係の管理 | 頻繁に変更する |
| コア設定 | 主要な属性 | |
| ——— | ——— | |
apply plugin | application / library の区別 | |
compileSdkVersion | コンパイル SDK バージョン | |
applicationId | アプリの一意識別子 | |
minSdkVersion | 最低互換バージョン | |
targetSdkVersion | ターゲットテストバージョン | |
buildTypes | debug / release ビルド設定 | |
dependencies | ローカル / リモート / ライブラリ依存 |
build.gradle
Previous: リソース res ファイルとアプリ名・アイコンの変更
Next: ログ機能