Gradleの実装とAPIの構成
Gradle Implementation Vs Api Configuration
2019 UnicornEnterprisesはエンジニアのPython標準を大量に採用しています>>>
注意:
実装は、プライベートな外部使用のjavaクラスとして理解できます。実装は、ライブラリのコードに依存します。参照ライブラリよりも少ないです。このコードの実装は、依存関係ツリーの階層を減らすことであるため、外部コードのコンパイル時間を回避できます。ライブラリ依存関係のコードベースは、コンパイル中に発生しました。これにより、コンパイル時間が短縮されます
おそらくすべての開発者にとってそれほど即時ではないので、このトピックはもう少しカバーする必要があると思います。
Gradle compile
キーワードは廃止され、新しいapi
が採用されました。およびimplementation
キーワード。
api
は、古いcompile
を使用するのと同じであるため、説明しません。したがって、すべてのcompile
を置き換えるとapi
ですべてがいつものように機能します。
implementation
を理解するにはキーワード例が必要です。
例
MyLibrary
という名前のこのライブラリがあります内部的にはInternalLibrary
という別のライブラリを使用しています。このようなもの:
//internal library module public class InternalLibrary { public static String giveMeAString(){ return 'hello' } } //my library module public class MyLibrary { public String myString(){ return InternalLibrary.giveMeAString() } }
build.gradle
MyLibrary
の依存関係こんな感じです:
dependencies { api project(':InternalLibrary') }
これで、コードで使用したいMyLibrary
したがって、build.gradle
が必要です。この依存関係で
dependencies { api project(':MyLibrary') }
アプリケーションコードで、api
を使用しますキーワード(または古いcompile
を使用)の両方にアクセスできますMyLibrary
およびInternalLibrary
。
//so you can access the library (as it should) MyLibrary myLib = new MyLibrary() System.out.println(myLib.myString()) //but you can access the internal library too (and you shouldn't) System.out.println(InternalLibrary.giveMeAString())
このようにして、直接インポートされていないために使用すべきではないものの内部実装を「リーク」している可能性があります。
これを防ぐために、Gradleは新しいimplementation
を作成しましたキーワードなので、api
を切り替えると〜implementation
あなたのMyLibrary
dependencies { implementation project(':InternalLibrary') }
そしてあなたのアプリではbuild.gradle
dependencies { implementation project(':MyLibrary') }
InternalLibrary.giveMeAString()
に電話をかけることはできませんあなたのアプリコードでもう。一方MyLibrary
api
を使用しますインポートするキーワードInternalLibrary
、アプリでInternalLibrary.giveMeAString()
を呼び出すことができますapi
を使用すれば、問題なく独立してまたはimplementation
追加するMyLibrary
あなたのアプリに。
この種のボクシング戦略を使用すると、Android Gradleプラグインは、InternalLibrary
で何かを編集した場合にそれを認識します。 MyLibrary
の再コンパイルがトリガーされますのみ。 InternalLibrary
にアクセスできないため、アプリ全体の再コンパイルはトリガーされません。ネストされた依存関係が多数ある場合のこのメカニズムは、ビルドを大幅に高速化できます。 (これを完全に理解するには、最後にリンクされているビデオをご覧ください)
結論
-
新しいAndroidGradleプラグイン3.X.Xに切り替えるときは、すべての
compile
をimplementation
に置き換える必要があります。キーワード (1 *) 。次に、アプリをコンパイルしてテストしてみてください。すべて問題がない場合は、コードをそのままにしておきます。問題がある場合は、依存関係に問題があるか、プライベートでアクセスしにくいものを使用した可能性があります。 AndroidGradleプラグインエンジニアのJeromeDochezによる提案 (1 )* )。 -
あなたが図書館の管理人であるなら、あなたは
api
を使うべきですimplementation
を使用しながら、ライブラリのパブリックAPIに必要なすべての依存関係に対してテストの依存関係または最終ユーザーが使用してはならない依存関係。
役に立つ記事 の違いを紹介する 実装 そして 火
参考文献 (これは時間を節約するために分割された同じビデオです)
Google I / O 2017-Gradleビルドのスピードアップ(フルビデオ)
Google I / O 2017-Gradleビルドをどのように高速化するか(新しいGRADLE PLUGIN 3.0.0パーツのみ)
Google I / O 2017-Gradleビルドをどのようにスピードアップするか( 1 * )。
複製:https://my.oschina.net/sfshine/blog/3005548