UE5 UAT
通过UAT 打包的流程,先整理这么点
入口
// Engine\Source\Programs\AutomationTool\Program.cs
/// <summary>
/// Main entry point
/// </summary>
public partial class Program
{public static async Task<int> Main(string[] Arguments){Logger.LogInformation("Starting AutomationTool...");MainProc();}static async Task<ExitCode> MainProc(){ //获得AutomationTool命名空间的Automation类型Type AutomationTools_Automation = AutomationUtilsAssembly.GetType("AutomationTool.Automation");//获得Automation的ProcessAsync()接口MethodInfo Automation_Process = AutomationTools_Automation.GetMethod("ProcessAsync");//调用ProcessAsync()方法,用来处理AutomationToolCommandLine中的CommandsToExecutereturn await (Task<ExitCode>) Automation_Process.Invoke(null,new object[] {AutomationToolCommandLine, StartupListener, ScriptModuleAssemblyPaths});}
}
// Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cspublic static class Automation
{ public static async Task<ExitCode> ProcessAsync(ParsedCommandLine AutomationToolCommandLine, .......){// Find and execute commands.ExitCode Result = await ExecuteAsync(AutomationToolCommandLine.CommandsToExecute, ScriptManager.Commands);}public static async Task<ExitCode> ExecuteAsync(List<CommandInfo> CommandsToExecute, Dictionary<string, Type> Commands){BuildCommand Command = (BuildCommand)Activator.CreateInstance(CommandType);// 执行commandExitCode Result = await Command.ExecuteAsync();}
}
// Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cspublic class BuildCookRun : BuildCommand, IProjectParamsHelpers
{public override void ExecuteBuild(){var StartTime = DateTime.UtcNow;// these need to be done firstvar bForeign = ParseParam("foreign");var bForeignCode = ParseParam("foreigncode");if (bForeign){MakeForeignSample();}else if (bForeignCode){MakeForeignCodeSample();}var Params = SetupParams();// 执行 Build cook RunDoBuildCookRun(Params);Logger.LogInformation("BuildCookRun time: {0:0.00} s", (DateTime.UtcNow - StartTime).TotalMilliseconds / 1000);}protected void DoBuildCookRun(ProjectParams Params){int WorkingCL = -1;if (P4Enabled && GlobalCommandLine.Submit && AllowSubmit){WorkingCL = P4.CreateChange(P4Env.Client, String.Format("{0} build from changelist {1}", Params.ShortProjectName, P4Env.Changelist));}//编译代码, 会通过ToolChain进行编译Project.Build(this, Params, WorkingCL, ProjectBuildTargets.All);//cook 资源Project.Cook(Params);Project.CopyBuildToStagingDirectory(Params);// 打包 android: 拷贝.so,和资源文件,调用runGradle.bat,生成apkProject.Package(Params, WorkingCL);//拷贝apk和install文件到打包路径Project.Archive(Params);//默认不处理Project.Deploy(Params);PrintRunTime();//默认不处理Project.Run(Params);Project.GetFile(Params);// Check everything in!if (WorkingCL != -1){int SubmittedCL;P4.Submit(WorkingCL, out SubmittedCL, true, true);}}
}