UE5 UAT

发布于:2025-09-09 ⋅ 阅读:(15) ⋅ 点赞:(0)

通过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中的CommandsToExecute
        return await (Task<ExitCode>) Automation_Process.Invoke(null,
	        new object[] {AutomationToolCommandLine, StartupListener, ScriptModuleAssemblyPaths});
    }
}
// Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs

public 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);

        // 执行command
        ExitCode Result = await Command.ExecuteAsync();
    }
}

// Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs

public class BuildCookRun : BuildCommand, IProjectParamsHelpers
{
	public override void ExecuteBuild()
	{
		var StartTime = DateTime.UtcNow;

		// these need to be done first
		var bForeign = ParseParam("foreign");
		var bForeignCode = ParseParam("foreigncode");
		if (bForeign)
		{
			MakeForeignSample();
		}
		else if (bForeignCode)
		{
			MakeForeignCodeSample();
		}
		var Params = SetupParams();
        
       // 执行 Build cook Run
		DoBuildCookRun(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,生成apk
	    Project.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);
    	}
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到