ここ最近は雑用係としていろいろな事をやっております。
その中で、UnityをJenkinsでの自動ビルドに対応させるというのがありまして、
iPhoneアプリ、Androidアプリ共に自動的にUnityで書いたコードからビルド出来るようにするために、
バッチモードでのビルドスクリプトを書きました。
バッチスクリプト
UnityのソースコードはC#で書いているので、UnityのバッチスクリプトもC#で書きます。
using UnityEngine; using UnityEditor; using System.Collections; public class BatchBuild { private static string[] scenes = GetScenes(); private static string companyName = "SHONAN SHACHU"; private static string productName = "Unity Sample Project"; private static string bundleVersion = "1.0.0"; private static string keystorePath = "/Users/jenkins/.android/debug.keystore"; private static string keystorePass = "android"; private static string keyaliasName = "androiddebugkey"; private static string keyaliasPass = "android"; [UnityEditor.MenuItem("Tools/Build Project AllScene")] public static void iOSDevelopmentBuild() { iOSBuild(true); } public static void AndroidDevelopmentBuild() { AndroidBuild(true); } private static bool iOSBuild(bool isDebug) { EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.iPhone ); BuildOptions opt = BuildOptions.SymlinkLibraries; if (isDebug) { opt |= BuildOptions.Development|BuildOptions.ConnectWithProfiler|BuildOptions.AllowDebugging; } PlayerSettings.companyName = companyName; PlayerSettings.productName = productName; PlayerSettings.bundleIdentifier = "com.shonanshachu.UnitySampleProject"; PlayerSettings.bundleVersion = bundleVersion; PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation; PlayerSettings.allowedAutorotateToPortrait = true; PlayerSettings.allowedAutorotateToPortraitUpsideDown = true; PlayerSettings.allowedAutorotateToLandscapeRight = true; PlayerSettings.allowedAutorotateToLandscapeLeft = true; PlayerSettings.statusBarHidden = true; PlayerSettings.iOS.applicationDisplayName = productName; string errorMsg = BuildPipeline.BuildPlayer(scenes, "bin/ios", BuildTarget.iPhone, opt); if(string.IsNullOrEmpty(errorMsg)) { Debug.Log("Build iOS succeeded."); return true; } Debug.Log("Build iOS ERROR!"); Debug.LogError(errorMsg); return false; } private static bool AndroidBuild(bool isDebug) { EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.Android ); BuildOptions opt = BuildOptions.None; if (isDebug) { opt |= BuildOptions.Development|BuildOptions.ConnectWithProfiler|BuildOptions.AllowDebugging; } PlayerSettings.companyName = companyName; PlayerSettings.productName = productName; PlayerSettings.bundleIdentifier = "com.shonanshachu.UnitySampleProject"; PlayerSettings.bundleVersion = bundleVersion; PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation; PlayerSettings.allowedAutorotateToPortrait = true; PlayerSettings.allowedAutorotateToPortraitUpsideDown = true; PlayerSettings.allowedAutorotateToLandscapeRight = true; PlayerSettings.allowedAutorotateToLandscapeLeft = true; PlayerSettings.Android.keystoreName = keystorePath; PlayerSettings.Android.keystorePass = keystorePass; PlayerSettings.Android.keyaliasName = keyaliasName; PlayerSettings.Android.keyaliasPass = keyaliasPass; PlayerSettings.iPhoneBundleIdentifier = productName; PlayerSettings.statusBarHidden = true; PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel8; string errorMsg = BuildPipeline.BuildPlayer(scenes, "bin/android/UnityNoahSDKSample.apk", BuildTarget.Android, opt); if(string.IsNullOrEmpty(errorMsg)) { Debug.Log("Build Android succeeded"); return true; } Debug.Log("Build Android failed"); Debug.LogError(errorMsg); return false; } private static string[] GetScenes() { ArrayList levels = new ArrayList(); foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { if(scene.enabled) { levels.Add(scene.path); } } return (string[]) levels.ToArray(typeof(string)); } }
コマンドラインビルド
最後に、Unityのバッチモードでビルドするには、コマンドラインから、/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -quit -projectPath "${UNITY_PROJECT_PATH}" -executeMethod BatchBuild.BuildAndroidDevelopmentと実行するとバッチモードでビルド出来ます。
ちなみに、Androidはapkファイルで出来ますが、iOSはプロジェクトが作成されるので、
ここから、xcodebuildでipaファイルまで作成します。
その方法は 【iPhone】Jenkins CIで自動ビルド を参考にしてください。
0 件のコメント:
コメントを投稿