From b9351e5066c4b74b10f6ba691f019094c790155f Mon Sep 17 00:00:00 2001 From: walon Date: Sat, 19 Apr 2025 11:47:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=812020=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/BuildProcess/ObfuzProcess2021.cs | 36 ++++++++++++++++++------- Editor/CollectionExtensions.cs | 2 +- Editor/MetaUtil.cs | 2 +- Editor/NameMatcher.cs | 2 +- Editor/ObfuscateRuleConfig.cs | 10 +++---- Editor/Rename/RenameRecordMap.cs | 12 ++++----- 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/Editor/BuildProcess/ObfuzProcess2021.cs b/Editor/BuildProcess/ObfuzProcess2021.cs index d23d8d7..336116a 100644 --- a/Editor/BuildProcess/ObfuzProcess2021.cs +++ b/Editor/BuildProcess/ObfuzProcess2021.cs @@ -18,29 +18,40 @@ namespace Obfuz #if UNITY_2021 || UNITY_2020_1_OR_NEWER internal class ObfuzProcess2021 : IPreprocessBuildWithReport, IPostprocessBuildWithReport { - private static bool s_inBuild = false; private static bool s_obfuscated = false; public int callbackOrder => 10000; + [InitializeOnLoadMethod] + private static void Init() + { + CompilationPipeline.compilationFinished += OnCompilationFinished; + } + public void OnPreprocessBuild(BuildReport report) { - s_inBuild = true; s_obfuscated = false; - - CompilationPipeline.compilationFinished += OnCompilationFinished; } private static string GetScriptAssembliesPath(object obj) { +#if UNITY_2021 object settings = obj.GetType().GetProperty("settings").GetValue(obj); string path = (string)settings.GetType().GetProperty("OutputDirectory").GetValue(settings); - return path; +#elif UNITY_2020 + return "Library/PlayerScriptAssemblies"; +#else + throw new Exception(); +#endif } - private void OnCompilationFinished(object obj) + private static void OnCompilationFinished(object obj) { - if (s_inBuild && !s_obfuscated) + if (!BuildPipeline.isBuildingPlayer) + { + return; + } + if (!s_obfuscated) { RunObfuscate(GetScriptAssembliesPath(obj)); s_obfuscated = true; @@ -49,9 +60,7 @@ namespace Obfuz public void OnPostprocessBuild(BuildReport report) { - s_inBuild = false; s_obfuscated = false; - CompilationPipeline.compilationFinished -= OnCompilationFinished; } private static void RunObfuscate(string scriptAssembliesPath) @@ -76,8 +85,15 @@ namespace Obfuz { AssemblySearchDirs = new List { +#if UNITY_2021_1_OR_NEWER Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api/Facades"), Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api"), +#elif UNITY_2020 + Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api/Facades"), + Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api"), +#else + #error "Unsupported Unity version" +#endif Path.Combine(applicationContentsPath, "Managed/UnityEngine"), backupPlayerScriptAssembliesPath, }, @@ -100,4 +116,4 @@ namespace Obfuz } } #endif -} + } diff --git a/Editor/CollectionExtensions.cs b/Editor/CollectionExtensions.cs index 49f949b..5e15545 100644 --- a/Editor/CollectionExtensions.cs +++ b/Editor/CollectionExtensions.cs @@ -16,7 +16,7 @@ namespace Obfuz } } - public static V GetValueOrDefault(IDictionary dic, K key) + public static V GetValueOrDefault(this IDictionary dic, K key) { return dic.TryGetValue(key, out V v) ? v : default(V); } diff --git a/Editor/MetaUtil.cs b/Editor/MetaUtil.cs index 39e5ae1..f250f6d 100644 --- a/Editor/MetaUtil.cs +++ b/Editor/MetaUtil.cs @@ -259,7 +259,7 @@ namespace Obfuz { return type; } - return type.IsClassSig ? new ClassSig(typeDef) : new ValueTypeSig(typeDef); + return type.IsClassSig ? (TypeSig)new ClassSig(typeDef) : new ValueTypeSig(typeDef); } case ElementType.Array: { diff --git a/Editor/NameMatcher.cs b/Editor/NameMatcher.cs index 9cdcc4b..56cc2a1 100644 --- a/Editor/NameMatcher.cs +++ b/Editor/NameMatcher.cs @@ -16,7 +16,7 @@ namespace Obfuz nameOrPattern = "*"; } _str = nameOrPattern; - _regex = nameOrPattern.Contains('*') || nameOrPattern.Contains('?') ? new Regex(WildcardToRegex(nameOrPattern)) : null; + _regex = nameOrPattern.Contains("*") || nameOrPattern.Contains("?") ? new Regex(WildcardToRegex(nameOrPattern)) : null; } public static string WildcardToRegex(string pattern) diff --git a/Editor/ObfuscateRuleConfig.cs b/Editor/ObfuscateRuleConfig.cs index 14ab0cd..778c0ea 100644 --- a/Editor/ObfuscateRuleConfig.cs +++ b/Editor/ObfuscateRuleConfig.cs @@ -307,7 +307,7 @@ namespace Obfuz rule.typeRuleSpecs = new List(); foreach (XmlNode node in element.ChildNodes) { - if (node is not XmlElement childElement) + if (!(node is XmlElement childElement)) { continue; } @@ -337,7 +337,7 @@ namespace Obfuz rule.eventRuleSpecs = new List(); foreach (XmlNode node in element.ChildNodes) { - if (node is not XmlElement childElement) + if (!(node is XmlElement childElement)) { continue; } @@ -423,7 +423,7 @@ namespace Obfuz foreach (XmlNode node in element.ChildNodes) { - if (node is not XmlElement childElement) + if (!(node is XmlElement childElement)) { continue; } @@ -461,7 +461,7 @@ namespace Obfuz foreach (XmlNode node in element.ChildNodes) { - if (node is not XmlElement childElement) + if (!(node is XmlElement childElement)) { continue; } @@ -577,7 +577,7 @@ namespace Obfuz } foreach (XmlNode node in root.ChildNodes) { - if (node is not XmlElement element) + if (!(node is XmlElement element)) { continue; } diff --git a/Editor/Rename/RenameRecordMap.cs b/Editor/Rename/RenameRecordMap.cs index 2d2fa90..ab20c28 100644 --- a/Editor/Rename/RenameRecordMap.cs +++ b/Editor/Rename/RenameRecordMap.cs @@ -252,7 +252,7 @@ namespace Obfuz var root = doc.DocumentElement; foreach (XmlNode node in root.ChildNodes) { - if (node is not XmlElement element) + if (!(node is XmlElement element)) { continue; } @@ -273,11 +273,11 @@ namespace Obfuz { oldAssName = assemblyName, newAssName = newAssemblyName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = (RenameStatus)System.Enum.Parse(typeof(RenameStatus), ele.Attributes["status"].Value), }; foreach (XmlNode node in ele.ChildNodes) { - if (node is not XmlElement element) + if (!(node is XmlElement element)) { continue; } @@ -298,11 +298,11 @@ namespace Obfuz { oldFullName = typeName, newFullName = newTypeName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = (RenameStatus)System.Enum.Parse(typeof(RenameStatus), ele.Attributes["status"].Value), }; foreach (XmlNode node in ele.ChildNodes) { - if (node is not XmlElement c) + if (!(node is XmlElement c)) { continue; } @@ -330,7 +330,7 @@ namespace Obfuz }; foreach (XmlNode node in ele.ChildNodes) { - if (node is not XmlElement c) + if (!(node is XmlElement c)) { continue; }