質問: '0.12.412' repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } } apply plugin: "com.android.application" apply plugin: 'kotlin-android' repositories { jcenter() mavenCentral() } android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "jp.trustridge.macaroni.app" minSdkVersion 16 targetSdkVersion 22 versionCode 10 versionName "1.6" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { compile 'com.android.support:support-v13:+' compile 'com.android.support:appcompat-v7:+' compile 'com.android.support:recyclerview-v7:+' compile 'com.google.android.gms:play-services:+' compile "org.jetbrains.kotlin:kotlin-stdlib:+" compile 'com.parse.bolts:bolts-android:+' compile fileTree(dir: 'libs', include: ['*.jar']) // volley compile 'com.mcxiaoke.volley:library:+' // realm compile 'io.realm:realm-android:+' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // adjust //compile 'com.adjust.sdk:adjust-android:+' } ``` 質問 勉強しながらソースを解析しています。 Gradleについて調べています。環境はAndroidStudio1.2.2です。 場所はプロジェクト名/app/build.gradle dependenciesにGradleでビルドしたい外部ライブラリが書いてあると思っています。 上記の場合コトリンに関するもの2つ含めた、クラスパスが3つあります。 こちらについては最新があれば勝手にダウンロードして更新されるもの。 これとは別にapp/libsの中にParse-182.jarともうひとつJarファイルが入っています。 こちらは更新される事なく使われ続ける外部ライブラリ。 このプロジェクトは上記以外には外部ライブラリは使われて無い。 以上の事は正しいでしょうか?よろしくお願いいたします。
回答: このbuild.gradle内にdependencies というブロックが2カ所出現しています。 一つは先頭のbuildscript配下。もう一つは後ろの方にルートレベルで。 それぞれ以下のようになっています。 * buildscript配下のdependenciesはGradleのプラグイン等のようにビルド仕組み自体で必要な外部依存モジュール * 直下のdependenciesはビルド処理中にコンパイルや実行のために使われる外部依存モジュール それぞれ記述方法が若干違います(先頭のキーワードをclasspathと書くか、compileと書くか、など)。 以上を踏まえて回答します。 > > dependenciesにGradleでビルドしたい外部ライブラリが書いてあると思っています。 > > > No. 表現上の問題かもしれませんが「**ビルドしたい**外部ライブラリ」ではなく、厳密に言えば、前述のように「ビルドの仕組みで**使う**外部ライブラリ」または「コンパイルや実行時に**使う**外部ライブラリ」です。 > > 上記の場合コトリンに関するもの2つ含めた、クラスパスが3つあります。 > > > これはbuildscript配下の方のdependenciesですね。 > > こちらについては最新があれば勝手にダウンロードして更新されるもの。 > > > Yes. buildscript配下のもルートの方もどちらも、ビルド実行時に自動的にダウンロードされます。 2カ所あるrepositoriesのどちらにもjecenterとmavenCentralが定義されているので、指定された外部モジュールはまずJCenterからダウンロードしようとして、そこで見つからないと次にMavenセントラルからダウンロードしようとします。どちらにも見つからなければ依存関係解決エラーになります。 > > これとは別にapp/libsの中にParse-182.jarともうひとつJarファイルが入っています。 > > こちらは更新される事なく使われ続ける外部ライブラリ。 > > > `app/libs`→`libs`でしょうか? 直下の方のdependenciesに、以下のような記述があります。 ``` compile fileTree(dir: 'libs', include: ['*.jar']) ``` これは`libs`配下にあるすべての拡張子jarのファイルをコンパイル時&実行時の依存ライブラリとする、というファイル依存関係を示しています。 libs/Parse-182.jarが利用できるのは、この設定が効いているためです。 > > このプロジェクトは上記以外には外部ライブラリは使われて無い。 > > > No. dependencies配下に上記のfileTree意外に9個のcompileへの依存関係が定義されています。 これらも外部ライブラリとして使われています。 ちなみに、`compile` という記述は「コンフィギュレーション」といいます。 Gradleではコンフィギュレーションごとに依存関係を定義できます。 `compile`は、「プロダクトコードのコンパイル時&実行時」「テストコードのコンパイル時&テスト実行時」に対する依存関係となります。