BuildPostProcessor.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #if UNITY_EDITOR
  2. // System
  3. using System;
  4. using System.Linq;
  5. // Unity
  6. using UnityEditor;
  7. using UnityEditor.Build;
  8. using UnityEditor.Build.Reporting;
  9. using UnityEditor.UnityLinker;
  10. namespace OPS.Obfuscator
  11. {
  12. public class BuildPostProcessor : IPreprocessBuildWithReport, IFilterBuildAssemblies, IPostBuildPlayerScriptDLLs, IUnityLinkerProcessor, IPostprocessBuildWithReport
  13. {
  14. // Defines if an Obfuscation Process took place.
  15. private static bool hasObfuscated = false;
  16. public int callbackOrder
  17. {
  18. get { return int.MaxValue; }
  19. }
  20. private static OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings PrepareEditorSettings()
  21. {
  22. OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings var_EditorSettings = new Editor.Settings.Unity.Editor.EditorSettings();
  23. return var_EditorSettings;
  24. }
  25. private static OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings PrepareBuildSettings(BuildReport _Report)
  26. {
  27. OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings var_BuildSettings = new Editor.Settings.Unity.Build.BuildSettings();
  28. var_BuildSettings.BuildTarget = UnityEditor.EditorUserBuildSettings.activeBuildTarget;
  29. var_BuildSettings.BuildTargetGroup = UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup;
  30. var_BuildSettings.UnityBuildReport = _Report;
  31. var_BuildSettings.IsIL2CPPBuild = PlayerSettings.GetScriptingBackend(UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup) == ScriptingImplementation.IL2CPP;
  32. var_BuildSettings.IsCompressed = !typeof(UnityEditor.EditorUserBuildSettings).GetMethod("GetCompressionType", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).Invoke(null, new object[] { UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup }).ToString().Equals("None");
  33. var_BuildSettings.BuildIntoProject = (UnityEditor.EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX && UnityEditor.EditorUserBuildSettings.GetPlatformSettings("OSXUniversal", "CreateXcodeProject").Equals("true"))
  34. || (UnityEditor.EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows && UnityEditor.EditorUserBuildSettings.GetPlatformSettings("Standalone", "CreateSolution").Equals("true"))
  35. || (UnityEditor.EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 && UnityEditor.EditorUserBuildSettings.GetPlatformSettings("Standalone", "CreateSolution").Equals("true"))
  36. || (UnityEditor.EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64 && UnityEditor.EditorUserBuildSettings.GetPlatformSettings("Standalone", "CreateSolution").Equals("true"));
  37. return var_BuildSettings;
  38. }
  39. public void OnPreprocessBuild(BuildReport _Report)
  40. {
  41. // Settings
  42. OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings var_EditorSettings = PrepareEditorSettings();
  43. OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings var_BuildSettings = PrepareBuildSettings(_Report);
  44. // Init
  45. OPS.Obfuscator.Editor.Obfuscator.Init();
  46. hasObfuscated = false;
  47. try
  48. {
  49. // Pre Build
  50. OPS.Obfuscator.Editor.Obfuscator.Singleton.PreBuild(var_EditorSettings, var_BuildSettings);
  51. }
  52. catch (Exception e)
  53. {
  54. UnityEngine.Debug.LogError("[OPS] Error: " + e.ToString());
  55. }
  56. }
  57. public string[] OnFilterAssemblies(BuildOptions _BuildOptions, string[] _Assemblies)
  58. {
  59. // Return all assemblies - Filtered with build.
  60. return _Assemblies;
  61. }
  62. public void OnPostBuildPlayerScriptDLLs(BuildReport _Report)
  63. {
  64. if (!hasObfuscated)
  65. {
  66. if (BuildPipeline.isBuildingPlayer && !EditorApplication.isPlayingOrWillChangePlaymode)
  67. {
  68. try
  69. {
  70. UnityEditor.EditorApplication.LockReloadAssemblies();
  71. // Settings
  72. OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings var_EditorSettings = PrepareEditorSettings();
  73. OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings var_BuildSettings = PrepareBuildSettings(_Report);
  74. // Obfuscate
  75. OPS.Obfuscator.Editor.Obfuscator.Singleton.PostAssemblyBuild(var_EditorSettings, var_BuildSettings);
  76. hasObfuscated = true;
  77. }
  78. catch (Exception e)
  79. {
  80. UnityEngine.Debug.LogError("[OPS] Error: " + e.ToString());
  81. }
  82. finally
  83. {
  84. UnityEditor.EditorApplication.UnlockReloadAssemblies();
  85. }
  86. }
  87. }
  88. }
  89. public string GenerateAdditionalLinkXmlFile(BuildReport _Report, UnityLinkerBuildPipelineData _Data)
  90. {
  91. if (hasObfuscated)
  92. {
  93. try
  94. {
  95. // Settings
  96. OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings var_EditorSettings = PrepareEditorSettings();
  97. OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings var_BuildSettings = PrepareBuildSettings(_Report);
  98. // Post Build
  99. OPS.Obfuscator.Editor.Obfuscator.Singleton.PostAssetsBuild(var_EditorSettings, var_BuildSettings);
  100. }
  101. catch (Exception e)
  102. {
  103. UnityEngine.Debug.LogError("[OPS] Error: " + e.ToString());
  104. }
  105. }
  106. return null;
  107. }
  108. #if UNITY_2021_2_OR_NEWER
  109. #else
  110. public void OnBeforeRun(BuildReport report, UnityLinkerBuildPipelineData data)
  111. {
  112. }
  113. public void OnAfterRun(BuildReport report, UnityLinkerBuildPipelineData data)
  114. {
  115. }
  116. #endif
  117. public void OnPostprocessBuild(BuildReport _Report)
  118. {
  119. if (hasObfuscated)
  120. {
  121. try
  122. {
  123. // Settings
  124. OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings var_EditorSettings = PrepareEditorSettings();
  125. OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings var_BuildSettings = PrepareBuildSettings(_Report);
  126. // Post Build
  127. OPS.Obfuscator.Editor.Obfuscator.Singleton.PostBuild(var_EditorSettings, var_BuildSettings);
  128. }
  129. catch (Exception e)
  130. {
  131. UnityEngine.Debug.LogError("[OPS] Error: " + e.ToString());
  132. }
  133. }
  134. }
  135. }
  136. }
  137. #endif