void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) { writer.WriteStartObject(); writer.WritePropertyName("modelId"); writer.WriteStringValue(ModelId); if (Optional.IsDefined(Description)) { writer.WritePropertyName("description"); writer.WriteStringValue(Description); } writer.WritePropertyName("buildMode"); writer.WriteStringValue(BuildMode.ToString()); if (Optional.IsDefined(AzureBlobSource)) { writer.WritePropertyName("azureBlobSource"); writer.WriteObjectValue(AzureBlobSource); } if (Optional.IsCollectionDefined(Tags)) { writer.WritePropertyName("tags"); writer.WriteStartObject(); foreach (var item in Tags) { writer.WritePropertyName(item.Key); writer.WriteStringValue(item.Value); } writer.WriteEndObject(); } writer.WriteEndObject(); }
public async Task <bool> BuildProject(BuildMode mode) { var referencePath = this.GetReferencePath(); if (!Directory.Exists(referencePath)) { Directory.CreateDirectory(referencePath); } foreach (var file in this._referenceFiles) { File.Copy(file, Path.Combine(referencePath, file), true); } foreach (var configuration in this.CurrentProject.BuildConfigurations) { configuration.CopyMonoGameFrameworkDLL(referencePath); } var result = await this.BuildContent(mode); var tempDirectoryPath = this.GetTempDirectoryPath(); if (result) { await Task.Run(async() => { this.CurrentProject.GameSettings.StartupScenePath = Path.ChangeExtension(this.CurrentProject.StartUpSceneAsset?.GetContentPath(), null); var properties = new Dictionary <string, string> { { "Configuration", mode.ToString() } }; var solutionPath = this.GetSolutionPath(); var buildParameters = new Microsoft.Build.Execution.BuildParameters(); var buildRequest = new Microsoft.Build.Execution.BuildRequestData(solutionPath, properties, null, new string[] { "Build" }, null); var buildResult = Microsoft.Build.Execution.BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); result &= buildResult.OverallResult == Microsoft.Build.Execution.BuildResultCode.Success; if (result) { await FileHelper.DeleteDirectory(tempDirectoryPath, SecondsToAttemptDelete, true); FileHelper.CopyDirectory(this.GetBinPath(true), tempDirectoryPath); } else if (!Directory.Exists(tempDirectoryPath)) { Directory.CreateDirectory(tempDirectoryPath); foreach (var file in this._referenceFiles) { File.Copy(file, Path.Combine(tempDirectoryPath, file), true); } } }); } await this._assemblyService.LoadAssemblies(tempDirectoryPath); return(result); }
private string GetMode(BuildMode buildMode) { var enumType = typeof(BuildMode); var memberInfos = enumType.GetMember(buildMode.ToString()); var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType); var valueAttributes = enumValueMemberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); var description = ((DescriptionAttribute)valueAttributes[0]).Description; return(description); }
private void GenerateContentFile(BuildMode mode) { var assets = this.CurrentProject.AssetFolder.GetAllContentAssets(); var dllPath = $@"..\..\{GameplayName}\bin\{mode.ToString()}\{this.CurrentProject.SafeName}.{GameplayName}.dll"; var sourcePath = this.GetSourcePath(); foreach (var configuration in this.CurrentProject.BuildConfigurations) { configuration.GenerateContent(sourcePath, assets, this.CurrentProject.GameSettings, this._serializer, dllPath); } }
/// <summary> /// 编译Xcode(这里是出母包版本) /// </summary> /// <param name="mode"></param> static private (bool, string) BuildIpa(BuildMode mode, string outdir) { bool ret = false; BDEditorApplication.SwitchToiOS(); //DeleteIL2cppCache(); //具体IOS的的配置 PlayerSettings.gcIncremental = true; //PlayerSettings.stripEngineCode = true; // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.iOS) == ManagedStrippingLevel.High) // { // PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.iOS, ManagedStrippingLevel.Low); //} // //文件夹处理 var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}", Application.identifier, mode.ToString())); if (Directory.Exists(outputPath)) { Directory.Delete(outputPath, true); } Directory.CreateDirectory(outputPath); //开始项目一键打包 string[] scenes = { SCENEPATH }; BuildOptions opa = BuildOptions.None; BuildMode realmode = BuildMode.Release; switch (mode) { case BuildMode.UseCurrentConfigDebug: case BuildMode.Debug: { realmode = BuildMode.Debug; opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport; } break; case BuildMode.UseCurrentConfigRelease: case BuildMode.Release: { realmode = BuildMode.Release; opa = BuildOptions.CompressWithLz4HC; } break; } //构建包体 Debug.Log("------------->Begin build<------------"); UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.iOS, opa); Debug.Log("------------->End build<------------"); //检测xcode if (File.Exists(outputPath + "/Info.plist")) { var shellPath = ""; //这里需要判断Editor类型,所以使用u3d的 Application.Platform if (Application.platform == RuntimePlatform.WindowsEditor) { shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.cmd", realmode); } else if (Application.platform == RuntimePlatform.OSXEditor) { shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.shell", realmode); } if (File.Exists(shellPath)) { //执行BuildIpa的shell Debug.Log("即将执行:" + shellPath); ExecuteShell(shellPath); //删除xcode项目 Directory.Delete(outputPath, true); var ipaPath = outputPath + ".ipa"; if (File.Exists(ipaPath)) { ret = true; } else { Debug.LogError("【BDFramework】 not found:" + ipaPath); } } else { //For ci throw new Exception("没找到编译xcode脚本! 后续请配合Jekins/Teamcity出包!"); } EditorUtility.RevealInFinder(outputPath); } else { //For ci throw new Exception("【BDFramework】Package not exsit! -" + outputPath); } return(ret, outputPath); }
/// <summary> /// 打包APK /// </summary> static private (bool, string) BuildAPK(BuildMode mode, string outdir) { bool ret = false; //切换到Android BDEditorApplication.SwitchToAndroid(); //删除il2cpp缓存 //DeleteIL2cppCache(); if (!BDEditorApplication.BDFrameWorkFrameEditorSetting.IsSetConfig()) { //For ci throw new Exception("请注意设置apk keystore账号密码"); } //模式 AndroidConfig androidConfig = null; switch (mode) { case BuildMode.Debug: case BuildMode.UseCurrentConfigDebug: { androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.AndroidDebug; } break; case BuildMode.Release: case BuildMode.UseCurrentConfigRelease: { androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.Android; } break; } //秘钥相关 var keystorePath = IPath.Combine(BApplication.ProjectRoot, androidConfig.keystoreName); if (!File.Exists(keystorePath)) { //For ci throw new Exception("【keystore】不存在:" + keystorePath); } PlayerSettings.Android.keystoreName = keystorePath; PlayerSettings.keystorePass = androidConfig.keystorePass; PlayerSettings.Android.keyaliasName = androidConfig.keyaliasName; PlayerSettings.keyaliasPass = androidConfig.keyaliasPass; Debug.Log("【keystore】" + PlayerSettings.Android.keystoreName); //具体安卓的配置 PlayerSettings.gcIncremental = true; PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto; //PlayerSettings.stripEngineCode = true; // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.Android) == ManagedStrippingLevel.High) // { //PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Android, ManagedStrippingLevel.Low); // } //开启符号表 EditorUserBuildSettings.androidCreateSymbolsZip = true; //不同模式的设置 // switch (mode) // { // case BuildMode.Debug: // { // // } // break; // case BuildMode.Release: // { // // } // break; // } // var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}.apk", Application.identifier, mode.ToString())); //文件夹处理 if (!Directory.Exists(outdir)) { Directory.CreateDirectory(outdir); } if (File.Exists(outputPath)) { File.Delete(outputPath); } //开始项目一键打包 string[] scenes = { SCENEPATH }; BuildOptions opa = BuildOptions.None; switch (mode) { case BuildMode.UseCurrentConfigDebug: case BuildMode.Debug: { opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport; } break; case BuildMode.UseCurrentConfigRelease: case BuildMode.Release: { opa = BuildOptions.CompressWithLz4HC; } break; } //构建包体 Debug.Log("------------->Begin build<------------"); UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.Android, opa); Debug.Log("------------->End build<------------"); //构建出判断 if (File.Exists(outputPath)) { Debug.Log("Build Success :" + outputPath); ret = true; EditorUtility.RevealInFinder(outputPath); } else { //For ci throw new Exception("【BDFramework】Package not exsit! -" + outputPath); } return(ret, outputPath); }
public IBuilderStrategy GetStrategy(BuildMode buildMode) { var strategy = _resolver.Resolve<IBuilderStrategy>(buildMode.ToString()); return strategy; }
private void RenderBuildAndRunning() { EditorGUILayout.LabelField(new GUIContent("Building & Running (" + _currentMode.ToString() + ")", "Building and optionally auto-running builds."), EditorStyles.centeredGreyMiniLabel); EditorGUI.BeginChangeCheck(); _buildTarget = (BuildTarget)EditorGUILayout.EnumPopup(new GUIContent("Build Target", "Which platform to build for."), _buildTarget); if (EditorGUI.EndChangeCheck()) { BuildScriptPrefs.SetBuildTarget(_buildTarget); } EditorGUI.BeginChangeCheck(); _devBuild = EditorGUILayout.Toggle(new GUIContent("Development Build", "Toggle to build as development build."), _devBuild); if (EditorGUI.EndChangeCheck()) { BuildScriptPrefs.SetDevelopmentBuild(_devBuild); } EditorGUI.BeginChangeCheck(); _buildAndRun = EditorGUILayout.Toggle(new GUIContent("Build and Run?", "Whether to auto-run the game after building, if successful."), _buildAndRun); if (EditorGUI.EndChangeCheck()) { BuildScriptPrefs.SetBuildAndRun(_buildAndRun); } // Actual mode pages switch (_currentMode) { case BuildMode.Singleplayer: { OnSingleplayerGUI(); break; } case BuildMode.Client: { OnClientGUI(); break; } case BuildMode.Server: { OnServerGUI(); break; } } // vr mode using (var vrrow = new EditorGUILayout.HorizontalScope()) { GUI.enabled = !Application.isPlaying; var vrSupport = EditorGUILayout.Toggle("VR Mode", PlayerSettings.virtualRealitySupported); if (!Application.isPlaying) { PlayerSettings.virtualRealitySupported = vrSupport; } GUI.enabled = true; // buttons for VR platform definition - easier to access than player settings var supDevices = UnityEngine.XR.XRSettings.supportedDevices; var goodColor = Color.green; var badColor = Color.red; GUI.color = supDevices.Contains("OpenVR") ? goodColor : badColor; if (GUILayout.Button("OpenVR")) { if (supDevices.Contains("OpenVR")) { // do nothing... } else { // add a new array containing only OpenVR var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget); UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "OpenVR" }); } } GUI.color = supDevices.Contains("Oculus") ? goodColor : badColor; if (GUILayout.Button("Oculus")) { if (supDevices.Contains("Oculus")) { // do nothing... } else { // add a new array containing only Oculus var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(this._buildTarget); UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(buildTargetGroup, new string[] { "Oculus" }); } } GUI.color = Color.white; } }
public IBuilderStrategy GetStrategy(BuildMode buildMode) { var strategy = _resolver.Resolve <IBuilderStrategy>(buildMode.ToString()); return(strategy); }
/// <summary> /// 编译Xcode(这里是出母包版本) /// </summary> /// <param name="mode"></param> static public void BuildXCode(BuildMode mode) { //具体IOS的的配置 PlayerSettings.gcIncremental = true; PlayerSettings.stripEngineCode = true; // var outdir = BDApplication.ProjectRoot + "/Build"; var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}", Application.productName, mode.ToString())); //文件夹处理 if (File.Exists(outputPath)) { File.Delete(outputPath); } Directory.CreateDirectory(outputPath); //清空StreamingAsset var android = IPath.Combine(Application.streamingAssetsPath, "Android"); if (Directory.Exists(android)) { Directory.Delete(android, true); } var win = IPath.Combine(Application.streamingAssetsPath, "Windows"); if (Directory.Exists(win)) { Directory.Delete(win, true); } //开始项目一键打包 string[] scenes = { SCENEPATH }; BuildOptions opa = BuildOptions.None; if (mode == BuildMode.Debug) { opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport; } else if (mode == BuildMode.Release) { opa = BuildOptions.CompressWithLz4HC; } BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.iOS, opa); if (File.Exists(outputPath + "/Info.plist")) { Debug.Log("Build Success :" + outputPath + ",后续请配合Jekins出包!"); EditorUtility.RevealInFinder(outputPath); } else { Debug.LogError(new Exception("【BDFRamework】Build Fail! Please Check the log! ")); } }
/// <summary> /// 打包APK /// </summary> static public void BuildAPK(BuildMode mode) { if (!BDEditorApplication.BdFrameEditorSetting.IsSetConfig()) { Debug.LogError("请注意设置apk keystore账号密码"); return; } var absroot = Application.dataPath.Replace("Assets", ""); PlayerSettings.Android.keystoreName = absroot + BDEditorApplication.BdFrameEditorSetting.Android.keystoreName; PlayerSettings.keystorePass = BDEditorApplication.BdFrameEditorSetting.Android.keystorePass; PlayerSettings.Android.keyaliasName = BDEditorApplication.BdFrameEditorSetting.Android.keyaliasName; PlayerSettings.keyaliasPass = BDEditorApplication.BdFrameEditorSetting.Android.keyaliasPass; //具体安卓的配置 PlayerSettings.gcIncremental = true; PlayerSettings.stripEngineCode = true; PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto; // var outdir = BDApplication.ProjectRoot + "/Build"; var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}.apk", Application.productName, mode.ToString())); //文件夹处理 if (!Directory.Exists(outdir)) { Directory.CreateDirectory(outdir); } if (File.Exists(outputPath)) { File.Delete(outputPath); } //清空StreamingAsset var ios = IPath.Combine(Application.streamingAssetsPath, "iOS"); if (Directory.Exists(ios)) { Directory.Delete(ios, true); } var win = IPath.Combine(Application.streamingAssetsPath, "Windows"); if (Directory.Exists(win)) { Directory.Delete(win, true); } //开始项目一键打包 string[] scenes = { SCENEPATH }; BuildOptions opa = BuildOptions.None; if (mode == BuildMode.Debug) { opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport; } else if (mode == BuildMode.Release) { opa = BuildOptions.CompressWithLz4HC; } UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.Android, opa); if (File.Exists(outputPath)) { Debug.Log("Build Success :" + outputPath); EditorUtility.RevealInFinder(outputPath); } else { Debug.LogError(new Exception("Build Fail! Please Check the log! ")); } }
public string GetCompiledContentPath(string sourcePath, BuildMode mode) { return(Path.Combine(sourcePath, this.Platform.ToString(), "bin", mode.ToString(), "Content")); }