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

ビルド キャッシュとは、Android plugin for Gradle でプロジェクトをビルドするときに生成される特定の出力(パッケージ化していない 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 タスクは利用できなくなります。また、ビルド キャッシュを無効にしても、キャッシュ ディレクトリは自動で削除されません。そのため、ビルド キャッシュを再び有効化するときのためにキャッシュ ファイルを保持しておくことができます。