ビルド キャッシュによるクリーンビルドの高速化

ビルド キャッシュとは、Gradle 用の Android プラグインでプロジェクトをビルドするときに生成される特定の出力(パッケージ化していない AAR、DEX 変換前のリモートの依存先)を保存する機能です。このようにキャッシュされたファイルは、ビルドシステムで以降のビルドをする際に再利用できるため、再生成の手間が省け、クリーンビルドの時間が大幅に短縮されます。継続的インテグレーション サーバー上および 1 台のローカルマシンで複数のビルドプロセスを実行するときも、ビルド キャッシュは有効です。

Android プラグイン 2.3.0 以上を使用しているプロジェクトでは、(明示的にビルド キャッシュを無効にしていない限り)デフォルトでビルド キャッシュが有効になっています。ただし、次のいずれかのビルド プロパティを以下とは異なる設定にしている場合は、事前 DEX 変換されたリモート依存先のキャッシュがプラグインによって無効化されます。(これらは各プロパティの既定値なので、特に宣言をしていなければ、事前 DEX 変換されたリモートの依存先のキャッシュは有効になっています。)

android {
  defaultConfig {
    // If you do enable multidex, you must also set
    // minSdkVersion to 21 or higher.
    multiDexEnabled false
  }
  buildTypes {
    <build-type> {
      minifyEnabled false
    }
  }
  dexOptions {
    preDexLibraries true
  }
  ...
}
...

注: プロジェクトでバージョン 2.2.2 または 2.2.3 のAndroid プラグインを使用している場合は、試験運用版のビルド キャッシュ機能が使用されます。プロジェクトをアップデートして、最新バージョンの Android プラグインを使用してください。

ビルドを高速化するためのその他の詳細情報については、ビルド速度の最適化のページをご覧ください。

ビルド キャッシュの保存場所の変更

Android プラグインはデフォルトで <user-home>/.android/build-cache/ にキャッシュを保存します。次のパス変数(優先度の高いものから表示)のいずれかを設定している場合は、Android Studio によって <path-variable>/.android/build-cache/ が代わりに使用されます。

  • ANDROID_SDK_HOME
  • user.home
  • HOME

Android プラグインは既定の場所にビルド キャッシュを保存するため、Android プラグイン 2.3.0 以上を使用する(かつビルド キャッシュを無効にしていない)すべてのプロジェクトでキャッシュ済みのファイルを共有できます。たとえば、あるプロジェクトで事前 DEX 変換した依存ファイルをビルドしてキャッシュした場合、それを別のプロジェクトで共有ビルド キャッシュからコピーして利用できるため、改めて事前 DEX 変換をする必要がありません。

プロジェクトで独自のキャッシュを生成したい場合(かつ、それを他のプロジェクトで共有したくない場合)は、そのプロジェクトの gradle.properties ファイルで次のように独自のキャッシュ保存場所を指定します。

// You can specify either an absolute path or a path relative
// to the gradle.properties file.
android.buildCacheDir=<path-to-directory>

ファイルを編集して [Sync Project] をクリックすると、新しいキャッシュ ディレクトリが作成されます。

注: ビルド キャッシュ用のディレクトリを <project-root>/build/ または <project-root>/<module-root>/build/ ディレクトリ内に指定しないでください。これらのディレクトリは、Gradle で clean タスクの実行時に削除されます。

キャッシュを他の特定のプロジェクトとのみ共有したい場合は、それらのプロジェクトの gradle.properties ファイル内で同じビルド キャッシュ ディレクトリを指定します。

ビルド キャッシュの削除

Android プラグインの clean タスクでプロジェクトの build/ ディレクトリを削除するのと同様に、cleanBuildCache タスクを実行してプロジェクトのビルド キャッシュを削除できます。プロジェクトで既定以外のディレクトリをビルドキャッシュ用に指定している場合は、そのプロジェクトでこのタスクを実行しても指定した場所にあるキャッシュしか削除されません(既定の場所にある共有キャッシュは残ります)。このタスクを実行するには、メニューバーで [View] > [Tool Windows] > [Terminal] を選択して、次のいずれかのコマンドを実行します。

  • Windows の場合:
    gradlew cleanBuildCache
  • Mac または Linux の場合:
    ./gradlew cleanBuildCache

注: ビルド キャッシュを無効にしている場合は、cleanBuildCache タスクを利用できません。

ビルド キャッシュの無効化

ビルド キャッシュによりクリーンビルドの速度が向上するため、この機能を無効化することは推奨されません。それでもプロジェクトでビルド キャッシュを無効にしたい場合は、そのプロジェクトの gradle.properties ファイルに次の内容を追加します。

// To re-enable the build cache, either delete the following
// line or set the property to 'true'.
android.enableBuildCache=false

ファイルを編集して [Sync Project] をクリックすると、変更が適用されます。

注: ビルド キャッシュを無効化したあとは、Android プラグインで android.buildCacheDir が無視されるため、cleanBuildCache タスクは利用できなくなります。また、ビルド キャッシュを無効にしても、キャッシュ ディレクトリは自動で削除されません。よって、ビルド キャッシュを再び有効化するときのためにキャッシュ ファイルを保持しておくことができます。