fix: fix compile error on hybridclr v9.0.0

main
walon 2026-10-09 12:19:18 +08:00
parent 2b3ebc54a0
commit f5023252f1
1 changed files with 21 additions and 52 deletions

View File

@ -18,33 +18,27 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
using HybridCLR.Editor.Commands; using HybridCLR;
using HybridCLR.Editor; using HybridCLR.CodeGen.AOT;
using Obfuz.Settings; using HybridCLR.CodeGen.MethodBridge;
using HybridCLR.Commands;
using HybridCLR.Installer;
using HybridCLR.Meta;
using HybridCLR.Mod;
using HybridCLR.Utils;
using Obfuz; using Obfuz;
using Obfuz.Settings;
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using System.Reflection;
using System;
using System.IO; using System.IO;
using HybridCLR.Editor.Link;
using HybridCLR.Editor.Meta;
using UnityEditor.Build;
using HybridCLR.Editor.Installer;
using HybridCLR.Editor.MethodBridge;
using System.Linq; using System.Linq;
using Analyzer = HybridCLR.Editor.MethodBridge.Analyzer; using System.Reflection;
using HybridCLR.Editor.Settings; using UnityEditor;
using Obfuz.Utils; using UnityEditor.Build;
using FileUtil = Obfuz.Utils.FileUtil; using UnityEngine;
using IAssemblyResolver = HybridCLR.Editor.Meta.IAssemblyResolver; using CombinedAssemblyResolver = HybridCLR.Mod.CombinedAssemblyResolver;
using CombinedAssemblyResolver = HybridCLR.Editor.Meta.CombinedAssemblyResolver; using IAssemblyResolver = HybridCLR.Mod.IAssemblyResolver;
using MetaUtil = HybridCLR.Editor.Meta.MetaUtil;
using AssemblyCache = HybridCLR.Editor.Meta.AssemblyCache;
using HybridCLR.Editor.AOT;
using Analyzer2 = HybridCLR.Editor.AOT.Analyzer;
namespace Obfuz4HybridCLR namespace Obfuz4HybridCLR
{ {
@ -67,7 +61,6 @@ namespace Obfuz4HybridCLR
BuildTarget target = EditorUserBuildSettings.activeBuildTarget; BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
CompileDllCommand.CompileDll(target); CompileDllCommand.CompileDll(target);
Il2CppDefGeneratorCommand.GenerateIl2CppDef(); Il2CppDefGeneratorCommand.GenerateIl2CppDef();
GeneratePolymorphicCodesWhenEnable();
LinkGeneratorCommand.GenerateLinkXml(target); LinkGeneratorCommand.GenerateLinkXml(target);
StripAOTDllCommand.GenerateStripedAOTDlls(target); StripAOTDllCommand.GenerateStripedAOTDlls(target);
@ -87,23 +80,6 @@ namespace Obfuz4HybridCLR
ObfuscateUtil.ObfuscateHotUpdateAssemblies(target, obfuscatedHotUpdateDllPath); ObfuscateUtil.ObfuscateHotUpdateAssemblies(target, obfuscatedHotUpdateDllPath);
} }
[MenuItem("HybridCLR/ObfuzExtension/GeneratePolymorphicCodes")]
public static void GeneratePolymorphicCodes()
{
ObfuscateUtil.GeneratePolymorphicCodes($"{SettingsUtil.LocalIl2CppDir}/libil2cpp");
}
private static void GeneratePolymorphicCodesWhenEnable()
{
PolymorphicDllSettings settings = ObfuzSettings.Instance.polymorphicDllSettings;
if (!settings.enable)
{
UnityEngine.Debug.LogWarning("Polymorphic code generation is disabled.");
return;
}
GeneratePolymorphicCodes();
}
public static IAssemblyResolver CreateObfuscatedHotUpdateAssemblyResolver(BuildTarget target, List<string> obfuscatedHotUpdateAssemblies, string obfuscatedHotUpdateDllPath) public static IAssemblyResolver CreateObfuscatedHotUpdateAssemblyResolver(BuildTarget target, List<string> obfuscatedHotUpdateAssemblies, string obfuscatedHotUpdateDllPath)
{ {
return new FixedSetAssemblyResolver(obfuscatedHotUpdateDllPath, obfuscatedHotUpdateAssemblies); return new FixedSetAssemblyResolver(obfuscatedHotUpdateDllPath, obfuscatedHotUpdateAssemblies);
@ -130,7 +106,7 @@ namespace Obfuz4HybridCLR
} }
AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(MetaUtil.CreateAOTAssemblyResolver(target), aotAssemblyNames); AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(MetaUtil.CreateAOTAssemblyResolver(target), aotAssemblyNames);
var methodBridgeAnalyzer = new Analyzer(new Analyzer.Options var methodBridgeAnalyzer = new MethodBridgeAnalyzer(new MethodBridgeAnalyzer.Options
{ {
MaxIterationCount = Math.Min(20, SettingsUtil.HybridCLRSettings.maxMethodBridgeGenericIteration), MaxIterationCount = Math.Min(20, SettingsUtil.HybridCLRSettings.maxMethodBridgeGenericIteration),
Collector = collector, Collector = collector,
@ -146,19 +122,12 @@ namespace Obfuz4HybridCLR
var calliAnalyzer = new CalliAnalyzer(cache, hotUpdateDlls); var calliAnalyzer = new CalliAnalyzer(cache, hotUpdateDlls);
calliAnalyzer.Run(); calliAnalyzer.Run();
var pinvokeAnalyzer = new PInvokeAnalyzer(cache, hotUpdateDlls);
pinvokeAnalyzer.Run();
var callPInvokeMethodSignatures = pinvokeAnalyzer.PInvokeMethodSignatures;
string templateFile = $"{SettingsUtil.TemplatePathInPackage}/MethodBridge.cpp.tpl";
string outputFile = $"{SettingsUtil.GeneratedCppDir}/MethodBridge.cpp"; string outputFile = $"{SettingsUtil.GeneratedCppDir}/MethodBridge.cpp";
var callNativeMethodSignatures = calliAnalyzer.CalliMethodSignatures.Concat(pinvokeAnalyzer.PInvokeMethodSignatures).ToList(); var callNativeMethodSignatures = calliAnalyzer.CalliMethodSignatures.ToList();
var generateMethodBridgeMethod = typeof(MethodBridgeGeneratorCommand).GetMethod("GenerateMethodBridgeCppFile", BindingFlags.NonPublic | BindingFlags.Static); MethodBridgeGeneratorCommand.GenerateMethodBridgeCppFile(methodBridgeAnalyzer.GenericMethods, reversePInvokeAnalyzer.ReversePInvokeMethods, callNativeMethodSignatures, outputFile);
generateMethodBridgeMethod.Invoke(null, new object[] { methodBridgeAnalyzer.GenericMethods, reversePInvokeAnalyzer.ReversePInvokeMethods, callNativeMethodSignatures, templateFile, outputFile });
MethodBridgeGeneratorCommand.CleanIl2CppBuildCache();
} }
public static void GenerateAOTGenericReference(BuildTarget target, string obfuscatedHotUpdateDllPath) public static void GenerateAOTGenericReference(BuildTarget target, string obfuscatedHotUpdateDllPath)
@ -168,7 +137,7 @@ namespace Obfuz4HybridCLR
AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector( AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(
CreateObfuscatedHotUpdateAndAOTAssemblyResolver(target, hotUpdateDllNames, ObfuzSettings.Instance.assemblySettings.GetAssembliesToObfuscate(), obfuscatedHotUpdateDllPath), hotUpdateDllNames); CreateObfuscatedHotUpdateAndAOTAssemblyResolver(target, hotUpdateDllNames, ObfuzSettings.Instance.assemblySettings.GetAssembliesToObfuscate(), obfuscatedHotUpdateDllPath), hotUpdateDllNames);
var analyzer = new Analyzer2(new Analyzer2.Options var analyzer = new AOTReferenceAnalyzer(new AOTReferenceAnalyzer.Options
{ {
MaxIterationCount = Math.Min(20, gs.maxGenericReferenceIteration), MaxIterationCount = Math.Min(20, gs.maxGenericReferenceIteration),
Collector = collector, Collector = collector,
@ -176,7 +145,7 @@ namespace Obfuz4HybridCLR
analyzer.Run(); analyzer.Run();
var writer = new GenericReferenceWriter(); var writer = new AOTGenericReferenceWriter();
writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}"); writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
AssetDatabase.Refresh(); AssetDatabase.Refresh();
} }