🎉

Azure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドできなかった話

2023/04/07に公開

Azure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドを試みて、挫折した紆余曲折を残しておきます。
このドキュメントにはAzure PipelinesのMicrosoft ホステッド エージェントでUnity Androidビルドを試みて

  • ぶち当たった問題
  • 解決できた問題
  • 解決できなかった問題

を記載しています。

Azure Pipelinesや、Microsoft ホステッド エージェントがどういった物か、ということは記載していません。

ビルド対象

学習のため、凝ったことはせず下記プロジェクトをapkファイルとして出力することを目指しました。
https://github.com/Hyperparticle/nodulus

問題1:Android SDKが見つからない

問題

https://qiita.com/akiojin/items/149705a090f60211a4dd を参考にAndroidビルド用に修正し、Unity Tools for Azure DevOpsを利用して以下のStepを持つパイプラインを作成しました。
実行したところ4. ビルドでエラーが発生しました。

  1. プロジェクトのUnityバージョンを取得
  2. 該当バージョンのUnityをインストール
  3. ライセンスのアクティベート
  4. ビルド

エラー内容

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などはインストールしないようです。
https://github.com/microsoft/unitysetup.powershell/issues/239

解決方法

  1. OSの変更
    https://learn.microsoft.com/ja-jp/azure/devops/pipelines/ecosystems/android?view=azure-devops
    をみるとMacOSでAndroidアプリをビルドしているので、OSをWindowsからMacに変更

  2. シンボリックリンクを作成
    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は設定されません。
https://github.com/Dinomite-Studios/unity-azure-pipelines-tasks/blob/e87b8c87fa5be4f94144ada68611eda17e421938/Tasks/UnityActivateLicense/UnityActivateLicenseV1/post-unity-activate-license.ts

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