private static void ObfuscateWhileLocked() { if (_options == null) { _options = OptionsManager.LoadOptions(); } Obfuscator.FixHexBug(_options); if (ShouldObfuscate() == false) { return; } AssemblySelector selector = new AssemblySelector(_options); ICollection <string> compiledDlls = selector.GetCompiledAssemblyPaths(); BackupDlls(compiledDlls); ICollection <string> dlls = selector.GetAssemblyPaths(); if (dlls.Count == 0 && compiledDlls.Count == 0) { _noCSharpScripts = true; } else { HashSet <string> extraAssemblyReferenceDirectories = new HashSet <string>(_options.extraAssemblyDirectories); #if UNITY_2017_3_OR_NEWER extraAssemblyReferenceDirectories.UnionWith(AssemblyReferenceLocator.GetAssemblyReferenceDirectories()); #endif Obfuscator.SetExtraAssemblyDirectories(extraAssemblyReferenceDirectories.ToArray()); #if UNITY_2018_2_OR_NEWER if (_options.obfuscateMonoBehaviourClassNames) { Debug.LogError( "The mechanism to obfuscate MonoBehaviour class names no longer works since Unity " + "2018.2. You must either roll back to 2018.1, or disable this option.\n" + "\nThis build will be obfuscated as instructed, but you are likely to see " + "NullReferenceException runtime errors.\n"); } #endif Obfuscator.Obfuscate(dlls, compiledDlls, _options, EditorUserBuildSettings.activeBuildTarget); if (_options.obfuscateMonoBehaviourClassNames) { /* * RestoreAssets must be called via the update delegate because [PostProcessBuild] is not guaranteed to be called */ EditorApplication.update += RestoreAssets; _monoBehaviourAssetsNeedReverting = true; } _obfuscatedAfterScene = true; } }
private void ObfuscateWhileLocked() { if (_options == null) { _options = OptionsManager.LoadOptions(); } if (ShouldObfuscate() == false) { return; } AssemblySelector selector = new AssemblySelector(_options); ICollection <string> compiledDlls = selector.GetCompiledAssemblyPaths(); if (compiledDlls.Count > 0) { EditorApplication.update += RestoreUtils.RestoreOriginalDlls; } IDictionary <string, string> backupMap = FileBackup.GetBackupMap(compiledDlls); FileBackup.Backup(backupMap); ICollection <string> dlls = selector.GetAssemblyPaths(); if (dlls.Count == 0 && compiledDlls.Count == 0) { _noCSharpScripts = true; return; } HashSet <string> extraAssemblyReferenceDirectories = new HashSet <string>(_options.extraAssemblyDirectories); #if UNITY_2017_3_OR_NEWER extraAssemblyReferenceDirectories.UnionWith(AssemblyReferenceLocator.GetAssemblyReferenceDirectories()); #endif Obfuscator.SetExtraAssemblyDirectories(extraAssemblyReferenceDirectories.ToArray()); #if UNITY_2018_2_OR_NEWER Obfuscator.ObfuscateMonoBehavioursByAssetDatabase(false); var obfuscateMonoBehaviourNames = _options.obfuscateMonoBehaviourClassNames; try { if (IsXCodeProject() && _options.obfuscateMonoBehaviourClassNames) { Debug.LogWarning("MonoBehaviour class names will not be obfuscated when creating Xcode projects"); _options.obfuscateMonoBehaviourClassNames = false; } #endif Obfuscator.Obfuscate(dlls, compiledDlls, _options, EditorUserBuildSettings.activeBuildTarget); #if !UNITY_2018_2_OR_NEWER if (_options.obfuscateMonoBehaviourClassNames) { /* * RestoreAssets must be registered via the update delegate because [PostProcessBuild] is not guaranteed to be called */ EditorApplication.update += RestoreUtils.RestoreMonobehaviourSourceFiles; _monoBehaviourAssetsNeedReverting = true; } #else } finally { _options.obfuscateMonoBehaviourClassNames = obfuscateMonoBehaviourNames; } #endif _hasObfuscated = true; }