|
|
|
|
@ -0,0 +1,317 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using Guru.Editor;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class BuildTool
|
|
|
|
|
{
|
|
|
|
|
public enum BuildType
|
|
|
|
|
{
|
|
|
|
|
JenkinsBuild,
|
|
|
|
|
EditorBuild
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum BuildEnv
|
|
|
|
|
{
|
|
|
|
|
None,
|
|
|
|
|
Debug,
|
|
|
|
|
Release,
|
|
|
|
|
Production,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class BuildParam
|
|
|
|
|
{
|
|
|
|
|
public BuildType BuildType;
|
|
|
|
|
public BuildEnv BuildEnv;
|
|
|
|
|
public string BundleVersion;
|
|
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return $"{nameof(BuildType)}: {BuildType}, {nameof(BuildEnv)}: {BuildEnv}, {nameof(BundleVersion)}: {BundleVersion}";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Jenkins打包
|
|
|
|
|
|
|
|
|
|
private static string[] ParseJenkinsBuildSetting(string[] commandLineArgs)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < commandLineArgs.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
string commandLineArg = commandLineArgs[i];
|
|
|
|
|
if (commandLineArg.StartsWith("-params"))
|
|
|
|
|
{
|
|
|
|
|
return commandLineArg.Split('-');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static BuildParam ParseJenkinsParam()
|
|
|
|
|
{
|
|
|
|
|
BuildParam buildParam = null;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var param = ParseJenkinsBuildSetting(Environment.GetCommandLineArgs());
|
|
|
|
|
string version = param[2];
|
|
|
|
|
BuildEnv buildEnv = BuildEnv.None;
|
|
|
|
|
Enum.TryParse(param[3], out buildEnv);
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(version))
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
Debug.LogError("【jenkins version参数解析异常】");
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (buildEnv == BuildEnv.None)
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
Debug.LogError("【jenkins buildEnv参数解析异常】");
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buildParam = new BuildParam
|
|
|
|
|
{
|
|
|
|
|
BundleVersion = version,
|
|
|
|
|
BuildType = BuildType.JenkinsBuild,
|
|
|
|
|
BuildEnv = buildEnv,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
Debug.LogError("【jenkins 参数解析异常】");
|
|
|
|
|
Debug.LogException(e);
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buildParam;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void JenkinsBuildAndroid()
|
|
|
|
|
{
|
|
|
|
|
string outputDir = Path.GetFullPath($"{Application.dataPath}/../BuildOutput/Android");
|
|
|
|
|
if (Directory.Exists(outputDir))
|
|
|
|
|
Directory.Delete(outputDir, true);
|
|
|
|
|
|
|
|
|
|
BuildParam buildParam = ParseJenkinsParam();
|
|
|
|
|
if (buildParam == null)
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
Debug.LogError("【jenkins buildParam获取为null】");
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Debug.Log(buildParam.ToString());
|
|
|
|
|
BuildAndroid(buildParam);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void JenkinsBuildIOS()
|
|
|
|
|
{
|
|
|
|
|
BuildParam buildParam = ParseJenkinsParam();
|
|
|
|
|
if (buildParam == null)
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
Debug.LogError("【jenkins buildParam获取为null】");
|
|
|
|
|
Debug.LogError("==============================");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Debug.Log(buildParam.ToString());
|
|
|
|
|
BuildIOS(buildParam);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Android打包MenuItem定义
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Debug", true)]
|
|
|
|
|
public static bool IsBuildAndroidDebug()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Debug")]
|
|
|
|
|
public static void BuildAndroidDebug()
|
|
|
|
|
{
|
|
|
|
|
BuildAndroid(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Debug,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Release", true)]
|
|
|
|
|
public static bool IsBuildAndroidRelease()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Release")]
|
|
|
|
|
public static void BuildAndroidRelease()
|
|
|
|
|
{
|
|
|
|
|
BuildAndroid(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Release,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Production", true)]
|
|
|
|
|
public static bool IsBuildAndroidProduction()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/Android/Production")]
|
|
|
|
|
public static void BuildAndroidProduction()
|
|
|
|
|
{
|
|
|
|
|
BuildAndroid(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Production,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region iOS打包MenuItem定义
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Debug", true)]
|
|
|
|
|
public static bool IsBuildIOSDebug()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Debug")]
|
|
|
|
|
public static void BuildIOSDebug()
|
|
|
|
|
{
|
|
|
|
|
BuildIOS(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Debug,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Release", true)]
|
|
|
|
|
public static bool IsBuildIOSRelease()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Release")]
|
|
|
|
|
public static void BuildIOSRelease()
|
|
|
|
|
{
|
|
|
|
|
BuildIOS(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Release,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Production", true)]
|
|
|
|
|
public static bool IsBuildIOSProduction()
|
|
|
|
|
{
|
|
|
|
|
return EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/iOS/Production")]
|
|
|
|
|
public static void BuildIOSProduction()
|
|
|
|
|
{
|
|
|
|
|
BuildIOS(new BuildParam()
|
|
|
|
|
{
|
|
|
|
|
BuildType = BuildType.EditorBuild,
|
|
|
|
|
BuildEnv = BuildEnv.Production,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private static AppBuildParam GetGuruSDKAppBuildParam(BuildParam buildParam)
|
|
|
|
|
{
|
|
|
|
|
return AppBuildParam.Build(
|
|
|
|
|
isRelease: buildParam.BuildEnv == BuildEnv.Release || buildParam.BuildEnv == BuildEnv.Production,
|
|
|
|
|
builderType: buildParam.BuildType == BuildType.EditorBuild ? AppBuilderType.Editor : AppBuilderType.Jenkins,
|
|
|
|
|
version: buildParam.BundleVersion,
|
|
|
|
|
buildShowLog: buildParam.BuildEnv == BuildEnv.Debug || buildParam.BuildEnv == BuildEnv.Release,
|
|
|
|
|
buildSymbols: buildParam.BuildEnv == BuildEnv.Production,
|
|
|
|
|
buildAAB: buildParam.BuildEnv == BuildEnv.Production,
|
|
|
|
|
useMinify: true,
|
|
|
|
|
debugWithMono: false
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void OnGuruSDKBuildPreprocess()
|
|
|
|
|
{
|
|
|
|
|
PlayerSettings.SplashScreen.show = false;
|
|
|
|
|
PlayerSettings.SplashScreen.showUnityLogo = false;
|
|
|
|
|
Assembly assembly = Assembly.GetAssembly(typeof(IBuildImp));
|
|
|
|
|
var types = assembly.GetTypes();
|
|
|
|
|
foreach (var item in types)
|
|
|
|
|
{
|
|
|
|
|
if(item.IsInterface) continue;
|
|
|
|
|
var interfaces = item.GetInterfaces();
|
|
|
|
|
foreach (var interfaceType in interfaces)
|
|
|
|
|
{
|
|
|
|
|
if (interfaceType == typeof(IBuildImp))
|
|
|
|
|
{
|
|
|
|
|
var instance = Activator.CreateInstance(item) as IBuildImp;
|
|
|
|
|
Debug.Log(instance.GetType().Name);
|
|
|
|
|
instance.OnGuruSDKBuildPreprocess();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void BuildAndroid(BuildParam buildParam)
|
|
|
|
|
{
|
|
|
|
|
Debug.Log("========Project Asset Process Start========");
|
|
|
|
|
OnGuruSDKBuildPreprocess();
|
|
|
|
|
Debug.Log("========Project Asset Process End========");
|
|
|
|
|
|
|
|
|
|
Debug.Log("========Guru Build Start========");
|
|
|
|
|
Guru.Editor.AppBuilder.BuildAndroid(GetGuruSDKAppBuildParam(buildParam));
|
|
|
|
|
Debug.Log("========Guru Build End========");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void BuildIOS(BuildParam buildParam)
|
|
|
|
|
{
|
|
|
|
|
Debug.Log("========Project Asset Process Start========");
|
|
|
|
|
OnGuruSDKBuildPreprocess();
|
|
|
|
|
Debug.Log("========Project Asset Process End========");
|
|
|
|
|
|
|
|
|
|
Debug.Log("========Guru Build Start========");
|
|
|
|
|
Guru.Editor.AppBuilder.BuildIOS(GetGuruSDKAppBuildParam(buildParam));
|
|
|
|
|
Debug.Log("========Guru Build End========");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/平台切换/Android", false, 1)]
|
|
|
|
|
public static void ChangePlatform2Android()
|
|
|
|
|
{
|
|
|
|
|
BuildSwitchPlatform(BuildTarget.Android);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MenuItem("Tools/自动化打包/平台切换/IOS", false, 2)]
|
|
|
|
|
public static void ChangePlatform2IOS()
|
|
|
|
|
{
|
|
|
|
|
BuildSwitchPlatform(BuildTarget.iOS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 平台切换
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="targetPlatform"></param>
|
|
|
|
|
private static void BuildSwitchPlatform(BuildTarget targetPlatform)
|
|
|
|
|
{
|
|
|
|
|
if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
|
|
|
|
|
{
|
|
|
|
|
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildPipeline.GetBuildTargetGroup(targetPlatform), targetPlatform);
|
|
|
|
|
AssetDatabase.Refresh();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|