From a6c6da62d329aa1a4c1d8dd17b2aae0261165592 Mon Sep 17 00:00:00 2001 From: hevinci Date: Wed, 23 Mar 2022 17:18:43 +0800 Subject: [PATCH] Update AssetBundleBuilder --- .../AssetBundleBuilderWindow.cs | 55 ++++++++++++++++++- .../AssetBundleBuilder/BuildParameters.cs | 10 ++++ .../BuildReport/ReportSummary.cs | 10 ++++ .../BuildTasks/TaskCreateReport.cs | 6 +- .../BuildTasks/TaskEncryption.cs | 31 +++-------- .../BuildTasks/TaskGetBuildMap.cs | 20 +------ ...setEncrypter.cs => IEncryptionServices.cs} | 2 +- ...er.cs.meta => IEncryptionServices.cs.meta} | 0 ...etRedundancy.cs => IRedundancyServices.cs} | 2 +- ...cy.cs.meta => IRedundancyServices.cs.meta} | 0 10 files changed, 88 insertions(+), 48 deletions(-) rename Assets/YooAsset/Editor/AssetBundleBuilder/{IAssetEncrypter.cs => IEncryptionServices.cs} (89%) rename Assets/YooAsset/Editor/AssetBundleBuilder/{IAssetEncrypter.cs.meta => IEncryptionServices.cs.meta} (100%) rename Assets/YooAsset/Editor/AssetBundleBuilder/{IAssetRedundancy.cs => IRedundancyServices.cs} (76%) rename Assets/YooAsset/Editor/AssetBundleBuilder/{IAssetRedundancy.cs.meta => IRedundancyServices.cs.meta} (100%) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs index 4235da2..0a601ac 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Collections.Generic; using UnityEngine; using UnityEditor; @@ -27,11 +28,21 @@ namespace YooAsset.Editor // 构建参数 private int _buildVersion; private BuildTarget _buildTarget; - private ECompressOption _compressOption = ECompressOption.Uncompressed; + private ECompressOption _compressOption; private bool _appendExtension = false; private bool _forceRebuild = false; private string _buildinTags = string.Empty; + // 加密类相关 + private List _encryptionServicesClassTypes; + private string[] _encryptionServicesClassNames; + private int _encryptionServicesSelectIndex = -1; + + // 冗余类相关 + private List _redundancyServicesClassTypes; + private string[] _redundancyServicesClassNames; + private int _redundancyServicesSelectIndex = -1; + // GUI相关 private bool _isInit = false; private GUIStyle _centerStyle; @@ -52,8 +63,12 @@ namespace YooAsset.Editor EditorGUILayout.LabelField("Build Output", pipelineOutputDirectory); // 构建参数 - _buildVersion = EditorGUILayout.IntField("Build Version", _buildVersion, GUILayout.MaxWidth(250)); - _compressOption = (ECompressOption)EditorGUILayout.EnumPopup("Compression", _compressOption, GUILayout.MaxWidth(250)); + _buildVersion = EditorGUILayout.IntField("Build Version", _buildVersion, GUILayout.MaxWidth(300)); + _compressOption = (ECompressOption)EditorGUILayout.EnumPopup("Compression", _compressOption, GUILayout.MaxWidth(300)); + if (_encryptionServicesClassNames.Length > 0) + _encryptionServicesSelectIndex = EditorGUILayout.Popup("Encryption Services", _encryptionServicesSelectIndex, _encryptionServicesClassNames, GUILayout.MaxWidth(300)); + if (_redundancyServicesClassNames.Length > 0) + _redundancyServicesSelectIndex = EditorGUILayout.Popup("Redundancy Services", _redundancyServicesSelectIndex, _redundancyServicesClassNames, GUILayout.MaxWidth(300)); _appendExtension = GUILayout.Toggle(_appendExtension, "Append Extension", GUILayout.MaxWidth(120)); _forceRebuild = GUILayout.Toggle(_forceRebuild, "Force Rebuild", GUILayout.MaxWidth(120)); if (_forceRebuild) @@ -104,6 +119,12 @@ namespace YooAsset.Editor _buildVersion = appVersion.Revision; _buildTarget = EditorUserBuildSettings.activeBuildTarget; + _encryptionServicesClassTypes = GetEncryptionServicesClassTypes(); + _encryptionServicesClassNames = _encryptionServicesClassTypes.Select(t => t.FullName).ToArray(); + + _redundancyServicesClassTypes = GetRedundancyServicesClassTypes(); + _redundancyServicesClassNames = _redundancyServicesClassTypes.Select(t => t.FullName).ToArray(); + // 读取配置 LoadSettingsFromPlayerPrefs(); } @@ -119,6 +140,8 @@ namespace YooAsset.Editor buildParameters.OutputRoot = defaultOutputRoot; buildParameters.BuildTarget = _buildTarget; buildParameters.BuildVersion = _buildVersion; + buildParameters.EncryptionServices = CreateEncryptionServicesInstance(); + buildParameters.RedundancyServices = CreateRedundancyServicesInstance(); buildParameters.CompressOption = _compressOption; buildParameters.AppendFileExtension = _appendExtension; buildParameters.ForceRebuild = _forceRebuild; @@ -126,6 +149,32 @@ namespace YooAsset.Editor _assetBuilder.Run(buildParameters); } + private List GetEncryptionServicesClassTypes() + { + List classTypes = AssemblyUtility.GetAssignableTypes(AssemblyUtility.UnityDefaultAssemblyEditorName, typeof(IEncryptionServices)); + return classTypes; + } + private IEncryptionServices CreateEncryptionServicesInstance() + { + if (_encryptionServicesSelectIndex < 0) + return null; + var classType = _encryptionServicesClassTypes[_encryptionServicesSelectIndex]; + return (IEncryptionServices)Activator.CreateInstance(classType); + } + + private List GetRedundancyServicesClassTypes() + { + List classTypes = AssemblyUtility.GetAssignableTypes(AssemblyUtility.UnityDefaultAssemblyEditorName, typeof(IRedundancyServices)); + return classTypes; + } + private IRedundancyServices CreateRedundancyServicesInstance() + { + if (_redundancyServicesSelectIndex < 0) + return null; + var classType = _redundancyServicesClassTypes[_redundancyServicesSelectIndex]; + return (IRedundancyServices)Activator.CreateInstance(classType); + } + #region 配置相关 private const string StrEditorCompressOption = "StrEditorCompressOption"; private const string StrEditorAppendExtension = "StrEditorAppendExtension"; diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs index 5574669..fc85561 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs @@ -40,6 +40,16 @@ namespace YooAsset.Editor /// public bool AppendFileExtension = false; + /// + /// 加密类 + /// + public IEncryptionServices EncryptionServices; + + /// + /// 冗余类 + /// + public IRedundancyServices RedundancyServices; + /// /// 强制重新构建整个项目,如果为FALSE则是增量打包 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs index 1da9e76..ccd704f 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs @@ -53,6 +53,16 @@ namespace YooAsset.Editor /// public string ShadersBundleName; + /// + /// 加密服务类名称 + /// + public string EncryptionServicesClassName; + + /// + /// 冗余服务类名称 + /// + public string RedundancyServicesClassName; + // 构建参数 public bool ForceRebuild; public string BuildinTags; diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs index 43fb035..2c1b323 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs @@ -33,7 +33,11 @@ namespace YooAsset.Editor buildReport.Summary.AppendFileExtension = buildParameters.Parameters.AppendFileExtension; buildReport.Summary.AutoCollectShaders = AssetBundleCollectorSettingData.Setting.AutoCollectShaders; buildReport.Summary.ShadersBundleName = AssetBundleCollectorSettingData.Setting.ShadersBundleName; - + buildReport.Summary.EncryptionServicesClassName = buildParameters.Parameters.EncryptionServices == null ? + "null" : buildParameters.Parameters.EncryptionServices.GetType().FullName; + buildReport.Summary.RedundancyServicesClassName = buildParameters.Parameters.RedundancyServices == null ? + "null" : buildParameters.Parameters.RedundancyServices.GetType().FullName; + // 构建参数 buildReport.Summary.ForceRebuild = buildParameters.Parameters.ForceRebuild; buildReport.Summary.BuildinTags = buildParameters.Parameters.BuildinTags; diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs index d40dc1e..0dd04c3 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs @@ -26,40 +26,23 @@ namespace YooAsset.Editor var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); - var encrypter = CreateAssetEncrypter(); - List encryptList = EncryptFiles(encrypter, buildParameters, buildMapContext); - EncryptionContext encryptionContext = new EncryptionContext(); - encryptionContext.EncryptList = encryptList; + encryptionContext.EncryptList = EncryptFiles(buildParameters, buildMapContext); context.SetContextObject(encryptionContext); } - /// - /// 创建加密类 - /// - /// 如果没有定义类型,则返回NULL - private IAssetEncrypter CreateAssetEncrypter() - { - var types = AssemblyUtility.GetAssignableTypes(AssemblyUtility.UnityDefaultAssemblyEditorName, typeof(IAssetEncrypter)); - if (types.Count == 0) - return null; - if (types.Count != 1) - throw new Exception($"Found more {nameof(IAssetEncrypter)} types. We only support one."); - - UnityEngine.Debug.Log($"创建实例类 : {types[0].FullName}"); - return (IAssetEncrypter)Activator.CreateInstance(types[0]); - } - /// /// 加密文件 /// - private List EncryptFiles(IAssetEncrypter encrypter, AssetBundleBuilder.BuildParametersContext buildParameters, TaskGetBuildMap.BuildMapContext buildMapContext) + private List EncryptFiles(AssetBundleBuilder.BuildParametersContext buildParameters, TaskGetBuildMap.BuildMapContext buildMapContext) { + var encryptionServices = buildParameters.Parameters.EncryptionServices; + // 加密资源列表 List encryptList = new List(); // 如果没有设置加密类 - if (encrypter == null) + if (encryptionServices == null) return encryptList; UnityEngine.Debug.Log($"开始加密资源文件"); @@ -68,7 +51,7 @@ namespace YooAsset.Editor { var bundleName = bundleInfo.BundleName; string filePath = $"{buildParameters.PipelineOutputDirectory}/{bundleName}"; - if (encrypter.Check(filePath)) + if (encryptionServices.Check(filePath)) { encryptList.Add(bundleName); @@ -76,7 +59,7 @@ namespace YooAsset.Editor byte[] fileData = File.ReadAllBytes(filePath); if (EditorTools.CheckBundleFileValid(fileData)) { - byte[] bytes = encrypter.Encrypt(fileData); + byte[] bytes = encryptionServices.Encrypt(fileData); File.WriteAllBytes(filePath, bytes); UnityEngine.Debug.Log($"文件加密完成:{filePath}"); } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs index 9a5c1fd..1732a79 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs @@ -189,7 +189,7 @@ namespace YooAsset.Editor buildMapContext.AssetFileCount = buildAssetDic.Values.Count; // 4. 移除零依赖的资源 - var redundancy = CreateAssetRedundancy(); + var redundancyServices = buildParameters.Parameters.RedundancyServices; List undependentAssets = new List(); foreach (KeyValuePair pair in buildAssetDic) { @@ -205,7 +205,7 @@ namespace YooAsset.Editor } // 冗余扩展 - if (redundancy != null && redundancy.Check(buildAssetInfo.AssetPath)) + if (redundancyServices != null && redundancyServices.Check(buildAssetInfo.AssetPath)) { undependentAssets.Add(buildAssetInfo); buildMapContext.RedundancyAssetList.Add(buildAssetInfo.AssetPath); @@ -300,21 +300,5 @@ namespace YooAsset.Editor } } } - - /// - /// 创建冗余类 - /// - /// 如果没有定义类型,则返回NULL - private IAssetRedundancy CreateAssetRedundancy() - { - var types = AssemblyUtility.GetAssignableTypes(AssemblyUtility.UnityDefaultAssemblyEditorName, typeof(IAssetRedundancy)); - if (types.Count == 0) - return null; - if (types.Count != 1) - throw new Exception($"Found more {nameof(IAssetRedundancy)} types. We only support one."); - - UnityEngine.Debug.Log($"创建实例类 : {types[0].FullName}"); - return (IAssetRedundancy)Activator.CreateInstance(types[0]); - } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetEncrypter.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/IEncryptionServices.cs similarity index 89% rename from Assets/YooAsset/Editor/AssetBundleBuilder/IAssetEncrypter.cs rename to Assets/YooAsset/Editor/AssetBundleBuilder/IEncryptionServices.cs index 64f8aac..4b35d81 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetEncrypter.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/IEncryptionServices.cs @@ -1,7 +1,7 @@  namespace YooAsset.Editor { - public interface IAssetEncrypter + public interface IEncryptionServices { /// /// 检测是否需要加密 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetEncrypter.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/IEncryptionServices.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/AssetBundleBuilder/IAssetEncrypter.cs.meta rename to Assets/YooAsset/Editor/AssetBundleBuilder/IEncryptionServices.cs.meta diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetRedundancy.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/IRedundancyServices.cs similarity index 76% rename from Assets/YooAsset/Editor/AssetBundleBuilder/IAssetRedundancy.cs rename to Assets/YooAsset/Editor/AssetBundleBuilder/IRedundancyServices.cs index e49e3f8..4e8e4a7 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetRedundancy.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/IRedundancyServices.cs @@ -1,7 +1,7 @@  namespace YooAsset.Editor { - public interface IAssetRedundancy + public interface IRedundancyServices { /// /// 检测是否冗余 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/IAssetRedundancy.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/IRedundancyServices.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/AssetBundleBuilder/IAssetRedundancy.cs.meta rename to Assets/YooAsset/Editor/AssetBundleBuilder/IRedundancyServices.cs.meta