CopyStrippedAOTAssemblies.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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.WSAPlayer:
  36. return $"{projectDir}/Library/Bee/artifacts/UWPPlayerBuildProgram/ManagedStripped";
  37. case BuildTarget.Android:
  38. return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped";
  39. #if TUANJIE_2022_3_OR_NEWER
  40. case BuildTarget.HMIAndroid:
  41. return $"{projectDir}/Library/Bee/artifacts/HMIAndroid/ManagedStripped";
  42. #endif
  43. case BuildTarget.iOS:
  44. #if UNITY_TVOS
  45. case BuildTarget.tvOS:
  46. #endif
  47. return $"{projectDir}/Library/Bee/artifacts/iOS/ManagedStripped";
  48. #if UNITY_VISIONOS
  49. case BuildTarget.VisionOS:
  50. #if UNITY_6000_0_OR_NEWER
  51. return $"{projectDir}/Library/Bee/artifacts/VisionOS/ManagedStripped";
  52. #else
  53. return $"{projectDir}/Library/Bee/artifacts/iOS/ManagedStripped";
  54. #endif
  55. #endif
  56. case BuildTarget.WebGL:
  57. return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped";
  58. case BuildTarget.StandaloneOSX:
  59. return $"{projectDir}/Library/Bee/artifacts/MacStandalonePlayerBuildProgram/ManagedStripped";
  60. case BuildTarget.PS4:
  61. return $"{projectDir}/Library/Bee/artifacts/PS4PlayerBuildProgram/ManagedStripped";
  62. case BuildTarget.PS5:
  63. return $"{projectDir}/Library/Bee/artifacts/PS5PlayerBuildProgram/ManagedStripped";
  64. #if UNITY_WEIXINMINIGAME
  65. case BuildTarget.WeixinMiniGame:
  66. return $"{projectDir}/Library/Bee/artifacts/WeixinMiniGame/ManagedStripped";
  67. #endif
  68. #if UNITY_OPENHARMONY
  69. case BuildTarget.OpenHarmony:
  70. return $"{projectDir}/Library/Bee/artifacts/OpenHarmonyPlayerBuildProgram/ManagedStripped";
  71. #endif
  72. default: return "";
  73. }
  74. }
  75. #else
  76. private string GetStripAssembliesDir2020(BuildTarget target)
  77. {
  78. string subPath = target == BuildTarget.Android ?
  79. "assets/bin/Data/Managed" :
  80. "Data/Managed/";
  81. return $"{SettingsUtil.ProjectDir}/Temp/StagingArea/{subPath}";
  82. }
  83. public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data)
  84. {
  85. BuildTarget target = report.summary.platform;
  86. CopyStripDlls(GetStripAssembliesDir2020(target), target);
  87. }
  88. #endif
  89. public static void CopyStripDlls(string srcStripDllPath, BuildTarget target)
  90. {
  91. if (!SettingsUtil.Enable)
  92. {
  93. Debug.Log($"[CopyStrippedAOTAssemblies] disabled");
  94. return;
  95. }
  96. Debug.Log($"[CopyStrippedAOTAssemblies] CopyScripDlls. src:{srcStripDllPath} target:{target}");
  97. var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
  98. Directory.CreateDirectory(dstPath);
  99. foreach (var fileFullPath in Directory.GetFiles(srcStripDllPath, "*.dll"))
  100. {
  101. var file = Path.GetFileName(fileFullPath);
  102. Debug.Log($"[CopyStrippedAOTAssemblies] copy strip dll {fileFullPath} ==> {dstPath}/{file}");
  103. File.Copy($"{fileFullPath}", $"{dstPath}/{file}", true);
  104. }
  105. }
  106. public void OnPostprocessBuild(BuildReport report)
  107. {
  108. #if UNITY_2021_1_OR_NEWER
  109. BuildTarget target = report.summary.platform;
  110. string srcStripDllPath = GetStripAssembliesDir2021(target);
  111. if (!string.IsNullOrEmpty(srcStripDllPath) && Directory.Exists(srcStripDllPath))
  112. {
  113. CopyStripDlls(srcStripDllPath, target);
  114. }
  115. #endif
  116. }
  117. public void OnPreprocessBuild(BuildReport report)
  118. {
  119. BuildTarget target = report.summary.platform;
  120. var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
  121. BashUtil.RecreateDir(dstPath);
  122. }
  123. }
  124. }