TaskCreatePatchPackage.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. namespace YooAsset.Editor
  4. {
  5. [TaskAttribute("制作补丁包")]
  6. public class TaskCreatePatchPackage : IBuildTask
  7. {
  8. void IBuildTask.Run(BuildContext context)
  9. {
  10. var buildParameters = context.GetContextObject<BuildParametersContext>();
  11. var buildMode = buildParameters.Parameters.BuildMode;
  12. if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
  13. {
  14. CopyPatchFiles(buildParameters);
  15. }
  16. }
  17. /// <summary>
  18. /// 拷贝补丁文件到补丁包目录
  19. /// </summary>
  20. private void CopyPatchFiles(BuildParametersContext buildParameters)
  21. {
  22. int resourceVersion = buildParameters.Parameters.BuildVersion;
  23. string packageDirectory = buildParameters.GetPackageDirectory();
  24. BuildRunner.Log($"开始拷贝补丁文件到补丁包目录:{packageDirectory}");
  25. // 拷贝Report文件
  26. {
  27. string reportFileName = YooAssetSettingsData.GetReportFileName(buildParameters.Parameters.BuildVersion);
  28. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{reportFileName}";
  29. string destPath = $"{packageDirectory}/{reportFileName}";
  30. EditorTools.CopyFile(sourcePath, destPath, true);
  31. }
  32. // 拷贝补丁清单文件
  33. {
  34. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettingsData.GetPatchManifestFileName(resourceVersion)}";
  35. string destPath = $"{packageDirectory}/{YooAssetSettingsData.GetPatchManifestFileName(resourceVersion)}";
  36. EditorTools.CopyFile(sourcePath, destPath, true);
  37. }
  38. // 拷贝补丁清单哈希文件
  39. {
  40. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettingsData.GetPatchManifestHashFileName(resourceVersion)}";
  41. string destPath = $"{packageDirectory}/{YooAssetSettingsData.GetPatchManifestHashFileName(resourceVersion)}";
  42. EditorTools.CopyFile(sourcePath, destPath, true);
  43. }
  44. // 拷贝静态版本文件
  45. {
  46. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettings.VersionFileName}";
  47. string destPath = $"{packageDirectory}/{YooAssetSettings.VersionFileName}";
  48. EditorTools.CopyFile(sourcePath, destPath, true);
  49. }
  50. if (buildParameters.Parameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
  51. {
  52. // 拷贝构建日志
  53. {
  54. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/buildlogtep.json";
  55. string destPath = $"{packageDirectory}/buildlogtep.json";
  56. EditorTools.CopyFile(sourcePath, destPath, true);
  57. }
  58. // 拷贝代码防裁剪配置
  59. if (buildParameters.Parameters.SBPParameters.WriteLinkXML)
  60. {
  61. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/link.xml";
  62. string destPath = $"{packageDirectory}/link.xml";
  63. EditorTools.CopyFile(sourcePath, destPath, true);
  64. }
  65. }
  66. else
  67. {
  68. // 拷贝UnityManifest序列化文件
  69. {
  70. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettings.OutputFolderName}";
  71. string destPath = $"{packageDirectory}/{YooAssetSettings.OutputFolderName}";
  72. EditorTools.CopyFile(sourcePath, destPath, true);
  73. }
  74. // 拷贝UnityManifest文本文件
  75. {
  76. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettings.OutputFolderName}.manifest";
  77. string destPath = $"{packageDirectory}/{YooAssetSettings.OutputFolderName}.manifest";
  78. EditorTools.CopyFile(sourcePath, destPath, true);
  79. }
  80. }
  81. // 拷贝所有补丁文件
  82. int progressValue = 0;
  83. PatchManifest patchManifest = AssetBundleBuilderHelper.LoadPatchManifestFile(buildParameters.PipelineOutputDirectory, buildParameters.Parameters.BuildVersion);
  84. int patchFileTotalCount = patchManifest.BundleList.Count;
  85. foreach (var patchBundle in patchManifest.BundleList)
  86. {
  87. string sourcePath = $"{buildParameters.PipelineOutputDirectory}/{patchBundle.BundleName}";
  88. string destPath = $"{packageDirectory}/{patchBundle.FileName}";
  89. EditorTools.CopyFile(sourcePath, destPath, true);
  90. EditorTools.DisplayProgressBar("拷贝补丁文件", ++progressValue, patchFileTotalCount);
  91. }
  92. EditorTools.ClearProgressBar();
  93. }
  94. }
  95. }