92 lines
3.6 KiB
C#
92 lines
3.6 KiB
C#
|
using HybridCLR.Editor.Commands;
|
|||
|
using HybridCLR.Editor;
|
|||
|
using Obfuz.Settings;
|
|||
|
using Obfuz;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
using System.Reflection;
|
|||
|
using System;
|
|||
|
using System.IO;
|
|||
|
using HybridCLR.Editor.Link;
|
|||
|
using HybridCLR.Editor.Meta;
|
|||
|
|
|||
|
public class BuildTool : MonoBehaviour
|
|||
|
{
|
|||
|
[MenuItem("Obfuz/GenerateLinkXmlForHybridCLR")]
|
|||
|
public static void GenerateLinkXml()
|
|||
|
{
|
|||
|
CompileDllCommand.CompileDllActiveBuildTarget();
|
|||
|
BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
|
|||
|
var obfuzSettings = ObfuzSettings.Instance;
|
|||
|
|
|||
|
var assemblySearchDirs = new List<string>
|
|||
|
{
|
|||
|
SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target),
|
|||
|
};
|
|||
|
ObfuscatorBuilder builder = ObfuscatorBuilder.FromObfuzSettings(obfuzSettings, target, true);
|
|||
|
builder.InsertTopPriorityAssemblySearchPaths(assemblySearchDirs);
|
|||
|
|
|||
|
Obfuscator obfuz = builder.Build();
|
|||
|
obfuz.Run();
|
|||
|
|
|||
|
|
|||
|
List<string> hotfixAssemblies = SettingsUtil.HotUpdateAssemblyNamesExcludePreserved;
|
|||
|
|
|||
|
var analyzer = new Analyzer(new PathAssemblyResolver(builder.ObfuscatedAssemblyOutputPath));
|
|||
|
var refTypes = analyzer.CollectRefs(hotfixAssemblies);
|
|||
|
|
|||
|
// HyridCLR<4C><52> LinkXmlWritter<65><72><EFBFBD><EFBFBD>public<69>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD>ʣ<EFBFBD>ֻ<EFBFBD><D6BB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
var linkXmlWriter = typeof(SettingsUtil).Assembly.GetType("HybridCLR.Editor.Link.LinkXmlWriter");
|
|||
|
var writeMethod = linkXmlWriter.GetMethod("Write", BindingFlags.Public | BindingFlags.Instance);
|
|||
|
var instance = Activator.CreateInstance(linkXmlWriter);
|
|||
|
string linkXmlOutputPath = $"{Application.dataPath}/Obfuz/link.xml";
|
|||
|
writeMethod.Invoke(instance, new object[] { linkXmlOutputPath, refTypes });
|
|||
|
Debug.Log($"[GenerateLinkXmlForObfuscatedAssembly] output:{linkXmlOutputPath}");
|
|||
|
AssetDatabase.Refresh();
|
|||
|
}
|
|||
|
|
|||
|
[MenuItem("Obfuz/CompileAndObfuscateAndCopyToStreamingAssets")]
|
|||
|
public static void CompileAndObfuscateAndCopyToStreamingAssets()
|
|||
|
{
|
|||
|
BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
|
|||
|
string outputPath = ObfuzSettings.Instance.GetObfuscatedAssemblyOutputPath(target);
|
|||
|
CompileAndObfuscate(target, outputPath);
|
|||
|
|
|||
|
Directory.CreateDirectory(Application.streamingAssetsPath);
|
|||
|
|
|||
|
foreach (string assName in SettingsUtil.HotUpdateAssemblyNamesIncludePreserved)
|
|||
|
{
|
|||
|
string srcFile = $"{outputPath}/{assName}.dll";
|
|||
|
string dstFile = $"{Application.streamingAssetsPath}/{assName}.dll.bytes";
|
|||
|
File.Copy(srcFile, dstFile, true);
|
|||
|
Debug.Log($"[CompileAndObfuscate] Copy {srcFile} to {dstFile}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public static void CompileAndObfuscate(BuildTarget target, string outputPath)
|
|||
|
{
|
|||
|
CompileDllCommand.CompileDll(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.development);
|
|||
|
var assemblySearchPaths = new List<string>
|
|||
|
{
|
|||
|
SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target),
|
|||
|
};
|
|||
|
CustomObfuscate(target, assemblySearchPaths, outputPath);
|
|||
|
}
|
|||
|
|
|||
|
public static void CustomObfuscate(BuildTarget target, List<string> assemblySearchPaths, string outputPath)
|
|||
|
{
|
|||
|
var obfuzSettings = ObfuzSettings.Instance;
|
|||
|
|
|||
|
var assemblySearchDirs = assemblySearchPaths;
|
|||
|
ObfuscatorBuilder builder = ObfuscatorBuilder.FromObfuzSettings(obfuzSettings, target, true);
|
|||
|
builder.InsertTopPriorityAssemblySearchPaths(assemblySearchDirs);
|
|||
|
builder.ObfuscatedAssemblyOutputPath = outputPath;
|
|||
|
|
|||
|
Obfuscator obfuz = builder.Build();
|
|||
|
obfuz.Run();
|
|||
|
}
|
|||
|
}
|