web-dev-qa-db-ja.com

コンパイル、提供、APK-Android依存関係スコープ

Androidプロジェクト、特にAndroid StudioDependenciesには3つのスコープオプションCompile/Provided/APKがあります。

それぞれを選択することの効果は何ですか、いつ使用する必要がありますか?その名のとおり。

編集:

「 'provided'および 'package'スコープを適切に処理して、本来行うべきことを実行します。'provided 'および' package 'はAndroid Librariesでは使用できません。エラーが生成されます。 "..これは http://tools.Android.com/tech-docs/new-build-system からです

43
Jacob
  • provided-コンパイル時のみの依存関係
  • package-パッケージ時のみの依存関係
  • compile-コンパイル時およびパッケージ時の依存関係

providedは、一般的に注釈処理ベースのライブラリに使用されます。通常、これらのライブラリは、「注釈」と「コンパイラ」という2つの成果物に分けられます。 「コンパイラ」はprovided依存関係です。これはアプリケーションで使用する必要がなく、コンパイルのみに使用する必要があるためです。 「注釈」はcompile依存関係です-アプリケーションコードで使用されるため、コンパイルされます。または、生成されたコードには追加の依存関係が必要ですが、アプリケーションには必要ありません。例えば。短剣の依存関係の構成:

compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
42

これらのプロパティは maven scopes に由来します。

これらは、ビルドプロセスの各ステップで特定の依存関係を処理する方法を単に示しています。

  1. compile-デフォルトのアプローチ。これは、コンパイル時にすべての依存関係が利用可能であることを意味します。コンパイルの依存関係は、プロジェクトのすべてのクラスパスで利用できます。さらに、これらの依存関係は依存プロジェクトに伝播されます。通常、実行時にはコンパイル時の依存関係が必要です。

  2. package-アプリケーションを構築するための追加の構成を宣言します。ビルドプロセスに機能を追加するプラグインをリストできます。

  3. provided-ランタイム環境にこれらの依存関係が含まれていることを意味します。たとえば、Android.jar表示されるライブラリ内部Java.lang.RuntimeException: Stub!すべてのメソッド本体。

    それはいくつかの結果をもたらします:
    • 完全なAndroid環境がなくても、ローカルでAndroidアプリケーションを開発できます。
    • APKは、これらのメソッドのprovide実装であるため、Androidデバイスまたはエミュレーターで実行する必要があります。
    • Jarがクラスメタデータを提供するため、SDKクラスを参照するアプリは適切にビルドされます。
    • アーティファクトを提供するライブラリ( Robolectric など)を使用しない限り、エミュレータ/デバイスでテストを実行する必要があります。

providedおよびpackageは、Android Librariesと一緒に使用できず、エラーを生成します。

sourceSetは次のようになります。

enter image description here

ビルドシステムの詳細: https://www.youtube.com/watch?v=LCJAgPkpmR

Gradleに関する素晴らしい記事: http://www.sinking.in/blog/provided-scope-in​​-gradle/

35
Kamil Lelonek

Xavierは here[〜#〜] apk [〜#〜]スコープについて話します。

Androidプラグイン、ランタイムの同等の(ソート))はapkと呼ばれます。

依存関係{apk files( 'libs/foo.jar')}

パッケージ化されるだけで、コンパイルクラスパスには含まれません。

16
aows