2017-10-08 23 views
1

我已经read使用Mono开发的应用程序部署的MonoRuntime类似于ART,解释C#代码,执行它们等。我假设Unity和Xamarin都这样做。MonoRuntime如何与ART并排生活?

对我来说奇怪的是,理论上我可以编写一个运行库并将其与我的应用程序一起发货?但是应该在应用程序框架下面的runtime旁边?沙盒如何让这发生?

我认为this可能是我的困惑的解决方案,但我很难理解它。

我在这里错过了什么?

在此先感谢

回答

1

先想想NDK/JNI应用程式如何在Android上工作。它们从通过ART/Dalvik运行的标准Android Java代码启动,并将JNI调用用于C/C++代码。这个过程仍然在标准的Android'沙箱'内,但是对Android NDK头文件提供的库有额外的低级访问。由于该代码是用C/C++编写的,因此它可以是高性能/跨系统兼容的。

于是回答:

但是,这应该是旁边的运行时,应用程序框架之下?

我会争辩说,至少你并不是真的低于Android应用程序框架。 MonoRuntime从Android开始,可以使用任何通过JNI包装器暴露于Android Java端或通过NDK头部的“标准库”。

如果你看下面的图表,你会看到'标准库',它可以是OpenGL ES,它有一个Android Java API和OpenSL ES,它在NDK中比在Android Java媒体API中公开更多的细节。

NDK app

我可以写一个运行时,用我的应用程序出货?

是的,你可以,虽然你可能想清楚地定义'运行时'的含义。如果你是预编译的,你可以删除我认为Mono所做的不必要的类/模块。

沙盒如何让这发生?

您仍然在沙箱中。没有什么能够阻止你编写你自己的用C/C++编写的解释器/虚拟机,通过标准的JNI/NDK调用来连接Android框架,并将它添加到你自己的APK中。无论你还受限于Android框架/运行时允许的应用程序以及相同的流程限制和限制。

+0

你已经在Xamarin.Android上提供了一个很好的答案。但是,Android上的Unity完全不同。 Unity开发了自己的称为IL2CPP的技术,并将所有MSIL编译为C++源文件,然后编译并链接到本地​​程序包,与Android NDK应用程序类似。 –