CopyStrippedAOTAssemblies.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using HybridCLR.Editor.Installer;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using UnityEditor;
  9. using UnityEditor.Build;
  10. using UnityEditor.Build.Reporting;
  11. using UnityEditor.UnityLinker;
  12. using UnityEngine;
  13. #if !UNITY_2021_1_OR_NEWER
  14. using UnityEditor.Il2Cpp;
  15. #endif
  16. namespace HybridCLR.Editor.BuildProcessors
  17. {
  18. internal class CopyStrippedAOTAssemblies : IPostprocessBuildWithReport, IPreprocessBuildWithReport
  19. #if !UNITY_2021_1_OR_NEWER
  20. , IIl2CppProcessor
  21. #endif
  22. {
  23. public int callbackOrder => 0;
  24. #if UNITY_2021_1_OR_NEWER
  25. public static string GetStripAssembliesDir2021(BuildTarget target)
  26. {
  27. string projectDir = SettingsUtil.ProjectDir;
  28. switch (target)
  29. {
  30. case BuildTarget.StandaloneWindows:
  31. case BuildTarget.StandaloneWindows64:
  32. return $"{projectDir}/Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped";
  33. case BuildTarget.StandaloneLinux64:
  34. return $"{projectDir}/Library/Bee/artifacts/LinuxPlayerBuildProgram/ManagedStripped";
  35. case BuildTarget.Android:
  36. return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped";
  37. case BuildTarget.iOS:
  38. #if UNITY_TVOS
  39. case BuildTarget.tvOS:
  40. #endif
  41. #if UNITY_VISIONOS
  42. case BuildTarget.VisionOS:
  43. #endif
  44. return $"{projectDir}/Library/Bee/artifacts/iOS/ManagedStripped";
  45. case BuildTarget.WebGL:
  46. return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped";
  47. case BuildTarget.StandaloneOSX:
  48. return $"{projectDir}/Library/Bee/artifacts/MacStandalonePlayerBuildProgram/ManagedStripped";
  49. case BuildTarget.PS4:
  50. return $"{projectDir}/Library/Bee/artifacts/PS4PlayerBuildProgram/ManagedStripped";
  51. case BuildTarget.PS5:
  52. return $"{projectDir}/Library/Bee/artifacts/PS5PlayerBuildProgram/ManagedStripped";
  53. #if UNITY_WEIXINMINIGAME
  54. case BuildTarget.WeixinMiniGame:
  55. return $"{projectDir}/Library/Bee/artifacts/WeixinMiniGame/ManagedStripped";
  56. #endif
  57. #if UNITY_OPENHARMONY
  58. case BuildTarget.OpenHarmony:
  59. return $"{projectDir}/Library/Bee/artifacts/OpenHarmonyPlayerBuildProgram/ManagedStripped";
  60. #endif
  61. default: return "";
  62. }
  63. }
  64. #else
  65. private string GetStripAssembliesDir2020(BuildTarget target)
  66. {
  67. string subPath = target == BuildTarget.Android ?
  68. "assets/bin/Data/Managed" :
  69. "Data/Managed/";
  70. return $"{SettingsUtil.ProjectDir}/Temp/StagingArea/{subPath}";
  71. }
  72. public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data)
  73. {
  74. // 此回调只在 2020中调用
  75. BuildTarget target = report.summary.platform;
  76. CopyStripDlls(GetStripAssembliesDir2020(target), target);
  77. }
  78. #endif
  79. public static void CopyStripDlls(string srcStripDllPath, BuildTarget target)
  80. {
  81. if (!SettingsUtil.Enable)
  82. {
  83. Debug.Log($"[CopyStrippedAOTAssemblies] disabled");
  84. return;
  85. }
  86. Debug.Log($"[CopyStrippedAOTAssemblies] CopyScripDlls. src:{srcStripDllPath} target:{target}");
  87. var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
  88. Directory.CreateDirectory(dstPath);
  89. foreach (var fileFullPath in Directory.GetFiles(srcStripDllPath, "*.dll"))
  90. {
  91. var file = Path.GetFileName(fileFullPath);
  92. Debug.Log($"[CopyStrippedAOTAssemblies] copy strip dll {fileFullPath} ==> {dstPath}/{file}");
  93. File.Copy($"{fileFullPath}", $"{dstPath}/{file}", true);
  94. }
  95. }
  96. public void OnPostprocessBuild(BuildReport report)
  97. {
  98. #if UNITY_2021_1_OR_NEWER
  99. BuildTarget target = report.summary.platform;
  100. string srcStripDllPath = GetStripAssembliesDir2021(target);
  101. if (!string.IsNullOrEmpty(srcStripDllPath) && Directory.Exists(srcStripDllPath))
  102. {
  103. CopyStripDlls(srcStripDllPath, target);
  104. }
  105. #endif
  106. }
  107. public void OnPreprocessBuild(BuildReport report)
  108. {
  109. BuildTarget target = report.summary.platform;
  110. var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
  111. BashUtil.RecreateDir(dstPath);
  112. }
  113. }
  114. }