1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using System.IO;
- using HybridCLR.Editor;
- using UnityEditor;
- using UnityEngine;
- using GFGGame;
- using HybridCLR.Editor.Commands;
- using System.Collections.Generic;
- namespace GFGEditor
- {
- public class BuildDllHelper
- {
- [InitializeOnLoadMethod]
- public static void Init()
- {
- AssetBundleHelper.BuildHotUpdateDll = BuildHotUpdateDll;
- }
- public static void BuildHotUpdateDll()
- {
- CompileDllCommand.CompileDllActiveBuildTarget();
- CopyHotUpdateAssembliesToStreamingAssets();
- }
- public static void CopyHotUpdateAssembliesToStreamingAssets()
- {
- var target = EditorUserBuildSettings.activeBuildTarget;
- string hotfixDllSrcDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target);
- string hotfixAssembliesDstDir = LauncherConfig.DllDirHotfix;
- if (!Directory.Exists(LauncherConfig.DllDirHotfix))
- {
- Directory.CreateDirectory(LauncherConfig.DllDirHotfix);
- }
- List<string> HotUpdateAssemblyFiles = new List<string>() { "Game.HotUpdate.dll" };
- foreach (var dll in HotUpdateAssemblyFiles)
- {
- string dllPath = $"{hotfixDllSrcDir}/{dll}";
- string dllBytesPath = $"{hotfixAssembliesDstDir}{dll}.bytes";
- File.Copy(dllPath, dllBytesPath, true);
- Debug.Log($"[CopyHotUpdateAssembliesToStreamingAssets] copy hotfix dll {dllPath} -> {dllBytesPath}");
- }
- }
- public static void CopyAOTAssembliesToStreamingAssets()
- {
- var target = EditorUserBuildSettings.activeBuildTarget;
- string aotAssembliesSrcDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
- string aotAssembliesDstDir = LauncherConfig.DllDirAOT;
- if(!Directory.Exists(LauncherConfig.DllDirAOT))
- {
- Directory.CreateDirectory(LauncherConfig.DllDirAOT);
- }
- foreach (var dll in HotUpdateCodeLoader.AOTMetaAssemblyNames)
- {
- string srcDllPath = $"{aotAssembliesSrcDir}/{dll}";
- if (!File.Exists(srcDllPath))
- {
- Debug.LogError($"ab中添加AOT补充元数据dll:{srcDllPath} 时发生错误,文件不存在。裁剪后的AOT dll在BuildPlayer时才能生成,因此需要你先构建一次游戏App后再打包。");
- continue;
- }
- string dllBytesPath = $"{aotAssembliesDstDir}{dll}.bytes";
- File.Copy(srcDllPath, dllBytesPath, true);
- Debug.Log($"[CopyAOTAssembliesToStreamingAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}");
- }
- }
- }
- }
|