Exemple #1
0
        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;
        }