StripAOTDllCommand.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 UnityEngine;
  10. namespace HybridCLR.Editor.Commands
  11. {
  12. public static class StripAOTDllCommand
  13. {
  14. [MenuItem("HybridCLR/Generate/AOTDlls", priority = 105)]
  15. public static void GenerateStripedAOTDlls()
  16. {
  17. GenerateStripedAOTDlls(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup);
  18. }
  19. private static string GetLocationPathName(string buildDir, BuildTarget target)
  20. {
  21. switch(target)
  22. {
  23. case BuildTarget.StandaloneWindows:
  24. case BuildTarget.StandaloneWindows64: return $"{buildDir}/{target}";
  25. case BuildTarget.StandaloneOSX: return buildDir;
  26. case BuildTarget.iOS: return buildDir;
  27. case BuildTarget.Android: return buildDir;
  28. case BuildTarget.StandaloneLinux64: return buildDir;
  29. default: return buildDir;
  30. }
  31. }
  32. public static void GenerateStripedAOTDlls(BuildTarget target, BuildTargetGroup group)
  33. {
  34. string outputPath = $"{SettingsUtil.HybridCLRDataDir}/StrippedAOTDllsTempProj/{target}";
  35. BashUtil.RemoveDir(outputPath);
  36. var buildOptions = BuildOptions.BuildScriptsOnly;
  37. bool oldExportAndroidProj = EditorUserBuildSettings.exportAsGoogleAndroidProject;
  38. #if UNITY_EDITOR_OSX
  39. bool oldCreateSolution = UnityEditor.OSXStandalone.UserBuildSettings.createXcodeProject;
  40. #elif UNITY_EDITOR_WIN
  41. bool oldCreateSolution = UnityEditor.WindowsStandalone.UserBuildSettings.createSolution;
  42. #endif
  43. bool oldBuildScriptsOnly = EditorUserBuildSettings.buildScriptsOnly;
  44. EditorUserBuildSettings.buildScriptsOnly = true;
  45. switch (target)
  46. {
  47. case BuildTarget.StandaloneWindows:
  48. case BuildTarget.StandaloneWindows64:
  49. {
  50. #if UNITY_EDITOR_WIN
  51. UnityEditor.WindowsStandalone.UserBuildSettings.createSolution = true;
  52. #endif
  53. break;
  54. }
  55. case BuildTarget.StandaloneOSX:
  56. {
  57. #if UNITY_EDITOR_OSX
  58. UnityEditor.OSXStandalone.UserBuildSettings.createXcodeProject = true;
  59. #endif
  60. break;
  61. }
  62. case BuildTarget.Android:
  63. {
  64. EditorUserBuildSettings.exportAsGoogleAndroidProject = true;
  65. break;
  66. }
  67. }
  68. BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions()
  69. {
  70. scenes = EditorBuildSettings.scenes.Where(s => s.enabled).Select(s => s.path).ToArray(),
  71. locationPathName = GetLocationPathName(outputPath, target),
  72. options = buildOptions,
  73. target = target,
  74. targetGroup = group,
  75. };
  76. var report = BuildPipeline.BuildPlayer(buildPlayerOptions);
  77. EditorUserBuildSettings.buildScriptsOnly = oldBuildScriptsOnly;
  78. switch (target)
  79. {
  80. case BuildTarget.StandaloneWindows:
  81. case BuildTarget.StandaloneWindows64:
  82. {
  83. #if UNITY_EDITOR_WIN
  84. UnityEditor.WindowsStandalone.UserBuildSettings.createSolution = oldCreateSolution;
  85. #endif
  86. break;
  87. }
  88. case BuildTarget.StandaloneOSX:
  89. {
  90. #if UNITY_EDITOR_OSX
  91. UnityEditor.OSXStandalone.UserBuildSettings.createXcodeProject = oldCreateSolution;
  92. #endif
  93. break;
  94. }
  95. case BuildTarget.Android:
  96. {
  97. EditorUserBuildSettings.exportAsGoogleAndroidProject = oldExportAndroidProj;
  98. break;
  99. }
  100. }
  101. if (report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded)
  102. {
  103. Debug.LogError("GenerateStripedAOTDlls 失败");
  104. return;
  105. }
  106. Debug.Log($"GenerateStripedAOTDlls target:{target} group:{group} path:{outputPath}");
  107. }
  108. }
  109. }