打包脚本添加统一接口
							parent
							
								
									2028452f05
								
							
						
					
					
						commit
						dc324db672
					
				| 
						 | 
					@ -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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					fileFormatVersion: 2
 | 
				
			||||||
 | 
					guid: 9b057dc48b244f209567e48a6ef6639e
 | 
				
			||||||
 | 
					timeCreated: 1712568069
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "name": "GuruSDKService.Editor",
 | 
					    "name": "GuruSDKService.Editor",
 | 
				
			||||||
    "rootNamespace": "",
 | 
					    "rootNamespace": "",
 | 
				
			||||||
    "references": [],
 | 
					    "references": ["GUID:06333683107744765b2aba72701ca0a2"],
 | 
				
			||||||
    "includePlatforms": [
 | 
					    "includePlatforms": [
 | 
				
			||||||
        "Editor"
 | 
					        "Editor"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					public interface IBuildImp
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    void OnGuruSDKBuildPreprocess();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					fileFormatVersion: 2
 | 
				
			||||||
 | 
					guid: 87959a6db973437caf21e766e1c621f2
 | 
				
			||||||
 | 
					timeCreated: 1712570362
 | 
				
			||||||
		Loading…
	
		Reference in New Issue