Azure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドできなかった話
Azure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドを試みて、挫折した紆余曲折を残しておきます。
このドキュメントにはAzure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドを試みて
- ぶち当たった問題
- 解決できた問題
- 解決できなかった問題
を記載しています。
Azure Pipelinesや、Microsoft ホステッド エージェントがどういった物か、ということは記載していません。
ビルド対象
学習のため、凝ったことはせず下記プロジェクトをapkファイルとして出力することを目指しました。
問題1:Android SDKが見つからない
問題
https://qiita.com/akiojin/items/149705a090f60211a4dd を参考にAndroidビルド用に修正し、Unity Tools for Azure DevOpsを利用して以下のStepを持つパイプラインを作成しました。
実行したところ4. ビルドでエラーが発生しました。
- プロジェクトのUnityバージョンを取得
- 該当バージョンのUnityをインストール
- ライセンスのアクティベート
- ビルド
エラー内容
Android SDK was not installed with Unity at ~
JDK was not installed with Unity at ~
Android NDK was not installed with Unity at ~
Android SDK、NDKおよびJDKが見つからないエラーでした。Unity Setup Powershell Moduleを用いてUnityをインストールしたのですが、このツールはAndroid SDKなどはインストールしないようです。
解決方法
-
OSの変更
https://learn.microsoft.com/ja-jp/azure/devops/pipelines/ecosystems/android?view=azure-devops
をみるとMacOSでAndroidアプリをビルドしているので、OSをWindowsからMacに変更 -
シンボリックリンクを作成
UnityのSDK、NDK、OpenJDKのデフォルトパスから、プレインストールされているSDK類へシンボリックリンクを作成します。
- script: sudo ln -s $JAVA_HOME_8_X64 /Applications/Unity/Hub/Editor/$(UnityGetProjectVersion.projectVersion)/PlaybackEngines/AndroidPlayer/OpenJDK
- script: sudo ln -s $ANDROID_HOME /Applications/Unity/Hub/Editor/$(UnityGetProjectVersion.projectVersion)/PlaybackEngines/AndroidPlayer/SDK
- script: sudo ln -s $ANDROID_HOME/ndk/19.2.5345600 /Applications/Unity/Hub/Editor/$(UnityGetProjectVersion.projectVersion)/PlaybackEngines/AndroidPlayer/NDK
問題2:MacOSでUnity Activate Licenseがこける
問題
問題1を解決したパイプラインを実行したところ、今まで動いていたUnity Tools for Azure DevOpsのUnity Activate Licenseがエラーになりました。
エラー内容
Assertion failed on expression: '!projectPath.empty()'
[Package Manager] Done resolving packages with errors in 0.21s seconds
Failed to resolve packages: The file [/Applications/Unity/Hub/Editor/2020.2.4f1/Unity.app/Contents/Packages/manifest.json] cannot be found. No packages loaded.
プロジェクトのパスが正しく設定おらずmanifest.jsonが見つからないと怒っている様子。
解決方法
単純にタスクUnity Activate LicenseのInputであるunityProjectPathを設定すればいいと思いきや、これでは解消されませんでした。
2023/4時点では、InputとしてunityProjectPathは定義されているものの実行コマンドに-projectPathは設定されません。
Unity Tools for Azure DevOpsでのアクティベートは諦めて代わりに以下のステップを追加しました。
ライセンスのアクティベート
- script: /Applications/Unity/Hub/Editor/$(UnityGetProjectVersion.projectVersion)/Unity.app/Contents/MacOS/Unity -batchmode -quit -nographics -username '$(Unity.UserName)' -password '$(Unity.Password)' -serial '$(Unity.SerialKey)' -logfile '$(System.DefaultWorkingDirectory)/Logs/UnityActivationLog_$(Build.BuildId).log' -projectPath '$(System.DefaultWorkingDirectory)'
displayName: 'Unity License Activations.'
ライセンスの返却
- script: /Applications/Unity/Hub/Editor/$(UnityGetProjectVersion.projectVersion)/Unity.app/Contents/MacOS/Unity -batchmode -quit -nographics -username '$(Unity.UserName)' -password '$(Unity.Password)' -returnlicense -logfile '$(System.DefaultWorkingDirectory)/Logs/UnityReturnLicenseLog_$(Build.BuildId).log' '$(System.DefaultWorkingDirectory)'
displayName: 'Return Unity License.'
condition: always()
以上でライセンスのアクティベートは実行できるようになりました。
問題3:Android NDKが見つからない
ようやく問題1が解消できたか確認できたわけですが、SDKとJDKが見つからないというエラーは解消できたものの以下のNDKが見つからないエラーは解消されていませんでした。
Android NDK was not installed with Unity at ~
NDKのバージョンを変えてみたりはしたのですが、結局解消できずここで挫折、Azure Virtual Machine Scale Set エージェントを使用する方針に切り替えました。
Discussion