原因1:
PlayerSettings.stripEngineCode = true;
这是由于il2cpp的dll剥离所致。 执行上方的方法后,如果只通过CreateInstance实例化了一个类,则其构造函数只能通过反射进行引用,而链接器无法检测到该反射,因此将删除该构造函数。 解决方案是提供一个link.xml文件,告诉剥离程序不要剥离该构造函数。
原因2:
il2cpp打包方式时,不能通过以下方式获得当前的Assembly和Type
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
需要遍历所有的Asseblies和Types来获得
public static Type FindClass(string assemblyName, string className)
{
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
if (!String.IsNullOrEmpty(assemblyName))
{
if (assembly.GetName().Name == assemblyName)
{
return Type.GetType(className + ", " + assembly.FullName);
}
}
else
{
// Search for the first instance of a class matching this name in all assemblies.
foreach (var type in assembly.GetTypes())
{
if (type.FullName == className)
{
return type;
}
}
}
}
return null;
}