[解決済み] Gradleのimplementation, api, compileの違いは何ですか?
2022-03-18 23:23:27
質問
Android Studio 3.0にアップデートし、新しいプロジェクトを作成した後、次のことに気づきました。
build.gradle
の代わりに、新しい依存関係を追加する新しい方法があります。
compile
があります。
implementation
の代わりに
testCompile
があります。
testImplementation
.
例
implementation 'com.android.support:appcompat-v7:25.0.0'
testImplementation 'junit:junit:4.12'
ではなく
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
その違いと、何を使えばいいのか?
どのように解決するのですか?
tl;dr
置き換えるだけ。
-
compile
とimplementation
(他動性が必要ない場合)またはapi
(他動性が必要な場合) -
testCompile
とtestImplementation
-
debugCompile
とdebugImplementation
-
androidTestCompile
とandroidTestImplementation
-
compileOnly
はまだ有効です。3.0で追加されたもので、providedを置き換えてコンパイルしないようにしたものです。(provided
Gradleがそのユースケースに対応する設定名を持たず、Mavenのprovided scopeにちなんで名付けた時に導入されました)。
これは Android Gradle プラグイン 3.0 そのGoogleが IO17で発表された .
は、以下の通りです。
compile
の構成は
現在では非推奨
で置き換える必要があります。
implementation
または
api
から Gradleのドキュメント :
dependencies { api 'commons-httpclient:commons-httpclient:3.1' implementation 'org.apache.commons:commons-lang3:3.5' }
に現れる依存関係
api
構成は ライブラリのコンシューマに移行して公開されます。 は、コンシューマのコンパイルクラスパスに表示されます。で見つかった依存関係は
implementation
一方 一方、コンシューマには公開されず、したがって は、コンシューマのコンパイルクラスパスに含まれます。これにはいくつかの利点があります。
- 依存関係がコンシューマのコンパイルクラスパスに漏れることがなくなるので、誤って過渡的な 依存関係
- クラスパスサイズの縮小により、コンパイルの高速化を実現
- 実装の依存関係が変わったときの再コンパイルが少ない:コンシューマを再コンパイルする必要がない。
- よりクリーンなパブリッシング:新しい maven-publish プラグインと組み合わせて使用すると、Java ライブラリは、以下のような POM ファイルを生成します。 に対してコンパイルするために必要なものを正確に区別します。 ライブラリと、そのライブラリを実行時に使用するために必要なもの(言い換えれば つまり、ライブラリ自体をコンパイルするために必要なものと、そのライブラリに含まれる に対してコンパイルするために必要です)。
コンパイル設定もまだ存在しますが、これは
api
とimplementation
コンフィギュレーションを提供します。
注
アプリモジュール内でライブラリだけを使用する場合(一般的なケース)、何の違いも感じないでしょう。
モジュール同士が互いに依存しているような複雑なプロジェクトや、ライブラリを作成している場合のみ、その違いがわかります。
関連
-
[解決済み] .ivy2と.m2の違いは何ですか?
-
[解決済み] MavenにおけるdependencyManagementとdependenciesの相違点
-
[解決済み] gradleのキャッシュをクリアする方法は?
-
[解決済み】Android Studioです。jarをライブラリとして追加しますか?
-
[解決済み】gradleプラグインを適用する際の違いについて
-
[解決済み] Gradleは1つのモジュールだけをビルドする
-
[解決済み] Gradleで、Environment Variablesを取得する良い方法はないでしょうか?
-
[解決済み] Gradleでタスクの依存関係をリストアップする方法はありますか?
-
[解決済み] build.gradleのbuildscriptとallprojectsの違いは何ですか?
-
[解決済み] BazelとGradleの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。
-
Android開発エラー - Android Studioで遭遇するエラーと対処法まとめ
-
[解決済み] Android StudioのGradleとは?
-
[解決済み] Gradleのimplementation, api, compileの違いは何ですか?
-
[解決済み] Android Studioにライブラリプロジェクトを追加する方法を教えてください。
-
[解決済み】dexのマージができない。
-
[解決済み】gradlewとgradleの使い方の違いについて
-
[解決済み】Gradleのラッパーファイルはいつ、どのように生成するのですか?
-
[解決済み】pom.xmlの<dependency>の下にある<scope>は何のためにあるのですか?
-
[解決済み] Android Studioです。android-library'というIDのプラグインが見つかりません。