Example #1
0
        /// <summary>
        /// 初始化框架编辑器
        /// </summary>
        static public void InitEditorEnvironment()
        {
            //是否为batchmode
            if (Application.isBatchMode)
            {
                Debug.Log("BDFramework version:" + BDLauncher.Version);
            }

            //只有在非Playing的时候才初始化
            if (EditorApplication.isPlayingOrWillChangePlaymode || IsInited)
            {
                return;
            }

            try
            {
                //BD初始化
                //BApplication.Init();
                //BDEditor初始化
                BDEditorApplication.Init();
                //加载主工程的DLL Type
                var assemblyPath      = BApplication.Library + "/ScriptAssemblies/Assembly-CSharp.dll";
                var editorAssemlyPath = BApplication.Library + "/ScriptAssemblies/Assembly-CSharp-Editor.dll";
                if (File.Exists(assemblyPath) && File.Exists(editorAssemlyPath))
                {
                    var gAssembly = Assembly.LoadFile(assemblyPath);
                    var eAssemlby = Assembly.LoadFile(editorAssemlyPath);
                    Types = CollectTypes(gAssembly, eAssemlby).ToArray();
                }

                //编辑器下加载初始化
                BResources.Init(AssetLoadPathType.Editor);
                //编辑器下管理器注册
                ManagerInstHelper.Load(Types);
                //Editor的管理器初始化
                BDFrameworkPipelineHelper.Init();
                //调试器启动
                DebuggerServerProcessManager.Inst.Start();
                //Pipeline初始化
                HotfixPipelineTools.Init();
                //编辑器初始化
                InitEditorTask();
                //编辑器任务
                EditorTaskInstance.OnUnityLoadOrCodeRecompiled();
                //编辑器http服务
                InitEditorHttpServer();
                //最后,完成初始化
                IsInited = true;
                //  Debug.Log("框架编辑器环境初始化成功!");
            }
            catch (Exception e)
            {
                Debug.LogError("框架编辑器环境初始化失败!");
                Debug.LogError(e);
                throw;
            }
        }
Example #2
0
        /// <summary>
        /// 热更代码发生改变
        /// </summary>
        static public void OnCodeChanged()
        {
            //获取最近修改的代码
            var codes = BDEditorApplication.GetLeastHotfixCodes();

            if (codes != null && codes.Length > 0) //修改过Hotfix
            {
                if (BDEditorApplication.BDFrameWorkFrameEditorSetting.BuildSetting.IsNeedAutoBuildDll())
                {
                    EditorWindow_ScriptBuildDll.RoslynBuild(Application.streamingAssetsPath, BApplication.RuntimePlatform, ScriptBuildTools.BuildMode.Debug, false);
                    Debug.Log("自动编译Hotfix.dll成功!");
                }
                else if (BDEditorApplication.BDFrameWorkFrameEditorSetting.BuildSetting.IsHotfixCodeOutofUnityAssets())
                {
                    MoveCodeToBDWorkSpace(codes);
                }
            }
        }
Example #3
0
        /// <summary>
        /// 编译Xcode(这里是出母包版本)
        /// </summary>
        /// <param name="mode"></param>
        static private (bool, string) BuildIpa(BuildMode mode, string outdir)
        {
            bool ret = false;

            BDEditorApplication.SwitchToiOS();
            //DeleteIL2cppCache();
            //具体IOS的的配置
            PlayerSettings.gcIncremental = true;
            //PlayerSettings.stripEngineCode = true;
            // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.iOS) == ManagedStrippingLevel.High)
            // {
            // PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.iOS, ManagedStrippingLevel.Low);
            //}
            //
            //文件夹处理
            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}", Application.identifier, mode.ToString()));

            if (Directory.Exists(outputPath))
            {
                Directory.Delete(outputPath, true);
            }

            Directory.CreateDirectory(outputPath);


            //开始项目一键打包
            string[]     scenes   = { SCENEPATH };
            BuildOptions opa      = BuildOptions.None;
            BuildMode    realmode = BuildMode.Release;

            switch (mode)
            {
            case BuildMode.UseCurrentConfigDebug:
            case BuildMode.Debug:
            {
                realmode = BuildMode.Debug;
                opa      = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            break;

            case BuildMode.UseCurrentConfigRelease:
            case BuildMode.Release:
            {
                realmode = BuildMode.Release;
                opa      = BuildOptions.CompressWithLz4HC;
            }
            break;
            }

            //构建包体
            Debug.Log("------------->Begin build<------------");
            UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.iOS, opa);
            Debug.Log("------------->End build<------------");


            //检测xcode
            if (File.Exists(outputPath + "/Info.plist"))
            {
                var shellPath = "";
                //这里需要判断Editor类型,所以使用u3d的 Application.Platform
                if (Application.platform == RuntimePlatform.WindowsEditor)
                {
                    shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.cmd", realmode);
                }
                else if (Application.platform == RuntimePlatform.OSXEditor)
                {
                    shellPath = BApplication.DevOpsCIPath + string.Format("/BuildIpa_{0}.shell", realmode);
                }

                if (File.Exists(shellPath))
                {
                    //执行BuildIpa的shell
                    Debug.Log("即将执行:" + shellPath);
                    ExecuteShell(shellPath);
                    //删除xcode项目
                    Directory.Delete(outputPath, true);

                    var ipaPath = outputPath + ".ipa";
                    if (File.Exists(ipaPath))
                    {
                        ret = true;
                    }
                    else
                    {
                        Debug.LogError("【BDFramework】 not found:" + ipaPath);
                    }
                }
                else
                {
                    //For ci
                    throw new Exception("没找到编译xcode脚本! 后续请配合Jekins/Teamcity出包!");
                }

                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                //For ci
                throw new Exception("【BDFramework】Package not exsit! -" + outputPath);
            }

            return(ret, outputPath);
        }
Example #4
0
        /// <summary>
        /// 打包APK
        /// </summary>
        static private (bool, string) BuildAPK(BuildMode mode, string outdir)
        {
            bool ret = false;

            //切换到Android
            BDEditorApplication.SwitchToAndroid();
            //删除il2cpp缓存
            //DeleteIL2cppCache();

            if (!BDEditorApplication.BDFrameWorkFrameEditorSetting.IsSetConfig())
            {
                //For ci
                throw new Exception("请注意设置apk keystore账号密码");
            }

            //模式
            AndroidConfig androidConfig = null;

            switch (mode)
            {
            case BuildMode.Debug:
            case BuildMode.UseCurrentConfigDebug:
            {
                androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.AndroidDebug;
            }
            break;

            case BuildMode.Release:
            case BuildMode.UseCurrentConfigRelease:
            {
                androidConfig = BDEditorApplication.BDFrameWorkFrameEditorSetting.Android;
            }
            break;
            }


            //秘钥相关
            var keystorePath = IPath.Combine(BApplication.ProjectRoot, androidConfig.keystoreName);

            if (!File.Exists(keystorePath))
            {
                //For ci
                throw new Exception("【keystore】不存在:" + keystorePath);
            }

            PlayerSettings.Android.keystoreName = keystorePath;
            PlayerSettings.keystorePass         = androidConfig.keystorePass;
            PlayerSettings.Android.keyaliasName = androidConfig.keyaliasName;
            PlayerSettings.keyaliasPass         = androidConfig.keyaliasPass;
            Debug.Log("【keystore】" + PlayerSettings.Android.keystoreName);
            //具体安卓的配置
            PlayerSettings.gcIncremental = true;
            PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
            //PlayerSettings.stripEngineCode = true;
            // if (PlayerSettings.GetManagedStrippingLevel(BuildTargetGroup.Android) == ManagedStrippingLevel.High)
            // {
            //PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Android, ManagedStrippingLevel.Low);
            // }


            //开启符号表
            EditorUserBuildSettings.androidCreateSymbolsZip = true;
            //不同模式的设置
            // switch (mode)
            // {
            //     case BuildMode.Debug:
            //     {
            //
            //     }
            //         break;
            //     case BuildMode.Release:
            //     {
            //
            //     }
            //         break;
            // }
            //

            var outputPath = IPath.Combine(outdir, string.Format("{0}_{1}.apk", Application.identifier, mode.ToString()));

            //文件夹处理
            if (!Directory.Exists(outdir))
            {
                Directory.CreateDirectory(outdir);
            }

            if (File.Exists(outputPath))
            {
                File.Delete(outputPath);
            }

            //开始项目一键打包
            string[]     scenes = { SCENEPATH };
            BuildOptions opa    = BuildOptions.None;

            switch (mode)
            {
            case BuildMode.UseCurrentConfigDebug:
            case BuildMode.Debug:
            {
                opa = BuildOptions.CompressWithLz4HC | BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.EnableDeepProfilingSupport;
            }
            break;

            case BuildMode.UseCurrentConfigRelease:
            case BuildMode.Release:
            {
                opa = BuildOptions.CompressWithLz4HC;
            }
            break;
            }

            //构建包体
            Debug.Log("------------->Begin build<------------");
            UnityEditor.BuildPipeline.BuildPlayer(scenes, outputPath, BuildTarget.Android, opa);
            Debug.Log("------------->End build<------------");

            //构建出判断
            if (File.Exists(outputPath))
            {
                Debug.Log("Build Success :" + outputPath);
                ret = true;
                EditorUtility.RevealInFinder(outputPath);
            }
            else
            {
                //For ci
                throw new Exception("【BDFramework】Package not exsit! -" + outputPath);
            }

            return(ret, outputPath);
        }
 /// <summary>
 /// 当进入paymode
 /// </summary>
 static private void OnEnterPlayMode()
 {
     BDEditorApplication.Init();
     InitEditorTask();
     EditorTaskInstance.OnEnterWillPlayMode();
 }