diff --git a/Assets/TEngine/EntryPrefab/TEngine.prefab b/Assets/TEngine/EntryPrefab/TEngine.prefab
index 1688ac40..9c41444f 100644
--- a/Assets/TEngine/EntryPrefab/TEngine.prefab
+++ b/Assets/TEngine/EntryPrefab/TEngine.prefab
@@ -336,7 +336,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: bc449de9a177d854181ed6d829a72ada, type: 3}
m_Name:
m_EditorClassIdentifier:
- ResourceMode: 1
+ ResourceMode: 2
m_ResourceHelperTypeName: TEngine.Runtime.DefaultResourceHelper
m_CustomResourceHelper: {fileID: 0}
--- !u!1 &3463045026180535776
@@ -374,6 +374,7 @@ Transform:
- {fileID: 3463045025307533286}
- {fileID: 1672025514}
- {fileID: 96376812}
+ - {fileID: 5650366479353104569}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -427,6 +428,54 @@ MonoBehaviour:
- TEngine.Runtime.ProcedureResourcesInit
- TEngine.Runtime.ProcedureResourcesUpdate
- TEngine.Runtime.ProcedureResourcesVerify
+ - TEngine.Runtime.ProcedureRunPuerts
- TEngine.Runtime.ProcedureSplash
- TEngine.Runtime.ProcedureStartGame
m_EntranceProcedureTypeName: TEngine.Runtime.ProcedureLaunch
+--- !u!1 &5455811614053608841
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5650366479353104569}
+ - component: {fileID: 9103295844223457350}
+ m_Layer: 0
+ m_Name: PuertsMgr
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5650366479353104569
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5455811614053608841}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 3463045026180535779}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &9103295844223457350
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5455811614053608841}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7135f85bd7cf44f694f817356b03519e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ WaitForDebugger: 0
+ RunOnAwake: 0
+ DebuggerRoot: G:/1_WorkSpace/TEngine_Custom/Assets/TResource/PuertsScripts
+ DebuggerPort: 5556
diff --git a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Builder.cs b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Builder.cs
index 35b353cb..00145343 100644
--- a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Builder.cs
+++ b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Builder.cs
@@ -15,520 +15,623 @@ using Debug = UnityEngine.Debug;
namespace TEngineCore.Editor
{
- public class Builder : IBuilder
- {
- internal static readonly Builder Instance = new Builder();
+ public class Builder : IBuilder
+ {
+ internal static readonly Builder Instance = new Builder();
- ///
- /// 数据部分
- ///
- internal BuilderEditor CurBuilderData;
+ ///
+ /// 数据部分
+ ///
+ internal BuilderEditor CurBuilderData;
- ///
- /// AB构建器
- ///
- internal AssetbundleBuilder AssetbundleBuilder = new AssetbundleBuilder();
+ ///
+ /// AB构建器
+ ///
+ internal AssetbundleBuilder AssetbundleBuilder = new AssetbundleBuilder();
- ///
- /// 设置当前的BuidlerConfigData
- ///
- ///
- ///
- public void SetBuilderConfig(BuilderUtility.PlatformType platform, string configName, string configPath = "")
- {
- CurBuilderData = BuilderUtility.LoadConfig(platform, configName, configPath);
- if (CurBuilderData == null)
- {
- TLogger.LogError("未找到配置,config:" + configName);
- Process.GetCurrentProcess().Kill();
- }
+ ///
+ /// 设置当前的BuidlerConfigData
+ ///
+ ///
+ ///
+ public void SetBuilderConfig(BuilderUtility.PlatformType platform, string configName, string configPath = "")
+ {
+ CurBuilderData = BuilderUtility.LoadConfig(platform, configName, configPath);
+ if (CurBuilderData == null)
+ {
+ TLogger.LogError("未找到配置,config:" + configName);
+ Process.GetCurrentProcess().Kill();
+ }
- CurBuilderData.platform = platform;
- }
+ CurBuilderData.platform = platform;
+ }
- ///
- /// 设置当前的BuidlerConfigData
- ///
- ///
- ///
- public void SetBuilderConfig(BuilderEditor tmpBuilder)
- {
- CurBuilderData = tmpBuilder;
- }
+ ///
+ /// 设置当前的BuidlerConfigData
+ ///
+ ///
+ ///
+ public void SetBuilderConfig(BuilderEditor tmpBuilder)
+ {
+ CurBuilderData = tmpBuilder;
+ }
- ///
- /// 切换平台
- ///
- ///
- public void SwitchPlatform(BuilderUtility.PlatformType platform)
- {
- if (CurBuilderData == null)
- {
- TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
- return;
- }
- CurBuilderData.platform = platform;
- switch (CurBuilderData.platform)
- {
- case BuilderUtility.PlatformType.Windows:
- {
+ ///
+ /// 切换平台
+ ///
+ ///
+ public void SwitchPlatform(BuilderUtility.PlatformType platform)
+ {
+ if (CurBuilderData == null)
+ {
+ TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
+ return;
+ }
- EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
- BuildTarget.StandaloneWindows64);
+ CurBuilderData.platform = platform;
+ switch (CurBuilderData.platform)
+ {
+ case BuilderUtility.PlatformType.Windows:
+ {
+ EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
+ BuildTarget.StandaloneWindows64);
- PlayerSettings.SetScriptingBackend(BuildTargetGroup.Standalone, ScriptingImplementation.Mono2x);
- PlayerSettings.stripEngineCode = false;
- PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Standalone, ManagedStrippingLevel.Disabled);
- PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Standalone, CurBuilderData.bundleIdentifier);
- }
- break;
- case BuilderUtility.PlatformType.Android:
- {
- EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
+ PlayerSettings.SetScriptingBackend(BuildTargetGroup.Standalone, ScriptingImplementation.Mono2x);
+ PlayerSettings.stripEngineCode = false;
+ PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Standalone, ManagedStrippingLevel.Disabled);
+ PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Standalone, CurBuilderData.bundleIdentifier);
+ }
+ break;
+ case BuilderUtility.PlatformType.Android:
+ {
+ EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
- EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
- PlayerSettings.Android.bundleVersionCode = 1;
- PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android,
- CurBuilderData.scriptingBackend == BuilderUtility.ScriptBackend.Mono ? ScriptingImplementation.Mono2x : ScriptingImplementation.IL2CPP);
- Debug.Log("=============CurBuilderData.scriptingBackend:" + CurBuilderData.scriptingBackend);
- PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, CurBuilderData.bundleIdentifier);
- PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android, ApiCompatibilityLevel.NET_4_6);
- }
- break;
- case BuilderUtility.PlatformType.iOS:
- {
+ EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
+ PlayerSettings.Android.bundleVersionCode = 1;
+ PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android,
+ CurBuilderData.scriptingBackend == BuilderUtility.ScriptBackend.Mono ? ScriptingImplementation.Mono2x : ScriptingImplementation.IL2CPP);
+ Debug.Log("=============CurBuilderData.scriptingBackend:" + CurBuilderData.scriptingBackend);
+ PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, CurBuilderData.bundleIdentifier);
+ PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android, ApiCompatibilityLevel.NET_4_6);
+ }
+ break;
+ case BuilderUtility.PlatformType.iOS:
+ {
+ EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
- EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
-
- PlayerSettings.iOS.appleEnableAutomaticSigning = false;
- PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.SlowAndSafe;
- PlayerSettings.iOS.targetOSVersionString = "8.0";
- PlayerSettings.iOS.buildNumber = "1";
- PlayerSettings.SetScriptingBackend(BuildTargetGroup.iOS, ScriptingImplementation.IL2CPP);
- PlayerSettings.stripEngineCode = false;
- PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.iOS, ManagedStrippingLevel.Disabled);
- PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, CurBuilderData.bundleIdentifier);
- PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.iOS, ApiCompatibilityLevel.NET_4_6);
- }
- break;
- }
- }
+ PlayerSettings.iOS.appleEnableAutomaticSigning = false;
+ PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.SlowAndSafe;
+ PlayerSettings.iOS.targetOSVersionString = "8.0";
+ PlayerSettings.iOS.buildNumber = "1";
+ PlayerSettings.SetScriptingBackend(BuildTargetGroup.iOS, ScriptingImplementation.IL2CPP);
+ PlayerSettings.stripEngineCode = false;
+ PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.iOS, ManagedStrippingLevel.Disabled);
+ PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, CurBuilderData.bundleIdentifier);
+ PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.iOS, ApiCompatibilityLevel.NET_4_6);
+ }
+ break;
+ }
+ }
+ ///
+ /// 构建包体
+ ///
+ /// 是否直接出包
+ internal void Build(bool isDirect = false, BuildOptions option = BuildOptions.None)
+ {
+ var platform = CurBuilderData.platform;
- ///
- /// 构建包体
- ///
- /// 是否直接出包
- internal void Build(bool isDirect = false, BuildOptions option = BuildOptions.None)
- {
- var platform = CurBuilderData.platform;
+ SwitchPlatform(platform);
- SwitchPlatform(platform);
-
- DoBuild(isDirect, option);
- }
+ DoBuild(isDirect, option);
+ }
- ///
- /// 执行完整构建流程
- ///
- ///
- ///
- void DoBuild(bool isDirectBuild, BuildOptions option)
- {
- var buildStart = DateTime.Now;
+ ///
+ /// 执行完整构建流程
+ ///
+ ///
+ ///
+ void DoBuild(bool isDirectBuild, BuildOptions option)
+ {
+ var buildStart = DateTime.Now;
- if (!isDirectBuild)
- {
- if (!BuildAssetBundle())
- return;
- }
- else
- {
- Instance.AssetbundleBuilder.CopyAssetBundles();
- }
+ if (!isDirectBuild)
+ {
+ if (!BuildAssetBundle())
+ return;
+ }
+ else
+ {
+ Instance.AssetbundleBuilder.CopyAssetBundles();
+ }
- BuildPackage(option);
- Debug.Log("Apk打包总耗时:" + (DateTime.Now - buildStart).TotalMinutes.ToString("F2") + " 分钟");
- }
+ BuildPackage(option);
+ Debug.Log("Apk打包总耗时:" + (DateTime.Now - buildStart).TotalMinutes.ToString("F2") + " 分钟");
+ }
- ///
- /// 构建AB包部分
- ///
- ///
- public bool BuildAssetBundle()
- {
- if (CurBuilderData == null)
- {
- TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
- return false;
- }
+ ///
+ /// 构建AB包部分
+ ///
+ ///
+ public bool BuildAssetBundle()
+ {
+ if (CurBuilderData == null)
+ {
+ TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
+ return false;
+ }
- var start = DateTime.Now;
+ var start = DateTime.Now;
- BuilderInjectorHandler(BuilderInjectorMoment.BeforeCollect_AssetBundle);
- if (!Instance.AssetbundleBuilder.CollectAssetBundles(CurBuilderData.builderBundlePolicy, CurBuilderData.bundleConfig))
- return false;
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeCollect_AssetBundle);
+ if (!Instance.AssetbundleBuilder.CollectAssetBundles(CurBuilderData.builderBundlePolicy, CurBuilderData.bundleConfig))
+ return false;
- if (CurBuilderData.bCollectShaderVariant)
- {
- Debug.Log("CollectShaderVariant");
- var list = ShaderVariantCollector.ClollectSharderAndVariant();
- string abName = ShaderVariantCollector.GetShaderVariantAbName();
- Dictionary additionalRes = new Dictionary();
- foreach (var sv in list)
- {
- if (!additionalRes.ContainsKey(sv))
- additionalRes.Add(sv, abName);
- else
- Debug.LogError("重复的变体路径:" + sv);
- }
+ if (CurBuilderData.bCollectShaderVariant)
+ {
+ Debug.Log("CollectShaderVariant");
+ var list = ShaderVariantCollector.ClollectSharderAndVariant();
+ string abName = ShaderVariantCollector.GetShaderVariantAbName();
+ Dictionary additionalRes = new Dictionary();
+ foreach (var sv in list)
+ {
+ if (!additionalRes.ContainsKey(sv))
+ additionalRes.Add(sv, abName);
+ else
+ Debug.LogError("重复的变体路径:" + sv);
+ }
- list.Clear();
- Instance.AssetbundleBuilder.InsertAdditionalTopRes(additionalRes, false);
- }
+ list.Clear();
+ Instance.AssetbundleBuilder.InsertAdditionalTopRes(additionalRes, false);
+ }
- Instance.AssetbundleBuilder.SetAndCheckAssetDependencies();
+ Instance.AssetbundleBuilder.SetAndCheckAssetDependencies();
- BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_AssetBundle);
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_AssetBundle);
- Instance.AssetbundleBuilder.BuildAssetBundlesAfterCollect(CurBuilderData.buildType == BuilderUtility.BuildType.Development, CurBuilderData.bIncrementBuildAB);
- BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_AssetBundle);
- Debug.Log("AB打包总耗时:" + (DateTime.Now - start).TotalMinutes.ToString("F2") + " 分钟");
- return true;
- }
+ Instance.AssetbundleBuilder.BuildAssetBundlesAfterCollect(CurBuilderData.buildType == BuilderUtility.BuildType.Development, CurBuilderData.bIncrementBuildAB);
+ BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_AssetBundle);
+ Debug.Log("AB打包总耗时:" + (DateTime.Now - start).TotalMinutes.ToString("F2") + " 分钟");
+ return true;
+ }
- ///
- /// 输出apk或安卓工程
- ///
- ///
- ///
- public void BuildPackage(BuildOptions option = BuildOptions.None)
- {
- if (CurBuilderData == null)
- {
- TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
- return;
- }
- CurBuilderData.ApplyArgs("");
+ public void BuildActive(bool isDirectBuild,BuildOptions options = BuildOptions.None)
+ {
+ var platform = CurBuilderData.platform;
- PlayerSettings.productName = CurBuilderData.productName;
- PlayerSettings.bundleVersion = CurBuilderData.bundleVersion + "." + CurBuilderData._bBaseVersion;
+ var buildStart = DateTime.Now;
- if (EditorUserBuildSettings.development)
- option |= BuildOptions.Development;
- if (EditorUserBuildSettings.connectProfiler)
- option |= BuildOptions.ConnectWithProfiler;
- if (EditorUserBuildSettings.buildWithDeepProfilingSupport)
- option |= BuildOptions.EnableDeepProfilingSupport;
+ if (!isDirectBuild)
+ {
+ BuildAssetsCommand.BuildAndCopyABAOTHotUpdateDlls();
- string applicationName = string.Empty;
- BuildTarget target = BuildTarget.NoTarget;
- switch (CurBuilderData.platform)
- {
- case BuilderUtility.PlatformType.Android:
- applicationName = CurBuilderData.bExportAndroidProject ? $"{CurBuilderData.productName}" : $"{CurBuilderData.productName}.apk";
- target = BuildTarget.Android;
- break;
- case BuilderUtility.PlatformType.iOS:
- applicationName = $"{CurBuilderData.productName}.ipa";
- target = BuildTarget.iOS;
- break;
- case BuilderUtility.PlatformType.Windows:
- applicationName = $"{CurBuilderData.productName}.exe";
- target = BuildTarget.StandaloneWindows64;
- break;
- default:
- UnityEngine.Debug.LogError("Not supported target platform");
- return;
- }
+ if (!BuildAssetBundle())
+ return;
+ }
+ else
+ {
+ Instance.AssetbundleBuilder.CopyAssetBundles();
+ }
- SetAppStoreUrl();
+ if (CurBuilderData == null)
+ {
+ TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
+ return;
+ }
- LoaderUtilities.DeleteFolder(FileSystem.ResourceRoot);
+ CurBuilderData.ApplyArgs("");
- BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_Apk);
+ PlayerSettings.productName = CurBuilderData.productName;
+ PlayerSettings.bundleVersion = CurBuilderData.bundleVersion + "." + CurBuilderData._bBaseVersion;
- BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_FirstZip);
+ if (EditorUserBuildSettings.development)
+ options |= BuildOptions.Development;
+ if (EditorUserBuildSettings.connectProfiler)
+ options |= BuildOptions.ConnectWithProfiler;
+ if (EditorUserBuildSettings.buildWithDeepProfilingSupport)
+ options |= BuildOptions.EnableDeepProfilingSupport;
- MakeFirstZip();
+ string applicationName = string.Empty;
+ BuildTarget target = BuildTarget.NoTarget;
+ switch (CurBuilderData.platform)
+ {
+ case BuilderUtility.PlatformType.Android:
+ applicationName = CurBuilderData.bExportAndroidProject ? $"{CurBuilderData.productName}" : $"{CurBuilderData.productName}.apk";
+ target = BuildTarget.Android;
+ break;
+ case BuilderUtility.PlatformType.iOS:
+ applicationName = $"{CurBuilderData.productName}.ipa";
+ target = BuildTarget.iOS;
+ break;
+ case BuilderUtility.PlatformType.Windows:
+ applicationName = $"{CurBuilderData.productName}.exe";
+ target = BuildTarget.StandaloneWindows64;
+ break;
+ default:
+ UnityEngine.Debug.LogError("Not supported target platform");
+ return;
+ }
- BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_FirstZip);
+ SetAppStoreUrl();
- CopyRawBytes();
+ LoaderUtilities.DeleteFolder(FileSystem.ResourceRoot);
- string export = CurBuilderData.ProjectExportPath;
- if (string.IsNullOrEmpty(export))
- export = $"{FileSystem.BuildPath}/{(CurBuilderData.platform).ToString()}/{applicationName}";
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_Apk);
- BuildReport result = BuildPipeline.BuildPlayer(new string[] { EditorBuildSettings.scenes[0].path },
- export, target, option);
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_FirstZip);
- switch (result.summary.result)
- {
- case BuildResult.Unknown:
- TLogger.LogInfo("Build Package FAIL! 未知错误!");
- break;
- case BuildResult.Succeeded:
- TLogger.LogInfo("Build Package OK!");
- break;
- case BuildResult.Failed:
- TLogger.LogInfo("Build Package FAIL!");
- break;
- case BuildResult.Cancelled:
- TLogger.LogInfo("Build Package Cancelled!");
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
+ string export = CurBuilderData.ProjectExportPath;
+ if (string.IsNullOrEmpty(export))
+ export = $"{FileSystem.BuildPath}/{(CurBuilderData.platform).ToString()}/{applicationName}";
- if (Application.isBatchMode && result.summary.result != BuildResult.Succeeded)
- {
- Process.GetCurrentProcess().Kill();
- }
+ BuildReport result = BuildPipeline.BuildPlayer(new string[] { EditorBuildSettings.scenes[0].path },
+ export, target, options);
- BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_Apk);
+ switch (result.summary.result)
+ {
+ case BuildResult.Unknown:
+ TLogger.LogInfo("Build Package FAIL! 未知错误!");
+ break;
+ case BuildResult.Succeeded:
+ TLogger.LogInfo("Build Package OK!");
+ break;
+ case BuildResult.Failed:
+ TLogger.LogInfo("Build Package FAIL!");
+ break;
+ case BuildResult.Cancelled:
+ TLogger.LogInfo("Build Package Cancelled!");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
- }
+ if (Application.isBatchMode && result.summary.result != BuildResult.Succeeded)
+ {
+ Process.GetCurrentProcess().Kill();
+ }
+
+ BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_Apk);
+
+ Debug.Log("一键打包总耗时:" + (DateTime.Now - buildStart).TotalMinutes.ToString("F2") + " 分钟");
+ }
+
+ ///
+ /// 输出apk或安卓工程
+ ///
+ ///
+ ///
+ public void BuildPackage(BuildOptions option = BuildOptions.None)
+ {
+ if (CurBuilderData == null)
+ {
+ TLogger.LogError("未设置BuilderData,请先调用接口:SetBuilderConfig");
+ return;
+ }
+
+ CurBuilderData.ApplyArgs("");
+
+ PlayerSettings.productName = CurBuilderData.productName;
+ PlayerSettings.bundleVersion = CurBuilderData.bundleVersion + "." + CurBuilderData._bBaseVersion;
+
+ if (EditorUserBuildSettings.development)
+ option |= BuildOptions.Development;
+ if (EditorUserBuildSettings.connectProfiler)
+ option |= BuildOptions.ConnectWithProfiler;
+ if (EditorUserBuildSettings.buildWithDeepProfilingSupport)
+ option |= BuildOptions.EnableDeepProfilingSupport;
+
+ string applicationName = string.Empty;
+ BuildTarget target = BuildTarget.NoTarget;
+ switch (CurBuilderData.platform)
+ {
+ case BuilderUtility.PlatformType.Android:
+ applicationName = CurBuilderData.bExportAndroidProject ? $"{CurBuilderData.productName}" : $"{CurBuilderData.productName}.apk";
+ target = BuildTarget.Android;
+ break;
+ case BuilderUtility.PlatformType.iOS:
+ applicationName = $"{CurBuilderData.productName}.ipa";
+ target = BuildTarget.iOS;
+ break;
+ case BuilderUtility.PlatformType.Windows:
+ applicationName = $"{CurBuilderData.productName}.exe";
+ target = BuildTarget.StandaloneWindows64;
+ break;
+ default:
+ UnityEngine.Debug.LogError("Not supported target platform");
+ return;
+ }
+
+ SetAppStoreUrl();
+
+ LoaderUtilities.DeleteFolder(FileSystem.ResourceRoot);
+
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_Apk);
+
+ BuilderInjectorHandler(BuilderInjectorMoment.BeforeBuild_FirstZip);
+
+ MakeFirstZip();
+
+ BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_FirstZip);
+
+ CopyRawBytes();
+
+ string export = CurBuilderData.ProjectExportPath;
+ if (string.IsNullOrEmpty(export))
+ export = $"{FileSystem.BuildPath}/{(CurBuilderData.platform).ToString()}/{applicationName}";
+
+ BuildReport result = BuildPipeline.BuildPlayer(new string[] { EditorBuildSettings.scenes[0].path },
+ export, target, option);
+
+ switch (result.summary.result)
+ {
+ case BuildResult.Unknown:
+ TLogger.LogInfo("Build Package FAIL! 未知错误!");
+ break;
+ case BuildResult.Succeeded:
+ TLogger.LogInfo("Build Package OK!");
+ break;
+ case BuildResult.Failed:
+ TLogger.LogInfo("Build Package FAIL!");
+ break;
+ case BuildResult.Cancelled:
+ TLogger.LogInfo("Build Package Cancelled!");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+
+ if (Application.isBatchMode && result.summary.result != BuildResult.Succeeded)
+ {
+ Process.GetCurrentProcess().Kill();
+ }
+
+ BuilderInjectorHandler(BuilderInjectorMoment.AfterBuild_Apk);
+ }
- ///
- /// Builder流程插入处理器
- ///
- ///
- internal void BuilderInjectorHandler(BuilderInjectorMoment moment)
- {
- try
- {
- var compilationAssemblies = CompilationPipeline.GetAssemblies();
- List assemblies = new List();
- foreach (var assembly in compilationAssemblies)
- {
- assemblies.Add(Assembly.LoadFrom(assembly.outputPath));
- }
- foreach (var assembly in assemblies)
- {
- var types = assembly.GetTypes();
- foreach (var type in types)
- {
- MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static |
- BindingFlags.Public | BindingFlags.IgnoreCase);
- foreach (var method in methods)
- {
- foreach (var att in method.GetCustomAttributes(false))
- {
- if (att is TEngineBuilderInjectorAttribute a)
- {
- if (!assembly.FullName.Contains("Editor"))
- {
- Debug.LogError($"{type.Name}.cs不在Editor中,已跳过");
- continue;
- }
+ ///
+ /// Builder流程插入处理器
+ ///
+ ///
+ internal void BuilderInjectorHandler(BuilderInjectorMoment moment)
+ {
+ try
+ {
+ var compilationAssemblies = CompilationPipeline.GetAssemblies();
+ List assemblies = new List();
+ foreach (var assembly in compilationAssemblies)
+ {
+ assemblies.Add(Assembly.LoadFrom(assembly.outputPath));
+ }
- if (type.IsSubclassOf(typeof(UnityEngine.Object)))
- {
- Debug.LogError(
- $"{type.Name}.cs中函数:{method.Name},标记了BuilderInjectorHandler,请勿在mono脚本上调用,已跳过");
- continue;
- }
+ foreach (var assembly in assemblies)
+ {
+ var types = assembly.GetTypes();
+ foreach (var type in types)
+ {
+ MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static |
+ BindingFlags.Public | BindingFlags.IgnoreCase);
+ foreach (var method in methods)
+ {
+ foreach (var att in method.GetCustomAttributes(false))
+ {
+ if (att is TEngineBuilderInjectorAttribute a)
+ {
+ if (!assembly.FullName.Contains("Editor"))
+ {
+ Debug.LogError($"{type.Name}.cs不在Editor中,已跳过");
+ continue;
+ }
- if (!a.IsInMoment(moment))
- continue;
+ if (type.IsSubclassOf(typeof(UnityEngine.Object)))
+ {
+ Debug.LogError(
+ $"{type.Name}.cs中函数:{method.Name},标记了BuilderInjectorHandler,请勿在mono脚本上调用,已跳过");
+ continue;
+ }
- if (method.IsStatic)
- {
- method.Invoke(null, null);
- }
- else
- {
- var obj = Activator.CreateInstance(type);
- method.Invoke(obj, null);
- }
- Debug.Log($"已完成执行插入方法:{method.Name}");
- }
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- Debug.LogError($"BuilderInjectorHandler_{moment.ToString()}:" + e);
- }
- }
+ if (!a.IsInMoment(moment))
+ continue;
- ///
- /// 拷贝RawBytes文件部分
- ///
- private static void CopyRawBytes()
- {
- //复制到StreamingAsset下
- string target = $"{string.Format("{0}/RawBytes", FileSystem.ResourceRootInStreamAsset)}";
- if (Directory.Exists(target))
- Directory.Delete(target, true);
- Directory.CreateDirectory(target);
+ if (method.IsStatic)
+ {
+ method.Invoke(null, null);
+ }
+ else
+ {
+ var obj = Activator.CreateInstance(type);
+ method.Invoke(obj, null);
+ }
- LoaderUtilities.CopyDirectory(AssetConfig.AssetRootPath + "/" + "RawBytes", target);
+ Debug.Log($"已完成执行插入方法:{method.Name}");
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogError($"BuilderInjectorHandler_{moment.ToString()}:" + e);
+ }
+ }
- LoaderUtilities.ClearMeta(target);
+ ///
+ /// 拷贝RawBytes文件部分
+ ///
+ private static void CopyRawBytes()
+ {
+ //复制到StreamingAsset下
+ string target = $"{string.Format("{0}/RawBytes", FileSystem.ResourceRootInStreamAsset)}";
+ if (Directory.Exists(target))
+ Directory.Delete(target, true);
+ Directory.CreateDirectory(target);
- AssetDatabase.Refresh();
- }
+ LoaderUtilities.CopyDirectory(AssetConfig.AssetRootPath + "/" + "RawBytes", target);
+
+ LoaderUtilities.ClearMeta(target);
+
+ AssetDatabase.Refresh();
+ }
- [PostProcessBuild(1)]
- static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
- {
- Debug.Log($"target: {target.ToString()}");
- Debug.Log($"pathToBuiltProject: {pathToBuiltProject}");
- Debug.Log($"productName: {PlayerSettings.productName}");
- Debug.Log($"version:{GameConfig.Instance.GameBundleVersion}");
- string versionStr = GameConfig.Instance.GameBundleVersion.Replace(".", "");
- long versionLong = long.Parse(versionStr);
- Debug.Log($"versionStr:{versionStr}");
+ [PostProcessBuild(1)]
+ static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
+ {
+ Debug.Log($"target: {target.ToString()}");
+ Debug.Log($"pathToBuiltProject: {pathToBuiltProject}");
+ Debug.Log($"productName: {PlayerSettings.productName}");
+ Debug.Log($"version:{GameConfig.Instance.GameBundleVersion}");
+ string versionStr = GameConfig.Instance.GameBundleVersion.Replace(".", "");
+ long versionLong = long.Parse(versionStr);
+ Debug.Log($"versionStr:{versionStr}");
- GameConfig.Instance.WriteBaseResVersion(GameConfig.Instance.ResId);
+ GameConfig.Instance.WriteBaseResVersion(GameConfig.Instance.ResId);
- if (target == BuildTarget.Android)
- {
- string explore = BuilderUtility.GetArgumentValue("ExploreAndroidProject");
- if (Instance.CurBuilderData.scriptingBackend == BuilderUtility.ScriptBackend.Mono && !string.IsNullOrEmpty(explore) && explore == "true")
- {
- byte[] versionByte = new byte[8];
- for (int i = 0; i < versionByte.Length; ++i)
- versionByte[i] = (byte)((versionLong >> (i * 8)) & 0xff);
+ if (target == BuildTarget.Android)
+ {
+ string explore = BuilderUtility.GetArgumentValue("ExploreAndroidProject");
+ if (Instance.CurBuilderData.scriptingBackend == BuilderUtility.ScriptBackend.Mono && !string.IsNullOrEmpty(explore) && explore == "true")
+ {
+ byte[] versionByte = new byte[8];
+ for (int i = 0; i < versionByte.Length; ++i)
+ versionByte[i] = (byte)((versionLong >> (i * 8)) & 0xff);
#if UNITY_2019_4_OR_NEWER
- string dllPath =
- $"{pathToBuiltProject}/unityLibrary/src/main/assets/bin/Data/Managed/Assembly-CSharp.dll";
+ string dllPath =
+ $"{pathToBuiltProject}/unityLibrary/src/main/assets/bin/Data/Managed/Assembly-CSharp.dll";
#else
string dllPath =
$"{pathToBuiltProject}/{PlayerSettings.productName}/src/main/assets/bin/Data/Managed/Assembly-CSharp.dll";
#endif
- if (File.Exists(dllPath))
- {
- Debug.Log("Encrypt Assembly-CSharp.dll Start");
+ if (File.Exists(dllPath))
+ {
+ Debug.Log("Encrypt Assembly-CSharp.dll Start");
- byte[] bytes = File.ReadAllBytes(dllPath);
- for (int i = 0; i < 901; ++i)
- bytes[i] ^= 0x31;
- for (int i = 0; i < bytes.Length; i += 2)
- bytes[i] ^= bytes[bytes.Length - i - 1];
- using (FileStream dllStream = File.OpenWrite(dllPath))
- {
- dllStream.WriteByte((byte)'L');
- dllStream.WriteByte((byte)'U');
- dllStream.WriteByte((byte)'A');
- dllStream.WriteByte((byte)'C');
- foreach (var t in versionByte)
- dllStream.WriteByte(t);
+ byte[] bytes = File.ReadAllBytes(dllPath);
+ for (int i = 0; i < 901; ++i)
+ bytes[i] ^= 0x31;
+ for (int i = 0; i < bytes.Length; i += 2)
+ bytes[i] ^= bytes[bytes.Length - i - 1];
+ using (FileStream dllStream = File.OpenWrite(dllPath))
+ {
+ dllStream.WriteByte((byte)'L');
+ dllStream.WriteByte((byte)'U');
+ dllStream.WriteByte((byte)'A');
+ dllStream.WriteByte((byte)'C');
+ foreach (var t in versionByte)
+ dllStream.WriteByte(t);
- dllStream.Write(bytes, 0, bytes.Length);
- }
+ dllStream.Write(bytes, 0, bytes.Length);
+ }
- Debug.Log("Encrypt Assembly-CSharp.dll Success");
+ Debug.Log("Encrypt Assembly-CSharp.dll Success");
- Debug.Log("Encrypt libmonobdwgc-2.0.so Start !!");
+ Debug.Log("Encrypt libmonobdwgc-2.0.so Start !!");
- Debug.Log($"Current is : {(EditorUserBuildSettings.development ? "development" : "release")}");
+ Debug.Log($"Current is : {(EditorUserBuildSettings.development ? "development" : "release")}");
#if UNITY_2019_4_OR_NEWER
- string armv7ASoPath =
- $"{pathToBuiltProject}/unityLibrary/src/main/jniLibs/armeabi-v7a/libmonobdwgc-2.0.so";
- string x86SoPath = $"{pathToBuiltProject}/unityLibrary/src/main/jniLibs/x86/libmonobdwgc-2.0.so";
+ string armv7ASoPath =
+ $"{pathToBuiltProject}/unityLibrary/src/main/jniLibs/armeabi-v7a/libmonobdwgc-2.0.so";
+ string x86SoPath = $"{pathToBuiltProject}/unityLibrary/src/main/jniLibs/x86/libmonobdwgc-2.0.so";
#else
string armv7ASoPath =
$"{pathToBuiltProject}/{PlayerSettings.productName}/src/main/jniLibs/armeabi-v7a/libmonobdwgc-2.0.so";
string x86SoPath = $"{pathToBuiltProject}/{PlayerSettings.productName}/src/main/jniLibs/x86/libmonobdwgc-2.0.so";
#endif
#if UNITY_2019_4_OR_NEWER
- AppendDll(dllPath, $"{pathToBuiltProject}/unityLibrary/src/main/assets/");
+ AppendDll(dllPath, $"{pathToBuiltProject}/unityLibrary/src/main/assets/");
#else
AppendDll(dllPath, $"{pathToBuiltProject}/{PlayerSettings.productName}/src/main/assets/");
#endif
- }
- else
- {
- Debug.LogError(dllPath + " Not Found!!");
- }
- }
- }
+ }
+ else
+ {
+ Debug.LogError(dllPath + " Not Found!!");
+ }
+ }
+ }
- string[] dirList = { $"{Environment.CurrentDirectory}/Library/il2cpp_android_armeabi-v7a/il2cpp_cache", $"{Environment.CurrentDirectory}/Library/il2cpp_android_arm64-v8a/il2cpp_cache" };
- foreach (var dir in dirList)
- {
- if (Directory.Exists(dir))
- {
- DirectoryInfo root = new DirectoryInfo(dir);
- DirectoryInfo[] dics = root.GetDirectories();
- foreach (var childDir in dics)
- {
- if (childDir.Name.Contains("linkresult_"))
- {
- DirectoryInfo directory = new DirectoryInfo(childDir.FullName);
- FileInfo[] files = directory.GetFiles();
- for (int i = 0; i < files.Length; i++)
- {
- if (files[i].Name == "libil2cpp.sym.so")
- {
- string newPath = null;
- if (files[i].FullName.Contains("armeabi-v7a"))
- newPath = $"{Environment.CurrentDirectory}/SymbolsTemp/armeabi-v7a";
- else if (files[i].FullName.Contains("arm64-v8a"))
- newPath = $"{Environment.CurrentDirectory}/SymbolsTemp/arm64-v8a";
- if (!Directory.Exists(newPath))
- {
- Directory.CreateDirectory(newPath);
- }
+ string[] dirList =
+ {
+ $"{Environment.CurrentDirectory}/Library/il2cpp_android_armeabi-v7a/il2cpp_cache", $"{Environment.CurrentDirectory}/Library/il2cpp_android_arm64-v8a/il2cpp_cache"
+ };
+ foreach (var dir in dirList)
+ {
+ if (Directory.Exists(dir))
+ {
+ DirectoryInfo root = new DirectoryInfo(dir);
+ DirectoryInfo[] dics = root.GetDirectories();
+ foreach (var childDir in dics)
+ {
+ if (childDir.Name.Contains("linkresult_"))
+ {
+ DirectoryInfo directory = new DirectoryInfo(childDir.FullName);
+ FileInfo[] files = directory.GetFiles();
+ for (int i = 0; i < files.Length; i++)
+ {
+ if (files[i].Name == "libil2cpp.sym.so")
+ {
+ string newPath = null;
+ if (files[i].FullName.Contains("armeabi-v7a"))
+ newPath = $"{Environment.CurrentDirectory}/SymbolsTemp/armeabi-v7a";
+ else if (files[i].FullName.Contains("arm64-v8a"))
+ newPath = $"{Environment.CurrentDirectory}/SymbolsTemp/arm64-v8a";
+ if (!Directory.Exists(newPath))
+ {
+ Directory.CreateDirectory(newPath);
+ }
- File.Copy(files[i].FullName, $"{newPath}/libil2cpp.sym.so", true);
- }
- }
- }
- }
- }
- else
- {
- //TLogger.LogWarning($"文件夹不存在:{dir}");
- }
- }
- }
+ File.Copy(files[i].FullName, $"{newPath}/libil2cpp.sym.so", true);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ //TLogger.LogWarning($"文件夹不存在:{dir}");
+ }
+ }
+ }
- ///
- /// 加塞一下dll
- ///
- ///
- ///
- static void AppendDll(string dll_path, string des_path)
- {
- //备份到本地目录
- File.Copy(dll_path, $"{FileSystem.BuildPath}/{"Script.bin"}", true);
- //备份到streamAsset目录
- File.Copy(dll_path, $"{des_path}/TEngineResRoot/{"Script.bin"}", true);
- }
+ ///
+ /// 加塞一下dll
+ ///
+ ///
+ ///
+ static void AppendDll(string dll_path, string des_path)
+ {
+ //备份到本地目录
+ File.Copy(dll_path, $"{FileSystem.BuildPath}/{"Script.bin"}", true);
+ //备份到streamAsset目录
+ File.Copy(dll_path, $"{des_path}/TEngineResRoot/{"Script.bin"}", true);
+ }
- ///
- /// 设置跳转地址
- ///
- internal void SetAppStoreUrl()
- {
+ ///
+ /// 设置跳转地址
+ ///
+ internal void SetAppStoreUrl()
+ {
#if UNITY_IOS
BuilderUtility.SetAppURL(CurBuilderData.appUrl);
#endif
- }
+ }
- ///
- /// 是否首包压缩
- ///
- internal void MakeFirstZip()
- {
- string outputPath = $"{Application.streamingAssetsPath}/{"First.zip"}";
- if (File.Exists(outputPath))
- {
- File.Delete(outputPath);
- }
- }
- }
-}
+ ///
+ /// 是否首包压缩
+ ///
+ internal void MakeFirstZip()
+ {
+ string outputPath = $"{Application.streamingAssetsPath}/{"First.zip"}";
+ if (File.Exists(outputPath))
+ {
+ File.Delete(outputPath);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/BuilderInjectorMoment.cs b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/BuilderInjectorMoment.cs
index ae05b590..7ea7880c 100644
--- a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/BuilderInjectorMoment.cs
+++ b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/BuilderInjectorMoment.cs
@@ -1,6 +1,8 @@
using System;
+using System.IO;
using TEngine.Runtime;
using UnityEditor;
+using UnityEngine;
namespace TEngine.Editor
{
@@ -74,8 +76,27 @@ namespace TEngine.Editor
public static class CusInjectorDemoEditor
{
+ [TEngineBuilderInjector(BuilderInjectorMoment.BeforeCollect_AssetBundle)]
+ public static void CopyVersion()
+ {
+ var innerVersionFile = UnityEngine.Application.streamingAssetsPath + "/TEngine/version.json";
+
+ string path = FileSystem.ResourceRoot + "/" + GameConfig.CONFIG;
+ if (System.IO.File.Exists(innerVersionFile))
+ {
+ FileUtil.DeleteFileOrDirectory(innerVersionFile);
+ FileUtil.CopyFileOrDirectory(path, innerVersionFile);
+ }
+ else
+ {
+ FileUtil.CopyFileOrDirectory(path, innerVersionFile);
+ }
+
+ Log.Debug("复制版本信息成功");
+ }
+
[TEngineBuilderInjector(BuilderInjectorMoment.AfterBuild_AssetBundle)]
- public static void TestInjector()
+ public static void GenMd5List()
{
UnityEngine.Debug.Log($"productName: {PlayerSettings.productName}");
UnityEngine.Debug.Log($"version:{GameConfig.Instance.GameBundleVersion}");
@@ -83,6 +104,7 @@ namespace TEngine.Editor
long versionLong = long.Parse(versionStr);
UnityEngine.Debug.Log($"versionStr:{versionStr}");
UnityEngine.Debug.LogError("BuilderInjectorMoment.AfterBuild_AssetBundle");
+ TEngineCore.Editor.TEngineEditorUtil.GenMd5List();
}
}
}
diff --git a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Editor/BuilderEditor.cs b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Editor/BuilderEditor.cs
index 40d8ca4c..0dce0217 100644
--- a/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Editor/BuilderEditor.cs
+++ b/Assets/TEngine/Scripts/Editor/AssetBundleBuild/Editor/BuilderEditor.cs
@@ -1,11 +1,14 @@
using System;
+using System.Diagnostics;
using System.IO;
using TEngine;
using TEngine.Editor;
using TEngine.Runtime;
using UnityEditor;
+using UnityEditor.Build.Reporting;
using UnityEngine;
using UnityEngine.Serialization;
+using Debug = UnityEngine.Debug;
using Object = UnityEngine.Object;
using Type = System.Type;
@@ -110,7 +113,7 @@ namespace TEngineCore.Editor
[FormerlySerializedAs("_scriptingBackend")]
[SerializeField]
[BuilderEditor("编译类型", ContentType.Enum, "FlowA:disPlayType:1&platform:0r1r2,CB:SwitchScriptingBackend")]
- internal BuilderUtility.ScriptBackend scriptingBackend = BuilderUtility.ScriptBackend.Mono;
+ internal BuilderUtility.ScriptBackend scriptingBackend = BuilderUtility.ScriptBackend.IL2CPP;
#endregion
@@ -215,7 +218,7 @@ namespace TEngineCore.Editor
[FormerlySerializedAs("_ABVersion")]
[SerializeField]
- [BuilderEditor("资源版本号", ContentType.TextField, "FlowA:disPlayType:1,CB:ChangeABVersion")]
+ [BuilderEditor("内部资源版本号", ContentType.TextField, "FlowA:disPlayType:1,CB:ChangeABVersion")]
internal string ABVersion = "0";
[BuilderEditor("15", ContentType.Space)]
@@ -233,10 +236,10 @@ namespace TEngineCore.Editor
[BuilderEditor("Gen Md5(生成MD5)", ContentType.Button, ",CB:GenMd5,FlowA:disPlayType:1")]
private int genMd5;
- [BuilderEditor("Build", ContentType.Button, "CB:BuildApk")]
+ [BuilderEditor("Build", ContentType.Button, "CB:BuildActive")]
private int build;
- [BuilderEditor("直接出包(跳过ab环节)", ContentType.Button, "CB:DirectBuildApk,FlowA:disPlayType:1")]
+ [BuilderEditor("直接出包(跳过ab环节)", ContentType.Button, "CB:DirectBuild,FlowA:disPlayType:1")]
private int directBuild;
#endregion
@@ -448,8 +451,8 @@ namespace TEngineCore.Editor
///
private void ChangeProductName(string args)
{
- if (!autoUdate)
- return;
+ if (!autoUdate)
+ return;
PlayerSettings.productName = args;
}
@@ -459,9 +462,10 @@ namespace TEngineCore.Editor
///
private void ChangeBundleVersion(string args)
{
- if (!autoUdate)
- return;
+ if (!autoUdate)
+ return;
PlayerSettings.bundleVersion = args;
+ GameConfig.Instance.WriteAppVersion(args);
}
///
@@ -470,8 +474,9 @@ namespace TEngineCore.Editor
///
private void ChangeABVersion(string args)
{
- if (!autoUdate)
- return;
+ if (!autoUdate)
+ return;
+ GameConfig.Instance.WriteBaseResVersion(args);
GameConfig.Instance.WriteResVersion(args);
}
@@ -607,7 +612,7 @@ namespace TEngineCore.Editor
destFile = Path.Combine(targetFilePath, fileName);
File.Copy(s, destFile, true);
}
-
+
string[] filefolders = Directory.GetFiles(sourceFilePath);
DirectoryInfo dirinfo = new DirectoryInfo(sourceFilePath);
@@ -662,7 +667,7 @@ namespace TEngineCore.Editor
ApplyArgs("");
BuildAssetsCommand.BuildAndCopyABAOTHotUpdateDlls();
-
+
TLogger.LogInfoSuccessd("1.生成DLL的bytes成功");
AssetDatabase.Refresh();
@@ -702,29 +707,22 @@ namespace TEngineCore.Editor
GUIUtility.ExitGUI();
}
- private void BuildApk(string args)
+ private void BuildActive(string args)
{
if (EditorApplication.isCompiling)
{
- EditorUtility.DisplayDialog("Build Apk", "请等待编译完成", "ok");
+ EditorUtility.DisplayDialog("Build Active", "请等待编译完成", "ok");
return;
}
Save();
- if (bundleVersion.Split('.').Length != 2)
- {
- Debug.LogError("版本号需要两位(*.*)");
- return;
- }
-
if (buildType == (BuilderUtility.BuildType)BuilderUtility.BuildType.Editor)
{
Debug.LogError("编辑器模式不支持打包,请看描述");
}
else
{
-
- if (!BuilderUtility.PolicyEasyCheck(builderBundlePolicy, bundleConfig))
+ if (!BuilderUtility.PolicyEasyCheck(builderBundlePolicy, bundleConfig))
{
if (!EditorUtility.DisplayDialog("资源检查警告", "发现策略未覆盖到的资源,是否继续", "继续", "退出打包"))
{
@@ -734,7 +732,8 @@ namespace TEngineCore.Editor
ApplyArgs("");
Builder.Instance.SetBuilderConfig(this);
- Builder.Instance.Build(false);
+ Builder.Instance.BuildActive(false);
+
}
@@ -742,25 +741,19 @@ namespace TEngineCore.Editor
}
///
- /// 直接打APK包
+ /// 直接打包
///
///
- private void DirectBuildApk(string args)
+ private void DirectBuild(string args)
{
if (EditorApplication.isCompiling)
{
- EditorUtility.DisplayDialog("Direct Build Apk", "请等待编译完成", "ok");
+ EditorUtility.DisplayDialog("Direct Build", "请等待编译完成", "ok");
return;
}
Save();
- if (bundleVersion.Split('.').Length != 2)
- {
- Debug.LogError("版本号需要两位(*.*)");
- return;
- }
-
if (buildType == (BuilderUtility.BuildType)BuilderUtility.BuildType.Editor)
{
Debug.LogError("编辑器模式不支持打包,请看描述");
@@ -775,7 +768,7 @@ namespace TEngineCore.Editor
ApplyArgs("");
Builder.Instance.SetBuilderConfig(this);
- Builder.Instance.Build(true);
+ Builder.Instance.BuildActive(true);
}
GUIUtility.ExitGUI();
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/AssetConfig.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/AssetConfig.cs
index a386cc0d..aec5d14f 100644
--- a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/AssetConfig.cs
+++ b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/AssetConfig.cs
@@ -35,6 +35,7 @@ namespace TEngine.Runtime
public void Load()
{
#if ASSETBUNDLE_ENABLE
+ Log.Debug("AssetBundleData ASSETBUNDLE_ENABLE Mode");
Stream stream = FileSystem.OpenRead(FileSystem.GetAssetBundlePathInVersion(AssetBundleMeta));
BinaryReader reader = new BinaryReader(stream);
uint resVersion = reader.ReadUInt32();
@@ -56,7 +57,6 @@ namespace TEngine.Runtime
{
assetPaths[j] = reader.ReadString();
_assetPath2BundleDatas.Add(assetPaths[j], bundleName);
- Log.Error($"Init Ab {assetPaths[j]} bundleName {bundleName}");
}
depCount = reader.ReadInt32();
if (!_bundleDatas.TryGetValue(bundleName, out assetBundleData))
@@ -85,6 +85,8 @@ namespace TEngine.Runtime
}
}
stream.Close();
+#else
+ Log.Debug("AssetBundleData Editor Mode");
#endif
}
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs
index b6ba58bb..85db8378 100644
--- a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs
+++ b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs
@@ -5,6 +5,11 @@ namespace TEngine.Runtime
{
public class DefaultResourceHelper : ResourceHelperBase
{
+ private void Start()
+ {
+ ResMgr.Instance.Active();
+ }
+
public override GameObject Load(string path)
{
return ResMgr.Instance.Load(path);
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs
index 189774a5..fcf5e7cc 100644
--- a/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs
+++ b/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs
@@ -9,6 +9,7 @@ namespace TEngine.Runtime
public class TResources
{
private static IResourceHelper m_ResourceHelper;
+ public static bool Initalize => m_ResourceHelper != null;
///
/// 设置游戏资源加载辅助器。
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Version/GameConfig.cs b/Assets/TEngine/Scripts/Runtime/Core/Version/GameConfig.cs
index 19a88be5..d20f1497 100644
--- a/Assets/TEngine/Scripts/Runtime/Core/Version/GameConfig.cs
+++ b/Assets/TEngine/Scripts/Runtime/Core/Version/GameConfig.cs
@@ -236,6 +236,24 @@ namespace TEngine.Runtime
return InitAppVersionInfo();
}
+ ///
+ /// 写入App版本号
+ ///
+ ///
+ public void WriteAppVersion(string appVersion)
+ {
+ if (string.IsNullOrEmpty(appVersion))
+ {
+ TLogger.LogWarning("ResVersion is null or empty,please check!");
+ return;
+ }
+
+ _versionConfig.AppVersion = appVersion;
+ UpdateConfig();
+ SetLoadFilePath(FileSystem.ResourceRoot, ResId);
+ TLogger.LogInfo("GameConfig,WriteVersion to sdk:" + GameConfig.Instance.GameBundleVersion);
+ }
+
///
/// 写入App内部资源版本号
///
diff --git a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureCodeInit.cs b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureCodeInit.cs
index 652f8579..9a6605c9 100644
--- a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureCodeInit.cs
+++ b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureCodeInit.cs
@@ -73,8 +73,6 @@ namespace TEngine.Runtime
{
base.OnEnter(procedureOwner);
- LoadJobManager.Instance.LoadSceneAsync("L2Scene");
-
m_procedureOwner = procedureOwner;
if (!NeedLoadDll)
diff --git a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureResourcesInit.cs b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureResourcesInit.cs
index 1d8b92df..25fde986 100644
--- a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureResourcesInit.cs
+++ b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureResourcesInit.cs
@@ -8,12 +8,12 @@ namespace TEngine.Runtime
public class ProcedureResourcesInit : ProcedureBase
{
public static int OnInitResourceCompleteEvent = StringId.StringToHash("OnInitResourceComplete");
-
+
private bool m_initResourceComplete = false;
protected internal override void OnEnter(IFsm procedureOwner)
{
-
+ ResMgr.Instance.Active();
base.OnEnter(procedureOwner);
GameEvent.AddEventListener(OnInitResourceCompleteEvent, OnInitResourceComplete);
m_initResourceComplete = false;
diff --git a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureStartGame.cs b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureStartGame.cs
index d39a4efc..e7b02d9a 100644
--- a/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureStartGame.cs
+++ b/Assets/TEngine/Scripts/Runtime/GameProcedure/ProcedureStartGame.cs
@@ -4,7 +4,7 @@
{
public static readonly int OnStartGame = StringId.StringToHash("TEngineEvent.OnStartGame");
}
-
+
///
/// 流程加载器 - 终点StartGame
///
diff --git a/Assets/TEngine/Scripts/Runtime/HotUpdate/Config.txt b/Assets/TEngine/Scripts/Runtime/HotUpdate/Config.txt
index 1cac08df..be357562 100644
--- a/Assets/TEngine/Scripts/Runtime/HotUpdate/Config.txt
+++ b/Assets/TEngine/Scripts/Runtime/HotUpdate/Config.txt
@@ -1,7 +1,7 @@
{
"GameVersion": "0.1.0",
"InternalGameVersion": 0,
- "CheckVersionUrl": "http://1.12.241.46:8081/TEngine/Demo/{0}Version.txt",
+ "CheckVersionUrl": "http://127.0.0.1:8081/TEngine/Demo/{0}Version.txt",
"WindowsAppUrl": "https://www.game.com",
"MacOSAppUrl": "https://www.game.com",
"IOSAppUrl": "https://www.game.com",
diff --git a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadHandlerFileRange.cs b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadHandlerFileRange.cs
index b3cff529..c9b30056 100644
--- a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadHandlerFileRange.cs
+++ b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadHandlerFileRange.cs
@@ -31,6 +31,8 @@ namespace TEngine.Runtime.HotUpdate
_path = path;
_md5 = md5;
+ _path = path + "_md5_" + md5;
+
var dirPath = Path.GetDirectoryName(_path);
if (dirPath != null)
{
@@ -119,7 +121,7 @@ namespace TEngine.Runtime.HotUpdate
_unityWebRequest = null;
}
}
- #region
+ #region
public float Progress => _totalFileSize == 0 ? 0 : ((float)_curFileSize) / _totalFileSize;
public long TotalSize => _totalFileSize;
diff --git a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadImpl.cs b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadImpl.cs
index e853888e..28b47563 100644
--- a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadImpl.cs
+++ b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/Logic/DownloadImpl.cs
@@ -28,15 +28,15 @@ namespace TEngine.Runtime.HotUpdate
{
StartDownLoad = 0, //开始下载
HeadRequestFail = 1, //请求头失败
- DownLoadRequestFail = 2, //现在请求失败
+ DownLoadRequestFail = 2, //现在请求失败
AreadyDownLoaded = 3, //已经下载过而且下载好了
- DownLoading = 4, //下载中
+ DownLoading = 4, //下载中
NetChanged = 5,
- DownLoaded = 6, //下载完成
- DownLoadingError = 7,//接收数据的那个过程中出错
+ DownLoaded = 6, //下载完成
+ DownLoadingError = 7,//接收数据的那个过程中出错
HeadRequestError = 8,//获取下载包大小报错
- ReceiveNullData = 9,//接受到空数据
- DownError = 10,//数据没有接受完但是isDone为true
+ ReceiveNullData = 9,//接受到空数据
+ DownError = 10,//数据没有接受完但是isDone为true
ReceiveError = 11,//接收数据失败
Md5Wrong = 12,//md5错误
AllDownLoaded = 13//全部下载完成
@@ -119,7 +119,7 @@ namespace TEngine.Runtime.HotUpdate
bool _DealWithDownLoadOk(DownLoadResult downloadType, BackgroundDownloadStatus status, LoadResource data)
{
- string fileLocalPath = _path + data.Url;
+ string fileLocalPath = _path + data.Url + "_md5_" + data.Md5;
if (status == BackgroundDownloadStatus.NetworkError)
{
diff --git a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/UI/UILoadMgr.cs b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/UI/UILoadMgr.cs
index 3aded15c..d259b6f2 100644
--- a/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/UI/UILoadMgr.cs
+++ b/Assets/TEngine/Scripts/Runtime/HotUpdate/Scripts/UI/UILoadMgr.cs
@@ -13,7 +13,7 @@ namespace TEngine.Runtime.HotUpdate
///
public static void Initialize()
{
- _uiLoad = GameObject.Find(FileSystem.AssetFolder);
+ _uiLoad = GameObject.Find(FileSystem.AssetFolder);
if (_uiLoad == null)
{
var obj = Resources.Load($"{FileSystem.AssetFolder}/UILoad");
@@ -35,8 +35,8 @@ namespace TEngine.Runtime.HotUpdate
}
}
RegisitUI();
- }
-
+ }
+
public static void RegisitUI()
{
UIDefine.RegisitUI(_uiList);
@@ -60,7 +60,7 @@ namespace TEngine.Runtime.HotUpdate
GameObject ui = null;
if (!_uiMap.ContainsKey(uiinfo))
- {
+ {
Object obj = Resources.Load(_uiList[uiinfo]);
if (obj != null)
{
@@ -72,14 +72,19 @@ namespace TEngine.Runtime.HotUpdate
ui.transform.localPosition = Vector3.zero;
RectTransform rect = ui.GetComponent();
rect.sizeDelta = Vector2.zero;
- }
+ }
}
UIBase compenent = ui.GetComponent();
if (compenent != null)
{
_uiMap.Add(uiinfo, compenent);
- }
+ }
+ }
+
+ if (_uiMap[uiinfo] == null || _uiMap[uiinfo].gameObject == null)
+ {
+ return;
}
_uiMap[uiinfo].gameObject.SetActive(true);
if (param != null)
@@ -89,7 +94,7 @@ namespace TEngine.Runtime.HotUpdate
{
compenent.OnEnter(param);
}
- }
+ }
}
///
/// 隐藏ui对象
@@ -109,7 +114,7 @@ namespace TEngine.Runtime.HotUpdate
_uiMap[uiinfo].gameObject.SetActive(false);
Object.DestroyImmediate(_uiMap[uiinfo].gameObject);
- _uiMap.Remove(uiinfo);
+ _uiMap.Remove(uiinfo);
}
///
diff --git a/Assets/TEngine/Scripts/Runtime/TEngine.Runtime.asmdef b/Assets/TEngine/Scripts/Runtime/TEngine.Runtime.asmdef
index 8dee4e4e..4a79db0f 100644
--- a/Assets/TEngine/Scripts/Runtime/TEngine.Runtime.asmdef
+++ b/Assets/TEngine/Scripts/Runtime/TEngine.Runtime.asmdef
@@ -2,7 +2,8 @@
"name": "TEngine.Runtime",
"rootNamespace": "",
"references": [
- "GUID:13ba8ce62aa80c74598530029cb2d649"
+ "GUID:13ba8ce62aa80c74598530029cb2d649",
+ "GUID:88d491a7059d6f24393c76d9a4cbf684"
],
"includePlatforms": [],
"excludePlatforms": [],