2017-10-04 9 views
15

The docsimplementationは、compile/apiよりも大幅に改善されています。 compileOnlyはどうですか?Android Gradle Implementation vs CompileOnlyパフォーマンス

私は、Androidアプリケーションを持っているマルチモジュール(Gradleのマルチプロジェクトの用語が気に入らないのは申し訳ありません)と、アプリが依存する複数のライブラリ(implementation)です。ライブラリの中には、お互いに依存するものもあります。ライブラリモジュールの依存関係を宣言するときにimplementationまたはcompileOnlyを使用する必要がありますか?私のアプリケーションモジュールはimplementationを使用してそれらの成果物に依存しているので、ライブラリモジュールを介して推移的になる必要はありません。

+0

'compileOnly'は、コンパイル時のみアクセス可能であり、実行時に**アクセスできないことを意味します。モジュールが実行時にこれらの依存関係を必要としない場合は、 'compileOnly'を宣言するのに問題はありません。 – azizbekian

+0

これはパフォーマンスに関する問題に対処していません。 – Eliezer

答えて

6

api構成は、外部modules(推移依存)にエクスポートされ、依存関係のために使用されるべきです。構成内の依存関係の場合は、(推移的な依存関係ではない)の構成を使用する必要があります。 compileOnly

実装:

自分の仕事には類似性はありませんが、compileOnlyは、java-pluginの

  • コンパイル時に必要な
  • から継承された設定も含まれていない

    • です実行時のクラスパスまたは依存する プロジェクトに公開されます。

    のでcompileOnlyは、例えばimplementation設定ジョブを置き換えるものではありません:

    implementation 'com.android.support:appcompat-v7:25.1.0' // can't use compileOnly here 
    testCompile 'junit:junit:4.12' 
    
    compile "com.google.dagger:dagger:2.8" // can't use here also 
    annotationProcessor "com.google.dagger:dagger-compiler:2.8" // can't use here also 
    compileOnly 'javax.annotation:jsr250-api:1.0' // we can use compileOnly here because it's required on run time only. 
    

    をお使いの場合は、「マルチモジュール」であるので、あなたは、最終的なモジュールに到達するまで、あなたは、api設定を使用する必要がありますimplementationを使用する方がよいでしょう。

    enter image description here

    パフォーマンス:

    次のグラフは、それらの構成を説明しますか?

    私はそれ自身の内部実装のために使われている(上述のように)ので、のGradleその推移モジュール、その逆implementation内のすべてのクラスのスナップショットを作成するので、apiはより多くのメモリを必要とする好ましい構成であると思います。

  • +0

    ありがとうございます、しかし、私の質問は、もしあれば、 'implementation'の上に' compileOnly'を使うことに何があるかということです。 – Eliezer

    +0

    @Eliezerは答えを更新しました。 – Ibrahim

    +0

    まだそこにはかなりありません。'compileOnly'のためのgradleのdocは、"コンパイル時にAPIが必要ですが、その 'implementation'が消費するライブラリ、アプリケーション、または実行時環境によって提供される依存関係です。私の質問は、ライブラリの依存関係を 'compileOnly'と' implementation'と宣言することには何の利点もありますか?両方とも動作するので、消費するモジュールがそれらの依存を宣言する必要があります。パブリックAPI)。 – Eliezer

    関連する問題