YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【Unity】GitLabCIでAndroidBuildがうまくいかない不具合の解消

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
不具合にぶつかったので共有する。

目次


前提条件


Unity 2021.3.15f1前提。
私の使用環境は
- Gitlab Runner - Windows 11

不具合の焼成


以下のようなエラーメッセージが表示され、ビルドが失敗する。

Running Gradle task 'assembleRelease'... FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':app:mergeReleaseResources'.

このメッセージは特定のリソースが見つからないというもので、
通常ならGradleからリソースが適切に参照されていないため、Gradleの修正で解決できるはずです。

しかし、今回私が報告する不具合は、バッチファイルやGUIからのビルドが問題なく行える状況で、
GitlabからCIを実行した際にのみ発生する場合の話です。

一旦、GUI上などからBuildしてみた場合に同様の不具合が発生する場合は今回の対策は対象外になるので注意。

GitlabからCIを回したときにのみにだけ発生。
エラーメッセージは、Firebaseにて追加される.aarファイルが見つからない旨の表示がされる。

原因


私も完全には確認できていないのですが、
GitlabCIのユーザー権限レベルが低いか、
または、Gitllabにて環境変数が上書きされてしまい
の結果、Gradleからの.aarファイルへのパスが変更されてしまうと考えられそうだ。

↓Unityのフォーラムにて見つけた同様の不具合。
forum.unity.com

解決策


私の場合は、BatchModeでの実行をやめることで問題を解決。
もう少しまともな解決策を検討するなら、
環境変数まわりで何が上書きされているかの調査や

より深堀りするには、どの環境変数が上書きされているかの調査や、
ユーザー権限レベルがどのように設定されているかを確認する必要がありそうです。

UnityのAndroidプロジェクトは一旦Gradleプロジェクトにエクスポート出来るので
一旦エクスポートしてしまって、更にGradleのBuildをCI側からする方法なども検討出来るかも知れない。

まとめ


以上です。
(更新してなかったので久々のブログ更新)

ちなみに


Unity2021.3.15では次のパスに.gradleという名前でGradleプロジェクトの中間ファイルが生成されるようです。
(他バージョンでは異なる場合があるのでバージョンが違うなら要確認)

Library\Bee\Android\Prj\IL2CPP\Gradle

GRADLE_USER_HOMEをその.gradleに指定してみたりもしたが、
何らかの理由でデッドロックしてしまいBuildが終わらなくなった。
少なくとも単純にGRADLE_USER_HOMEの指定で問題は解決しなさそうだ。