[解決済み] Gradleの実装とAPIの設定
質問
との違いを知りたいのですが。
api
と
implementation
の設定を変更し、依存関係を構築しています。
ドキュメントには、以下のように書かれています。
implementation
の方がビルド時間が長いのですが。
これを見ると
コメント
という質問がありましたが、本当でしょうか?
私はGradleの専門家ではないので、どなたか助けていただけると幸いです。私は
ドキュメント
が、わかりやすい解説があればと思い質問させていただきました。
どのように解決するのですか?
グラドル
compile
キーワードは非推奨となり、代わりに
api
と
implementation
キーワードで依存関係を設定します。
使用方法
api
は、非推奨の
compile
であるため、すべての
compile
で
api
を選択すると、いつもと同じように動作します。
を理解するために
implementation
キーワードは、次のような例で考えてみましょう。
例
というライブラリを持っているとします。
MyLibrary
という別のライブラリを内部で使用しており、そのライブラリは
InternalLibrary
. こんな感じ。
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
仮に
MyLibrary
build.gradle
が使用します。
api
の構成は
dependencies{}
をこのようにします。
dependencies {
api project(':InternalLibrary')
}
を使用したい。
MyLibrary
を作成し、アプリの
build.gradle
で、この依存関係を追加します。
dependencies {
implementation project(':MyLibrary')
}
を使用することで
api
設定(または非推奨の
compile
にアクセスすることができます。
InternalLibrary
をアプリケーションのコードで使用することができます。
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (but you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
このように、モジュール
MyLibrary
は、潜在的に何かの内部実装を "leaky"しています。 それはあなたによって直接インポートされたものではないので、あなたはそれを使うべきではありません(できません)。
その
implementation
の設定は、これを防ぐために導入されました。
そのため、現在では
implementation
の代わりに
api
で
MyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
を呼び出すことができなくなります。
InternalLibrary.giveMeAString()
を追加しました。
このようなボックス化戦略により、Android Gradleプラグインは、もしあなたが
InternalLibrary
のリコンパイルのみをトリガーする必要があります。
MyLibrary
と
ではなく
にアクセスできないため、アプリ全体の再コンパイルが必要になります。
InternalLibrary
.
ネストされた依存関係がたくさんある場合、このメカニズムによってビルドを大幅にスピードアップすることができます。 (最後にリンクしているビデオを見て、このことを十分に理解してください)
結論
-
新しいAndroid Gradleプラグイン3.X.Xに切り替えたとき、あなたのすべての
compile
をimplementation
キーワード (1 ) . その後、アプリをコンパイルしてテストしてみてください。もし問題があれば、依存関係に何か問題があるか、非公開でアクセスできないものを使っている可能性があります。*Android Gradleプラグインエンジニア Jerome Dochezによる提案 (1 ) ) -
ライブラリ管理者であれば
api
は、ライブラリの公開 API に必要なすべての依存関係に対して使用し、一方でimplementation
には、テスト用の依存関係や最終ユーザーが使用する必要のない依存関係を指定します。
お役立ち記事 との違いを紹介 実装 と アピ
参考文献 (同じ映像を時間短縮のために分割しています。)
Google I/O 2017 - Gradleビルドを高速化する方法(FULL VIDEO)
Google I/O 2017 - Gradleビルドの高速化方法 (NEW GRADLE PLUGIN 3.0.0 PART ONLY)
関連
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Androidカスタムドロップダウンリストボックスコントロール
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
Android studio 制約レイアウト ConstraintLayout
-
[解決済み] Android StudioのGradleとは?
-
[解決済み] Gradleのimplementation, api, compileの違いは何ですか?
-
[解決済み] gradleに依存関係を強制的に再ダウンロードさせるには?
-
[解決済み] テストなしで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 実装 サイバーパンク風ボタン
おすすめ
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
android:EMSのプロパティ
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
WeChatとQQは、他のアプリのオープンリストに自分のアプリを追加し、ファイルパスを取得することができます
-
アンドロイドの遅延実行のいくつかの方法
-
アンドロイドスタジオ学習入門
-
Android studio 制約レイアウト ConstraintLayout