c# - MonoRuntime 如何与 ART 共存?

标签 c# android unity-game-engine mono

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

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

我假设 this可能是解决我困惑的方法,但我很难理解它。

我在这里错过了什么?

提前致谢

最佳答案

首先考虑 NDK/JNI 应用程序如何在 Android 上运行。它们从通过 ART/Dalvik 运行的标准 Android Java 代码启动,并使用 JNI 调用 C/C++ 代码。该过程仍在标准的 Android“沙盒”中,但对 Android NDK header 提供的库具有额外的较低级别访问权限。由于该代码是用 C/C++ 编写的,因此它可以实现高性能/跨系统兼容。

所以回答:

But that is supposed to be next to the runtime, below the application framework?

我会说不,至少你并没有真正低于 Android 应用程序框架。 MonoRuntime 从 Android 开始,可以使用任何“标准库”,这些库通过 JNI 包装器公开到 Android Java 端或通过 NDK header 公开。

如果您查看下图,您会看到“标准库”,它可以是具有 Android Java API 的 OpenGL ES 和在 NDK 中比 Android Java 媒体 API 公开更多细节的 OpenSL ES。

NDK app

I could write a runtime and ship it with my app?

是的,您可以,尽管您可能想清楚地定义“运行时”的含义。如果你是预编译的,你可以去掉不必要的类/模块,我相信 Mono 会这样做。

How can the sandboxing let this happen?

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

关于c# - MonoRuntime 如何与 ART 共存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634414/

相关文章:

c# - 多个检查点/重生区

c# - 如何获取和设置 Range 属性的最小值和最大值?

c# - File.Open 跨线程编写

c# - ASP.NET CORE 1.0,来自另一个程序集的 AppSettings

c# - 正则表达式跳过模式

android - 自定义信息窗口中的阴影

c# - 相关链接自动获得 session ID

android - 发布新版本的android应用时未安装该应用

Android:使类可打包

unity-game-engine - 使用 setPixel() 时出现错误结果