2016-01-26 7 views
40

私は時々見られるアンドロイドのgradleファイルのapt依存関係の範囲は何ですか?Androidでの依存関係の範囲 - gradleは何のために使用されていますか?

例は次のようになりますか?

apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 
android { 
    compileSdkVersion 20 
    buildToolsVersion '20.0.0' 
    defaultConfig { 
     applicationId "org.ligboy.test.card.module1" 
     minSdkVersion 14 
     targetSdkVersion 20 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

final DAGGER_VERSION = '2.0.2' 

dependencies { 
    compile "com.google.dagger:dagger:${DAGGER_VERSION}" 
    apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope 
    provided 'org.glassfish:javax.annotation:10.0-b28' 
} 

とトップレベルのbuild.gradleファイルには、このグローバルな依存関係を持っている:依存関係のセクションで

buildscript { 
dependencies { 
     classpath 'com.android.tools.build:gradle:1.3.0' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
    } 
} 

お知らせaptの範囲はありますか?私はコンパイル、パッケージ、提供されたスコープを知っているだけです。 にはコンパイル時およびパッケージ内の依存関係が含まれていますが、コンパイル時にはライブラリのみが含まれ、最終ビルドには含まれないようにパッケージ時間は になります。パッケージはその逆です。パッケージに依存し、コンパイル時には依存しません。 しかし、私たちは明らかにcom.neenbedankt.android-aptが動作するために必要なapt依存関係のスコープがあります。そのため、私はアンドロイドベースを知っています。

更新: なぜカント私はを使用する代わりに、がち範囲の依存スコープを提供しましたか?彼らはどのように違いますか?

私はdagger dependency scopesのチュートリアルを作成しました。 android-apt project pageから

答えて

65

:Androidのメーカーとの組み合わせでの注釈プロセッサでの作業中に

アンドロイド-aptのプラグインを補助します。それは2つの目的を有する:

  • は最終APK又はライブラリ

    そのコードようにソースパスを設定
  • におけるアーティファクトを含まない、依存関係としてコンパイル時にのみ注釈プロセッサを構成することができ注釈プロセッサから生成された画像は、Android Studioによって正しく選択されます。

あなたはコードを生成するために注釈処理を使用してダガーを使用しています。注釈処理コードは最終的なAPKに含めてはなりません。生成されたコードをAndroid Studioに表示させたいとします。 android-aptはこの動作を有効にします。

これはprovidedのスコープとよく似ていますが、aptはいくつかの重要な点でprovidedとは異なります。最初の違いはaptの依存関係によって生成されたコードがIDEに利用可能であるのに対し、providedの依存関係によって生成されたコードはIDEで利用できないことです。

もう1つの重要な違いは、providedスコープを使用しているライブラリのコードがIDEクラスパス上にあることです(つまり、クラスをインポートして使用することができます)。aptのコードは依存関係ではありません。 providedを使用すると、スコープされた対応部分で参照先の依存関係を実際に提供しないと、実行時にコードがクラッシュします。

aptprovidedについての説明はthis android-apt issueです。

Daggerの場合、注釈プロセッサーとコードジェネレーターを(providedスコープで許可される)コードに含める必要はありません。したがって、aptスコープがより適切です。 2016年10月のための

更新: あなたはおそらく、もうaptandroid-aptプラグインを必要としません。 Android Gradleプラグインのバージョン2.2には、代わりに使用する必要があるannotationProcessor設定があります。

はよりWhat's next for android-apt?

+0

をコーディングすると、なぜカント私はこのケースではなく、aptの「提供」を使用ハッピー?私はあなたがそれが私のために物事をクリアすると答えたと思います。 – j2emanue

+0

違いの説明が追加されました。 –

+0

ブリリアント。私はまた、提供された 'org.glassfish:javax.annotation:10.0-b28'をgradleで使用します。それを適切な範囲にする方が良いと思いますか?このようにして、ジェネレータはコードに含まれません。 – j2emanue

8

でジャストGradleのモジュールのアプリケーションでこれを追加+

dependencies { 
    compile 'com.google.dagger:dagger:2.4' 
    annotationProcessor "com.google.dagger:dagger-compiler:2.4" 
} 

メーカー2.2でこれを変更する方法を追加してください。他のものを変更する必要はありません。

:)

関連する問題