Gradleの実装とAPIの構成



Gradle Implementation Vs Api Configuration



2019 UnicornEnterprisesはエンジニアのPython標準を大量に採用しています>>> hot3.png

注意:



実装は、プライベートな外部使用の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に切り替えるときは、すべてのcompileimplementationに置き換える必要があります。キーワード (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 * )。

Androidのドキュメント

複製:https://my.oschina.net/sfshine/blog/3005548