This commit is contained in:
2025-03-31 14:55:24 +08:00
parent 613e0f7f61
commit c5ead42ade
207 changed files with 10338 additions and 108 deletions

View File

@@ -0,0 +1,67 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;
using System.Runtime.CompilerServices;
using MonoHook;
using HybridCLR.Editor.BuildProcessors;
using System.IO;
namespace HybridCLR.MonoHook
{
#if UNITY_2021_1_OR_NEWER
[InitializeOnLoad]
public class CopyStrippedAOTAssembliesHook
{
private static MethodHook _hook;
static CopyStrippedAOTAssembliesHook()
{
if (_hook == null)
{
Type type = typeof(UnityEditor.EditorApplication).Assembly.GetType("UnityEditorInternal.AssemblyStripper");
MethodInfo miTarget = type.GetMethod("StripAssembliesTo", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
MethodInfo miReplacement = new StripAssembliesDel(OverrideStripAssembliesTo).Method;
MethodInfo miProxy = new StripAssembliesDel(StripAssembliesToProxy).Method;
_hook = new MethodHook(miTarget, miReplacement, miProxy);
_hook.Install();
}
}
private delegate bool StripAssembliesDel(string outputFolder, out string output, out string error, IEnumerable<string> linkXmlFiles, object runInformation);
private static bool OverrideStripAssembliesTo(string outputFolder, out string output, out string error, IEnumerable<string> linkXmlFiles, object runInformation)
{
bool result = StripAssembliesToProxy(outputFolder, out output, out error, linkXmlFiles, runInformation);
if (!result)
{
return false;
}
UnityEngine.Debug.Log($"== StripAssembliesTo outputDir:{outputFolder}");
string outputStrippedDir = HybridCLR.Editor.SettingsUtil.GetAssembliesPostIl2CppStripDir(EditorUserBuildSettings.activeBuildTarget);
Directory.CreateDirectory(outputStrippedDir);
foreach (var aotDll in Directory.GetFiles(outputFolder, "*.dll"))
{
string dstFile = $"{outputStrippedDir}/{Path.GetFileName(aotDll)}";
Debug.Log($"[RunAssemblyStripper] copy aot dll {aotDll} -> {dstFile}");
File.Copy(aotDll, dstFile, true);
}
return result;
}
[MethodImpl(MethodImplOptions.NoOptimization)]
private static bool StripAssembliesToProxy(string outputFolder, out string output, out string error, IEnumerable<string> linkXmlFiles, object runInformation)
{
Debug.LogError("== StripAssembliesToProxy ==");
output = "";
error = "";
return true;
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cf42c4f20b8a1b94baa04a1a5c6b8beb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,56 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;
using System.Runtime.CompilerServices;
using MonoHook;
using HybridCLR.Editor.BuildProcessors;
using System.IO;
namespace HybridCLR.MonoHook
{
#if UNITY_2022
[InitializeOnLoad]
public class GetIl2CppFolderHook
{
private static MethodHook _hook;
static GetIl2CppFolderHook()
{
if (_hook == null)
{
Type type = typeof(UnityEditor.EditorApplication).Assembly.GetType("UnityEditorInternal.IL2CPPUtils");
MethodInfo miTarget = type.GetMethod("GetIl2CppFolder", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public, null,
new Type[] { typeof(bool).MakeByRefType() }, null);
MethodInfo miReplacement = new StripAssembliesDel(OverrideMethod).Method;
MethodInfo miProxy = new StripAssembliesDel(PlaceHolderMethod).Method;
_hook = new MethodHook(miTarget, miReplacement, miProxy);
_hook.Install();
}
}
private delegate string StripAssembliesDel(out bool isDevelopmentLocation);
private static string OverrideMethod(out bool isDevelopmentLocation)
{
//Debug.Log("[GetIl2CppFolderHook] OverrideMethod");
string result = PlaceHolderMethod(out isDevelopmentLocation);
isDevelopmentLocation = false;
return result;
}
[MethodImpl(MethodImplOptions.NoOptimization)]
private static string PlaceHolderMethod(out bool isDevelopmentLocation)
{
Debug.LogError("[GetIl2CppFolderHook] PlaceHolderMethod");
isDevelopmentLocation = false;
return null;
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 96c2bc28db69e1644892219abef3d4b5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;
using System.Runtime.CompilerServices;
using MonoHook;
using HybridCLR.Editor.BuildProcessors;
using System.IO;
namespace HybridCLR.MonoHook
{
#if UNITY_2021_1_OR_NEWER && UNITY_WEBGL
[InitializeOnLoad]
public class PatchScriptingAssembliesJsonHook
{
private static MethodHook _hook;
static PatchScriptingAssembliesJsonHook()
{
if (_hook == null)
{
Type type = typeof(UnityEditor.EditorApplication);
MethodInfo miTarget = type.GetMethod("BuildMainWindowTitle", BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo miReplacement = new Func<string>(BuildMainWindowTitle).Method;
MethodInfo miProxy = new Func<string>(BuildMainWindowTitleProxy).Method;
_hook = new MethodHook(miTarget, miReplacement, miProxy);
_hook.Install();
}
}
private static string BuildMainWindowTitle()
{
string tempJsonPath = $"{Application.dataPath}/../Library/PlayerDataCache/WebGL/Data/ScriptingAssemblies.json";
if (File.Exists(tempJsonPath))
{
var patcher = new PatchScriptingAssemblyList();
patcher.PathScriptingAssembilesFile(Path.GetDirectoryName(tempJsonPath));
}
string newTitle = BuildMainWindowTitleProxy();
return newTitle;
}
[MethodImpl(MethodImplOptions.NoOptimization)]
private static string BuildMainWindowTitleProxy()
{
// 为满足MonoHook要求的最小代码长度而特地加入的无用填充代码
UnityEngine.Debug.Log(12345.ToString());
return string.Empty;
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cc89a9041ab48ac41975fbd1e00b9b98
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: