xLua
xLua copied to clipboard
当一个根命名空间与某个内部类重名时,Android平台上会混淆命名空间和此内部类型,附带修复方案
重现环境:Unity版本2020.3.37f1,Xlua版本2.1.16,编译设置:IL2CPP .NET Standard 2.0 重现步骤:
- 创建C#类型Game.A.B.C.Main随便实现一些静态方法
- 创建C#类型Proto.SomeClass并在其中定义一个内部类型Game
- 在Lua代码中调用CS.Game.A.B.C.Main.XXX
- 在PC上运行正常,编译为Android后,报错
修复方案:将StaticLuaCallbacks.ImportType方法中代码“if (type!=null)”修改为"if (type!=null && type.FullName == className)
复现项目: XLuaBug.zip
大佬nb,我也遇到了个问题,确实解决了!方便解释一下为什么这样修复吗?
@kimomi
我看unity最新的2020.3.38版本有这样一条修复信息,估计是由于il2cpp底层的bug。就像修复信息中所说,问题的根源在于在我提交的项目中,Assembly.GetType("Game")本应返回null,却错误地返回了一个内部嵌套类Game,xLua在解析CS.Game时不会把它当成命名空间而是当成了一个内部嵌套类,所以出了问题。解决思路也很简单,就是在xLua解析过程中加多一层检查,规避Unity的底层Bug