通过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);
}
}
}