2025-06-07 17:43:34 +08:00

177 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
/// <summary>
/// 打包某个资源包
/// </summary>
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($"<color=yellow>开始构建 : {buildTarget}</color>");
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($"<color=yellow>{packageName}构建成功</color>");
//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} 数据完成");
}
}