CopyStrippedAOTAssemblies.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using UnityEditor;
  8. using UnityEditor.Build;
  9. using UnityEditor.Build.Reporting;
  10. using UnityEditor.Il2Cpp;
  11. using UnityEditor.UnityLinker;
  12. using UnityEngine;
  13. namespace HybridCLR.Editor.BuildProcessors
  14. {
  15. internal class CopyStrippedAOTAssemblies : IPostprocessBuildWithReport
  16. #if !UNITY_2021_1_OR_NEWER
  17. , IIl2CppProcessor
  18. #endif
  19. {
  20. public int callbackOrder => 0;
  21. #if UNITY_2021_1_OR_NEWER
  22. public static string GetStripAssembliesDir2021(BuildTarget target)
  23. {
  24. string projectDir = SettingsUtil.ProjectDir;
  25. #if UNITY_STANDALONE_WIN
  26. return $"{projectDir}/Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped";
  27. #elif UNITY_ANDROID
  28. return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped";
  29. #elif UNITY_IOS
  30. return $"{projectDir}/Temp/StagingArea/Data/Managed/tempStrip";
  31. #elif UNITY_WEBGL
  32. return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped";
  33. #elif UNITY_EDITOR_OSX
  34. return $"{projectDir}/Library/Bee/artifacts/MacStandalonePlayerBuildProgram/ManagedStripped";
  35. #else
  36. throw new NotSupportedException("GetOriginBuildStripAssembliesDir");
  37. #endif
  38. }
  39. #else
  40. private string GetStripAssembliesDir2020(BuildTarget target)
  41. {
  42. string subPath = target == BuildTarget.Android ?
  43. "assets/bin/Data/Managed" :
  44. "Data/Managed/";
  45. return $"{SettingsUtil.ProjectDir}/Temp/StagingArea/{subPath}";
  46. }
  47. public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data)
  48. {
  49. // 此回调只在 2020中调用
  50. CopyStripDlls(GetStripAssembliesDir2020(data.target), data.target);
  51. }
  52. #endif
  53. public static void CopyStripDlls(string srcStripDllPath, BuildTarget target)
  54. {
  55. if (!SettingsUtil.Enable)
  56. {
  57. Debug.Log($"[CopyStrippedAOTAssemblies] disabled");
  58. return;
  59. }
  60. Debug.Log($"[CopyStrippedAOTAssemblies] CopyScripDlls. src:{srcStripDllPath} target:{target}");
  61. var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
  62. Directory.CreateDirectory(dstPath);
  63. foreach (var fileFullPath in Directory.GetFiles(srcStripDllPath, "*.dll"))
  64. {
  65. var file = Path.GetFileName(fileFullPath);
  66. Debug.Log($"[CopyStrippedAOTAssemblies] copy strip dll {fileFullPath} ==> {dstPath}/{file}");
  67. File.Copy($"{fileFullPath}", $"{dstPath}/{file}", true);
  68. }
  69. }
  70. public void OnPostprocessBuild(BuildReport report)
  71. {
  72. #if UNITY_2021_1_OR_NEWER && !UNITY_IOS
  73. BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  74. CopyStripDlls(GetStripAssembliesDir2021(target), target);
  75. #endif
  76. }
  77. }
  78. }