mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
示例CLI工作流
示例CLI工作流
This commit is contained in:
9
BuildCLI/build_android.bat
Normal file
9
BuildCLI/build_android.bat
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
cd /d %~dp0
|
||||||
|
|
||||||
|
call path_define.bat
|
||||||
|
|
||||||
|
%UNITYEDITOR_PATH%/Unity.exe %WORKSPACE% -logFile %BUILD_LOGFILE% -executeMethod TEngine.ReleaseTools.AutomationBuildAndroid -quit -batchmode -CustomArgs:Language=en_US; %WORKSPACE%
|
||||||
|
|
||||||
|
@REM for /f "delims=[" %%i in (%BUILD_LOGFILE%) do echo %%i
|
||||||
|
|
||||||
|
pause
|
6
BuildCLI/path_define.bat
Normal file
6
BuildCLI/path_define.bat
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
cd /d %~dp0
|
||||||
|
|
||||||
|
set WORKSPACE=G:/github/TEngine/UnityProject
|
||||||
|
set UNITYEDITOR_PATH=G:/UnityEditor/2021.3.20f1c1/Editor
|
||||||
|
set BUILD_DLL_LOGFILE=./build_dll.log
|
||||||
|
set BUILD_LOGFILE=./build.log
|
@@ -4,7 +4,7 @@ using TEngine.Editor;
|
|||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public static class BuildAssetsCommand
|
public static class BuildDLLCommand
|
||||||
{
|
{
|
||||||
private const string EnableHybridClrScriptingDefineSymbol = "ENABLE_HYBRIDCLR";
|
private const string EnableHybridClrScriptingDefineSymbol = "ENABLE_HYBRIDCLR";
|
||||||
|
|
||||||
@@ -35,6 +35,12 @@ public static class BuildAssetsCommand
|
|||||||
CopyAOTHotUpdateDlls(target);
|
CopyAOTHotUpdateDlls(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void BuildAndCopyDlls(BuildTarget target)
|
||||||
|
{
|
||||||
|
CompileDllCommand.CompileDll(target);
|
||||||
|
CopyAOTHotUpdateDlls(target);
|
||||||
|
}
|
||||||
|
|
||||||
public static void CopyAOTHotUpdateDlls(BuildTarget target)
|
public static void CopyAOTHotUpdateDlls(BuildTarget target)
|
||||||
{
|
{
|
||||||
CopyAOTAssembliesToAssetPath();
|
CopyAOTAssembliesToAssetPath();
|
@@ -1,42 +1,119 @@
|
|||||||
using UnityEditor;
|
using System;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.Build.Reporting;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using YooAsset.Editor;
|
using YooAsset.Editor;
|
||||||
|
using BuildResult = UnityEditor.Build.Reporting.BuildResult;
|
||||||
|
|
||||||
namespace TEngine
|
namespace TEngine
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 打包工具类。
|
/// 打包工具类。
|
||||||
/// <remarks>通过CommandLineReader可以不前台开启Unity实现静默打包,详见CommandLineReader.cs example1</remarks>
|
/// <remarks>通过CommandLineReader可以不前台开启Unity实现静默打包以及CLI工作流,详见CommandLineReader.cs example1</remarks>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class ReleaseTools
|
public static class ReleaseTools
|
||||||
{
|
{
|
||||||
public static void BuildPackage()
|
public static void BuildDll()
|
||||||
|
{
|
||||||
|
string platform = CommandLineReader.GetCustomArgument("platform");
|
||||||
|
if (string.IsNullOrEmpty(platform))
|
||||||
|
{
|
||||||
|
Debug.LogError($"Build Asset Bundle Error!platform is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BuildTarget target = GetBuildTarget(platform);
|
||||||
|
BuildDLLCommand.BuildAndCopyDlls(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void BuildAssetBundle()
|
||||||
{
|
{
|
||||||
string outputRoot = CommandLineReader.GetCustomArgument("outputRoot");
|
string outputRoot = CommandLineReader.GetCustomArgument("outputRoot");
|
||||||
BuildTarget target = BuildTarget.StandaloneWindows64;
|
if (string.IsNullOrEmpty(outputRoot))
|
||||||
BuildInternal(target,outputRoot);
|
{
|
||||||
|
Debug.LogError($"Build Asset Bundle Error!outputRoot is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string packageVersion = CommandLineReader.GetCustomArgument("packageVersion");
|
||||||
|
if (string.IsNullOrEmpty(packageVersion))
|
||||||
|
{
|
||||||
|
Debug.LogError($"Build Asset Bundle Error!packageVersion is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string platform = CommandLineReader.GetCustomArgument("platform");
|
||||||
|
if (string.IsNullOrEmpty(platform))
|
||||||
|
{
|
||||||
|
Debug.LogError($"Build Asset Bundle Error!platform is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BuildTarget target = GetBuildTarget(platform);
|
||||||
|
BuildInternal(target, outputRoot);
|
||||||
Debug.LogWarning($"Start BuildPackage BuildTarget:{target} outputPath:{outputRoot}");
|
Debug.LogWarning($"Start BuildPackage BuildTarget:{target} outputPath:{outputRoot}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void BuildInternal(BuildTarget buildTarget,string outputRoot)
|
private static BuildTarget GetBuildTarget(string platform)
|
||||||
|
{
|
||||||
|
BuildTarget target = BuildTarget.NoTarget;
|
||||||
|
switch (platform)
|
||||||
|
{
|
||||||
|
case "Android":
|
||||||
|
target = BuildTarget.Android;
|
||||||
|
break;
|
||||||
|
case "IOS":
|
||||||
|
target = BuildTarget.iOS;
|
||||||
|
break;
|
||||||
|
case "Windows":
|
||||||
|
target = BuildTarget.StandaloneWindows64;
|
||||||
|
break;
|
||||||
|
case "MacOS":
|
||||||
|
target = BuildTarget.StandaloneOSX;
|
||||||
|
break;
|
||||||
|
case "Linux":
|
||||||
|
target = BuildTarget.StandaloneLinux64;
|
||||||
|
break;
|
||||||
|
case "WebGL":
|
||||||
|
target = BuildTarget.WebGL;
|
||||||
|
break;
|
||||||
|
case "Switch":
|
||||||
|
target = BuildTarget.Switch;
|
||||||
|
break;
|
||||||
|
case "PS4":
|
||||||
|
target = BuildTarget.PS4;
|
||||||
|
break;
|
||||||
|
case "PS5":
|
||||||
|
target = BuildTarget.PS5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void BuildInternal(BuildTarget buildTarget, string outputRoot, string packageVersion = "1.0")
|
||||||
{
|
{
|
||||||
Debug.Log($"开始构建 : {buildTarget}");
|
Debug.Log($"开始构建 : {buildTarget}");
|
||||||
|
|
||||||
|
BuildParameters.SBPBuildParameters sbpBuildParameters = new BuildParameters.SBPBuildParameters();
|
||||||
|
sbpBuildParameters.WriteLinkXML = true;
|
||||||
|
|
||||||
// 构建参数
|
// 构建参数
|
||||||
BuildParameters buildParameters = new BuildParameters();
|
BuildParameters buildParameters = new BuildParameters();
|
||||||
buildParameters.StreamingAssetsRoot = AssetBundleBuilderHelper.GetDefaultStreamingAssetsRoot();
|
buildParameters.StreamingAssetsRoot = AssetBundleBuilderHelper.GetDefaultStreamingAssetsRoot();
|
||||||
buildParameters.BuildOutputRoot = outputRoot;//AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
buildParameters.BuildOutputRoot = outputRoot; //AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||||
buildParameters.BuildTarget = buildTarget;
|
buildParameters.BuildTarget = buildTarget;
|
||||||
buildParameters.BuildPipeline = EBuildPipeline.BuiltinBuildPipeline;
|
buildParameters.BuildPipeline = EBuildPipeline.ScriptableBuildPipeline;
|
||||||
buildParameters.BuildMode = EBuildMode.ForceRebuild;
|
buildParameters.BuildMode = EBuildMode.IncrementalBuild;
|
||||||
buildParameters.PackageName = "DefaultPackage";
|
buildParameters.PackageName = "DefaultPackage";
|
||||||
buildParameters.PackageVersion = "1.0";
|
buildParameters.PackageVersion = packageVersion;
|
||||||
buildParameters.VerifyBuildingResult = true;
|
buildParameters.VerifyBuildingResult = true;
|
||||||
buildParameters.SharedPackRule = new ZeroRedundancySharedPackRule();
|
buildParameters.SharedPackRule = new ZeroRedundancySharedPackRule();
|
||||||
buildParameters.CompressOption = ECompressOption.LZ4;
|
buildParameters.CompressOption = ECompressOption.LZMA;
|
||||||
buildParameters.OutputNameStyle = EOutputNameStyle.HashName;
|
buildParameters.OutputNameStyle = EOutputNameStyle.HashName;
|
||||||
buildParameters.CopyBuildinFileOption = ECopyBuildinFileOption.None;
|
buildParameters.CopyBuildinFileOption = ECopyBuildinFileOption.ClearAndCopyAll;
|
||||||
|
buildParameters.SBPParameters = sbpBuildParameters;
|
||||||
|
|
||||||
// 执行构建
|
// 执行构建
|
||||||
AssetBundleBuilder builder = new AssetBundleBuilder();
|
AssetBundleBuilder builder = new AssetBundleBuilder();
|
||||||
var buildResult = builder.Run(buildParameters);
|
var buildResult = builder.Run(buildParameters);
|
||||||
@@ -50,15 +127,66 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从构建命令里获取参数示例
|
[MenuItem("TEngine/Build/一键打包Windows", false, 30)]
|
||||||
private static string GetBuildPackageName()
|
public static void AutomationBuild()
|
||||||
{
|
{
|
||||||
foreach (string arg in System.Environment.GetCommandLineArgs())
|
BuildDLLCommand.BuildAndCopyDlls(BuildTarget.StandaloneWindows64);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildInternal(BuildTarget.StandaloneWindows64, Application.dataPath + "/../Builds/Windows", "1.0");
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildImp(BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64, $"{Application.dataPath}/../Builds/Windows/{GetBuildPackageVersion()}Windows.exe");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建版本相关
|
||||||
|
private static string GetBuildPackageVersion()
|
||||||
|
{
|
||||||
|
int totalMinutes = DateTime.Now.Hour * 60 + DateTime.Now.Minute;
|
||||||
|
return DateTime.Now.ToString("yyyy-MM-dd") + "-" + totalMinutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MenuItem("TEngine/Build/一键打包Android", false, 30)]
|
||||||
|
public static void AutomationBuildAndroid()
|
||||||
|
{
|
||||||
|
BuildDLLCommand.BuildAndCopyDlls(BuildTarget.Android);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildInternal(BuildTarget.Android, outputRoot:Application.dataPath + "/../Bundles",packageVersion: GetBuildPackageVersion());
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildImp(BuildTargetGroup.Android, BuildTarget.Android, $"{Application.dataPath}/../Build/Android/{GetBuildPackageVersion()}Android.apk");
|
||||||
|
}
|
||||||
|
|
||||||
|
[MenuItem("TEngine/Build/一键打包IOS", false, 30)]
|
||||||
|
public static void AutomationBuildIOS()
|
||||||
|
{
|
||||||
|
BuildDLLCommand.BuildAndCopyDlls(BuildTarget.iOS);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildInternal(BuildTarget.iOS, outputRoot:Application.dataPath + "/../Bundles",packageVersion: GetBuildPackageVersion());
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
BuildImp(BuildTargetGroup.iOS, BuildTarget.iOS, $"{Application.dataPath}/../Build/IOS/XCode_Project");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void BuildImp(BuildTargetGroup buildTargetGroup, BuildTarget buildTarget, string locationPathName)
|
||||||
|
{
|
||||||
|
EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, BuildTarget.StandaloneWindows64);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions
|
||||||
{
|
{
|
||||||
if (arg.StartsWith("buildPackage"))
|
scenes = new[] { "Assets/Scenes/main.unity" },
|
||||||
return arg.Split("="[0])[1];
|
locationPathName = locationPathName,
|
||||||
|
targetGroup = buildTargetGroup,
|
||||||
|
target = buildTarget,
|
||||||
|
options = BuildOptions.None
|
||||||
|
};
|
||||||
|
var report = BuildPipeline.BuildPlayer(buildPlayerOptions);
|
||||||
|
BuildSummary summary = report.summary;
|
||||||
|
if (summary.result == BuildResult.Succeeded)
|
||||||
|
{
|
||||||
|
Debug.Log($"Build success: {summary.totalSize / 1024 / 1024} MB");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Log($"Build Failed" + summary.result);
|
||||||
}
|
}
|
||||||
return string.Empty;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user