1. 概要

Gradle は、プロジェクトのビルドライフサイクルを管理するために開発者によって一般的に使用されます。 これは、すべての新しいAndroidプロジェクトのビルドツールのデフォルトの選択肢です。

このチュートリアルでは、プロジェクトの配布を容易にする付属のユーティリティであるGradleWrapperについて学習します。

2. Gradleラッパー

Gradleベースのプロジェクトを構築するには、Gradleをマシンにインストールする必要があります。 ただし、インストールされているバージョンがプロジェクトのバージョンと一致しない場合は、多くの非互換性の問題が発生する可能性があります。

Gradle Wrapperは、略して Wrapper とも呼ばれ、この問題を解決します。 宣言されたバージョンでGradleタスクを実行するスクリプトです。 宣言されたバージョンがインストールされていない場合、Wrapperは必要なバージョンをインストールします。

Wrapperの主な利点は、次のことができることです。

  • 最初にGradleをインストールしなくても、任意のマシンでWrapperを使用してプロジェクトをビルドします
  • Gradleのバージョンを修正します。 これにより、CIパイプライン上で再利用可能でより堅牢なビルドが実現します
  • ラッパーの定義を変更することで、新しいGradleバージョンに簡単にアップグレードできます

次のセクションでは、Gradleをローカルにインストールする必要があるを必要とするGradleタスクを実行します。

2.1. ラッパーファイルの生成

Wrapperを使用するには、いくつかの特定のファイルを生成する必要があります。 これらのファイルは、ラッパーと呼ばれる組み込みのGradleタスクを使用して生成します。 これらのファイルを生成する必要があるのは1回だけであることに注意してください。

それでは、プロジェクトディレクトリでwrapperタスクを実行してみましょう。

$ gradle wrapper

このコマンドの出力を見てみましょう。

これらのファイルが何であるかを見てみましょう:

  • gradle-wrapper.jar には、gradle-wrapper.propertiesファイルで指定されたGradleディストリビューションをダウンロードするためのコードが含まれています
  • gradle-wrapper.properties には、Wrapperランタイムプロパティが含まれています。最も重要なのは、現在のプロジェクトと互換性のあるGradleディストリビューションのバージョンです。
  • gradlew は、ラッパーを使用してGradleタスクを実行するスクリプトです。
  • gradlew.bat は、Windowsマシン用のgradlewと同等のバッチスクリプトです。

デフォルトでは、wrapper タスクは、現在マシンにインストールされているGradleバージョンのラッパーファイルを生成します。 必要に応じて、別のバージョンを指定できます。

$ gradle wrapper --gradle-version 6.3

ラッパーファイルをGitHubなどのソース管理システムにチェックインすることをお勧めします。 このようにして、他の開発者がGradleをインストールしなくてもプロジェクトを実行できるようにします。

2.2. ラッパーを使用したGradleコマンドの実行

gradle を次のように置き換えることで、Wrapperで任意のGradleタスクを実行できます。 gradlew

使用可能なタスクを一覧表示するには、gradlewtasksコマンドを使用できます。

$ gradlew tasks

出力を見てみましょう:

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-wrapper'.
components - Displays the components produced by root project 'gradle-wrapper'. [incubating]
dependencies - Displays all dependencies declared in root project 'gradle-wrapper'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-wrapper'.
dependentComponents - Displays the dependent components of components in root project 'gradle-wrapper'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'gradle-wrapper'. [incubating]
outgoingVariants - Displays the outgoing variants of root project 'gradle-wrapper'.
projects - Displays the sub-projects of root project 'gradle-wrapper'.
properties - Displays the properties of root project 'gradle-wrapper'.
tasks - Displays the tasks runnable from root project 'gradle-wrapper'.

ご覧のとおり、出力はgradleコマンドを使用してこのタスクを実行した場合と同じです。

3. 一般的な問題

それでは、ラッパーを使用するときに直面する可能性のあるいくつかの一般的な問題を見てみましょう。

3.1. すべてのJarファイルを無視するグローバル.gitignore

一部の組織では、開発者がjarファイルをソース管理システムにチェックインすることを許可していません。 通常、このようなプロジェクトでは、グローバル .gitignore ファイルに、すべてのjarファイルを無視するルールがあります。 したがって、gradle-wrapper.jarファイルはgitリポジトリにチェックインされません。 このため、ラッパータスクは他のマシンでは実行できません。 このような場合、gradle-wrapper.jarファイルを強制的にgitに追加する必要があります

git add -f gradle/wrapper/gradle-wrapper.jar

同様に、jarファイルを無視するプロジェクト固有の.gitignoreファイルがある場合があります。 上記のように、 .gitignore ルールを緩和するか、ラッパーjarファイルを強制的に追加することで修正できます。

3.2. ラッパーフォルダがありません

ラッパーベースのプロジェクトをチェックインするときに、gradleフォルダー内にあるwrapperフォルダーを含めるのを忘れる場合があります。 ただし、上記で説明したように、wrapperフォルダーにはgradle-wrapper.jargradle-wrapper.properties。の2つの重要なファイルが含まれています。

これらのファイルがないと、WrapperでGradleタスクを実行するときにエラーが発生します。 したがって、ラッパーフォルダをソース管理システムにチェックインする必要があります。

3.3. ラッパーファイルを削除しました

Gradleベースのプロジェクトには、Gradleタスクを高速化するためのキャッシュを格納する.gradleフォルダーが含まれています。 時々、キャッシュをクリアする必要があります Gradleビルドの問題をトラブルシューティングするため。 通常、.gradleフォルダー全体を削除します。 しかし、ラッパーを間違える可能性があります gradle フォルダー .gradle フォルダとそれも削除します。 その後、WrapperでGradleタスクを実行しようとすると、間違いなく問題が発生します。

ソースから最新の変更をプルすることでこの問題を解決できます。 または、ラッパーファイルを再生成することもできます。

4. 結論

このチュートリアルでは、GradleWrapperとその基本的な使用法について学習しました。 また、GradleWrapperを使用するときに直面する可能性のあるいくつかの一般的な問題についても学びました。

いつものように、GitHubで生成されたGradleWrapperファイルを使用してプロジェクトを確認できます。