I am using unity 2019.2 with Android.
When the build succeeds, OnPostprocessBuild(BuildReport report)
gets called, but not if it is canceled.
Is it supposed to? Are there other means?
public class PostProcessor : IPostprocessBuildWithReport
{
public int callbackOrder => 0;
public void OnPostprocessBuild(BuildReport report)
{
//do some stuff
if (report.summary.result != BuildResult.Succeeded) { return; }
#region Platform-specific configurations
switch (report.summary.platform)
{
//do some stuff
}
#endregion
}
}
Use this BuildHandler class:
using System;
using UnityEditor;
using UnityEngine;
/// <summary>
/// Handler for Builds.
/// <para>
/// Use <see cref="OnBuildStarted"/> and/or <see cref="OnBuildCleanup"/>
/// to execute code during the build process.
/// </para>
/// <para>Class created using https://stackoverflow.com/a/68650717</para>
/// </summary>
[InitializeOnLoad]
public class BuildHandler
{
/// <summary>
/// Action fired when the build process starts.
/// </summary>
public static event Action OnBuildStarted;
/// <summary>
/// Action fired when the build process ends, even though the build is canceled.
/// </summary>
public static event Action OnBuildCleanup;
static BuildHandler () => BuildPlayerWindow.RegisterBuildPlayerHandler(HandleBuildPlayer);
static void HandleBuildPlayer (BuildPlayerOptions buildOptions)
{
try
{
OnBuildStarted?.Invoke();
// Start Unity's default building process.
BuildPlayerWindow.DefaultBuildMethods.BuildPlayer(buildOptions);
}
catch (Exception ex)
{
Exception log = ex.InnerException ?? ex;
Debug.LogException(log);
Debug.LogErrorFormat("{0} in BuildHandler: '{1}'", log.GetType().Name, ex.Message);
}
finally
{
OnBuildCleanup?.Invoke();
}
}
}
Now you have to use the actions OnBuildStarted or OnBuildCleanup.
Here is an example:
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public class SomeBuildProcess
{
static SomeBuildProcess ()
{
BuildHandler.OnBuildStarted += HandleBuildStarted;
BuildHandler.OnBuildCleanup += HandleBuildCleanup;
}
~SomeBuildProcess ()
{
BuildHandler.OnBuildStarted -= HandleBuildStarted;
BuildHandler.OnBuildCleanup -= HandleBuildStarted;
}
static void HandleBuildStarted ()
{
Debug.Log("HandleBuildStarted");
}
static void HandleBuildCleanup ()
{
Debug.Log("HandleBuildCleanup");
}
}
Credits for the BuildHandler class: Unity Editor detect when build fails - Stack Overflow