GitHub ActionsでAndroidアプリのビルドを高速化する
/ 5 min read
Updated:Table of Contents
はじめに
業務でAndroidアプリのCIが遅いという話になり、色々調査してかなり高速化できたので試したことを紹介します。
色々やったのですが一番効果が大きかったのがGradleのConfiguration CacheとBuild 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-cacheBuild Cache
Build Cacheが有効になってキャッシュヒットするとCI上でFROM-CACHEがログとして出てきます。
> Task hogefuga FROM-CACHEConfiguration 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-gradle でcache-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自体のキャッシュも有効であることを初めて知りました。
設定は簡単なのでぜひやってみて下さい。
参考文献
- Configuration Cache
- Build Cache
- ビルド速度を最適化する | Android Studio | Android Developers
- CI 機能 | Test your app on Android | Android Developers
- Gradle Build Lifecycle
- android - After updating gradle to 8.2.1 problem with configuration cache occurs - Stack Overflow
- actions/docs/setup-gradle.md at main · gradle/actions