skip to content
私的歌詞倉庫

GitHub ActionsでAndroidアプリのビルドを高速化する

/ 5 min read

Updated:
Table of Contents

はじめに

業務でAndroidアプリのCIが遅いという話になり、色々調査してかなり高速化できたので試したことを紹介します。

色々やったのですが一番効果が大きかったのがGradleのConfiguration CacheBuild Cacheでした。

高速化の前に

Android公式でビルドやCIを高速化するためのドキュメントがあり、そちらを参考にしました。

まずは公式ドキュメントを参照するのをおすすめします。

ビルド速度を最適化する  |  Android Studio  |  Android Developers

CI 機能  |  Test your app on Android  |  Android Developers

試したこと

前述したとおり、GradleのBuild CacheとConfiguration Cacheを設定すると非常に高速化できました。

この設定を有効にするにはgradle.propertiesに設定を追加することで有効化できます。

org.gradle.configuration-cache=true
org.gradle.caching=true

もしくはビルド時のコマンドで指定することでも有効化できます。

$ ./gradlew hogehoge --configuration-cache --build-cache

Build Cache

Build Cacheが有効になってキャッシュヒットするとCI上でFROM-CACHEがログとして出てきます。

> Task hogefuga FROM-CACHE

Configuration Cache

Configuration CacheとはGradleのステップであるConfigurationフェイズをキャッシュです。

このConfigurationフェイズではビルドするためにタスクのタスクグラフなどを決定しているようです。詳しくはこちら

Configuration Cacheを有効化するときに注意点がいくつかあります。

使用しているプラグインがConfiguration Cacheに対応している必要があります。

自分は、プラグイン自体は対応していたのですが、Gradleの中で独自に定義していたcommit hash値を取得する箇所でエラーになっていたのでこちらの記事を参考に置き換えをしました。

android - After updating gradle to 8.2.1 problem with configuration cache occurs - Stack Overflow

次にGitHub Actions特有の問題ですが、Configuration CacheをCI上でキャッシュするには、setup-gradlecache-encryption-keyにキーをセットしないとキャッシュしてくれません。

セキュリティ上(このキャッシュには認証情報やその他機密情報が含まれる可能性があるため)このような仕組みになっているようです。

- uses: gradle/actions/setup-gradle@v5
with:
gradle-version: "8.6"
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} ## ここ

キーを生成するにはopensslコマンドで生成できるので、これをCIのSecretsにセットして使います。

$ openssl rand -base64 16

これらの設定をすることで、20%以上高速化することができました。

終わりに

Gradleのキャッシュを有効化することでGitHub Actions上でのビルド時間を高速化する方法を紹介しました。

RailsやGo、Vueなどをやっていた身からすると、ライブラリをキャッシュするくらいしかやってこなかったのでJava(Kotlin)以外にもGradle自体のキャッシュも有効であることを初めて知りました。

設定は簡単なのでぜひやってみて下さい。

参考文献