概要
Unity で Android ビルドをしていたスクリプトが Unity 2018 から Unity 2019 にアップデートしたときに動かなくなってしまったため修正しました。
Android ビルドは一度 Gradle プロジェクトを出力するビルドパイプラインにしています。
Unity 2018 のビルドスクリプト
Gradle プロジェクトを出力するコード部分の抜粋です。
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
// 実行
var buildReport = BuildPipeline.BuildPlayer(
sceneList, //!< ビルド対象シーンリスト
Path.Combine(Directory.GetCurrentDirectory(), AndroidBuildDirName), //!< 出力先
BuildTarget.Android, //!< ビルド対象プラットフォーム
BuildOptions.AcceptExternalModificationsToPlayer |
BuildOptions.Development //!< ビルドオプション
);
このコードを実行すると指定の出力先に Gradle プロジェクトができていました。
Unity 2019 のビルドスクリプト
同じスクリプトを Unity 2019 で実行したところ、BuildPipeline.BuildPlayer
実行時に InvalidOperationException: The build target does not support build appending.
というエラーがでて実行できなかった。
以下のフォーラムを参考に、
-
BuildOptions.AcceptExternalModificationsToPlayer
のオプション指定を削除 - かわりに
EditorUserBuildSettings.exportAsGoogleAndroidProject = true;
の設定を追加
しました。
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
EditorUserBuildSettings.exportAsGoogleAndroidProject = true;
// 実行
var buildReport = BuildPipeline.BuildPlayer(
sceneList, //!< ビルド対象シーンリスト
Path.Combine(Directory.GetCurrentDirectory(), AndroidBuildDirName), //!< 出力先
BuildTarget.Android, //!< ビルド対象プラットフォーム
BuildOptions.Development //!< ビルドオプション
);
無事に実行でき、指定の出力先に Gradle プロジェクトができていました。
また、Unity 2018 のときと出力されるGradle プロジェクトのディレクトリ構成が変わっています。これはディレクトリ構成確認して gradle 実行位置を修正をすることで解決しました。生成されている local.properties
に UnityEditor が同梱する SDK, NDK のパスが指定されるようになって CI のメンテナンスが楽になりそうな印象。
参考
- フォーラム
- BuildOptions.AcceptExternalModificationsToPlayer
- https://docs.unity3d.com/ja/current/ScriptReference/BuildOptions.AcceptExternalModificationsToPlayer.html
- Unity 2018 から変更があるように見えないため、実行時エラーになったのはなんでだろうと思っている。
- EditorUserBuildSettings.exportAsGoogleAndroidProject