177 lines
8.1 KiB
C#
Raw Permalink Normal View History

2025-06-07 17:43:34 +08:00
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} 数据完成");
}
}