1. ホーム
  2. android

[解決済み] Gradleの実装とAPIの設定

2022-03-16 09:43:20

質問

との違いを知りたいのですが。 apiimplementation の設定を変更し、依存関係を構築しています。
ドキュメントには、以下のように書かれています。 implementation の方がビルド時間が長いのですが。 これを見ると コメント という質問がありましたが、本当でしょうか?
私はGradleの専門家ではないので、どなたか助けていただけると幸いです。私は ドキュメント が、わかりやすい解説があればと思い質問させていただきました。

どのように解決するのですか?

グラドル compile キーワードは非推奨となり、代わりに apiimplementation キーワードで依存関係を設定します。

使用方法 api は、非推奨の compile であるため、すべての compileapi を選択すると、いつもと同じように動作します。

を理解するために 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 の代わりに apiMyLibrary :

dependencies {
    implementation project(':InternalLibrary')
}

を呼び出すことができなくなります。 InternalLibrary.giveMeAString() を追加しました。

このようなボックス化戦略により、Android Gradleプラグインは、もしあなたが InternalLibrary のリコンパイルのみをトリガーする必要があります。 MyLibrary ではなく にアクセスできないため、アプリ全体の再コンパイルが必要になります。 InternalLibrary .

ネストされた依存関係がたくさんある場合、このメカニズムによってビルドを大幅にスピードアップすることができます。 (最後にリンクしているビデオを見て、このことを十分に理解してください)

結論

  • 新しいAndroid Gradleプラグイン3.X.Xに切り替えたとき、あなたのすべての compileimplementation キーワード (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 I/O 2017 - Gradleビルドを高速化する方法(参照元 1 *)

Androidドキュメント