GradleScriptsの初歩知識

UnityとAndroidネイティヴの連携を図る上で、数年前と多少なり事情が異なっていたので困惑中です。
そもAndroidStudioとかいうやつにまだ慣れていないのですが、GradleScriptというものが何者かの知識を持っていなかったので、それぞれどのようなものか調べました。

環境

  • OS X Yosemite v10.10.4
  • AndroidStudio v1.3.1

AndroidStudioにおける.gradleファイル

gradle
AndroidStudioで新規にプロジェクトを作成すると、このようにGradleScriptsがProjectに生成されます。
GradleScriptsにはプロジェクトのビルドを行うファイルが含まれています。
では、全てどのようなファイルか、確認していきます。


build.gradle (Project: MyApplication) : ProjectBuildFile

AndroidStudioで生成したプロジェクトのrootディレクトリ、今回は”MyApplication”の直下に生成されました。
build.gradle (Project: MyApplication)には、プロジェクト全体で共通するビルド設定がgroovyで記述されています。マルチプロジェクトを扱う時はこのファイルをいじることになりそうです。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {  /*7行目で記述したライブラリの取得先を記述する*/
        jcenter()
    }
    dependencies {  /*依存関係の指定。ビルド時に使用したいライブラリを記述する*/
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

build.gradle (Module: app) : ModuleBuildFile

“MyApplication/app”の直下に生成されました。
アプリケーションのビルド設定ファイルとして働き、”MyApplication/app/src/main”直下のAndroidManifest.xmlの設定を上書きします。

apply plugin: 'com.android.application'

android {  /*Androidの設定*/
    compileSdkVersion 22  /*対応APIバージョン*/
    buildToolsVersion "22.0.1"  /*AndroidSDKBuild-tools(コンパイラ)のバージョン*/

    defaultConfig {
        applicationId "com.example.hoge.myapplication"
        minSdkVersion 21  /*最低の対応APIバージョン*/
        targetSdkVersion 22  /*compileSdkVersionと同一にする*/
        versionCode 1  /*GooglePlayにリリースする時、ユニークに振る値。リリースしなおす時は変更が必須となる。一般ユーザからは不可視*/
        versionName "1.0"  /*GooglePlayに表示されるアプリのバージョン*/
    }
    buildTypes {
        release {  /*releaseビルド時に有効な設定*/
            minifyEnabled false  /*Proguardを有効にするかどうか*/
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  /*proguard-android.txtの取得先指定と、Proguardの設定ファイルであるproguard-rules.proの指定をしている?*/
        }
    }
}

dependencies {  /*依存関係の指定。外部ライブラリjarを含める時に追記*/
    compile fileTree(dir: 'libs', include: ['*.jar'])  /*lib フォルダ直下の jar を全て指定する設定になっている*/
}
buildTypesにはdebugオプションが無いけど、追加すればdebugビルド時の設定もつくれる。
dependenciesのcompileは、プロジェクトのプロダクトコードをコンパイルするのに必要な依存関係をコンフィグする設定。

外部ライブラリはAndroidStudio上から直接追加できる。
AndroidStudio上から、File > Project Structure > appを選択してDependenciesタブを選択して+ボタンを押す > 1 Library dependency > 下記ウィンドウから指定
chooselibrary
指定すると、下記のような様式で1行追加される。

compile 'com.android.support:appcompat-v7:20.0.0'  /*直接の指定*/

また、下記のように複数の指定も追記できる。

compile files('lib/hoge.jar', 'lib/fuga.jar')  /*個別に、かつ複数の指定ができる*/

gradle-wrapper.properties (Gradle Version) : TheGradleWrapper
#タイムスタンプ
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
gradleのwrapperタスクに関する定義?

proguard-rules.pro (Proguard Rules for app)

コメントのみ記述されたファイルが生成されました。
難読化してくれるProguardについて設定するファイルのようです。
詳細


gradle.properties (Project Properties)

コメントのみ記述されたファイルが生成されました。
このファイルで定義した値はbuild.gradle内で使用できる。APIのキーとか書いておく用途?
詳細


settings.gradle (Project Settings)

AndroidStudioで生成したプロジェクトのrootディレクトリ、今回は”MyApplication”の直下に生成されました。
中身は1行だけ。

include ':app'

gradleを用いたビルドの初期時に起動されるファイルでincludeメソッドにappディレクトリを指定していますが、この記述はプロジェクトrootディレクトリからの相対パスになっています。
app以外もビルドする時、つまりマルチプロジェクトとして”MyApplication”に枝を生やす場合には、このファイルに追加で記述していけば良いようです。


local.properties (SDK Location)

コメントとともに下記のコードが生成されていました。

#タイムスタンプ
sdk.dir=/Users/ユーザ名/Library/Android/sdk

コメントを読む限り

  • AndroidStudioが自動生成するファイル。
  • このファイルはGradle側で使用する。開発者が直接いじるものではなく、修正しても元に戻ったりしてしまう。
  • バージョン管理すべきではない。