修复`HybridCLR/ObfuzExtension/GenerateAll`生成AOTGenericReferences时热更新dll还未混淆,并且热更新dll的resolve路径为原始未混淆的dll路径,而不是混淆后的dll路径的bug

main
walon 2025-06-04 00:20:42 +08:00
parent 97be9b0709
commit 064af2872e
1 changed files with 23 additions and 1 deletions

View File

@ -23,6 +23,8 @@ using IAssemblyResolver = HybridCLR.Editor.Meta.IAssemblyResolver;
using CombinedAssemblyResolver = HybridCLR.Editor.Meta.CombinedAssemblyResolver; using CombinedAssemblyResolver = HybridCLR.Editor.Meta.CombinedAssemblyResolver;
using MetaUtil = HybridCLR.Editor.Meta.MetaUtil; using MetaUtil = HybridCLR.Editor.Meta.MetaUtil;
using AssemblyCache = HybridCLR.Editor.Meta.AssemblyCache; using AssemblyCache = HybridCLR.Editor.Meta.AssemblyCache;
using HybridCLR.Editor.AOT;
using Analyzer2 = HybridCLR.Editor.AOT.Analyzer;
namespace Obfuz4HybridCLR namespace Obfuz4HybridCLR
{ {
@ -47,11 +49,11 @@ namespace Obfuz4HybridCLR
Il2CppDefGeneratorCommand.GenerateIl2CppDef(); Il2CppDefGeneratorCommand.GenerateIl2CppDef();
LinkGeneratorCommand.GenerateLinkXml(target); LinkGeneratorCommand.GenerateLinkXml(target);
StripAOTDllCommand.GenerateStripedAOTDlls(target); StripAOTDllCommand.GenerateStripedAOTDlls(target);
AOTReferenceGeneratorCommand.GenerateAOTGenericReference(target);
string obfuscatedHotUpdateDllPath = GetObfuscatedHotUpdateAssemblyOutputPath(target); string obfuscatedHotUpdateDllPath = GetObfuscatedHotUpdateAssemblyOutputPath(target);
ObfuscateUtil.ObfuscateHotUpdateAssemblies(target, obfuscatedHotUpdateDllPath); ObfuscateUtil.ObfuscateHotUpdateAssemblies(target, obfuscatedHotUpdateDllPath);
GenerateMethodBridgeAndReversePInvokeWrapper(target, obfuscatedHotUpdateDllPath); GenerateMethodBridgeAndReversePInvokeWrapper(target, obfuscatedHotUpdateDllPath);
GenerateAOTGenericReference(target, obfuscatedHotUpdateDllPath);
} }
[MenuItem("HybridCLR/ObfuzExtension/CompileAndObfuscateDll")] [MenuItem("HybridCLR/ObfuzExtension/CompileAndObfuscateDll")]
@ -120,5 +122,25 @@ namespace Obfuz4HybridCLR
MethodBridgeGeneratorCommand.CleanIl2CppBuildCache(); MethodBridgeGeneratorCommand.CleanIl2CppBuildCache();
} }
public static void GenerateAOTGenericReference(BuildTarget target, string obfuscatedHotUpdateDllPath)
{
var gs = SettingsUtil.HybridCLRSettings;
List<string> hotUpdateDllNames = SettingsUtil.HotUpdateAssemblyNamesExcludePreserved;
AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(
CreateObfuscatedHotUpdateAndAOTAssemblyResolver(target, hotUpdateDllNames, ObfuzSettings.Instance.assemblySettings.GetAssembliesToObfuscate(), obfuscatedHotUpdateDllPath), hotUpdateDllNames);
var analyzer = new Analyzer2(new Analyzer2.Options
{
MaxIterationCount = Math.Min(20, gs.maxGenericReferenceIteration),
Collector = collector,
});
analyzer.Run();
var writer = new GenericReferenceWriter();
writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
AssetDatabase.Refresh();
}
} }
} }