using UnityEditor; using UnityEngine; using YooAsset; using YooAsset.Editor; public class JenkinsTool { static FileOffsetEncryption _encrypt; static IEncryptionServices encrypt { get { if (_encrypt == null) _encrypt = new FileOffsetEncryption(); return _encrypt; } } /// /// 打包某个资源包 /// public static void PacketRes(string name, bool isRawFileIgnoreRule = false, BuildTarget target = BuildTarget.StandaloneWindows64, bool isprod = true) { //视频用原生文件构筑 var eline = isRawFileIgnoreRule ? EBuildPipeline.RawFileBuildPipeline : EBuildPipeline.BuiltinBuildPipeline; //视频不做加密 var isEncrypt = !isRawFileIgnoreRule; //视频不做压缩, 其他包采用LZ4压缩 var eCompress = isRawFileIgnoreRule ? ECompressOption.Uncompressed : ECompressOption.LZ4; BuildInternal(target, name, VersionUtils.PackageVesion_Add1(name).ToString(), eline, isEncrypt, eCompress); } //public static void PacketScriptRes(BuildTarget target = BuildTarget.StandaloneWindows64, bool isprod = true) //{ // string projectPath = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length); // string HotUpdateDllPath = $"{projectPath}/{HybridCLRSettings.Instance.hotUpdateDllCompileOutputRootDir}/{target}/"; // string HotUpdateDestinationPath = $"{Application.dataPath}/Script/Dlls/HotUpdateDlls/HotUpdateDll/HotUpdate.dll.bytes"; // CompileDllCommand.CompileDll(target); // FileUtil.DeleteFileOrDirectory(HotUpdateDestinationPath); // //File.Create(HotUpdateDestinationPath); // FileUtil.CopyFileOrDirectory(HotUpdateDllPath + "HotUpdate.dll", HotUpdateDestinationPath); //} private static void BuildInternal(BuildTarget buildTarget, string packageName, string packageVersion = "0", EBuildPipeline eBuildPipeline = EBuildPipeline.BuiltinBuildPipeline, bool isEncrypt = true, ECompressOption eCompress = ECompressOption.LZ4) { Debug.Log($"开始构建 : {buildTarget}"); if(packageName == "ScriptPackage") { Editor_BuildApkPanel.Build_Script_Asset(); } var buildoutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); var streamingAssetsRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); // 构建参数 BuiltinBuildParameters buildParameters = new BuiltinBuildParameters(); buildParameters.BuildOutputRoot = buildoutputRoot; buildParameters.BuildinFileRoot = streamingAssetsRoot; buildParameters.BuildPipeline = eBuildPipeline.ToString(); //if(eBuildPipeline != EBuildPipeline.RawFileBuildPipeline) buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle; //必须指定资源包类型 buildParameters.BuildTarget = buildTarget; buildParameters.PackageName = packageName; buildParameters.PackageVersion = packageVersion; buildParameters.VerifyBuildingResult = true; buildParameters.EnableSharePackRule = true; //启用共享资源构建模式,兼容1.5x版本 buildParameters.FileNameStyle = EFileNameStyle.BundleName_HashName; buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; buildParameters.BuildinFileCopyParams = string.Empty; if (isEncrypt) buildParameters.EncryptionServices = encrypt; buildParameters.CompressOption = eCompress; // 执行构建 BuiltinBuildPipeline pipeline = new BuiltinBuildPipeline(); var buildResult = pipeline.Run(buildParameters, true); if (buildResult.Success) { //OnBuildFinished(packageName, buildResult.OutputPackageDirectory); Debug.Log($"{packageName}构建成功"); //Debug.Log($"构建成功 : {buildResult.OutputPackageDirectory}"); //Debug.Log($"开始清空 : {packageName} 数据"); ////ClearDirectory(Application.streamingAssetsPath + "/yoo/" + packageName); //FileUtil.DeleteFileOrDirectory(Application.streamingAssetsPath + "/yoo/" + packageName); //Debug.Log($"清空 : {packageName} 数据完成"); //Debug.Log($"开始复制 : {packageName} 数据"); if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) { //安卓下 FileUtil.CopyFileOrDirectory(buildResult.OutputPackageDirectory, "F:\\nginx-1.27.5\\html\\CDN\\Android\\v1.0\\" + packageName + "\\" + packageVersion); } else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS) { //IOS下 FileUtil.CopyFileOrDirectory(buildResult.OutputPackageDirectory, "D:\\nginx-1.9.10\\html\\CDN\\IPhone\\v1.0\\" + packageName + "\\" + packageVersion); } else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64) { //PC下 FileUtil.CopyFileOrDirectory(buildResult.OutputPackageDirectory, "D:\\nginx-1.9.10\\html\\CDN\\PC\\v1.0\\" + packageName + "\\" + packageVersion); } else { Debug.Log("当前构建目标平台不是安卓、iOS 或 PC"); } //Debug.Log($"复制 : {packageName} 数据完成"); } else { Debug.LogError($"构建失败 : {buildResult.ErrorInfo}"); } } private static void BuildVideoInternal(BuildTarget buildTarget, string packageName, string packageVersion = "1.0") { Debug.Log($"开始构建 : {buildTarget}"); var buildoutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); var streamingAssetsRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); // 构建参数 RawFileBuildParameters buildParameters = new RawFileBuildParameters(); buildParameters.BuildOutputRoot = buildoutputRoot; buildParameters.BuildinFileRoot = streamingAssetsRoot; buildParameters.BuildPipeline = EBuildPipeline.RawFileBuildPipeline.ToString(); buildParameters.BuildTarget = buildTarget; buildParameters.PackageName = packageName; buildParameters.PackageVersion = packageVersion; buildParameters.VerifyBuildingResult = true; //buildParameters.EnableSharePackRule = true; //启用共享资源构建模式,兼容1.5x版本 buildParameters.FileNameStyle = EFileNameStyle.BundleName_HashName; buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; buildParameters.BuildinFileCopyParams = string.Empty; // 执行构建 RawFileBuildPipeline pipeline = new RawFileBuildPipeline(); var buildResult = pipeline.Run(buildParameters, true); if (buildResult.Success) { OnBuildFinished(packageName, buildResult.OutputPackageDirectory); } else { Debug.LogError($"构建失败 : {buildResult.ErrorInfo}"); } } static void OnBuildFinished(string packageName, string outputPackageDirectory) { Debug.Log($"构建成功 : {outputPackageDirectory}"); Debug.Log($"开始清空 : {packageName} 数据"); //ClearDirectory(Application.streamingAssetsPath + "/yoo/" + packageName); FileUtil.DeleteFileOrDirectory(Application.streamingAssetsPath + "/yoo/" + packageName); Debug.Log($"清空 : {packageName} 数据完成"); Debug.Log($"开始复制 : {packageName} 数据"); FileUtil.CopyFileOrDirectory(outputPackageDirectory, Application.streamingAssetsPath + "/yoo/" + packageName); Debug.Log($"复制 : {packageName} 数据完成"); } }