上图是微软官方的原理图,我有一个不明白的地方,
那就是Mono在Android类型的Linux系统中,充当的是ART虚拟机,做为.Net写的APK的运行环境呢,
还是Mono只充当.NetApi和AndroidBinding的翻译官,将.Net的中间代码它们翻译成ART需要的代码?
为什么会有这样的疑问呢,微软的文档里写,如果要将jar包装成C#可调用的代码,是通过MCW(Managed Called Wrapper)来完成的,它和ACW(Android Called Wrapper)都是JNI,
ART需要访问托管代码时,需要通过ACW.
我理解ART就是一个特殊的JVM,它能运行APK格式的程序,
Mono相当于Windows下的CLR,它能运行Net的DLL.
从这个层面来讲,它们俩在linux之上是处于同一层级的,
那么Mono应该是充当ART的角色,直接运行Net写的APK.
但是微软的图上又写了ART通过ACW访问托管代码...
所以就不明白了,特来求教,谢谢~~
以下是微软在github上给我的回复.
https://github.com/MicrosoftDocs/xamarin-docs/issues/1525
那么Mono应该是充当ART的角色,直接运行Net写的APK.
No, the APK is still a valid Java APK. It starts in ART, and uses ART for UI (Android.* classes).
Mono is used to run .NET IL. The IL and Android native code run side-by-side and communicate via callable wrappers.