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のドキュメント