diff --git a/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs b/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs deleted file mode 100644 index b16c93f..0000000 --- a/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs +++ /dev/null @@ -1,277 +0,0 @@ -#if ENABLE_HOOK_TEST_CASE -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEngine; -using System.Linq; - -namespace MonoHook.Test -{ - // 有需求时可以打开,也可以手动按需注册Hook - [InitializeOnLoad] - public class BuildPipeline_StripDll_HookTest - { - /// - /// 裁剪执行完毕的回调,可能会被调用多次,一般而言同一次打包只需要处理第一次回调 - /// - public static Action OnAssemblyStripped; - - // 尝试 Hook 4个函数,至少一个被调用就可以达到要求 - private static MethodHook _hook_PostprocessBuildPlayer_CompleteBuild; - private static MethodHook _hook_Default_PostProcess; - private static MethodHook _hook_ReportBuildResults; - private static MethodHook _hook_StripAssembliesTo; - -#region Fake Internal Structures - public struct BuildPostProcessArgs - { - public BuildTarget target; - public int subTarget; - public string stagingArea; - public string stagingAreaData; - public string stagingAreaDataManaged; - public string playerPackage; - public string installPath; - public string companyName; - public string productName; - public Guid productGUID; - public BuildOptions options; - public UnityEditor.Build.Reporting.BuildReport report; - internal /*RuntimeClassRegistry*/object usedClassRegistry; - } - - public sealed class BeeDriverResult - { - public /*NodeResult*/object[] NodeResults { get; set; } - public bool Success { get; set; } - public /*Message*/object[] BeeDriverMessages { get; set; } - public override string ToString() => Success.ToString(); - } -#endregion - - static BuildPipeline_StripDll_HookTest() - { - InstallHook(); -#if ENABLE_HOOK_TEST_CASE - OnAssemblyStripped = DemoStripCallback; -#endif - } - - /// - /// 示例裁剪回调函数 - /// - /// - /// - /// - static void DemoStripCallback(string outputFolder, BuildPostProcessArgs args, BeeDriverResult result) - { - if (outputFolder != null) - Debug.Log($"stripped outputFolder is:{outputFolder}"); - else if (args.stagingAreaDataManaged != null) - Debug.Log($"stripped staging folder is:{args.stagingAreaDataManaged}"); - else if (result != null) - Debug.Log($"stripped result is: {result.Success}"); - else - Debug.Log("stripped test called"); - } - - public static void InstallHook() - { - do - { - Type type = Type.GetType("UnityEditor.PostprocessBuildPlayer,UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"); - if (type == null) - { - Debug.LogError($"can not find type: UnityEditor.PostprocessBuildPlayer"); - break; - } - - MethodInfo miTarget = type.GetMethod("PostProcessCompletedBuild", BindingFlags.Static | BindingFlags.Public); - - if (miTarget == null) - { - Debug.LogError($"can not find method: UnityEditor.PostprocessBuildPlayer.PostProcessCompletedBuild"); - break; - } - - MethodInfo miReplace = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(PostprocessBuildPlayer_CompleteBuild_Replace), BindingFlags.Static | BindingFlags.NonPublic); - MethodInfo miProxy = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(PostprocessBuildPlayer_CompleteBuild_Proxy), BindingFlags.Static | BindingFlags.NonPublic); - - _hook_PostprocessBuildPlayer_CompleteBuild = new MethodHook(miTarget, miReplace, miProxy); - _hook_PostprocessBuildPlayer_CompleteBuild.Install(); - - Debug.Log("Hook BuildPipeline_StripDll_HookTest.PostprocessBuildPlayer_CompleteBuild installed"); - } while (false); - - do - { - Type type = Type.GetType("UnityEditor.Modules.DefaultBuildPostprocessor,UnityEditor.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"); - if (type == null) - { - Debug.LogError($"can not find type: UnityEditor.Modules.DefaultBuildPostprocessor"); - break; - } - - MethodInfo[] miTargets = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly); - MethodInfo miTarget = (from mi in miTargets where mi.Name == "PostProcess" && mi.GetParameters().Length == 2 select mi).FirstOrDefault(); - - if (miTarget == null) - { - Debug.LogError($"can not find method: UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess"); - break; - } - - MethodInfo miReplace = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(Default_PostProcess_Replace), BindingFlags.Static | BindingFlags.NonPublic); - MethodInfo miProxy = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(Default_PostProcess_Proxy), BindingFlags.Static | BindingFlags.NonPublic); - - _hook_Default_PostProcess = new MethodHook(miTarget, miReplace, miProxy); - _hook_Default_PostProcess.Install(); - - Debug.Log("Hook BuildPipeline_StripDll_HookTest.PostProcess installed"); - } while (false); - - do - { - Type type = Type.GetType("UnityEditor.Modules.BeeBuildPostprocessor,UnityEditor.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"); - if (type == null) - { - Debug.LogError($"can not find type: UnityEditor.Modules.BeeBuildPostprocessor"); - break; - } - - MethodInfo miTarget = type.GetMethod("ReportBuildResults", BindingFlags.Instance | BindingFlags.NonPublic); - if (miTarget == null) - { - Debug.LogError($"can not find method: UnityEditor.Modules.BeeBuildPostprocessor.ReportBuildResults"); - break; - } - - MethodInfo miReplace = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(ReportBuildResults_Replace), BindingFlags.Static | BindingFlags.NonPublic); - MethodInfo miProxy = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(ReportBuildResults_Proxy), BindingFlags.Static | BindingFlags.NonPublic); - - _hook_ReportBuildResults = new MethodHook(miTarget, miReplace, miProxy); - _hook_ReportBuildResults.Install(); - - Debug.Log("Hook BuildPipeline_StripDll_HookTest.ReportBuildResults installed"); - } while (false); - - do - { - Type type = Type.GetType("UnityEditorInternal.AssemblyStripper,UnityEditor.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"); - if (type == null) - { - Debug.LogError($"can not find type: UnityEditorInternal.AssemblyStripper"); - break; - } - - MethodInfo miTarget = type.GetMethod("StripAssembliesTo", BindingFlags.Static | BindingFlags.NonPublic); - if (miTarget == null) - { - Debug.LogError($"can not find method: UnityEditorInternal.AssemblyStripper.StripAssembliesTo"); - break; - } - - MethodInfo miReplace = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(StripAssembliesTo_Replace), BindingFlags.Static | BindingFlags.NonPublic); - MethodInfo miProxy = typeof(BuildPipeline_StripDll_HookTest).GetMethod(nameof(StripAssembliesTo_Proxy), BindingFlags.Static | BindingFlags.NonPublic); - - _hook_StripAssembliesTo = new MethodHook(miTarget, miReplace, miProxy); - _hook_StripAssembliesTo.Install(); - - Debug.Log("Hook BuildPipeline_StripDll_HookTest.StripAssembliesTo installed"); - } while (false); - } - - public static void UninstallHook() - { - _hook_PostprocessBuildPlayer_CompleteBuild?.Uninstall(); - _hook_Default_PostProcess?.Uninstall(); - _hook_ReportBuildResults?.Uninstall(); - _hook_StripAssembliesTo?.Uninstall(); - } - - static void PostprocessBuildPlayer_CompleteBuild_Replace(BuildPostProcessArgs args) - { - Debug.Log("PostprocessBuildPlayer_CompleteBuild_Replace called"); - - OnAssemblyStripped?.Invoke(null, args, null); - PostprocessBuildPlayer_CompleteBuild_Proxy(args); - } - - static void Default_PostProcess_Replace(object obj, BuildPostProcessArgs args, out /*BuildProperties*/ object outProperties) - { - try - { - // 注意:此函数中途可能会被 Unity throw Exception - Default_PostProcess_Proxy(obj, args, out outProperties); - } - catch(Exception ex) - { - throw ex; - } - finally - { - Debug.Log("PostProcess_Replace called"); - OnAssemblyStripped?.Invoke(null, args, null); - } - } - - static void ReportBuildResults_Replace(object obj, BeeDriverResult result) - { - // TODO: 可以在这里把 Library\Bee\artifacts\WinPlayerBuildProgram\ManagedStripped 目录下的文件复制出来 - Debug.Log("ReportBuildResults_Replace called"); - - OnAssemblyStripped?.Invoke(null, default(BuildPostProcessArgs), result); - ReportBuildResults_Proxy(obj, result); - } - - static bool StripAssembliesTo_Replace(string outputFolder, out string output, out string error, IEnumerable linkXmlFiles, /*UnityLinkerRunInformation*/ object runInformation) - { - bool ret = StripAssembliesTo_Proxy(outputFolder, out output, out error, linkXmlFiles, runInformation); - - // TODO: 可以在这里把 Temp\StagingArea\Data\Managed\tempStrip 目录下的文件复制出来 - Debug.Log("StripAssembliesTo_Replace called"); - - OnAssemblyStripped?.Invoke(outputFolder, default(BuildPostProcessArgs), null); - return ret; - } - -#region Proxy Methods - [MethodImpl(MethodImplOptions.NoOptimization)] - static void PostprocessBuildPlayer_CompleteBuild_Proxy(BuildPostProcessArgs args) - { - Debug.Log("dummy code" + 200); - Debug.Log(args.companyName); - } - - [MethodImpl(MethodImplOptions.NoOptimization)] - static void Default_PostProcess_Proxy(object obj, BuildPostProcessArgs args, out /*BuildProperties*/ object outProperties) - { - Debug.Log("dummy code" + 100); - outProperties = null; - } - - [MethodImpl(MethodImplOptions.NoOptimization)] - static void ReportBuildResults_Proxy(object obj, /*BeeDriverResult*/ object result) - { - // dummy code - Debug.Log("something" + obj.ToString() + result.ToString() + 2); - } - - [MethodImpl(MethodImplOptions.NoOptimization)] - static bool StripAssembliesTo_Proxy(string outputFolder, out string output, out string error, IEnumerable linkXmlFiles, /*UnityLinkerRunInformation*/ object runInformation) - { - Debug.Log("StripAssembliesTo_Proxy called"); - output = null; - error = null; - return true; - } -#endregion - } -} - -#endif \ No newline at end of file diff --git a/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs.meta b/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs.meta deleted file mode 100644 index c9a800a..0000000 --- a/Editor/3rds/UnityHook/HybridCLRHooks/BuildPipeline_StripDll_HookTest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ed8859610137d404e87f332b7082c19b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: