using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor;
public class Build {
enum Config { Unknown, Development, Release, Distribution, } private static string _bakDefines; private static string _buildPath = "<%= output %>"; // Android public static void PerformBuild_android() { BuildTargetGroup group = BuildTargetGroup.Android; Debug.Log("build start"); string[] scenes = GetAllScenes(); //update_symbols(); string error = BuildPipeline.BuildPlayer(scenes, "build.apk", BuildTarget.Android, BuildOptions.None); if (string.IsNullOrEmpty(error)) { Debug.Log("build end"); EditorApplication.Exit(0); } else { // build failed Debug.Log(error); EditorApplication.Exit(1); } } // iOS public static void PerformBuild_ios() { BuildTargetGroup group = BuildTargetGroup.iOS; Debug.Log("build start"); string[] scenes = GetAllScenes(); BuildOptions opt = BuildOptions.SymlinkLibraries; Config tgt = (UnityEditorInternal.InternalEditorUtility.inBatchMode) ? get_config() : Config.Development; if (tgt == Config.Unknown) { Debug.LogError("TARGET UNKNOWN"); EditorApplication.Exit(1); } switch (tgt) { case Config.Development: opt |= BuildOptions.Development; PlayerSettings.strippingLevel = StrippingLevel.Disabled; PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.SlowAndSafe; break; case Config.Release: //opt |= BuildOptions.Development; //PlayerSettings.strippingLevel = StrippingLevel.StripByteCode; // リフレクション使ってる箇所で死ぬ PlayerSettings.strippingLevel = StrippingLevel.Disabled; PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.FastButNoExceptions; break; case Config.Distribution: //PlayerSettings.strippingLevel = StrippingLevel.StripByteCode; PlayerSettings.strippingLevel = StrippingLevel.Disabled; PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.FastButNoExceptions; break; } push_symbols(group); // update_symbols(group); string error = BuildPipeline.BuildPlayer(scenes, _buildPath, BuildTarget.iOS, opt); // pop_symbols(group); // if (string.IsNullOrEmpty(error)) { Debug.Log("build end"); EditorApplication.Exit(0); } else { // build failed Debug.Log(error); EditorApplication.Exit(1); } } private static string[] GetAllScenes() { string[] allScene = new string[EditorBuildSettings.scenes.Length]; int i = 0; foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { allScene[i++] = scene.path; } return allScene; } private static List<string> get_argv(string name) { string[] args = System.Environment.GetCommandLineArgs(); List<string> argv = new List<string>(); for (int i = 0; i < args.Length; ++i) { string v = args[i]; if (v == name && i < args.Length - 1) { argv.Add(args[i+1]); } } return argv; } private static void push_symbols(BuildTargetGroup group) { _bakDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group); } private static void pop_symbols(BuildTargetGroup group) { PlayerSettings.SetScriptingDefineSymbolsForGroup(group, _bakDefines); } private static void update_symbols(BuildTargetGroup group) { List<string> symbols = get_argv("-symbol"); string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group); Debug.Log(string.Format("OLD: {0}", defines)); foreach (string sym in symbols) { defines += string.Format(";{0}", sym); } Debug.Log(string.Format("NEW: {0}", defines)); PlayerSettings.SetScriptingDefineSymbolsForGroup(group, defines); } private static Config get_config() { List<string> tgts = get_argv("-config"); foreach (string t in tgts) { if (t == "development") return Config.Development; if (t == "release") return Config.Release; if (t == "distribution") return Config.Distribution; } return Config.Unknown; }
}