From 763054884b6d1426798a5dbfb0d0a8d480598654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Fri, 13 Dec 2024 11:00:30 +0800 Subject: [PATCH] fix #387 --- .../BaseTasks/TaskCreateManifest.cs | 24 +++++++++++++++++++ .../BuildSystem/ErrorCode.cs | 1 + 2 files changed, 25 insertions(+) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs index 18659647..2653ee04 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs @@ -25,6 +25,9 @@ namespace YooAsset.Editor var buildParameters = buildParametersContext.Parameters; string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); + // 检测资源包哈希冲突 + CheckBundleHashConflict(buildMapContext); + // 创建新补丁清单 PackageManifest manifest = new PackageManifest(); manifest.FileVersion = YooAssetSettings.ManifestFileVersion; @@ -88,6 +91,27 @@ namespace YooAsset.Editor } } + /// + /// 检测资源包哈希冲突 + /// + private void CheckBundleHashConflict(BuildMapContext buildMapContext) + { + // 说明:在特殊情况下,例如某些文件加密算法会导致加密后的文件哈希值冲突! + HashSet guids = new HashSet(); + foreach (var bundleInfo in buildMapContext.Collection) + { + if (guids.Contains(bundleInfo.PackageFileHash)) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.BundleHashConflict, $"Bundle hash conflict : {bundleInfo.BundleName}"); + throw new Exception(message); + } + else + { + guids.Add(bundleInfo.PackageFileHash); + } + } + } + /// /// 获取资源包的依赖集合 /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs index 2fb0bdb2..ec5c3e93 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs @@ -39,5 +39,6 @@ namespace YooAsset.Editor // TaskCreateManifest NotFoundUnityBundleInBuildResult = 600, FoundStrayBundle = 601, + BundleHashConflict = 602, } } \ No newline at end of file