123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using HybridCLR.Editor.Installer;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEditor;
- using UnityEditor.Build;
- using UnityEditor.Build.Reporting;
- using UnityEditor.Il2Cpp;
- using UnityEditor.UnityLinker;
- using UnityEngine;
- namespace HybridCLR.Editor.BuildProcessors
- {
- internal class CopyStrippedAOTAssemblies : IPostprocessBuildWithReport, IPreprocessBuildWithReport
- #if !UNITY_2021_1_OR_NEWER
- , IIl2CppProcessor
- #endif
- {
- public int callbackOrder => 0;
- #if UNITY_2021_1_OR_NEWER
- public static string GetStripAssembliesDir2021(BuildTarget target)
- {
- string projectDir = SettingsUtil.ProjectDir;
- switch (target)
- {
- case BuildTarget.StandaloneWindows:
- case BuildTarget.StandaloneWindows64:
- return $"{projectDir}/Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped";
- case BuildTarget.StandaloneLinux64:
- return $"{projectDir}/Library/Bee/artifacts/LinuxPlayerBuildProgram/ManagedStripped";
- case BuildTarget.Android:
- return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped";
- case BuildTarget.iOS:
- return $"{projectDir}/Library/Bee/artifacts/iOS/ManagedStripped";
- case BuildTarget.WebGL:
- return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped";
- case BuildTarget.StandaloneOSX:
- return $"{projectDir}/Library/Bee/artifacts/MacStandalonePlayerBuildProgram/ManagedStripped";
- case BuildTarget.PS4:
- return $"{projectDir}/Library/Bee/artifacts/PS4PlayerBuildProgram/ManagedStripped";
- case BuildTarget.PS5:
- return $"{projectDir}/Library/Bee/artifacts/PS5PlayerBuildProgram/ManagedStripped";
- default: return "";
- }
- }
- #else
- private string GetStripAssembliesDir2020(BuildTarget target)
- {
- string subPath = target == BuildTarget.Android ?
- "assets/bin/Data/Managed" :
- "Data/Managed/";
- return $"{SettingsUtil.ProjectDir}/Temp/StagingArea/{subPath}";
- }
- public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data)
- {
- // 此回调只在 2020中调用
- CopyStripDlls(GetStripAssembliesDir2020(data.target), data.target);
- }
- #endif
- public static void CopyStripDlls(string srcStripDllPath, BuildTarget target)
- {
- if (!SettingsUtil.Enable)
- {
- Debug.Log($"[CopyStrippedAOTAssemblies] disabled");
- return;
- }
- Debug.Log($"[CopyStrippedAOTAssemblies] CopyScripDlls. src:{srcStripDllPath} target:{target}");
- var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
- Directory.CreateDirectory(dstPath);
- foreach (var fileFullPath in Directory.GetFiles(srcStripDllPath, "*.dll"))
- {
- var file = Path.GetFileName(fileFullPath);
- Debug.Log($"[CopyStrippedAOTAssemblies] copy strip dll {fileFullPath} ==> {dstPath}/{file}");
- File.Copy($"{fileFullPath}", $"{dstPath}/{file}", true);
- }
- }
- public void OnPostprocessBuild(BuildReport report)
- {
- #if UNITY_2021_1_OR_NEWER
- BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
- string srcStripDllPath = GetStripAssembliesDir2021(target);
- if (!string.IsNullOrEmpty(srcStripDllPath) && Directory.Exists(srcStripDllPath))
- {
- CopyStripDlls(srcStripDllPath, target);
- }
- #endif
- }
- public void OnPreprocessBuild(BuildReport report)
- {
- BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
- var dstPath = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
- BashUtil.RecreateDir(dstPath);
- }
- }
- }
|