前置き
ビルドやバージョン管理をするのに便利らしい Gradle ですが難しくて本当に便利なのか分かりません。
以前 Ant や Maven を使っていた方々にとっては、とても素晴らしい機能らしいのですが…。
Android Studio でプロジェクトを作ると、Gradle が勝手に自動的に付いてきます。
どうしても使わせたいみたいですね。
ならばせめて何が書かれているのかくらいは理解したい。
なので Gradle について簡単に調べた事について書き留めて行きます。
環境情報
Android studio 2.0
Gradle 2.10
gradle は Android Studio をインストールすると勝手に同梱されてついてきます。
事前準備
「Start a new Android Studio project」 から新しい Android Project(Empty Activity) を作っておきます。
Androidアプリプロジェクトとファイルの構成
Eclipseとは比べ物にならないくらい構成が複雑です。
あと gradle と表示された拡張子(?)ファイルが至る所にあります。
アプリケーション内の build.gradle
ソースコードをビルドしてアプリケーションを作る時に使われる gradle です。
gradle は色々ありますが基本的にここを変更します。
中を見るとこんな感じになっています。
app/build.gradle
// プラグインの宣言
apply plugin: 'com.android.application'
// androidのビルド設定のメイン
android {
// コードを コンパイル -> ビルド するのに必要なSDKやbuild-toolのバージョン指定
compileSdkVersion 23
buildToolsVersion "23.0.3"
// マニュフェストエントリ
defaultConfig {
applicationId "example.com.myapplication"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
//ビルド定義
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
// ライブラリ依存関係
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
各項目の詳細は以下のとおりです。
プラグインの宣言
Android アプリケーション や ライブラリ をビルドする場合は必ず下記の様に宣言する必要があります。
よくわかりませんが取り合えずおまじないと思っておきましょう。
アプリケーションの場合
apply plugin: 'com.android.application'
android ライブラリの場合
apply plugin: 'com.android.library'
androidのビルド設定のメイン
Android Gradle Pluginでは、android {} ブロック内にビルド時の設定などを記述していきます。
コードを コンパイル -> ビルド する時に必要な Android SDK 及び Build-Tools の API Level が指定されています。
android {
//アプリをビルドする際のSDKの設定
compileSdkVersion 24 // コンパイルするのに必要(SDK Platform)
buildToolsVersion "24.0.0" // ビルドするのに必要(SDK Build-tools)
}
SDK Platform のバージョンが分からない場合は <sdk>/platforms/
のディレクトリを確認してください。
SDK Build-tools のバージョンが分からない場合は <sdk>/build-tools/
のディレクトリを確認してください。
defaultConfig
Eclipse ADTの場合は、AndroidManifesf.xml に直接記述していましたが、build.gradle に記述しておくことでビルド時に自動で AndroidManifesf.xml に追加(上書き)してくれます。
defaultConfig {
applicationId "example.com.myapplication" // パッケージ名
minSdkVersion 19 // アプリを実行するのに必要な最小APIレベル
targetSdkVersion 22 // アプリの動作を保障しているAPIレベル
versionCode 1 // 内部バージョン番号として使用する整数(最大値 2100000000)
versionName "1.0" // ユーザーに表示するバージョン番号として使用される文字列
}
targetSdkVersion の API Level は、デフォルトの画面や動作が指定したバージョンになります。
例を出すとtargetSdkVersion 22 ならば Android 5.1.1( Lollipop ) の画面や動作になります。
buildTypes
アプリファイル(.apk)を作成するときに必要となる設定値の定義。
「デバッグ用(debug)」と「リリース用(release)」のビルドという感じで、複数のビルドの種類を記述することができます。
自分で新たにビルドの種類を追加することもできます。
buildTypes {
release {
minifyEnabled false // コード(apkのサイズ)を縮めるかどうか
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // Proguard の設定ファイルを指定します
}
}
ProGuard と言うのは、圧縮、最適化、難読化、事前検証の4つの機能を持ったツールでオプションとして動作させるか指定出来るみたいですね。
Google側は適応を強く勧めている様です。
詳しい内容は、AndroidでのProGuard 使い方を見るのをお勧めします。
その他のブロックたち
android {} の中に設定できるブロック( Configuration blocks )はまだまだあるよ。
aaptOptions { }
adbOptions { }
compileOptions { }
dataBinding { }
dexOptions { }
externalNativeBuild { }
jacoco { }
lintOptions { }
packagingOptions { }
productFlavors { }
signingConfigs { }
sourceSets { }
splits { }
testOptions { }
dependencies
コード上で依存関係にあるライブラリを定義します。
依存関係の種類にはいくつかの種類があります。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) // libs フォルダ直下の jar ファイルをコンパイル
testCompile 'junit:junit:4.12' // プロジェクトのテストコードをコンパイルするのに必要な依存関係(src/test)
compile 'com.android.support:appcompat-v7:23.3.0' // プロジェクトのプロダクトコードをコンパイルするのに必要な依存関係(必須)
}
最後に
とりあえずここまで。
デフォルトのプロジェクトで作られた app.gradle 中身について簡単にまとめました。
この内容をまとめるにあたり以下のエントリーを参考にしました。
Android studioにおけるbuild.gradleの設定について
ここよりも深い部分(apkを作る際のセキュリティキーのgradle設定とか)に触れられていてとても分かりやすいです。