/// <summary> /// Displays an error dialog if there is an issue that would prevent a build from succeeding. /// </summary> /// <returns>True if all prerequisites are met, or false if one failed.</returns> public static bool CheckBuildPrerequisites() { if (!Directory.Exists(AndroidSdkManager.AndroidSdkRoot)) { DisplayBuildError( "Failed to locate the Android SDK. Check Preferences -> External Tools to set the path."); return(false); } try { var ignored = JavaUtilities.JavaBinaryPath; } catch (JavaUtilities.ToolNotFoundException) { DisplayBuildError( "Failed to locate the Java JDK. Check Preferences -> External Tools to set the path."); return(false); } if (!PlayInstantBuildConfiguration.IsInstantBuildType()) { Debug.LogError("Build halted since selected build type is \"Installed\""); var message = string.Format( "The currently selected Android build type is \"Installed\".\n\n" + "Click \"{0}\" to open the \"{1}\" window where the build type can be changed to \"Instant\".", WindowUtils.OkButtonText, BuildSettingsWindow.WindowTitle); if (DisplayBuildErrorDialog(message)) { BuildSettingsWindow.ShowWindow(); } return(false); } var failedPolicies = new List <string>(PlayInstantSettingPolicy.GetRequiredPolicies() .Where(policy => !policy.IsCorrectState()) .Select(policy => policy.Name)); if (failedPolicies.Count > 0) { Debug.LogErrorFormat("Build halted due to incompatible settings: {0}", string.Join(", ", failedPolicies.ToArray())); var message = string.Format( "{0}\n\nClick \"{1}\" to open the settings window and make required changes.", string.Join("\n\n", failedPolicies.ToArray()), WindowUtils.OkButtonText); if (DisplayBuildErrorDialog(message)) { PlayerSettingsWindow.ShowWindow(); } return(false); } return(true); }
private static bool Build(BuildPlayerOptions buildPlayerOptions) { if (!PlayInstantBuildConfiguration.IsInstantBuildType()) { Debug.LogError("Build halted since selected build type is \"Installed\""); var message = string.Format( "The currently selected Android build type is \"Installed\".\n\n" + "Click \"OK\" to open the \"{0}\" window where the build type can be changed to \"Instant\".", BuildSettingsWindow.WindowTitle); if (DisplayBuildErrorDialog(message)) { BuildSettingsWindow.ShowWindow(); } return(false); } var failedPolicies = new List <string>(PlayInstantSettingPolicy.GetRequiredPolicies() .Where(policy => !policy.IsCorrectState()) .Select(policy => policy.Name)); if (failedPolicies.Count > 0) { Debug.LogErrorFormat("Build halted due to incompatible settings: {0}", string.Join(", ", failedPolicies.ToArray())); var message = string.Format( "{0}\n\nClick \"OK\" to open the settings window and make required changes.", string.Join("\n\n", failedPolicies.ToArray())); if (DisplayBuildErrorDialog(message)) { PlayerSettingsWindow.ShowWindow(); } return(false); } var buildReport = BuildPipeline.BuildPlayer(buildPlayerOptions); #if UNITY_2018_1_OR_NEWER switch (buildReport.summary.result) { case BuildResult.Cancelled: Debug.Log("Build cancelled"); return(false); case BuildResult.Succeeded: // BuildPlayer can fail and still return BuildResult.Succeeded so detect by checking totalErrors. if (buildReport.summary.totalErrors > 0) { // No need to display a message since Unity will already have done this. return(false); } // Actual success. return(true); case BuildResult.Failed: LogError(string.Format("Build failed with {0} error(s)", buildReport.summary.totalErrors)); return(false); default: LogError("Build failed with unknown error"); return(false); } #else if (string.IsNullOrEmpty(buildReport)) { return(true); } // Check for intended build cancellation. if (buildReport == "Building Player was cancelled") { Debug.Log(buildReport); } else { LogError(buildReport); } return(false); #endif }
private static void CheckPlayerSettings() { PlayerSettingsWindow.ShowWindow(); }