修复默认混淆了DOTS生成的Unity.Entities.CodeGeneratedRegistry.AssemblyTypeRegistry类名,导致DOTS类型注册失败的Bug

before-split
walon 2025-05-27 20:06:14 +08:00
parent 1b3c1c4958
commit 8f0a5bc0f2
2 changed files with 54 additions and 0 deletions

View File

@ -132,6 +132,18 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return true; return true;
} }
if (typeDef.FullName == "Unity.Entities.CodeGeneratedRegistry.AssemblyTypeRegistry")
{
return true;
}
if (typeDef.Name.StartsWith("__JobReflectionRegistrationOutput"))
{
return true;
}
if (typeDef.CustomAttributes.Find("Unity.Jobs.DOTSCompilerGeneratedAttribute") != null)
{
return true;
}
if (typeDef.DeclaringType != null) if (typeDef.DeclaringType != null)
{ {
return IsUnitySourceGeneratedAssemblyType(typeDef.DeclaringType); return IsUnitySourceGeneratedAssemblyType(typeDef.DeclaringType);
@ -145,6 +157,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return false; return false;
} }
if (MetaUtil.IsInheritFromDOTSTypes(typeDef))
{
return false;
}
if (typeDef.Methods.Any(m => MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(m))) if (typeDef.Methods.Any(m => MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(m)))
{ {
return false; return false;
@ -167,6 +183,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return false; return false;
} }
if (MetaUtil.IsInheritFromDOTSTypes(typeDef))
{
return false;
}
if (MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(methodDef)) if (MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(methodDef))
{ {
return false; return false;
@ -185,6 +205,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return !MetaUtil.IsSerializableField(fieldDef); return !MetaUtil.IsSerializableField(fieldDef);
} }
if (MetaUtil.IsInheritFromDOTSTypes(typeDef))
{
return false;
}
if (typeDef.IsEnum && MetaUtil.HasBlackboardEnumAttribute(typeDef)) if (typeDef.IsEnum && MetaUtil.HasBlackboardEnumAttribute(typeDef))
{ {
return false; return false;

View File

@ -116,6 +116,36 @@ namespace Obfuz.Utils
return null; return null;
} }
public static bool IsInheritFromDOTSTypes(TypeDef typeDef)
{
TypeDef cur = typeDef;
while (true)
{
if (cur.Namespace.StartsWith("Unity.Entities") ||
//cur.Namespace.StartsWith("Unity.Jobs") ||
cur.Namespace.StartsWith("Unity.Burst"))
{
return true;
}
foreach (var interfaceType in cur.Interfaces)
{
TypeDef interfaceTypeDef = interfaceType.Interface.ResolveTypeDef();
if (interfaceTypeDef != null && (interfaceTypeDef.Namespace.StartsWith("Unity.Entities") ||
//interfaceTypeDef.Namespace.StartsWith("Unity.Jobs") ||
interfaceTypeDef.Namespace.StartsWith("Unity.Burst")))
{
return true;
}
}
cur = GetBaseTypeDef(cur);
if (cur == null)
{
return false;
}
}
}
public static bool IsInheritFromMonoBehaviour(TypeDef typeDef) public static bool IsInheritFromMonoBehaviour(TypeDef typeDef)
{ {
TypeDef cur = typeDef; TypeDef cur = typeDef;