diff --git a/Editor/BuildTool.cs b/Editor/BuildTool.cs
new file mode 100644
index 0000000..d4f3080
--- /dev/null
+++ b/Editor/BuildTool.cs
@@ -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);
+ }
+
+ ///
+ /// 平台切换
+ ///
+ ///
+ private static void BuildSwitchPlatform(BuildTarget targetPlatform)
+ {
+ if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
+ {
+ EditorUserBuildSettings.SwitchActiveBuildTarget(BuildPipeline.GetBuildTargetGroup(targetPlatform), targetPlatform);
+ AssetDatabase.Refresh();
+ }
+ }
+}
diff --git a/Editor/BuildTool.cs.meta b/Editor/BuildTool.cs.meta
new file mode 100644
index 0000000..5a13289
--- /dev/null
+++ b/Editor/BuildTool.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 9b057dc48b244f209567e48a6ef6639e
+timeCreated: 1712568069
\ No newline at end of file
diff --git a/Editor/GuruSDKService.Editor.asmdef b/Editor/GuruSDKService.Editor.asmdef
index dd94239..523effe 100644
--- a/Editor/GuruSDKService.Editor.asmdef
+++ b/Editor/GuruSDKService.Editor.asmdef
@@ -1,7 +1,7 @@
{
"name": "GuruSDKService.Editor",
"rootNamespace": "",
- "references": [],
+ "references": ["GUID:06333683107744765b2aba72701ca0a2"],
"includePlatforms": [
"Editor"
],
diff --git a/Editor/IBuildImp.cs b/Editor/IBuildImp.cs
new file mode 100644
index 0000000..9580a76
--- /dev/null
+++ b/Editor/IBuildImp.cs
@@ -0,0 +1,4 @@
+public interface IBuildImp
+{
+ void OnGuruSDKBuildPreprocess();
+}
diff --git a/Editor/IBuildImp.cs.meta b/Editor/IBuildImp.cs.meta
new file mode 100644
index 0000000..95d782a
--- /dev/null
+++ b/Editor/IBuildImp.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 87959a6db973437caf21e766e1c621f2
+timeCreated: 1712570362
\ No newline at end of file