BuildPlayerHelper.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace HybridCLR
  7. {
  8. public class BuildPlayerHelper
  9. {
  10. public static void CopyAssetBundles(string outputDir)
  11. {
  12. Directory.CreateDirectory(outputDir);
  13. foreach(var ab in BuildConfig.AssetBundleFiles)
  14. {
  15. string srcFile = $"{Application.streamingAssetsPath}/{ab}";
  16. string dstFile = $"{outputDir}/{Path.GetFileName(ab)}";
  17. File.Copy(srcFile, dstFile, true);
  18. }
  19. }
  20. [MenuItem("HybridCLR/Build/Win64")]
  21. public static void Build_Win64()
  22. {
  23. BuildTarget target = BuildTarget.StandaloneWindows64;
  24. BuildTarget activeTarget = EditorUserBuildSettings.activeBuildTarget;
  25. if (activeTarget != BuildTarget.StandaloneWindows64 && activeTarget != BuildTarget.StandaloneWindows)
  26. {
  27. Debug.LogError("请先切到Win平台再打包");
  28. return;
  29. }
  30. // Get filename.
  31. string outputPath = $"{BuildConfig.ProjectDir}/Release-Win64";
  32. var buildOptions = BuildOptions.None;
  33. string location = $"{outputPath}/HybridCLRTrial.exe";
  34. Debug.Log("====> Build App");
  35. BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions()
  36. {
  37. scenes = new string[] { "Assets/Scenes/main.unity" },
  38. locationPathName = location,
  39. options = buildOptions,
  40. target = target,
  41. targetGroup = BuildTargetGroup.Standalone,
  42. };
  43. var report = BuildPipeline.BuildPlayer(buildPlayerOptions);
  44. if (report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded)
  45. {
  46. Debug.LogError("打包失败");
  47. return;
  48. }
  49. Debug.Log("====> Build AssetBundle");
  50. AssetBundleBuildHelper.BuildAssetBundleByTarget(target);
  51. Debug.Log("====> 复制 AssetBundle");
  52. CopyAssetBundles($"{outputPath}/HybridCLRTrial_Data/StreamingAssets");
  53. #if UNITY_EDITOR
  54. Application.OpenURL($"file:///{outputPath}");
  55. #endif
  56. }
  57. [MenuItem("HybridCLR/Build/Win32")]
  58. public static void Build_Win32()
  59. {
  60. BuildTarget target = BuildTarget.StandaloneWindows;
  61. BuildTarget activeTarget = EditorUserBuildSettings.activeBuildTarget;
  62. if (activeTarget != BuildTarget.StandaloneWindows64 && activeTarget != BuildTarget.StandaloneWindows)
  63. {
  64. Debug.LogError("请先切到Win平台再打包");
  65. return;
  66. }
  67. // Get filename.
  68. string outputPath = $"{BuildConfig.ProjectDir}/Release-Win32";
  69. var buildOptions = BuildOptions.None;
  70. string location = $"{outputPath}/HybridCLRTrial.exe";
  71. Debug.Log("====> Build App");
  72. BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions()
  73. {
  74. scenes = new string[] { "Assets/Scenes/main.unity" },
  75. locationPathName = location,
  76. options = buildOptions,
  77. target = target,
  78. targetGroup = BuildTargetGroup.Standalone,
  79. };
  80. var report = BuildPipeline.BuildPlayer(buildPlayerOptions);
  81. if (report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded)
  82. {
  83. Debug.LogError("打包失败");
  84. return;
  85. }
  86. Debug.Log("====> Build AssetBundle");
  87. AssetBundleBuildHelper.BuildAssetBundleByTarget(target);
  88. Debug.Log("====> 复制 AssetBundle");
  89. CopyAssetBundles($"{outputPath}/HybridCLRTrial_Data/StreamingAssets");
  90. #if UNITY_EDITOR
  91. Application.OpenURL($"file:///{outputPath}");
  92. #endif
  93. }
  94. [MenuItem("HybridCLR/Build/Android64")]
  95. public static void Build_Android64()
  96. {
  97. BuildTarget target = BuildTarget.Android;
  98. BuildTarget activeTarget = EditorUserBuildSettings.activeBuildTarget;
  99. if (activeTarget != BuildTarget.Android)
  100. {
  101. Debug.LogError("请先切到Android平台再打包");
  102. return;
  103. }
  104. // Get filename.
  105. string outputPath = $"{BuildConfig.ProjectDir}/Release-Android";
  106. var buildOptions = BuildOptions.None;
  107. string location = outputPath + "/HybridCLRTrial.apk";
  108. BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions()
  109. {
  110. scenes = new string[] { "Assets/Scenes/main.unity" },
  111. locationPathName = location,
  112. options = buildOptions,
  113. target = target,
  114. targetGroup = BuildTargetGroup.Android,
  115. };
  116. Debug.Log("====> 第1次 Build App(为了生成补充AOT元数据dll)");
  117. BuildPipeline.BuildPlayer(buildPlayerOptions);
  118. Debug.Log("====> Build AssetBundle");
  119. AssetBundleBuildHelper.BuildAssetBundleByTarget(target);
  120. Debug.Log("====> 第2次打包");
  121. BuildPipeline.BuildPlayer(buildPlayerOptions);
  122. #if UNITY_EDITOR
  123. Application.OpenURL($"file:///{outputPath}");
  124. #endif
  125. }
  126. }
  127. }