
ここ最近は雑用係としていろいろな事をやっております。
その中で、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 件のコメント:
コメントを投稿