浏览代码

修改打包脚本以应用AOT裁剪问题

大爷 2 年之前
父节点
当前提交
01a6d3bab0

+ 1 - 1
Unity/Assets/AssetBundleBuilderSetting.asset

@@ -18,4 +18,4 @@ MonoBehaviour:
   BuildTags: 
   CompressOption: 2
   OutputNameStyle: 4
-  EncyptionClassName: 
+  EncyptionClassName: EncryptionNone

+ 161 - 0
Unity/Assets/HybridCLRData/Generated/AOTGenericReferences.cs

@@ -5,9 +5,170 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	// }} 
 
 	// {{ AOT generic type
+	//ET.AEvent`1<ET.EventType.AfterUnitCreate>
+	//ET.AEvent`1<ET.EventType.NumbericChange>
+	//ET.AEvent`1<ET.Client.NetClientComponentOnRead>
+	//ET.AEvent`1<ET.EventType.EntryEvent3>
+	//ET.AEvent`1<ET.EventType.AfterCreateClientScene>
+	//ET.AEvent`1<ET.EventType.AfterCreateCurrentScene>
+	//ET.AEvent`1<ET.EventType.SceneChangeStart>
+	//ET.AEvent`1<ET.EventType.SceneChangeFinish>
+	//ET.AEvent`1<ET.EventType.LoginFinish>
+	//ET.AEvent`1<ET.EventType.AppStartInitFinish>
+	//ET.AEvent`1<ET.EventType.ChangePosition>
+	//ET.AEvent`1<ET.EventType.ChangeRotation>
+	//ET.AEvent`1<ET.EventType.EntryEvent1>
+	//ET.AInvokeHandler`2<ET.ConfigComponent/GetOneConfigBytes,System.Object>
+	//ET.AInvokeHandler`2<ET.ConfigComponent/GetAllConfigBytes,System.Object>
+	//ET.ATimer`1<System.Object>
+	//ET.AwakeSystem`1<System.Object>
+	//ET.AwakeSystem`2<System.Object,System.Int32>
+	//ET.AwakeSystem`2<System.Object,System.Object>
+	//ET.AwakeSystem`2<System.Object,System.Net.Sockets.AddressFamily>
+	//ET.AwakeSystem`3<System.Object,System.Object,System.Object>
+	//ET.AwakeSystem`3<System.Object,System.Object,System.Int32>
+	//ET.ConfigSingleton`1<System.Object>
+	//ET.DestroySystem`1<System.Object>
+	//ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_SceneChangeFinish>
+	//ET.ETAsyncTaskMethodBuilder`1<System.UInt32>
+	//ET.ETAsyncTaskMethodBuilder`1<System.ValueTuple`2<System.UInt32,System.Object>>
+	//ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_UnitStop>
+	//ET.ETAsyncTaskMethodBuilder`1<System.Byte>
+	//ET.ETAsyncTaskMethodBuilder`1<System.Int32>
+	//ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_CreateMyUnit>
+	//ET.ETAsyncTaskMethodBuilder`1<System.Object>
+	//ET.ETTask`1<ET.Client.Wait_CreateMyUnit>
+	//ET.ETTask`1<System.UInt32>
+	//ET.ETTask`1<System.ValueTuple`2<System.UInt32,System.Object>>
+	//ET.ETTask`1<ET.Client.Wait_UnitStop>
+	//ET.ETTask`1<ET.Client.Wait_SceneChangeFinish>
+	//ET.ETTask`1<System.Int32>
+	//ET.ETTask`1<System.Byte>
+	//ET.ETTask`1<System.Object>
+	//ET.IAwake`1<System.Int32>
+	//ET.IAwake`1<System.Object>
+	//ET.IAwake`1<System.Net.Sockets.AddressFamily>
+	//ET.IAwake`2<System.Object,System.Object>
+	//ET.IAwake`2<System.Object,System.Int32>
+	//ET.LateUpdateSystem`1<System.Object>
+	//ET.ListComponent`1<System.Object>
+	//ET.ListComponent`1<Unity.Mathematics.float3>
+	//ET.LoadSystem`1<System.Object>
+	//ET.Singleton`1<System.Object>
+	//ET.UpdateSystem`1<System.Object>
+	//System.Action`2<System.Int64,System.Int32>
+	//System.Action`3<System.Int64,System.Int64,System.Object>
+	//System.Collections.Generic.Dictionary`2<System.Int32,ET.RpcInfo>
+	//System.Collections.Generic.Dictionary`2<System.Int32,System.Int64>
+	//System.Collections.Generic.Dictionary`2<System.UInt16,System.Object>
+	//System.Collections.Generic.Dictionary`2<System.Object,System.Object>
+	//System.Collections.Generic.Dictionary`2<System.Object,System.Int64>
+	//System.Collections.Generic.Dictionary`2<System.Object,System.Int32>
+	//System.Collections.Generic.Dictionary`2<System.Int32,System.Object>
+	//System.Collections.Generic.Dictionary`2/Enumerator<System.Int32,System.Int64>
+	//System.Collections.Generic.Dictionary`2/Enumerator<System.Object,System.Object>
+	//System.Collections.Generic.Dictionary`2/Enumerator<System.Int32,System.Object>
+	//System.Collections.Generic.Dictionary`2/ValueCollection<System.Object,System.Object>
+	//System.Collections.Generic.Dictionary`2/ValueCollection<System.Int32,System.Object>
+	//System.Collections.Generic.Dictionary`2/ValueCollection/Enumerator<System.Int32,System.Object>
+	//System.Collections.Generic.Dictionary`2/ValueCollection/Enumerator<System.Object,System.Object>
+	//System.Collections.Generic.HashSet`1<System.UInt16>
+	//System.Collections.Generic.HashSet`1<System.Object>
+	//System.Collections.Generic.HashSet`1/Enumerator<System.Object>
+	//System.Collections.Generic.KeyValuePair`2<System.Int32,System.Int64>
+	//System.Collections.Generic.KeyValuePair`2<System.Int32,System.Object>
+	//System.Collections.Generic.KeyValuePair`2<System.Object,System.Object>
+	//System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>
+	//System.Collections.Generic.List`1<System.Int64>
+	//System.Collections.Generic.List`1<System.Object>
+	//System.Collections.Generic.List`1<Unity.Mathematics.float3>
+	//System.Collections.Generic.List`1/Enumerator<System.Int64>
+	//System.Collections.Generic.List`1/Enumerator<Unity.Mathematics.float3>
+	//System.Collections.Generic.List`1/Enumerator<System.Object>
+	//System.Collections.Generic.SortedDictionary`2<System.Int32,System.Object>
+	//System.Collections.Generic.SortedDictionary`2/ValueCollection<System.Int32,System.Object>
+	//System.Collections.Generic.SortedDictionary`2/ValueCollection/Enumerator<System.Int32,System.Object>
+	//System.Func`1<System.Object>
+	//System.Func`2<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Object>
+	//System.Func`2<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Int32>
+	//System.Runtime.CompilerServices.TaskAwaiter`1<System.ValueTuple`2<System.UInt32,System.UInt32>>
+	//System.Runtime.CompilerServices.TaskAwaiter`1<System.Object>
+	//System.Threading.Tasks.Task`1<System.ValueTuple`2<System.UInt32,System.UInt32>>
+	//System.Threading.Tasks.Task`1<System.Object>
+	//System.ValueTuple`2<System.UInt32,System.Object>
+	//System.ValueTuple`2<System.UInt32,System.UInt32>
 	// }}
 
 	public void RefMethods()
 	{
+		// System.Object ET.Client.GameObjectHelper::Get<System.Object>(UnityEngine.GameObject,System.String)
+		// System.Object ET.Entity::AddChild<System.Object,System.Object,System.Object>(System.Object,System.Object,System.Boolean)
+		// System.Object ET.Entity::AddChildWithId<System.Object,System.Int32>(System.Int64,System.Int32,System.Boolean)
+		// System.Object ET.Entity::AddComponent<System.Object,System.Object,System.Int32>(System.Object,System.Int32,System.Boolean)
+		// System.Object ET.Entity::AddComponent<System.Object>(System.Boolean)
+		// System.Object ET.Entity::AddComponent<System.Object,System.Net.Sockets.AddressFamily>(System.Net.Sockets.AddressFamily,System.Boolean)
+		// System.Object ET.Entity::GetChild<System.Object>(System.Int64)
+		// System.Object ET.Entity::GetComponent<System.Object>()
+		// System.Object ET.Entity::GetParent<System.Object>()
+		// System.Void ET.Entity::RemoveComponent<System.Object>()
+		// System.Void ET.ETAsyncTaskMethodBuilder::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder::AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter`1<System.ValueTuple`2<System.UInt32,System.UInt32>>,System.Object>(System.Runtime.CompilerServices.TaskAwaiter`1<System.ValueTuple`2<System.UInt32,System.UInt32>>&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder::AwaitUnsafeOnCompleted<ET.ETTaskCompleted,System.Object>(ET.ETTaskCompleted&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder::AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter`1<System.Object>,System.Object>(System.Runtime.CompilerServices.TaskAwaiter`1<System.Object>&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Int32>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Object>::AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter`1<System.Object>,System.Object>(System.Runtime.CompilerServices.TaskAwaiter`1<System.Object>&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Object>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Byte>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Object>::AwaitUnsafeOnCompleted<ET.ETTaskCompleted,System.Object>(ET.ETTaskCompleted&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.UInt32>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_CreateMyUnit>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_SceneChangeFinish>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_UnitStop>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.ValueTuple`2<System.UInt32,System.Object>>::AwaitUnsafeOnCompleted<System.Object,System.Object>(System.Object&,System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Object>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_SceneChangeFinish>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_UnitStop>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.ValueTuple`2<System.UInt32,System.Object>>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Int32>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<ET.Client.Wait_CreateMyUnit>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.Byte>::Start<System.Object>(System.Object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder`1<System.UInt32>::Start<System.Object>(System.Object&)
+		// System.Object ET.EventSystem::Invoke<ET.NavmeshComponent/RecastFileLoader,System.Object>(System.Int32,ET.NavmeshComponent/RecastFileLoader)
+		// System.Void ET.EventSystem::Publish<ET.EventType.EnterMapFinish>(ET.Scene,ET.EventType.EnterMapFinish)
+		// System.Void ET.EventSystem::Publish<ET.EventType.SceneChangeFinish>(ET.Scene,ET.EventType.SceneChangeFinish)
+		// System.Void ET.EventSystem::Publish<ET.EventType.AfterCreateClientScene>(ET.Scene,ET.EventType.AfterCreateClientScene)
+		// System.Void ET.EventSystem::Publish<ET.EventType.MoveStop>(ET.Scene,ET.EventType.MoveStop)
+		// System.Void ET.EventSystem::Publish<ET.EventType.SceneChangeStart>(ET.Scene,ET.EventType.SceneChangeStart)
+		// System.Void ET.EventSystem::Publish<ET.EventType.AfterCreateCurrentScene>(ET.Scene,ET.EventType.AfterCreateCurrentScene)
+		// System.Void ET.EventSystem::Publish<ET.Client.NetClientComponentOnRead>(ET.Scene,ET.Client.NetClientComponentOnRead)
+		// System.Void ET.EventSystem::Publish<ET.EventType.AfterUnitCreate>(ET.Scene,ET.EventType.AfterUnitCreate)
+		// System.Void ET.EventSystem::Publish<ET.EventType.NumbericChange>(ET.Scene,ET.EventType.NumbericChange)
+		// System.Void ET.EventSystem::Publish<ET.EventType.ChangePosition>(ET.Scene,ET.EventType.ChangePosition)
+		// System.Void ET.EventSystem::Publish<ET.EventType.ChangeRotation>(ET.Scene,ET.EventType.ChangeRotation)
+		// System.Void ET.EventSystem::Publish<ET.EventType.MoveStart>(ET.Scene,ET.EventType.MoveStart)
+		// ET.ETTask ET.EventSystem::PublishAsync<ET.EventType.EntryEvent1>(ET.Scene,ET.EventType.EntryEvent1)
+		// ET.ETTask ET.EventSystem::PublishAsync<ET.EventType.EntryEvent2>(ET.Scene,ET.EventType.EntryEvent2)
+		// ET.ETTask ET.EventSystem::PublishAsync<ET.EventType.EntryEvent3>(ET.Scene,ET.EventType.EntryEvent3)
+		// ET.ETTask ET.EventSystem::PublishAsync<ET.EventType.LoginFinish>(ET.Scene,ET.EventType.LoginFinish)
+		// ET.ETTask ET.EventSystem::PublishAsync<ET.EventType.AppStartInitFinish>(ET.Scene,ET.EventType.AppStartInitFinish)
+		// System.Object ET.Game::AddSingleton<System.Object>()
+		// System.Object ET.JsonHelper::FromJson<System.Object>(System.String)
+		// System.Void ET.RandomGenerator::BreakRank<System.Object>(System.Collections.Generic.List`1<System.Object>)
+		// System.String ET.StringHelper::ArrayToString<System.Single>(System.Single[])
+		// System.Object ReferenceCollector::Get<System.Object>(System.String)
+		// ET.Client.Wait_UnitStop System.Activator::CreateInstance<ET.Client.Wait_UnitStop>()
+		// ET.Client.Wait_CreateMyUnit System.Activator::CreateInstance<ET.Client.Wait_CreateMyUnit>()
+		// ET.Client.Wait_SceneChangeFinish System.Activator::CreateInstance<ET.Client.Wait_SceneChangeFinish>()
+		// System.Object[] System.Array::Empty<System.Object>()
+		// System.Linq.IOrderedEnumerable`1<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>> System.Linq.Enumerable::OrderBy<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Int32>(System.Collections.Generic.IEnumerable`1<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>>,System.Func`2<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Int32>)
+		// System.Collections.Generic.IEnumerable`1<System.Object> System.Linq.Enumerable::Select<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Object>(System.Collections.Generic.IEnumerable`1<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>>,System.Func`2<System.Collections.Generic.KeyValuePair`2<System.Object,System.Int32>,System.Object>)
+		// ET.RpcInfo[] System.Linq.Enumerable::ToArray<ET.RpcInfo>(System.Collections.Generic.IEnumerable`1<ET.RpcInfo>)
+		// System.Object[] System.Linq.Enumerable::ToArray<System.Object>(System.Collections.Generic.IEnumerable`1<System.Object>)
+		// System.Threading.Tasks.Task`1<System.Object> System.Threading.Tasks.TaskFactory::StartNew<System.Object>(System.Func`1<System.Object>,System.Threading.CancellationToken)
+		// System.Object UnityEngine.GameObject::GetComponent<System.Object>()
+		// System.Object UnityEngine.Object::Instantiate<System.Object>(System.Object,UnityEngine.Transform,System.Boolean)
+		// System.Object UnityEngine.Object::Instantiate<System.Object>(System.Object,UnityEngine.Transform)
+		// System.Object UnityEngine.Resources::Load<System.Object>(System.String)
 	}
 }

+ 250 - 0
Unity/Assets/HybridCLRData/Generated/link.xml

@@ -1,13 +1,263 @@
 <?xml version="1.0" encoding="utf-8"?>
 <linker>
+  <assembly fullname="FairyGUI.Runtime">
+    <type fullname="FairyGUI.Controller" preserve="all" />
+    <type fullname="FairyGUI.GButton" preserve="all" />
+    <type fullname="FairyGUI.GComponent" preserve="all" />
+    <type fullname="FairyGUI.GGroup" preserve="all" />
+    <type fullname="FairyGUI.GImage" preserve="all" />
+    <type fullname="FairyGUI.GObject" preserve="all" />
+    <type fullname="FairyGUI.GTextField" preserve="all" />
+    <type fullname="FairyGUI.Transition" preserve="all" />
+    <type fullname="FairyGUI.UIObjectFactory" preserve="all" />
+    <type fullname="FairyGUI.UIPackage" preserve="all" />
+    <type fullname="FairyGUI.Utils.XML" preserve="all" />
+  </assembly>
+  <assembly fullname="MongoDB.Bson">
+    <type fullname="MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptionsAttribute" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Attributes.BsonElementAttribute" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.BsonClassMap" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Options.DictionaryRepresentation" preserve="all" />
+  </assembly>
   <assembly fullname="mscorlib">
+    <type fullname="System.Action" preserve="all" />
+    <type fullname="System.Action`2" preserve="all" />
+    <type fullname="System.Action`3" preserve="all" />
+    <type fullname="System.Activator" preserve="all" />
+    <type fullname="System.ArgumentOutOfRangeException" preserve="all" />
+    <type fullname="System.Array" preserve="all" />
+    <type fullname="System.BitConverter" preserve="all" />
+    <type fullname="System.Byte" preserve="all" />
+    <type fullname="System.Collections.Generic.Dictionary`2" preserve="all" />
+    <type fullname="System.Collections.Generic.Dictionary`2/Enumerator" preserve="all" />
+    <type fullname="System.Collections.Generic.Dictionary`2/ValueCollection" preserve="all" />
+    <type fullname="System.Collections.Generic.Dictionary`2/ValueCollection/Enumerator" preserve="all" />
+    <type fullname="System.Collections.Generic.IEnumerable`1" preserve="all" />
+    <type fullname="System.Collections.Generic.KeyValuePair`2" preserve="all" />
+    <type fullname="System.Collections.Generic.List`1" preserve="all" />
+    <type fullname="System.Collections.Generic.List`1/Enumerator" preserve="all" />
+    <type fullname="System.Console" preserve="all" />
     <type fullname="System.Diagnostics.DebuggableAttribute" preserve="all" />
     <type fullname="System.Diagnostics.DebuggableAttribute/DebuggingModes" preserve="all" />
+    <type fullname="System.Diagnostics.DebuggerBrowsableAttribute" preserve="all" />
+    <type fullname="System.Diagnostics.DebuggerBrowsableState" preserve="all" />
+    <type fullname="System.Diagnostics.DebuggerDisplayAttribute" preserve="all" />
+    <type fullname="System.Diagnostics.DebuggerHiddenAttribute" preserve="all" />
+    <type fullname="System.Diagnostics.DebuggerStepThroughAttribute" preserve="all" />
+    <type fullname="System.Enum" preserve="all" />
+    <type fullname="System.Exception" preserve="all" />
+    <type fullname="System.Func`1" preserve="all" />
+    <type fullname="System.Func`2" preserve="all" />
+    <type fullname="System.IDisposable" preserve="all" />
+    <type fullname="System.Int32" preserve="all" />
+    <type fullname="System.Int64" preserve="all" />
+    <type fullname="System.IO.File" preserve="all" />
+    <type fullname="System.IO.Path" preserve="all" />
+    <type fullname="System.IO.TextReader" preserve="all" />
+    <type fullname="System.Math" preserve="all" />
+    <type fullname="System.NotImplementedException" preserve="all" />
     <type fullname="System.Object" preserve="all" />
+    <type fullname="System.Reflection.DefaultMemberAttribute" preserve="all" />
+    <type fullname="System.Reflection.MemberInfo" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.AsyncStateMachineAttribute" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.CompilationRelaxationsAttribute" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.CompilerGeneratedAttribute" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.ExtensionAttribute" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.IAsyncStateMachine" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.IsReadOnlyAttribute" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.RuntimeCompatibilityAttribute" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.RuntimeHelpers" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.TaskAwaiter`1" preserve="all" />
+    <type fullname="System.RuntimeFieldHandle" preserve="all" />
+    <type fullname="System.RuntimeTypeHandle" preserve="all" />
     <type fullname="System.Security.Permissions.SecurityAction" preserve="all" />
     <type fullname="System.Security.Permissions.SecurityPermissionAttribute" preserve="all" />
     <type fullname="System.Security.UnverifiableCodeAttribute" preserve="all" />
+    <type fullname="System.Single" preserve="all" />
+    <type fullname="System.String" preserve="all" />
+    <type fullname="System.StringSplitOptions" preserve="all" />
+    <type fullname="System.Text.StringBuilder" preserve="all" />
+    <type fullname="System.Threading.CancellationToken" preserve="all" />
+    <type fullname="System.Threading.CancellationTokenSource" preserve="all" />
+    <type fullname="System.Threading.Tasks.Task" preserve="all" />
+    <type fullname="System.Threading.Tasks.Task`1" preserve="all" />
+    <type fullname="System.Threading.Tasks.TaskFactory" preserve="all" />
+    <type fullname="System.Threading.Thread" preserve="all" />
+    <type fullname="System.Threading.ThreadStart" preserve="all" />
+    <type fullname="System.Type" preserve="all" />
+    <type fullname="System.UInt16" preserve="all" />
+    <type fullname="System.UInt32" preserve="all" />
+    <type fullname="System.ValueTuple`2" preserve="all" />
+    <type fullname="System.ValueType" preserve="all" />
+  </assembly>
+  <assembly fullname="System">
+    <type fullname="System.Collections.Generic.SortedDictionary`2" preserve="all" />
+    <type fullname="System.Collections.Generic.SortedDictionary`2/ValueCollection" preserve="all" />
+    <type fullname="System.Collections.Generic.SortedDictionary`2/ValueCollection/Enumerator" preserve="all" />
+    <type fullname="System.Net.EndPoint" preserve="all" />
+    <type fullname="System.Net.IPAddress" preserve="all" />
+    <type fullname="System.Net.IPEndPoint" preserve="all" />
+    <type fullname="System.Net.Sockets.AddressFamily" preserve="all" />
+    <type fullname="System.Net.Sockets.ProtocolType" preserve="all" />
+    <type fullname="System.Net.Sockets.Socket" preserve="all" />
+    <type fullname="System.Net.Sockets.SocketFlags" preserve="all" />
+    <type fullname="System.Net.Sockets.SocketType" preserve="all" />
+  </assembly>
+  <assembly fullname="System.Core">
+    <type fullname="System.Collections.Generic.HashSet`1" preserve="all" />
+    <type fullname="System.Collections.Generic.HashSet`1/Enumerator" preserve="all" />
+    <type fullname="System.Linq.Enumerable" preserve="all" />
+    <type fullname="System.Linq.IOrderedEnumerable`1" preserve="all" />
+  </assembly>
+  <assembly fullname="System.Net.Http">
+    <type fullname="System.Net.Http.HttpClient" preserve="all" />
+    <type fullname="System.Net.Http.HttpContent" preserve="all" />
+    <type fullname="System.Net.Http.HttpResponseMessage" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.Core">
+    <type fullname="ET.AEvent`1" preserve="all" />
+    <type fullname="ET.AInvokeHandler`2" preserve="all" />
+    <type fullname="ET.AService" preserve="all" />
+    <type fullname="ET.ATimer`1" preserve="all" />
+    <type fullname="ET.AwakeSystem`1" preserve="all" />
+    <type fullname="ET.AwakeSystem`2" preserve="all" />
+    <type fullname="ET.AwakeSystem`3" preserve="all" />
+    <type fullname="ET.BaseAttribute" preserve="all" />
+    <type fullname="ET.ByteHelper" preserve="all" />
+    <type fullname="ET.ChildOfAttribute" preserve="all" />
+    <type fullname="ET.ComponentOfAttribute" preserve="all" />
+    <type fullname="ET.ConfigAttribute" preserve="all" />
+    <type fullname="ET.ConfigComponent" preserve="all" />
+    <type fullname="ET.ConfigComponent/GetAllConfigBytes" preserve="all" />
+    <type fullname="ET.ConfigComponent/GetOneConfigBytes" preserve="all" />
+    <type fullname="ET.ConfigSingleton`1" preserve="all" />
+    <type fullname="ET.CoroutineLock" preserve="all" />
+    <type fullname="ET.CoroutineLockComponent" preserve="all" />
+    <type fullname="ET.DestroySystem`1" preserve="all" />
+    <type fullname="ET.DisposeObject" preserve="all" />
+    <type fullname="ET.Entity" preserve="all" />
+    <type fullname="ET.EntitySceneFactory" preserve="all" />
+    <type fullname="ET.ErrorCore" preserve="all" />
+    <type fullname="ET.EventAttribute" preserve="all" />
+    <type fullname="ET.EventSystem" preserve="all" />
+    <type fullname="ET.FriendOfAttribute" preserve="all" />
+    <type fullname="ET.Game" preserve="all" />
+    <type fullname="ET.IAwake" preserve="all" />
+    <type fullname="ET.IAwake`1" preserve="all" />
+    <type fullname="ET.IAwake`2" preserve="all" />
+    <type fullname="ET.IConfig" preserve="all" />
+    <type fullname="ET.IDestroy" preserve="all" />
+    <type fullname="ET.IdGenerater" preserve="all" />
+    <type fullname="ET.ILateUpdate" preserve="all" />
+    <type fullname="ET.ILoad" preserve="all" />
+    <type fullname="ET.IMerge" preserve="all" />
+    <type fullname="ET.InvokeAttribute" preserve="all" />
+    <type fullname="ET.ITransfer" preserve="all" />
+    <type fullname="ET.IUpdate" preserve="all" />
+    <type fullname="ET.JsonHelper" preserve="all" />
+    <type fullname="ET.KService" preserve="all" />
+    <type fullname="ET.LateUpdateSystem`1" preserve="all" />
+    <type fullname="ET.ListComponent`1" preserve="all" />
+    <type fullname="ET.LoadSystem`1" preserve="all" />
+    <type fullname="ET.Log" preserve="all" />
+    <type fullname="ET.Logger" preserve="all" />
+    <type fullname="ET.MessageAttribute" preserve="all" />
+    <type fullname="ET.MongoHelper" preserve="all" />
+    <type fullname="ET.NetServices" preserve="all" />
+    <type fullname="ET.NetworkHelper" preserve="all" />
+    <type fullname="ET.ObjectSystemAttribute" preserve="all" />
+    <type fullname="ET.Options" preserve="all" />
+    <type fullname="ET.ProtobufHelper" preserve="all" />
+    <type fullname="ET.ProtoObject" preserve="all" />
+    <type fullname="ET.RandomGenerator" preserve="all" />
+    <type fullname="ET.Root" preserve="all" />
+    <type fullname="ET.RpcException" preserve="all" />
+    <type fullname="ET.Scene" preserve="all" />
+    <type fullname="ET.SceneHelper" preserve="all" />
+    <type fullname="ET.SceneType" preserve="all" />
+    <type fullname="ET.ServiceType" preserve="all" />
+    <type fullname="ET.Singleton`1" preserve="all" />
+    <type fullname="ET.StaticFieldAttribute" preserve="all" />
+    <type fullname="ET.StringHashHelper" preserve="all" />
+    <type fullname="ET.StringHelper" preserve="all" />
+    <type fullname="ET.TimeHelper" preserve="all" />
+    <type fullname="ET.TimeInfo" preserve="all" />
+    <type fullname="ET.TimerComponent" preserve="all" />
+    <type fullname="ET.UniqueIdAttribute" preserve="all" />
+    <type fullname="ET.UpdateSystem`1" preserve="all" />
+    <type fullname="ET.WinPeriod" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.Loader">
+    <type fullname="ET.CodeLoader" preserve="all" />
+    <type fullname="ET.CodeMode" preserve="all" />
+    <type fullname="ET.CoroutineHelper" preserve="all" />
+    <type fullname="ET.Define" preserve="all" />
+    <type fullname="ET.GlobalConfig" preserve="all" />
+    <type fullname="ET.PathHelper" preserve="all" />
+    <type fullname="ET.UILayer" preserve="all" />
+    <type fullname="ReferenceCollector" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.Mathematics">
+    <type fullname="Unity.Mathematics.float3" preserve="all" />
+    <type fullname="Unity.Mathematics.math" preserve="all" />
+    <type fullname="Unity.Mathematics.quaternion" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.ThirdParty">
+    <type fullname="ET.ETAsyncTaskMethodBuilder" preserve="all" />
+    <type fullname="ET.ETAsyncTaskMethodBuilder`1" preserve="all" />
+    <type fullname="ET.ETCancellationToken" preserve="all" />
+    <type fullname="ET.ETTask" preserve="all" />
+    <type fullname="ET.ETTask`1" preserve="all" />
+    <type fullname="ET.ETTaskCompleted" preserve="all" />
+    <type fullname="ET.ETTaskHelper" preserve="all" />
+    <type fullname="ET.Recast" preserve="all" />
+    <type fullname="ProtoBuf.ProtoAfterDeserializationAttribute" preserve="all" />
+    <type fullname="ProtoBuf.ProtoContractAttribute" preserve="all" />
+    <type fullname="ProtoBuf.ProtoIgnoreAttribute" preserve="all" />
+    <type fullname="ProtoBuf.ProtoMemberAttribute" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.AnimationModule">
+    <type fullname="UnityEngine.AnimationClip" preserve="all" />
+    <type fullname="UnityEngine.Animator" preserve="all" />
+    <type fullname="UnityEngine.AnimatorControllerParameter" preserve="all" />
+    <type fullname="UnityEngine.RuntimeAnimatorController" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.AssetBundleModule">
+    <type fullname="UnityEngine.AssetBundle" preserve="all" />
+    <type fullname="UnityEngine.AssetBundleCreateRequest" preserve="all" />
+    <type fullname="UnityEngine.AssetBundleManifest" preserve="all" />
+    <type fullname="UnityEngine.AssetBundleRequest" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.CoreModule">
+    <type fullname="UnityEngine.AsyncOperation" preserve="all" />
+    <type fullname="UnityEngine.Camera" preserve="all" />
+    <type fullname="UnityEngine.Component" preserve="all" />
+    <type fullname="UnityEngine.Events.UnityAction" preserve="all" />
+    <type fullname="UnityEngine.Events.UnityEvent" preserve="all" />
+    <type fullname="UnityEngine.GameObject" preserve="all" />
+    <type fullname="UnityEngine.KeyCode" preserve="all" />
+    <type fullname="UnityEngine.LayerMask" preserve="all" />
+    <type fullname="UnityEngine.Object" preserve="all" />
+    <type fullname="UnityEngine.Quaternion" preserve="all" />
+    <type fullname="UnityEngine.Ray" preserve="all" />
+    <type fullname="UnityEngine.Resources" preserve="all" />
+    <type fullname="UnityEngine.SceneManagement.SceneManager" preserve="all" />
+    <type fullname="UnityEngine.TextAsset" preserve="all" />
+    <type fullname="UnityEngine.Transform" preserve="all" />
+    <type fullname="UnityEngine.Vector3" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.InputLegacyModule">
+    <type fullname="UnityEngine.Input" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.PhysicsModule">
+    <type fullname="UnityEngine.Physics" preserve="all" />
+    <type fullname="UnityEngine.RaycastHit" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.UI">
+    <type fullname="UnityEngine.UI.Button" preserve="all" />
+    <type fullname="UnityEngine.UI.Button/ButtonClickedEvent" preserve="all" />
+    <type fullname="UnityEngine.UI.InputField" preserve="all" />
+    <type fullname="UnityEngine.UI.Text" preserve="all" />
   </assembly>
 </linker>

+ 1 - 1
Unity/Assets/Resources/GlobalConfig.asset

@@ -12,7 +12,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 36527db572638af47b03c805671cba75, type: 3}
   m_Name: GlobalConfig
   m_EditorClassIdentifier: 
-  CodeMode: 3
+  CodeMode: 1
   PlayMode: 2
   Version: v0.0.1
   HotfixResUrl: https://star-escort.oss-cn-hangzhou.aliyuncs.com

+ 2 - 1
Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.Codes.asmdef

@@ -6,7 +6,8 @@
         "Unity.Core",
         "Unity.Model.Codes",
         "Unity.Mathematics",
-        "Unity.Loader"
+        "Unity.Loader",
+        "FairyGUI.Runtime"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 2 - 1
Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.Codes.asmdef

@@ -8,7 +8,8 @@
         "Unity.Hotfix.Codes",
         "Unity.ModelView.Codes",
         "Unity.Mathematics",
-        "Unity.Loader"
+        "Unity.Loader",
+        "FairyGUI.Runtime"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 2 - 1
Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.Codes.asmdef

@@ -6,7 +6,8 @@
         "Unity.Core",
         "Unity.Model.Codes",
         "Unity.Mathematics",
-        "Unity.Loader"
+        "Unity.Loader",
+        "FairyGUI.Runtime"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 13 - 13
Unity/Assets/Scripts/Editor/BuildEditor/BuildAssembliesHelper.cs

@@ -3,9 +3,9 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Threading;
-using UnityEngine;
 using UnityEditor;
 using UnityEditor.Compilation;
+using UnityEngine;
 
 namespace ET
 {
@@ -17,7 +17,7 @@ namespace ET
         {
             try
             {
-                string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Model_*");
+                string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Model*");
                 foreach (string file in logicFiles)
                 {
                     File.Delete(file);
@@ -25,8 +25,8 @@ namespace ET
             }
             catch { }
 
-            int random = RandomGenerator.RandomNumber(100000000, 999999999);
-            string logicFile = $"Model_{random}";
+            //int random = RandomGenerator.RandomNumber(100000000, 999999999);
+            string logicFile = $"Model";
 
             List<string> codes;
 
@@ -84,7 +84,7 @@ namespace ET
             catch { }
 
             string modelfile;
-            string[] modelFiles = Directory.GetFiles(Define.BuildOutputDir, "Model_*.dll");
+            string[] modelFiles = Directory.GetFiles(Define.BuildOutputDir, "Model*.dll");
             if (modelFiles.Length > 0)
             {
                 modelfile = modelFiles[0];
@@ -111,8 +111,8 @@ namespace ET
                 case CodeMode.Server:
                     codes = new List<string>()
                     {
-                        "Assets/Scripts/Codes/Hotfix/Share/", 
-                        "Assets/Scripts/Codes/Hotfix/Server/", 
+                        "Assets/Scripts/Codes/Hotfix/Share/",
+                        "Assets/Scripts/Codes/Hotfix/Server/",
                         "Assets/Scripts/Codes/Hotfix/Client/",
                     };
                     break;
@@ -169,13 +169,13 @@ namespace ET
             {
                 assemblyBuilder.excludeReferences = new string[]
                 {
-                    "DnsClient.dll", 
-                    "MongoDB.Driver.Core.dll", 
-                    "MongoDB.Driver.dll", 
+                    "DnsClient.dll",
+                    "MongoDB.Driver.Core.dll",
+                    "MongoDB.Driver.dll",
                     "MongoDB.Driver.Legacy.dll",
-                    "MongoDB.Libmongocrypt.dll", 
-                    "SharpCompress.dll", 
-                    "System.Buffers.dll", 
+                    "MongoDB.Libmongocrypt.dll",
+                    "SharpCompress.dll",
+                    "System.Buffers.dll",
                     "System.Runtime.CompilerServices.Unsafe.dll",
                     "System.Text.Encoding.CodePages.dll"
                 };

+ 203 - 153
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -1,6 +1,7 @@
-using System;
+using HybridCLR.Editor;
+using HybridCLR.Editor.Commands;
+using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using UnityEditor;
@@ -10,51 +11,53 @@ using Debug = UnityEngine.Debug;
 
 namespace ET
 {
-	public enum PlatformType
-	{
-		None,
-		Android,
-		IOS,
-		Windows,
-		MacOS,
-		Linux
-	}
-	
-	public enum BuildType
-	{
-		Development,
-		Release,
-	}
-
-	public class BuildEditor : EditorWindow
-	{
-		private PlatformType activePlatform;
-		private PlatformType platformType;
-		private bool clearFolder;
-		private bool isBuildExe;
-		private bool isContainAB;
-		private CodeOptimization codeOptimization = CodeOptimization.Debug;
-		private BuildOptions buildOptions;
-		private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
-
-		private GlobalConfig globalConfig;
-
-		[MenuItem("ET/Build Tool")]
-		public static void ShowWindow()
-		{
-			GetWindow<BuildEditor>(DockDefine.Types);
-		}
+    public enum PlatformType
+    {
+        None,
+        Android,
+        IOS,
+        Windows,
+        MacOS,
+        Linux
+    }
+
+    public enum BuildType
+    {
+        Development,
+        Release,
+    }
+
+    public class BuildEditor : EditorWindow
+    {
+        private PlatformType activePlatform;
+        private PlatformType platformType;
+        private bool clearFolder = true;
+        private bool isBuildExe = true;
+        private bool isContainAB = false;
+        private CodeOptimization codeOptimization = CodeOptimization.Debug;
+        private BuildOptions buildOptions;
+        private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
+        public static string YooAssetCodeDll;
+
+        private GlobalConfig globalConfig;
+
+        [MenuItem("ET/Build Tool")]
+        public static void ShowWindow()
+        {
+            GetWindow<BuildEditor>(DockDefine.Types);
+        }
 
         private void OnEnable()
-		{
-			globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-			
+        {
+            YooAssetCodeDll = Application.dataPath + "/Res/CodeDll/";
+            globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+
 #if UNITY_ANDROID
 			activePlatform = PlatformType.Android;
 #elif UNITY_IOS
 			activePlatform = PlatformType.IOS;
 #elif UNITY_STANDALONE_WIN
-			activePlatform = PlatformType.Windows;
+            activePlatform = PlatformType.Windows;
 #elif UNITY_STANDALONE_OSX
 			activePlatform = PlatformType.MacOS;
 #elif UNITY_STANDALONE_LINUX
@@ -65,120 +68,167 @@ namespace ET
             platformType = activePlatform;
         }
 
-        private void OnGUI() 
-		{
-			this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
-			this.clearFolder = EditorGUILayout.Toggle("clean folder? ", clearFolder);
-			this.isBuildExe = EditorGUILayout.Toggle("build exe?", this.isBuildExe);
-			this.isContainAB = EditorGUILayout.Toggle("contain assetsbundle?", this.isContainAB);
-			this.codeOptimization = (CodeOptimization)EditorGUILayout.EnumPopup("CodeOptimization ", this.codeOptimization);
-			EditorGUILayout.LabelField("BuildAssetBundleOptions ");
-			this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
-			
-			switch (this.codeOptimization)
-			{
-				case CodeOptimization.None:
-				case CodeOptimization.Debug:
-					this.buildOptions = BuildOptions.Development | BuildOptions.ConnectWithProfiler;
-					break;
-				case CodeOptimization.Release:
-					this.buildOptions = BuildOptions.None;
-					break;
-			}
-
-			GUILayout.Space(5);
-			
-			if (GUILayout.Button("BuildPackage"))
-			{
-				if (this.platformType == PlatformType.None)
-				{
-					ShowNotification(new GUIContent("please select platform!"));
-					return;
-				}
-				if (platformType != activePlatform)
-				{
-					switch (EditorUtility.DisplayDialogComplex("Warning!", $"current platform is {activePlatform}, if change to {platformType}, may be take a long time", "change", "cancel", "no change"))
-					{
-						case 0:
-							activePlatform = platformType;
-							break;
-						case 1:
-							return;
-						case 2:
-							platformType = activePlatform;
-							break;
-					}
-				}
-				BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB, this.clearFolder);
-			}
-			
-			GUILayout.Label("");
-			this.globalConfig.CodeMode = (CodeMode)EditorGUILayout.EnumPopup("CodeMode: ", this.globalConfig.CodeMode);
-			
-			if (GUILayout.Button("BuildModelAndHotfix"))
-			{
-
-				BuildModelAndHotfix(this.codeOptimization);
+        private void OnGUI()
+        {
+            this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
+            this.clearFolder = EditorGUILayout.Toggle("clean folder? ", clearFolder);
+            this.isBuildExe = EditorGUILayout.Toggle("build exe?", this.isBuildExe);
+            this.isContainAB = false;
+            this.codeOptimization = (CodeOptimization)EditorGUILayout.EnumPopup("CodeOptimization ", this.codeOptimization);
+            //EditorGUILayout.LabelField("BuildAssetBundleOptions ");
+            //this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
+
+            switch (this.codeOptimization)
+            {
+                case CodeOptimization.None:
+                case CodeOptimization.Debug:
+                    this.buildOptions = BuildOptions.Development | BuildOptions.ConnectWithProfiler;
+                    break;
+                case CodeOptimization.Release:
+                    this.buildOptions = BuildOptions.None;
+                    break;
+            }
+
+            GUILayout.Space(5);
+
+            if (GUILayout.Button("BuildPackage"))
+            {
+                if (this.platformType == PlatformType.None)
+                {
+                    ShowNotification(new GUIContent("please select platform!"));
+                    return;
+                }
+                if (platformType != activePlatform)
+                {
+                    switch (EditorUtility.DisplayDialogComplex("Warning!", $"current platform is {activePlatform}, if change to {platformType}, may be take a long time", "change", "cancel", "no change"))
+                    {
+                        case 0:
+                            activePlatform = platformType;
+                            break;
+                        case 1:
+                            return;
+                        case 2:
+                            platformType = activePlatform;
+                            break;
+                    }
+                }
+                //生成exe之前,先生成最新的link.xml
+                BuildModelAndHotfix(this.codeOptimization);
+                CopyHotfixdllToHybridDir();
+                LinkGeneratorCommand.GenerateLinkXml(EditorUserBuildSettings.activeBuildTarget);
+
+                BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB, this.clearFolder);
+            }
+
+            GUILayout.Label("");
+            GUILayout.Label("Build & copy AOTMetadlls");
+            if (GUILayout.Button("BuildAOTDlls & copy "))
+            {
+                BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
+                CompileDllCommand.CompileDll(target);
+                CopyHotfixdllToHybridDir();
+
+                Il2CppDefGeneratorCommand.GenerateIl2CppDef();
+                // 这几个生成依赖HotUpdateDlls
+                //LinkGeneratorCommand.GenerateLinkXml(target);
+                // 生成裁剪后的aot dll
+                StripAOTDllCommand.GenerateStripedAOTDlls(target, EditorUserBuildSettings.selectedBuildTargetGroup);
+                // 桥接函数生成依赖于AOT dll,必须保证已经build过,生成AOT dll
+                MethodBridgeGeneratorCommand.GenerateMethodBridge(target);
+                ReversePInvokeWrapperGeneratorCommand.GenerateReversePInvokeWrapper(target);
+                AOTReferenceGeneratorCommand.GenerateAOTGenericReference(target);
+
+                string aotDllDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
+                HotUpdateAssemblyManifest manifest = AssetDatabase.LoadAssetAtPath("Assets/Res/Config/HotUpdateAssemblyManifest.asset", typeof(HotUpdateAssemblyManifest)) as HotUpdateAssemblyManifest;
+                if (manifest == null)
+                {
+                    throw new Exception($"resource asset:{nameof(HotUpdateAssemblyManifest)} 配置不存在,请在Resources目录下创建");
+                }
+                List<string> AOTMetaAssemblies = (manifest.AOTMetadataDlls ?? Array.Empty<string>()).ToList();
+                foreach (var dll in AOTMetaAssemblies)
+                {
+                    string dllPath = $"{aotDllDir}/{dll}";
+                    if (!File.Exists(dllPath))
+                    {
+                        Debug.LogError($"ab中添加AOT补充元数据dll:{dllPath} 时发生错误,文件不存在。裁剪后的AOT dll在BuildPlayer时才能生成,因此需要你先构建一次游戏App后再打包。");
+                        continue;
+                    }
+                    string dllBytesPath = $"{YooAssetCodeDll}/{dll}.bytes";
+                    File.Copy(dllPath, dllBytesPath, true);
+                    Debug.Log($"copy AOT dll {dllPath} -> {dllBytesPath}");
+                }
+            }
+
+            GUILayout.Label("");
+            GUILayout.Label("Build热更dll & ab:");
+            this.globalConfig.CodeMode = CodeMode.Client;// (CodeMode)EditorGUILayout.EnumPopup("CodeMode: ", this.globalConfig.CodeMode);
+
+            if (GUILayout.Button("BuildModelAndHotfix"))
+            {
+                BuildModelAndHotfix(this.codeOptimization);
                 //用yooAsset打ab, 不用你了
                 //AfterCompiling();
                 ShowNotification("Build Model And Hotfix Success!");
-			}
+            }
+
+            if (GUILayout.Button("BuildAB by YooAsset"))
+            {
+                var target = EditorUserBuildSettings.activeBuildTarget;
+                BuildHelper.BuildAB(target, null);
+            }
 
             GUILayout.Label("");
             GUILayout.Label("Config Tools: =======================");
-            /*if (GUILayout.Button("BuildModel"))
-			{
-				if (Define.EnableCodes)
-				{
-					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
-				}
-				BuildAssembliesHelper.BuildModel(this.codeOptimization, globalConfig);
-
-				AfterCompiling();
-				
-				ShowNotification("Build Model Success!");
-			}
-			
-			if (GUILayout.Button("BuildHotfix"))
-			{
-				if (Define.EnableCodes)
-				{
-					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
-				}
-				BuildAssembliesHelper.BuildHotfix(this.codeOptimization, globalConfig);
-
-				AfterCompiling();
-				
-				ShowNotification("Build Hotfix Success!");
-			}*/
-
             if (GUILayout.Button("ExcelExporter"))
-			{
-				//Directory.Delete("Assets/Bundles/Config", true);
-				ToolsEditor.ExcelExporter();
-				
-				// 设置ab包
-				AssetImporter assetImporter = AssetImporter.GetAtPath($"Assets/Bundles/Config");
-				assetImporter.assetBundleName = "Config.unity3d";
-				AssetDatabase.SaveAssets();
-				AssetDatabase.Refresh();
-			}
-			
-			if (GUILayout.Button("Proto2CS"))
-			{
-				ToolsEditor.Proto2CS();
-			}
-
-			GUILayout.Space(5);
-		}
-
-		public static void BuildModelAndHotfix(CodeOptimization codeOptimization = CodeOptimization.Release)
-		{
+            {
+                //Directory.Delete("Assets/Bundles/Config", true);
+                ToolsEditor.ExcelExporter();
+
+                // 设置ab包
+                AssetImporter assetImporter = AssetImporter.GetAtPath($"Assets/Bundles/Config");
+                assetImporter.assetBundleName = "Config.unity3d";
+                AssetDatabase.SaveAssets();
+                AssetDatabase.Refresh();
+            }
+
+            if (GUILayout.Button("Proto2CS"))
+            {
+                ToolsEditor.Proto2CS();
+            }
+
+            GUILayout.Space(5);
+        }
+
+        private static void CopyHotfixdllToHybridDir()
+        {
+            var target = EditorUserBuildSettings.activeBuildTarget; ;
+            var dll = Path.Combine(YooAssetCodeDll, "Model.dll.bytes");
+            if (!File.Exists(dll))
+            {
+                Debug.LogError($"not exists: {dll}");
+            }
+            else
+            {
+                File.Copy(dll, Path.Combine(SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target), "Model.dll"), true);
+            }
+            dll = Path.Combine(YooAssetCodeDll, "Hotfix.dll.bytes");
+            if (!File.Exists(dll))
+            {
+                Debug.LogError($"not exists: {dll}");
+            }
+            else
+            {
+                File.Copy(dll, Path.Combine(SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target), "Hotfix.dll"), true);
+            }
+        }
+
+        public static void BuildModelAndHotfix(CodeOptimization codeOptimization = CodeOptimization.Release)
+        {
             if (Define.EnableCodes)
             {
                 throw new Exception("Remove macro 'ENABLE_CODES' first!");
             }
-			var globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+            var globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
             if (globalConfig.CodeMode == CodeMode.Server)
             {
                 throw new Exception("Don't compile server here, open 'ET.sln' to compile!");
@@ -186,9 +236,9 @@ namespace ET
             BuildAssembliesHelper.BuildModel(codeOptimization, globalConfig);
             BuildAssembliesHelper.BuildHotfix(codeOptimization, globalConfig);
         }
-		
-		//将model.dll打包成ab
-		/*private static void AfterCompiling()
+
+        //将model.dll打包成ab
+        /*private static void AfterCompiling()
 		{
 			Directory.CreateDirectory(BuildAssembliesHelper.CodeDir);
 
@@ -200,11 +250,11 @@ namespace ET
             
 			Debug.Log("build success!");
 		}*/
-		
-		public static void ShowNotification(string tips)
-		{
-			EditorWindow game = EditorWindow.GetWindow(typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView"));
-			game?.ShowNotification(new GUIContent($"{tips}"));
-		}
-	}
+
+        public static void ShowNotification(string tips)
+        {
+            EditorWindow game = EditorWindow.GetWindow(typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView"));
+            game?.ShowNotification(new GUIContent($"{tips}"));
+        }
+    }
 }

+ 52 - 22
Unity/Assets/Scripts/Editor/BuildEditor/BuildHelper.cs

@@ -1,8 +1,10 @@
-using System.IO;
+using Sirenix.Utilities;
+using System.IO;
 using System.Linq;
 using System.Reflection;
 using UnityEditor;
 using UnityEngine;
+using YooAsset.Editor;
 
 namespace ET
 {
@@ -11,12 +13,12 @@ namespace ET
         private const string relativeDirPrefix = "../Release";
 
         public static string BuildFolder = "../Release/{0}/StreamingAssets/";
-        
-        
+
+
         [InitializeOnLoadMethod]
         public static void ReGenerateProjectFiles()
         {
-            if (Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().Name== "RiderScriptEditor")
+            if (Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().Name == "RiderScriptEditor")
             {
                 FieldInfo generator = Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().GetField("m_ProjectGeneration", BindingFlags.Static | BindingFlags.NonPublic);
                 var syncMethod = generator.FieldType.GetMethod("Sync");
@@ -26,11 +28,11 @@ namespace ET
             {
                 Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
             }
-            
+
             Debug.Log("ReGenerateProjectFiles finished.");
         }
 
-        
+
 #if ENABLE_CODES
         [MenuItem("ET/ChangeDefine/Remove ENABLE_CODES")]
         public static void RemoveEnableCodes()
@@ -68,7 +70,7 @@ namespace ET
             PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
             AssetDatabase.SaveAssets();
         }
-        
+
 #if ENABLE_VIEW
         [MenuItem("ET/ChangeDefine/Remove ENABLE_VIEW")]
         public static void RemoveEnableView()
@@ -102,7 +104,7 @@ namespace ET
                 }
                 ss.Remove("ENABLE_VIEW");
             }
-            
+
             defines = string.Join(";", ss);
             PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
             AssetDatabase.SaveAssets();
@@ -129,40 +131,36 @@ namespace ET
                 case PlatformType.MacOS:
                     buildTarget = BuildTarget.StandaloneOSX;
                     break;
-                
+
                 case PlatformType.Linux:
                     buildTarget = BuildTarget.StandaloneLinux64;
                     break;
             }
 
             string fold = string.Format(BuildFolder, type);
-
             if (clearFolder && Directory.Exists(fold))
             {
                 Directory.Delete(fold, true);
             }
             Directory.CreateDirectory(fold);
 
-            UnityEngine.Debug.Log("start build assetbundle");
-            BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
-
-            UnityEngine.Debug.Log("finish build assetbundle");
-
             if (isContainAB)
             {
+                Debug.Log("start build assetbundle");
+                BuildAB(buildTarget, fold);
+                //BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
+                Debug.Log("finish build assetbundle");
+
                 FileHelper.CleanDirectory("Assets/StreamingAssets/");
                 FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
+                AssetDatabase.Refresh();
             }
 
             if (isBuildExe)
             {
-                AssetDatabase.Refresh();
-                string[] levels = {
-                    "Assets/Scenes/Init.unity",
-                };
-                UnityEngine.Debug.Log("start build exe");
-                BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
-                UnityEngine.Debug.Log("finish build exe");
+                Debug.Log("start build exe==================");
+                BuildPipeline.BuildPlayer(new string[] { "Assets/Scenes/Init.unity" }, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
+                Debug.Log("build exe end====================");
             }
             else
             {
@@ -175,5 +173,37 @@ namespace ET
                 }
             }
         }
+
+        //TODO:默认不使用加密
+        public static void BuildAB(BuildTarget _buildTarget, string outDir, int buildVersion = -1)
+        {
+            string defaultOutputRoot = outDir.IsNullOrWhitespace() ? AssetBundleBuilderHelper.GetDefaultOutputRoot() : outDir;
+            BuildParameters buildParameters = new BuildParameters();
+            buildParameters.OutputRoot = defaultOutputRoot;
+            buildParameters.BuildTarget = _buildTarget;
+            buildParameters.BuildPipeline = AssetBundleBuilderSettingData.Setting.BuildPipeline;
+            buildParameters.BuildMode = AssetBundleBuilderSettingData.Setting.BuildMode;
+            buildParameters.BuildVersion = buildVersion > 0 ? buildVersion : AssetBundleBuilderSettingData.Setting.BuildVersion;
+            buildParameters.BuildinTags = AssetBundleBuilderSettingData.Setting.BuildTags;
+            buildParameters.VerifyBuildingResult = true;
+            buildParameters.EnableAddressable = AssetBundleCollectorSettingData.Setting.EnableAddressable;
+            buildParameters.CopyBuildinTagFiles = AssetBundleBuilderSettingData.Setting.BuildMode == EBuildMode.ForceRebuild;
+            buildParameters.EncryptionServices = null;//CreateEncryptionServicesInstance();
+            buildParameters.CompressOption = AssetBundleBuilderSettingData.Setting.CompressOption;
+            buildParameters.OutputNameStyle = AssetBundleBuilderSettingData.Setting.OutputNameStyle;
+
+            if (AssetBundleBuilderSettingData.Setting.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
+            {
+                buildParameters.SBPParameters = new BuildParameters.SBPBuildParameters();
+                buildParameters.SBPParameters.WriteLinkXML = true;
+            }
+
+            var builder = new AssetBundleBuilder();
+            bool succeed = builder.Run(buildParameters);
+            if (succeed)
+            {
+                EditorUtility.RevealInFinder($"{buildParameters.OutputRoot}/{buildParameters.BuildTarget}/{buildParameters.BuildVersion}");
+            }
+        }
     }
 }

+ 2 - 1
Unity/Assets/Scripts/Empty/HotfixView/Unity.HotfixView.asmdef

@@ -8,7 +8,8 @@
         "Unity.ModelView",
         "Unity.Core",
         "Unity.Mathematics",
-        "Unity.Loader"
+        "Unity.Loader",
+        "FairyGUI.Runtime"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 2 - 1
Unity/Assets/Scripts/Empty/Model/Unity.Model.asmdef

@@ -4,7 +4,8 @@
     "references": [
         "Unity.ThirdParty",
         "Unity.Core",
-        "Unity.Mathematics"
+        "Unity.Mathematics",
+        "FairyGUI.Runtime"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 13 - 13
Unity/Assets/Scripts/Loader/YooAssetMgr/YooAssetProxy.cs

@@ -1,9 +1,9 @@
-using System;
+using Cysharp.Threading.Tasks;
+using System;
 using System.Collections.Generic;
-using Cysharp.Threading.Tasks;
+using UnityEngine;
 using UnityEngine.SceneManagement;
 using YooAsset;
-using UnityEngine;
 
 namespace ET
 {
@@ -23,7 +23,7 @@ namespace ET
             Sound,
             PathFind,
         }
-        
+
         #region 路径相关
 
         /// <summary>
@@ -36,7 +36,7 @@ namespace ET
         }
 
         #endregion
-        
+
         #region Extension
 
         public static T GetAsset<T>(this AssetOperationHandle assetOperationHandle)
@@ -152,13 +152,13 @@ namespace ET
                 createParameters.DefaultHostServer = hostServer;
                 //作为DefaultHostServer的备份
                 createParameters.FallbackHostServer = hostServer;
-				//设置大于1Mb的资源支持断点续传
+                //设置大于1Mb的资源支持断点续传
                 createParameters.BreakpointResumeFileSize = 1 * 1014 * 1024;
                 string GetHostServerURL()
                 {
                     string hostServerIP = globalConfig.HotfixResUrl;
                     string gameVersion = globalConfig.Version;
-                    
+
 #if UNITY_EDITOR
                     if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android)
                         return $"{hostServerIP}/android/{gameVersion}";
@@ -170,13 +170,13 @@ namespace ET
                         return $"{hostServerIP}/pc/{gameVersion}";
 #else
 		            if (Application.platform == RuntimePlatform.Android)
-			            return $"{hostServerIP}/CDN/Android/{gameVersion}";
+			            return $"{hostServerIP}/android/{gameVersion}";
 		            else if (Application.platform == RuntimePlatform.IPhonePlayer)
-			            return $"{hostServerIP}/CDN/IPhone/{gameVersion}";
+			            return $"{hostServerIP}/ios/{gameVersion}";
 		            else if (Application.platform == RuntimePlatform.WebGLPlayer)
-			            return $"{hostServerIP}/CDN/WebGL/{gameVersion}";
+			            return $"{hostServerIP}/web/{gameVersion}";
 		            else
-			            return $"{hostServerIP}/CDN/StandaloneWindows64/{gameVersion}";
+			            return $"{hostServerIP}/pc/{gameVersion}";
 #endif
                 }
 
@@ -190,8 +190,8 @@ namespace ET
 
             return uniTaskCompletionSource.Task;
         }
-        
-        
+
+
 
         #endregion
     }