2017-10-08 64 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應用程序類似。 –