Multi-Platform 跨平台
November 30, 2020Less than 1 minute
Multi-Platform 跨平台
Mono
把c#转成IL(intermediatelanguage)中间语言,再在各平台上建上专属Mono VM(虚拟机),在VM上面运行IL即可以实现跨平台。
C#为静态语言,IL为动态语言。
难点:
实现各个平台的VM比较复杂,VM官方并没有实现太多。

IL2CPP
把C#直接转为各个平台原生C++执行,例如安卓使用ndk编译。这其中为了保证c#的一些原生特性,为此也加个一个VM,但是功能比较少,比如实现c#的GC功能等。
使用动态特性
可以使用link.xml文件来做黑名单:
<linker>
<assembly fullname="System.Web.Services">
<type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>
</assembly>
<assembly fullname="System">
<type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>
<type fullname="System.Net.HttpRequestCreator" preserve="all"/>
<type fullname="System.Net.FileWebRequestCreator" preserve="all"/>
</assembly>
<assembly fullname="mscorlib">
<type fullname="System.AppDomain" preserve="fields"/>
<type fullname="System.InvalidOperationException" preserve="fields">
<method signature="System.Void .ctor()"/>
</type>
<type fullname="System.Object" preserve="nothing">
<method name="Finalize"/>
</type>
</assembly>
</linker>
参考:
https://docs.unity3d.com/Manual/IL2CPP-BytecodeStripping.html
https://zhuanlan.zhihu.com/p/19972689
扩展:.net 的跨平台
https://www.cnblogs.com/artech/p/how-to-cross-platform-03.html