我已經read使用Mono開發的應用程序部署的MonoRuntime類似於ART,解釋C#代碼,執行它們等。我假設Unity和Xamarin都這樣做。MonoRuntime如何與ART並排生活?
對我來說奇怪的是,理論上我可以編寫一個運行庫並將其與我的應用程序一起發貨?但是應該在應用程序框架下面的runtime旁邊?沙盒如何讓這發生?
我認爲this可能是我的困惑的解決方案,但我很難理解它。
我在這裏錯過了什麼?
在此先感謝
我已經read使用Mono開發的應用程序部署的MonoRuntime類似於ART,解釋C#代碼,執行它們等。我假設Unity和Xamarin都這樣做。MonoRuntime如何與ART並排生活?
對我來說奇怪的是,理論上我可以編寫一個運行庫並將其與我的應用程序一起發貨?但是應該在應用程序框架下面的runtime旁邊?沙盒如何讓這發生?
我認爲this可能是我的困惑的解決方案,但我很難理解它。
我在這裏錯過了什麼?
在此先感謝
先想想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中公開更多的細節。
我可以寫一個運行時,用我的應用程序出貨?
是的,你可以,雖然你可能想清楚地定義'運行時'的含義。如果你是預編譯的,你可以刪除我認爲Mono所做的不必要的類/模塊。
沙盒如何讓這發生?
您仍然在沙箱中。沒有什麼能夠阻止你編寫你自己的用C/C++編寫的解釋器/虛擬機,通過標準的JNI/NDK調用來連接Android框架,並將它添加到你自己的APK中。無論你還受限於Android框架/運行時允許的應用程序以及相同的流程限制和限制。
你已經在Xamarin.Android上提供了一個很好的答案。但是,Android上的Unity完全不同。 Unity開發了自己的稱爲IL2CPP的技術,並將所有MSIL編譯爲C++源文件,然後編譯並鏈接到本地程序包,與Android NDK應用程序類似。 –