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 (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
このように、モジュールMyLibrary
は何かの内部実装を潜在的に「漏らしています」。これは直接インポートされないため、使用しないでください。
implementation
設定はこれを防ぐために導入されました。だから今は使用している場合implementation
の代わりをapi
してMyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
InternalLibrary.giveMeAString()
アプリコードで呼び出すことができなくなります。
このようなボクシング戦略により、Android GradleプラグインはInternalLibrary
、で何かを編集する場合、再コンパイルをトリガーするだけでMyLibrary
あり、あなたがアクセス権を持っていないので、あなたのアプリケーション全体の再コンパイルをInternalLibrary
。
ネストされた依存関係が多数ある場合、このメカニズムはビルドを大幅に高速化できます。 (これを完全に理解するには、最後にリンクされているビデオをご覧ください)
結論
新しいAndroid Gradleプラグイン3.XXに切り替える場合は、すべてcompile
のimplementation
キーワードを(1 *)に置き換える必要があります。次に、アプリをコンパイルしてテストします。問題がなければ、依存関係に問題があるか、プライベートでアクセスしづらいものを使用した可能性があります。Android GradleプラグインエンジニアJerome Dochezからの提案(1)*)
ライブラリの管理者である場合は、ライブラリapi
のパブリックAPIに必要なすべての依存関係を使用しimplementation
、テストの依存関係または最終ユーザーが使用してはならない依存関係を使用する必要があります。
実装とAPIの違いを示す便利な記事
参照
(これは時間節約のために分割された同じビデオです)
Google I / O 2017-Gradleビルドのスピードアップ方法(フルビデオ)
Google I / O 2017-Gradleビルドのスピードアップ方法(NEW GRADLE PLUGIN 3.0.0 PART ONLY)
Google I / O 2017-Gradleビルドの速度を上げる方法(1 *を参照)
Androidのドキュメント